Afform - Use urlHash embedded in popup dialog
authorColeman Watts <coleman@civicrm.org>
Wed, 6 Jul 2022 21:01:47 +0000 (17:01 -0400)
committerColeman Watts <coleman@civicrm.org>
Wed, 6 Jul 2022 21:50:17 +0000 (17:50 -0400)
ext/afform/core/ang/afCore.js
js/crm.ajax.js

index ef64b2ee9db7adec81a528097df0b7d0ce4e7cac..a1dc17aa2284a70f76274613c83c7eaedd121648 100644 (file)
           $scope.crmUrl = CRM.url;
 
           // Afforms do not use routing, but some forms get input from search params
-          $scope.$watch(function() {return $location.search();}, function(params) {
-            $scope.routeParams = params;
-          });
+          var dialog = $el.closest('.ui-dialog-content');
+          if (!dialog.length) {
+            // Full-screen mode
+            $scope.$watch(function() {return $location.search();}, function(params) {
+              $scope.routeParams = params;
+            });
+          } else {
+            // Use urlHash embedded in popup dialog
+            $scope.routeParams = {};
+            if (dialog.data('urlHash')) {
+              var searchParams = new URLSearchParams(dialog.data('urlHash'));
+              searchParams.forEach(function(value, key) {
+                $scope.routeParams[key] = value;
+              });
+            }
+          }
 
           $scope.$parent.afformTitle = meta.title;
 
index 2c892bfceac34248d0a852be3158b475cd0da919..007c7f93464d8a88a5c6dd224ad358b646d131f3 100644 (file)
       });
     },
     refresh: function() {
-      var that = this;
-      var url = this._formatUrl(this.options.url, 'json');
+      var that = this,
+        hash = this.options.url.split('#')[1];
+        url = this._formatUrl(this.options.url, 'json');
+      $(this.element).data('urlHash', hash);
       if (this.options.crmForm) $('form', this.element).ajaxFormUnbind();
       if (this.options.block) this.element.block();
       this._ajax(url).then(function(data) {