SearchKit - Refactor refresh code into traits
authorColeman Watts <coleman@civicrm.org>
Mon, 16 Aug 2021 18:58:24 +0000 (14:58 -0400)
committerColeman Watts <coleman@civicrm.org>
Mon, 16 Aug 2021 19:12:08 +0000 (15:12 -0400)
ext/search_kit/ang/crmSearchAdmin/resultsTable/crmSearchAdminResultsTable.component.js
ext/search_kit/ang/crmSearchDisplay/colType/field.html
ext/search_kit/ang/crmSearchDisplay/traits/searchDisplayBaseTrait.service.js
ext/search_kit/ang/crmSearchDisplayList/crmSearchDisplayList.component.js
ext/search_kit/ang/crmSearchDisplayTable/crmSearchDisplayTable.component.js
ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js

index 2bc06594bbd89d57b82e884337d810dc2874c4cf..fbf615db771dfd6ad54dd079a46389da2e0f73f5 100644 (file)
         $scope.$watch('$ctrl.search.api_params', buildSettings, true);
       };
 
-      // Refresh current page
-      this.refresh = function(row) {
-        ctrl.runSearch();
-      };
-
       // Add callbacks for pre & post run
       this.onPreRun.push(function(apiParams) {
         apiParams.debug = true;
index 342f9cae442eee7468ba63e63d3b54bd8b9467d7..14f8a146204eaaad3b2771203e058a5f9cf6b3c7 100644 (file)
@@ -1,4 +1,4 @@
-<crm-search-display-editable row="row" col="col" on-success="$ctrl.refresh(row)" cancel="$ctrl.editing = null;" ng-if="col.editable && $ctrl.editing && $ctrl.editing[0] === rowIndex && $ctrl.editing[1] === col.key"></crm-search-display-editable>
+<crm-search-display-editable row="row" col="col" on-success="$ctrl.runSearch(row)" cancel="$ctrl.editing = null;" ng-if="col.editable && $ctrl.editing && $ctrl.editing[0] === rowIndex && $ctrl.editing[1] === col.key"></crm-search-display-editable>
 <span ng-if="::!col.link" ng-class="{'crm-editable-enabled': col.editable && !$ctrl.editing && row[col.editable.id]}" ng-click="col.editable && !$ctrl.editing && ($ctrl.editing = [rowIndex, col.key])">
   {{:: $ctrl.formatFieldValue(row, col) }}
 </span>
index 86900be0db7f409ed4d5bb5239f49893262f3722..ee7cfe1a2b7df1cd3b2fdb2a5e81f1a49807b7ba 100644 (file)
       },
 
       // Call SearchDisplay.run and update ctrl.results and ctrl.rowCount
-      runSearch: function() {
+      runSearch: function(editedRow) {
         var ctrl = this,
           apiParams = this.getApiParams();
         this.loading = true;
             }
           }
           _.each(ctrl.onPostRun, function(callback) {
-            callback.call(ctrl, results, 'success');
+            callback.call(ctrl, results, 'success', editedRow);
           });
         }, function(error) {
           ctrl.results = [];
           ctrl.editing = ctrl.loading = false;
           _.each(ctrl.onPostRun, function(callback) {
-            callback.call(ctrl, error, 'error');
+            callback.call(ctrl, error, 'error', editedRow);
           });
         });
       },
index 0f726367c57408b0f38196f85b025369bc113324..e033c007d52aef1e371f60d63ad0a5d8be9b5f75 100644 (file)
         this.initializeDisplay($scope, $element);
       };
 
-      // Refresh current page
-      this.refresh = function(row) {
-        ctrl.runSearch();
-      };
-
     }
   });
 
index c1adf84e18f900c22be68b83a015e0c0d7d20528..096c033d959463dd9a94a836df405a93249fa4ce 100644 (file)
         this.initializeDisplay($scope, $element);
       };
 
-      // Refresh page after inline-editing a row
-      this.refresh = function(row) {
-        var rowId = row.id;
-        ctrl.runSearch()
-          .then(function() {
-            // If edited row disappears (because edits cause it to not meet search criteria), deselect it
-            var index = ctrl.selectedRows.indexOf(rowId);
-            if (index > -1 && !_.findWhere(ctrl.results, {id: rowId})) {
-              ctrl.selectedRows.splice(index, 1);
-            }
-          });
-      };
-
     }
   });
 
index 27475eac63046356427308b5bbffe71ef2b338c2..9e9713236691506fdd9a69f8886d02215edc1132 100644 (file)
         // Reset selection when filters are changed
         this.selectedRows.length = 0;
         this.allRowsSelected = false;
+      }],
+
+      // Overwrite empty onPostRun array from searchDisplayBaseTrait
+      onPostRun: [function(results, status, editedRow) {
+        if (editedRow && status === 'success') {
+          // If edited row disappears (because edits cause it to not meet search criteria), deselect it
+          var index = this.selectedRows.indexOf(editedRow.id);
+          if (index > -1 && !_.findWhere(results, {id: editedRow.id})) {
+            this.selectedRows.splice(index, 1);
+          }
+        }
       }]
 
     };