msgtplui - Preview.js - Prefer loading fresh examples
authorTim Otten <totten@civicrm.org>
Mon, 9 Aug 2021 21:05:34 +0000 (14:05 -0700)
committerCiviCRM <info@civicrm.org>
Fri, 24 Sep 2021 04:04:30 +0000 (21:04 -0700)
ext/msgtplui/ang/msgtplui/Preview.js

index 91684634cdb7802e7ff38a7da030b413645998b3..5e89adc0fa28606aee17f2e55ce47fd377af720c 100644 (file)
       $ctrl.adhocExampleJson = angular.toJson(model.examples[$ctrl.exampleId], 2);
     };
 
+    function requestAdhocExample() {
+      var adhocExample;
+      try {
+        adhocExample = JSON.parse($ctrl.adhocExampleJson);
+      }
+      catch (err) {
+        return $q.reject(ts('Malformed JSON example'));
+      }
+      return crmApi4('WorkflowMessage', 'render', {
+        workflow: adhocExample.workflow,
+        values: adhocExample.data.modelProps,
+        messageTemplate: model.revisions[$ctrl.revisionId].rec
+      }).then(function(response) {
+        return response[0];
+      });
+    }
+
+    function requestStoredExample() {
+      // For a dev working on example, it's easier if the example is always loaded fresh.
+      return crmApi4('WorkflowMessageExample', 'get', {
+        where: [["name", "=", model.examples[$ctrl.exampleId].name]],
+        select: ['workflow', 'data'],
+        chain: {
+          "render": ["WorkflowMessage", "render", {
+            "workflow": "$workflow",
+            "values": "$data.modelProps",
+            "messageTemplate": model.revisions[$ctrl.revisionId].rec
+          }]
+        }
+      }).then(function(response) {
+        return response[0].render[0];
+      });
+    }
+
     var lastId = null;
     var update = function update() {
       var id = $ctrl.revisionId + ':' + $ctrl.exampleId;
 
       //   $ctrl.preview = model.revisions[$ctrl.revisionId].rec;
       $ctrl.preview = {loading: true};
-      var liveExample = model.examples[$ctrl.exampleId];
-      var getting = crmApi4('WorkflowMessage', 'render', {
-        workflow: liveExample.workflow,
-        values: liveExample.data.modelProps,
-        messageTemplate: model.revisions[$ctrl.revisionId].rec
-      }).then(function(response) {
-        $ctrl.preview = response[0];
+      var rendering = $ctrl.isAdhocExample ? requestAdhocExample() : requestStoredExample();
+      rendering.then(function(response) {
+        $ctrl.preview = response;
       }, function(failure) {
         $ctrl.preview = {};
         crmUiAlert({title: ts('Render failed'), text: failure.error_message, type: 'error'});
       });
-      return crmStatus({start: ts('Rendering...'), success: ''}, getting);
+      return crmStatus({start: ts('Rendering...'), success: ''}, rendering);
     };
 
     $scope.$watch('$ctrl.revisionId', update);