Generate partials via callback
authorTim Otten <totten@civicrm.org>
Thu, 12 Dec 2019 23:48:42 +0000 (15:48 -0800)
committerCiviCRM <info@civicrm.org>
Wed, 16 Sep 2020 02:13:20 +0000 (19:13 -0700)
Technically, it's two changes:

1. Changing `snippets` to `partialsCallback` to reduce the amount of upfront IO/memory.
2. Changing the mocked-up filename to start with `~/theAngModule/`. So modules implemented in
   afform look more look other modules. Makes it work with `cv ang:html:list` and `cv ang:html:show`.

ext/afform/core/afform.php

index 5824fca8703e8af26d2230b3d7aa6c4ba0fa9e2a..3ec7664af04b899f0ad679f592d071a0d9db5c8e 100644 (file)
@@ -165,15 +165,13 @@ function afform_civicrm_angularModules(&$angularModules) {
   $names = array_keys($scanner->findFilePaths());
   foreach ($names as $name) {
     $meta = $scanner->getMeta($name);
-    $layout = $scanner->getLayout($name);
     $angularModules[_afform_angular_module_name($name, 'camel')] = [
       'ext' => E::LONG_NAME,
       'js' => ['assetBuilder://afform.js?name=' . urlencode($name)],
       'requires' => $meta['requires'],
       'basePages' => [],
-      'snippets' => [
-        "~/afform/$name.aff.html" => $layout,
-      ],
+      'partialsCallback' => '_afform_get_partials',
+      '_afform' => $name,
       'exports' => [
         _afform_angular_module_name($name, 'dash') => 'AE',
       ],
@@ -181,6 +179,24 @@ function afform_civicrm_angularModules(&$angularModules) {
   }
 }
 
+/**
+ * Construct a list of partials for a given afform/angular module.
+ *
+ * @param string $moduleName
+ *   The module name.
+ * @param array $module
+ *   The module definition.
+ * @return array
+ *   Array(string $filename => string $html).
+ */
+function _afform_get_partials($moduleName, $module) {
+  /** @var CRM_Afform_AfformScanner $scanner */
+  $scanner = Civi::service('afform_scanner');
+  return [
+    "~/$moduleName/$moduleName.aff.html" => $scanner->getLayout($module['_afform']),
+  ];
+}
+
 /**
  * Scan the list of Angular modules and inject automatic-requirements.
  *
@@ -406,13 +422,14 @@ function afform_civicrm_buildAsset($asset, $params, &$mimeType, &$content) {
   /** @var \CRM_Afform_AfformScanner $scanner */
   $scanner = Civi::service('afform_scanner');
   $meta = $scanner->getMeta($name);
+  $moduleName = _afform_angular_module_name($name, 'camel');
 
   $smarty = CRM_Core_Smarty::singleton();
   $smarty->assign('afform', [
-    'camel' => _afform_angular_module_name($name, 'camel'),
+    'camel' => $moduleName,
     'meta' => $meta,
     'metaJson' => json_encode($meta),
-    'templateUrl' => "~/afform/$name.aff.html",
+    'templateUrl' => "~/$moduleName/$moduleName.aff.html",
   ]);
   $mimeType = 'text/javascript';
   $content = $smarty->fetch('afform/AfformAngularModule.tpl');