Skip to content

Commit 2296881

Browse files
authored
ISSUE-183: Patch Facets/Views Blocks and Update composer.json (#184)
* Update composer.json * Adds Exposed Views Form Core Patch for Drupal 9.3.x * Address code review, missing comma
1 parent 96725a9 commit 2296881

File tree

2 files changed

+118
-8
lines changed

2 files changed

+118
-8
lines changed

composer.json

+19-8
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
"drupal/jquery_ui_datepicker": "^1.1",
5959
"drupal/jquery_ui_slider": "^1.1",
6060
"drupal/jsonapi_earlyrendering_workaround": "^1.0",
61-
"drupal/moderated_content_bulk_publish": "^1.0",
61+
"drupal/moderated_content_bulk_publish": "^2.0",
6262
"drupal/pathauto": "^1.6",
6363
"drupal/queue_ui": "^2.0",
6464
"drupal/quick_node_clone": "^1.12",
@@ -75,13 +75,12 @@
7575
"drupal/twig_field": "^1.0",
7676
"drupal/twig_tweak": "^2.6",
7777
"drupal/views_bootstrap": "^4.3",
78-
"drupal/views_bulk_operations": "^3.13",
78+
"drupal/views_bulk_operations": "^4.1",
7979
"drupal/webform": "^6",
8080
"drupal/webform_entity_handler": "1.x-dev",
8181
"drupal/webformnavigation": "^1.0@alpha",
8282
"drupal/workflow": "^1.1",
8383
"drush/drush": "10.5",
84-
"egulias/email-validator": "^2.0",
8584
"fileeye/mimemap": "^1.1.1",
8685
"maennchen/zipstream-php": "^2.1",
8786
"mixnode/mixnode-warcreader-php": "^0.0.6",
@@ -102,12 +101,10 @@
102101
"swaggest/json-schema": "^0.12.10",
103102
"symfony/event-dispatcher": "^4",
104103
"symfony/yaml": "^4",
105-
"typo3/phar-stream-wrapper": "3.1.6",
106104
"vlucas/phpdotenv": "^5.1",
107105
"webflo/drupal-finder": "^1.0.0",
108106
"webmozart/path-util": "^2.3",
109-
"wikibase/data-model": "9.6.1",
110-
"zaporylie/composer-drupal-optimizations": "^1.1.1"
107+
"wikibase/data-model": "9.6.1"
111108
},
112109
"require-dev": {
113110
"drupal/core-dev": "^9",
@@ -120,7 +117,18 @@
120117
"prefer-stable": true,
121118
"config": {
122119
"discard-changes": true,
123-
"sort-packages": true
120+
"allow-plugins": {
121+
"composer/installers": true,
122+
"cweagans/composer-patches": true,
123+
"drupal/core-composer-scaffold": true,
124+
"drupal/core-project-message": true,
125+
"dealerdirect/phpcodesniffer-composer-installer": true
126+
},
127+
"preferred-install": {
128+
"archipelago/*": "source",
129+
"strawberryfield/*": "source",
130+
"*": "dist"
131+
}
124132
},
125133
"autoload": {
126134
"classmap": [
@@ -180,7 +188,10 @@
180188
"patches": {
181189
"drupal/facets": {
182190
"Fix deprecated JQUERY UI Slider": "https://www.drupal.org/files/issues/2021-11-12/issue-3153622-nouislider_25.patch"
183-
}
191+
},
192+
"drupal/core": {
193+
"Fix Ajax/Preserve Facets on exposed forms Drupal 9.3.x": "patches/3032353-25-archipelago-05162022.patch"
194+
}
184195
}
185196
}
186197
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
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

Comments
 (0)