From 475029f675b7a45f62f2654bc7b56e8ef9932096 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Thu, 15 Oct 2020 16:35:50 -0400 Subject: [PATCH] Search ext: Add list view --- ang/api4Explorer/Clause.html | 4 +- ext/search/CRM/Search/Page/Admin.php | 9 +---- ext/search/ang/searchAdmin.module.js | 18 ++++++++- .../ang/searchAdmin/searchList.controller.js | 13 +++++++ ext/search/ang/searchAdmin/searchList.html | 39 +++++++++++++++++++ 5 files changed, 73 insertions(+), 10 deletions(-) create mode 100644 ext/search/ang/searchAdmin/searchList.controller.js create mode 100644 ext/search/ang/searchAdmin/searchList.html diff --git a/ang/api4Explorer/Clause.html b/ang/api4Explorer/Clause.html index 66d4022af2..f87748fcb4 100644 --- a/ang/api4Explorer/Clause.html +++ b/ang/api4Explorer/Clause.html @@ -18,8 +18,8 @@
- - + +
diff --git a/ext/search/CRM/Search/Page/Admin.php b/ext/search/CRM/Search/Page/Admin.php index cfded724aa..e98f208a15 100644 --- a/ext/search/CRM/Search/Page/Admin.php +++ b/ext/search/CRM/Search/Page/Admin.php @@ -14,15 +14,10 @@ */ class CRM_Search_Page_Admin extends CRM_Core_Page { - /** - * @var string[] - */ - private $allowedEntities = []; - public function run() { $breadCrumb = [ 'title' => ts('Search Kit'), - 'url' => CRM_Utils_System::url('civicrm/search'), + 'url' => CRM_Utils_System::url('civicrm/search', NULL, FALSE, '/list'), ]; CRM_Utils_System::appendBreadCrumb([$breadCrumb]); @@ -48,7 +43,7 @@ class CRM_Search_Page_Admin extends CRM_Core_Page { $loader->setModules(['searchAdmin']); $loader->setPageName('civicrm/search'); $loader->useApp([ - 'defaultRoute' => '/create/Contact', + 'defaultRoute' => '/list', ]); $loader->load(); parent::run(); diff --git a/ext/search/ang/searchAdmin.module.js b/ext/search/ang/searchAdmin.module.js index cdb1562baa..07b3636874 100644 --- a/ext/search/ang/searchAdmin.module.js +++ b/ext/search/ang/searchAdmin.module.js @@ -11,9 +11,25 @@ angular.module('searchAdmin', CRM.angRequires('searchAdmin')) .config(function($routeProvider) { + $routeProvider.when('/list', { + controller: 'searchList', + templateUrl: '~/searchAdmin/searchList.html', + reloadOnSearch: false, + resolve: { + // Load data for lists + savedSearches: function(crmApi4) { + return crmApi4('SavedSearch', 'get', { + select: ['id', 'api_entity', 'form_values', 'COUNT(search_display.id) AS displays', 'GROUP_CONCAT(group.title) AS groups'], + join: [['SearchDisplay AS search_display'], ['Group AS group']], + where: [['api_entity', 'IS NOT NULL']], + groupBy: ['id'] + }); + } + } + }); $routeProvider.when('/:mode/:entity/:name?', { controller: 'searchRoute', - template: '', + template: '', reloadOnSearch: false, resolve: { // For paths like /load/Group/MySmartGroup, load the group, stash it in the savedSearch variable, and then redirect diff --git a/ext/search/ang/searchAdmin/searchList.controller.js b/ext/search/ang/searchAdmin/searchList.controller.js new file mode 100644 index 0000000000..6372ae2322 --- /dev/null +++ b/ext/search/ang/searchAdmin/searchList.controller.js @@ -0,0 +1,13 @@ +(function(angular, $, _) { + "use strict"; + + angular.module('searchAdmin').controller('searchList', function($scope, savedSearches) { + var ts = $scope.ts = CRM.ts(), + ctrl = $scope.$ctrl = this; + this.savedSearches = savedSearches; + this.entityTitles = _.transform(CRM.vars.search.schema, function(titles, entity) { + titles[entity.name] = entity.titlePlural; + }, {}); + }); + +})(angular, CRM.$, CRM._); diff --git a/ext/search/ang/searchAdmin/searchList.html b/ext/search/ang/searchAdmin/searchList.html new file mode 100644 index 0000000000..e64daef51a --- /dev/null +++ b/ext/search/ang/searchAdmin/searchList.html @@ -0,0 +1,39 @@ + -- 2.25.1