|
| 1 | +diff --git a/core/modules/views/js/ajax_view.es6.js b/core/modules/views/js/ajax_view.es6.js |
| 2 | +index 5367f83cc9..386df7947d 100644 |
| 3 | +--- a/core/modules/views/js/ajax_view.es6.js |
| 4 | ++++ b/core/modules/views/js/ajax_view.es6.js |
| 5 | +@@ -137,6 +137,11 @@ |
| 6 | + Drupal.views.ajaxView.prototype.attachExposedFormAjax = function () { |
| 7 | + const that = this; |
| 8 | + this.exposedFormAjax = []; |
| 9 | ++ |
| 10 | ++ // Add exposed_form_display option to the request. |
| 11 | ++ if (that.element_settings.submit) { |
| 12 | ++ that.element_settings.submit.exposed_form_display = 1; |
| 13 | ++ } |
| 14 | + // Exclude the reset buttons so no AJAX behaviors are bound. Many things |
| 15 | + // break during the form reset phase if using AJAX. |
| 16 | + $( |
| 17 | +diff --git a/core/modules/views/js/ajax_view.js b/core/modules/views/js/ajax_view.js |
| 18 | +index f1e2e0121a..9538a14c9d 100644 |
| 19 | +--- a/core/modules/views/js/ajax_view.js |
| 20 | ++++ b/core/modules/views/js/ajax_view.js |
| 21 | +@@ -80,6 +80,11 @@ |
| 22 | + Drupal.views.ajaxView.prototype.attachExposedFormAjax = function () { |
| 23 | + var that = this; |
| 24 | + this.exposedFormAjax = []; |
| 25 | ++ |
| 26 | ++ if (that.element_settings.submit) { |
| 27 | ++ that.element_settings.submit.exposed_form_display = 1; |
| 28 | ++ } |
| 29 | ++ |
| 30 | + $('input[type=submit], button[type=submit], input[type=image]', this.$exposed_form).not('[data-drupal-selector=edit-reset]').each(function (index) { |
| 31 | + var selfSettings = $.extend({}, that.element_settings, { |
| 32 | + base: $(this).attr('id'), |
| 33 | +diff --git a/core/modules/views/src/Controller/ViewAjaxController.php b/core/modules/views/src/Controller/ViewAjaxController.php |
| 34 | +index 8b7d115fa5..ad4bc1e8e9 100644 |
| 35 | +--- a/core/modules/views/src/Controller/ViewAjaxController.php |
| 36 | ++++ b/core/modules/views/src/Controller/ViewAjaxController.php |
| 37 | +@@ -128,6 +128,7 @@ public function ajaxView(Request $request) { |
| 38 | + $dom_id = isset($dom_id) ? preg_replace('/[^a-zA-Z0-9_-]+/', '-', $dom_id) : NULL; |
| 39 | + $pager_element = $request->request->get('pager_element'); |
| 40 | + $pager_element = isset($pager_element) ? intval($pager_element) : NULL; |
| 41 | ++ $exposed_form_display = $request->request->get('exposed_form_display'); |
| 42 | + |
| 43 | + $response = new ViewAjaxResponse(); |
| 44 | + |
| 45 | +@@ -136,17 +137,18 @@ public function ajaxView(Request $request) { |
| 46 | + // @todo Remove this parsing once these are removed from the request in |
| 47 | + // https://www.drupal.org/node/2504709. |
| 48 | + foreach ([ |
| 49 | +- 'view_name', |
| 50 | +- 'view_display_id', |
| 51 | +- 'view_args', |
| 52 | +- 'view_path', |
| 53 | +- 'view_dom_id', |
| 54 | +- 'pager_element', |
| 55 | +- 'view_base_path', |
| 56 | +- AjaxResponseSubscriber::AJAX_REQUEST_PARAMETER, |
| 57 | +- FormBuilderInterface::AJAX_FORM_REQUEST, |
| 58 | +- MainContentViewSubscriber::WRAPPER_FORMAT, |
| 59 | +- ] as $key) { |
| 60 | ++ 'view_name', |
| 61 | ++ 'view_display_id', |
| 62 | ++ 'view_args', |
| 63 | ++ 'view_path', |
| 64 | ++ 'view_dom_id', |
| 65 | ++ 'pager_element', |
| 66 | ++ 'view_base_path', |
| 67 | ++ 'exposed_form_display', |
| 68 | ++ AjaxResponseSubscriber::AJAX_REQUEST_PARAMETER, |
| 69 | ++ FormBuilderInterface::AJAX_FORM_REQUEST, |
| 70 | ++ MainContentViewSubscriber::WRAPPER_FORMAT, |
| 71 | ++ ] as $key) { |
| 72 | + $request->query->remove($key); |
| 73 | + $request->request->remove($key); |
| 74 | + } |
| 75 | +@@ -201,6 +203,24 @@ public function ajaxView(Request $request) { |
| 76 | + } |
| 77 | + $response->addCommand(new ReplaceCommand(".js-view-dom-id-$dom_id", $preview)); |
| 78 | + |
| 79 | ++ // Views with ajax enabled aren't refreshing filters placed in blocks. |
| 80 | ++ // Only <div> containing view is refreshed. ReplaceCommand is fixing |
| 81 | ++ // that for view, if it uses ajax and exposed forms in block. |
| 82 | ++ if ($view->display_handler->usesExposed() && $view->display_handler->getOption('exposed_block')) { |
| 83 | ++ $view_id = preg_replace('/[^a-zA-Z0-9-]+/', '-', $name . '-' . $display_id); |
| 84 | ++ $context = new RenderContext(); |
| 85 | ++ $exposed_form = $this->renderer->executeInRenderContext($context, function () use ($view) { |
| 86 | ++ return $view->display_handler->viewExposedFormBlocks(); |
| 87 | ++ }); |
| 88 | ++ if (!$context->isEmpty()) { |
| 89 | ++ $bubbleable_metadata = $context->pop(); |
| 90 | ++ BubbleableMetadata::createFromRenderArray($exposed_form) |
| 91 | ++ ->merge($bubbleable_metadata) |
| 92 | ++ ->applyTo($exposed_form); |
| 93 | ++ } |
| 94 | ++ $response->addCommand(new ReplaceCommand("#views-exposed-form-" . $view_id, $this->renderer->render($exposed_form))); |
| 95 | ++ } |
| 96 | ++ |
| 97 | + return $response; |
| 98 | + } |
| 99 | + else { |
0 commit comments