Merge pull request #19426 from colemanw/searchCount
authorEileen McNaughton <emcnaughton@wikimedia.org>
Fri, 22 Jan 2021 22:08:44 +0000 (11:08 +1300)
committerGitHub <noreply@github.com>
Fri, 22 Jan 2021 22:08:44 +0000 (11:08 +1300)
dev/core#2312 SearchKit - Improve results loading time in admin UI

1  2 
ext/search/ang/crmSearchAdmin/crmSearchAdmin.component.js

index 353851435ff2b3e1a3f255bfa4f87cb6a1dab10f,80a444fd94ac49a7aed028ff19d13adddf969c61..7f82c23886ec7c0214cf3b313fb473fa47fff0db
              _.each(_.cloneDeep(join.conditions), function(condition) {
                params.push(condition);
              });
 +            _.each(_.cloneDeep(join.defaults), function(condition) {
 +              params.push(condition);
 +            });
              ctrl.savedSearch.api_params.join.push(params);
              loadFieldOptions();
            }
          });
        };
  
 -      $scope.changeJoin = function(idx) {
 -        if (ctrl.savedSearch.api_params.join[idx][0]) {
 -          ctrl.savedSearch.api_params.join[idx].length = 2;
 -          loadFieldOptions();
 -        } else {
 -          ctrl.clearParam('join', idx);
 -        }
 -      };
 -
        $scope.changeGroupBy = function(idx) {
          if (!ctrl.savedSearch.api_params.groupBy[idx]) {
            ctrl.clearParam('groupBy', idx);
            ctrl.page = 1;
            ctrl.rowCount = false;
          }
-         if (ctrl.rowCount === false) {
-           params.select.push('row_count');
-         }
          params.offset = ctrl.limit * (ctrl.page - 1);
          crmApi4(ctrl.savedSearch.api_entity, 'get', params).then(function(success) {
            if (ctrl.stale) {
              ctrl.results = {};
-           }
-           if (ctrl.rowCount === false) {
-             ctrl.rowCount = success.count;
+             // Get row count for pager
+             // Select is only needed needed by HAVING
+             params.select = params.having && params.having.length ? params.select : [];
+             params.select.push('row_count');
+             delete params.debug;
+             crmApi4(ctrl.savedSearch.api_entity, 'get', params).then(function(result) {
+               ctrl.rowCount = result.count;
+             });
            }
            ctrl.debug = success.debug;
            // populate this page & the next
          // If more than one page of results, use ajax to fetch all ids
          $scope.loadingAllRows = true;
          var params = _.cloneDeep(ctrl.savedSearch.api_params);
-         params.select = ['id'];
+         // Select is only needed needed by HAVING
+         params.select = params.having && params.having.length ? params.select : [];
+         params.select.push('id');
          crmApi4(ctrl.savedSearch.api_entity, 'get', params, ['id']).then(function(ids) {
            $scope.loadingAllRows = false;
            ctrl.selectedRows = _.toArray(ids);