SearchKit - Ensure tasks are loaded when used as links
authorcolemanw <coleman@civicrm.org>
Wed, 12 Jul 2023 01:51:35 +0000 (21:51 -0400)
committercolemanw <coleman@civicrm.org>
Wed, 12 Jul 2023 01:51:35 +0000 (21:51 -0400)
ext/search_kit/ang/crmSearchTasks/traits/searchDisplayTasksTrait.service.js

index 05e5d926c3b2cfb35e62a838c877a37f491dc02b..d70e3357b7dca4a88d6b5eb596cd84e2ebaea531 100644 (file)
       this.entityInfo = null;
 
       this.getMetadata = function() {
-        if (fetchedMetadata) {
-          return;
+        if (!fetchedMetadata) {
+          fetchedMetadata = crmApi4({
+            entityInfo: ['Entity', 'get', {select: ['name', 'title', 'title_plural', 'primary_key'], where: [['name', '=', mngr.getEntityName()]]}, 0],
+            tasks: ['SearchDisplay', 'getSearchTasks', {savedSearch: displayCtrl.search, display: displayCtrl.display}]
+          }).then(function(result) {
+            mngr.entityInfo = result.entityInfo;
+            mngr.tasks = result.tasks;
+          }, function(failure) {
+            mngr.tasks = [];
+            mngr.entityInfo = [];
+          });
         }
-        fetchedMetadata = crmApi4({
-          entityInfo: ['Entity', 'get', {select: ['name', 'title', 'title_plural', 'primary_key'], where: [['name', '=', mngr.getEntityName()]]}, 0],
-          tasks: ['SearchDisplay', 'getSearchTasks', {savedSearch: displayCtrl.search, display: displayCtrl.display}]
-        }).then(function(result) {
-          mngr.entityInfo = result.entityInfo;
-          mngr.tasks = result.tasks;
-        });
+        return fetchedMetadata;
       };
 
       this.getEntityName = function() {
       // If link is to a task rather than an ordinary href, run the task
       onClickLink: function(link, id, event) {
         if (link.task) {
+          const mngr = this.taskManager;
           event.preventDefault();
-          this.taskManager.doTask(_.extend({title: link.title}, link.task), [id]);
+          mngr.getMetadata().then(function() {
+            mngr.doTask(_.extend({title: link.title}, link.task), [id]);
+          });
         }
       },