diff --git a/modules/oe_list_pages_link_list_source/src/ContextualFiltersConfigurationBuilder.php b/modules/oe_list_pages_link_list_source/src/ContextualFiltersConfigurationBuilder.php index 5d3bfe06..35a55eff 100644 --- a/modules/oe_list_pages_link_list_source/src/ContextualFiltersConfigurationBuilder.php +++ b/modules/oe_list_pages_link_list_source/src/ContextualFiltersConfigurationBuilder.php @@ -69,7 +69,7 @@ public function buildContextualFilters(array $form, FormStateInterface $form_sta '#value' => $current_filters, ]; - $facet_id = $form_state->get('contextual_facet_id'); + $facet_id = $form_state->get('contextual_facet_id_' . $ajax_wrapper_id); // If we could not determine a facet ID, we default to showing the summary // of default values. @@ -77,7 +77,7 @@ public function buildContextualFilters(array $form, FormStateInterface $form_sta return $this->buildSummaryPresetFilters($form, $form_state, $list_source, $this->getAvailableFilters($list_source)); } - $filter_id = $form_state->get('contextual_filter_id'); + $filter_id = $form_state->get('contextual_filter_id_' . $ajax_wrapper_id); if (!isset($filter_id)) { $filter_id = static::generateFilterId($facet_id, array_keys($current_filters)); } @@ -152,7 +152,7 @@ protected function buildEditContextualFilter(array $form, FormStateInterface $fo // Store the filter IDs on the form state in case we need to rebuild the // form. - $form_state->set(static::getFilterType() . '_filter_id', $filter_id); + $form_state->set(static::getFilterType() . '_filter_id_' . $ajax_wrapper_id, $filter_id); $facet = $this->getFacetById($list_source, $facet_id); if (!empty($facet) && ($widget = $facet->getWidgetInstance()) && ($widget instanceof MultiselectWidget)) { @@ -202,13 +202,14 @@ protected function buildEditContextualFilter(array $form, FormStateInterface $fo '#facet_id' => $facet_id, '#executes_submit_callback' => TRUE, '#submit' => [[$this, 'setContextualOptionsSubmit']], + '#name' => static::getFilterType() . '-set-' . $filter_id . '-' . $ajax_wrapper_id, ]; $form['wrapper']['edit'][$filter_id]['cancel_value'] = [ '#value' => $this->t('Cancel'), '#type' => 'button', '#op' => 'cancel-contextual-filter', - '#name' => static::getFilterType() . '-cancel-' . $filter_id, + '#name' => static::getFilterType() . '-cancel-' . $filter_id . '-' . $ajax_wrapper_id, '#limit_validation_errors' => [ array_merge($form['#parents'], [ 'wrapper', @@ -309,8 +310,8 @@ public function setContextualOptionsSubmit(array &$form, FormStateInterface $for // Set the current filters on the form state so they can be used elsewhere. static::setCurrentValues($form_state, $list_source, $current_filters, $ajax_wrapper_id); - $form_state->set('contextual_facet_id', NULL); - $form_state->set('contextual_filter_id', NULL); + $form_state->set('contextual_facet_id_' . $ajax_wrapper_id, NULL); + $form_state->set('contextual_filter_id_' . $ajax_wrapper_id, NULL); $form_state->setRebuild(TRUE); } @@ -334,8 +335,8 @@ public function deleteFilterValueSubmit(array &$form, FormStateInterface $form_s unset($current_filters[$filter_id]); static::setCurrentValues($form_state, $list_source, $current_filters, $ajax_wrapper_id); - $form_state->set('contextual_facet_id', NULL); - $form_state->set('contextual_filter_id', NULL); + $form_state->set('contextual_facet_id_' . $ajax_wrapper_id, NULL); + $form_state->set('contextual_filter_id_' . $ajax_wrapper_id, NULL); $form_state->setRebuild(TRUE); } diff --git a/modules/oe_list_pages_link_list_source/tests/src/FunctionalJavascript/ListPageLinkSourcePluginTest.php b/modules/oe_list_pages_link_list_source/tests/src/FunctionalJavascript/ListPageLinkSourcePluginTest.php index 59ddce29..19dc73d0 100644 --- a/modules/oe_list_pages_link_list_source/tests/src/FunctionalJavascript/ListPageLinkSourcePluginTest.php +++ b/modules/oe_list_pages_link_list_source/tests/src/FunctionalJavascript/ListPageLinkSourcePluginTest.php @@ -138,7 +138,7 @@ public function testListPagePresetFilters(): void { $this->assertSession()->assertWaitOnAjaxRequest(); $this->getSession()->getPage()->selectFieldOption('No results behaviour', 'Hide'); $this->assertSession()->assertWaitOnAjaxRequest(); - $this->assertListPagePresetFilters('configuration[0][link_source][plugin_configuration_wrapper][list_pages][list_page_configuration][wrapper][default_filter_values]'); + $this->assertListPagePresetFilters('configuration[0][link_source][plugin_configuration_wrapper][list_pages][list_page_configuration][wrapper][default_filter_values]', 'list-page-default_filter_values--configuration-0-link_source-plugin_configuration_wrapper-list_pages-list_page_configuration-wrapper-default_filter_values'); } /** @@ -317,6 +317,8 @@ public function testMultipleListPageFilters(): void { public function testListPageContextualFiltersForm(): void { $contextual_filter_name_prefix = 'configuration[0][link_source][plugin_configuration_wrapper][list_pages][list_page_configuration][wrapper][contextual_filters]'; $default_value_name_prefix = 'configuration[0][link_source][plugin_configuration_wrapper][list_pages][list_page_configuration][wrapper][default_filter_values]'; + $ajax_wrapper_id_default_filter = 'list-page-default_filter_values--configuration-0-link_source-plugin_configuration_wrapper-list_pages-list_page_configuration-wrapper-default_filter_values'; + $ajax_wrapper_id_contextual_filter = 'list-page-contextual-filter-values--configuration-0-link_source-plugin_configuration_wrapper-list_pages-list_page_configuration-wrapper-contextual_filters'; $admin = $this->createUser([], NULL, TRUE); $this->drupalLogin($admin); @@ -394,7 +396,7 @@ public function testListPageContextualFiltersForm(): void { $this->assertContextualValueForFilters($expected_contextual_filters); // Edit the Reference. - $page->pressButton('contextual-edit-' . $reference_filter_id); + $page->pressButton('contextual-edit-' . $reference_filter_id . '-' . $ajax_wrapper_id_contextual_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set contextual options for Reference'); $this->assertTrue($this->assertSession()->optionExists('Operator', 'All of')->hasAttribute('selected')); @@ -426,19 +428,19 @@ public function testListPageContextualFiltersForm(): void { // Start editing one contextual filter and one default value at the same // time. - $page->pressButton('contextual-edit-' . $link_filter_id); + $page->pressButton('contextual-edit-' . $link_filter_id . '-' . $ajax_wrapper_id_contextual_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set contextual options for Link'); $this->assertTrue($this->assertSession()->optionExists('Operator', 'None of')->hasAttribute('selected')); - $page->pressButton('default-edit-' . $body_filter_id); + $page->pressButton('default-edit-' . $body_filter_id . '-' . $ajax_wrapper_id_default_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set default value for Body'); $filter_selector = $default_value_name_prefix . '[wrapper][edit][' . $body_filter_id . '][body]'; $this->assertSession()->fieldValueEquals($filter_selector, 'cherry'); // Cancel out of both forms, one at the time. - $page->pressButton('contextual-cancel-' . $link_filter_id); + $page->pressButton('contextual-cancel-' . $link_filter_id . '-' . $ajax_wrapper_id_contextual_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextNotContains('Set contextual options for Link'); $this->assertContextualValueForFilters($expected_contextual_filters); @@ -446,7 +448,7 @@ public function testListPageContextualFiltersForm(): void { $filter_selector = $default_value_name_prefix . '[wrapper][edit][' . $body_filter_id . '][body]'; $this->assertSession()->fieldValueEquals($filter_selector, 'cherry'); - $page->pressButton('default-cancel-' . $body_filter_id); + $page->pressButton('default-cancel-' . $body_filter_id . '-' . $ajax_wrapper_id_default_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextNotContains('Set default value for Body'); $this->assertContextualValueForFilters($expected_contextual_filters); @@ -454,12 +456,12 @@ public function testListPageContextualFiltersForm(): void { // Edit again one contextual filter and one default value at the same // time. - $page->pressButton('contextual-edit-' . $reference_filter_id); + $page->pressButton('contextual-edit-' . $reference_filter_id . '-' . $ajax_wrapper_id_contextual_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set contextual options for Reference'); $this->assertTrue($this->assertSession()->optionExists('Operator', 'None of')->hasAttribute('selected')); - $page->pressButton('default-edit-' . $body_filter_id); + $page->pressButton('default-edit-' . $body_filter_id . '-' . $ajax_wrapper_id_default_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set default value for Body'); $filter_selector = $default_value_name_prefix . '[wrapper][edit][' . $body_filter_id . '][body]'; @@ -530,21 +532,21 @@ public function testListPageContextualFiltersForm(): void { $this->clickLink('Edit'); $this->assertContextualValueForFilters($expected_contextual_filters); $this->assertDefaultValueForFilters($expected_default_filters); - $page->pressButton('contextual-edit-' . $link_filter_id); + $page->pressButton('contextual-edit-' . $link_filter_id . '-' . $ajax_wrapper_id_contextual_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set contextual options for Link'); $this->assertTrue($this->assertSession()->optionExists('Operator', 'None of')->hasAttribute('selected')); $this->assertTrue($this->assertSession()->optionExists('Filter source', 'Field values')->hasAttribute('selected')); - $page->pressButton('contextual-cancel-' . $link_filter_id); + $page->pressButton('contextual-cancel-' . $link_filter_id . '-' . $ajax_wrapper_id_contextual_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $this->assertContextualValueForFilters($expected_contextual_filters); - $page->pressButton('contextual-edit-' . $reference_filter_id); + $page->pressButton('contextual-edit-' . $reference_filter_id . '-' . $ajax_wrapper_id_contextual_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set contextual options for Reference'); $this->assertTrue($this->assertSession()->optionExists('Operator', 'Any of')->hasAttribute('selected')); $this->assertTrue($this->assertSession()->optionExists('Filter source', 'Entity ID')->hasAttribute('selected')); - $page->pressButton('default-edit-' . $body_filter_id); + $page->pressButton('default-edit-' . $body_filter_id . '-' . $ajax_wrapper_id_default_filter); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set default value for Body'); $filter_selector = $default_value_name_prefix . '[wrapper][edit][' . $body_filter_id . '][body]'; diff --git a/src/DefaultFilterConfigurationBuilder.php b/src/DefaultFilterConfigurationBuilder.php index 91e161c2..38cd3bd8 100644 --- a/src/DefaultFilterConfigurationBuilder.php +++ b/src/DefaultFilterConfigurationBuilder.php @@ -71,7 +71,7 @@ public function buildDefaultFilters(array $form, FormStateInterface $form_state, '#value' => $current_filters, ]; - $facet_id = $form_state->get('default_facet_id'); + $facet_id = $form_state->get('default_facet_id_' . $ajax_wrapper_id); // If we could not determine a facet ID, we default to showing the // summary of default values. @@ -79,7 +79,7 @@ public function buildDefaultFilters(array $form, FormStateInterface $form_state, return $this->buildSummaryPresetFilters($form, $form_state, $list_source, $list_source->getAvailableFilters()); } - $filter_id = $form_state->get('default_filter_id'); + $filter_id = $form_state->get('default_filter_id_' . $ajax_wrapper_id); if (!isset($filter_id)) { $filter_id = static::generateFilterId($facet_id, array_keys($current_filters)); } @@ -119,7 +119,7 @@ protected function buildEditPresetFilter(array $form, FormStateInterface $form_s // Store the filter IDs on the form state in case we need to rebuild the // form. - $form_state->set(static::getFilterType() . '_filter_id', $filter_id); + $form_state->set(static::getFilterType() . '_filter_id_' . $ajax_wrapper_id, $filter_id); $facet = $this->getFacetById($list_source, $facet_id); if (!empty($facet) && ($widget = $facet->getWidgetInstance()) && ($widget instanceof ListPagesWidgetInterface)) { @@ -151,6 +151,7 @@ protected function buildEditPresetFilter(array $form, FormStateInterface $form_s '#limit_validation_errors' => [ array_merge($form['#parents'], ['wrapper', 'edit']), ], + '#name' => static::getFilterType() . '-set-' . $filter_id . '-' . $ajax_wrapper_id, '#ajax' => $ajax_definition, '#filter_id' => $filter_id, '#facet_id' => $facet_id, @@ -161,7 +162,7 @@ protected function buildEditPresetFilter(array $form, FormStateInterface $form_s $form['wrapper']['edit'][$filter_id]['cancel_value'] = [ '#value' => $this->t('Cancel'), '#type' => 'button', - '#name' => static::getFilterType() . '-cancel-' . $filter_id, + '#name' => static::getFilterType() . '-cancel-' . $filter_id . '-' . $ajax_wrapper_id, '#limit_validation_errors' => [ array_merge($form['#parents'], [ 'wrapper', @@ -224,9 +225,9 @@ public function setDefaultValueSubmit(array &$form, FormStateInterface $form_sta // Set the current filters on the form state so they can be used elsewhere. static::setCurrentValues($form_state, $list_source, $current_filters, $ajax_wrapper_id); - $form_state->set('default_facet_id', NULL); - $form_state->set('default_filter_id', NULL); - $form_state->set('default_filter_storage', NULL); + $form_state->set('default_facet_id_' . $ajax_wrapper_id, NULL); + $form_state->set('default_filter_id_' . $ajax_wrapper_id, NULL); + $form_state->set('default_filter_storage_' . $ajax_wrapper_id, NULL); $form_state->setRebuild(TRUE); } @@ -285,10 +286,10 @@ public function deleteFilterValueSubmit(array &$form, FormStateInterface $form_s $widget->prepareDefaultFilterValue($facet, $current_filters[$filter_id], $subform_state); unset($current_filters[$filter_id]); static::setCurrentValues($form_state, $list_source, $current_filters, $ajax_wrapper_id); - $form_state->set('default_filter_id', NULL); + $form_state->set('default_filter_id_' . $ajax_wrapper_id, NULL); // Clear also the storage that plugins may use for this filter. - $form_state->set('default_filter_storage', NULL); - $form_state->set('default_facet_id', NULL); + $form_state->set('default_filter_storage_' . $ajax_wrapper_id, NULL); + $form_state->set('default_facet_id_' . $ajax_wrapper_id, NULL); $form_state->setRebuild(TRUE); } diff --git a/src/FilterConfigurationFormBuilderBase.php b/src/FilterConfigurationFormBuilderBase.php index b5d5eb84..a3217f70 100644 --- a/src/FilterConfigurationFormBuilderBase.php +++ b/src/FilterConfigurationFormBuilderBase.php @@ -152,7 +152,7 @@ protected function buildSummaryPresetFilters(array $form, FormStateInterface $fo $form['wrapper']['buttons'][$filter_id]['edit-' . $filter_id] = [ '#type' => 'button', '#value' => $this->t('Edit'), - '#name' => static::getFilterType() . '-edit-' . $filter_id, + '#name' => static::getFilterType() . '-edit-' . $filter_id . '-' . $ajax_wrapper_id, '#filter_id' => $filter_id, '#facet_id' => $filter->getFacetId(), '#limit_validation_errors' => [ @@ -160,7 +160,7 @@ protected function buildSummaryPresetFilters(array $form, FormStateInterface $fo 'wrapper', 'edit', $filter_id, - static::getFilterType() . '-edit-' . $filter_id, + static::getFilterType() . '-edit-' . $filter_id . '-' . $ajax_wrapper_id, ]), ], '#ajax' => [ @@ -174,7 +174,7 @@ protected function buildSummaryPresetFilters(array $form, FormStateInterface $fo $form['wrapper']['buttons'][$filter_id]['delete-' . $filter_id] = [ '#type' => 'button', '#value' => $this->t('Delete'), - '#name' => static::getFilterType() . '-delete-' . $filter_id, + '#name' => static::getFilterType() . '-delete-' . $filter_id . '-' . $ajax_wrapper_id, '#filter_id' => $filter_id, '#facet_id' => $filter->getFacetId(), '#limit_validation_errors' => [ @@ -182,7 +182,7 @@ protected function buildSummaryPresetFilters(array $form, FormStateInterface $fo 'wrapper', 'edit', $filter_id, - static::getFilterType() . '-delete-' . $filter_id, + static::getFilterType() . '-delete-' . $filter_id . '-' . $ajax_wrapper_id, ]), ], '#ajax' => [ @@ -293,8 +293,10 @@ public static function generateFilterId(string $id, array $existing_filters = [] */ public function addFacetSubmit(array &$form, FormStateInterface $form_state): void { $triggering_element = $form_state->getTriggeringElement(); + $element = NestedArray::getValue($form, array_slice($triggering_element['#array_parents'], 0, -3)); + $ajax_wrapper_id = $this->getAjaxWrapperId($element); $filter_type = static::getFilterType(); - $key = $filter_type . '_facet_id'; + $key = $filter_type . '_facet_id_' . $ajax_wrapper_id; $form_state->set($key, $triggering_element['#value']); $form_state->setRebuild(TRUE); } @@ -343,8 +345,10 @@ public function refreshEditFormAjax(array &$form, FormStateInterface $form_state */ public function editFilterSubmit(array &$form, FormStateInterface $form_state): void { $triggering_element = $form_state->getTriggeringElement(); - $form_state->set(static::getFilterType() . '_facet_id', $triggering_element['#facet_id']); - $form_state->set(static::getFilterType() . '_filter_id', $triggering_element['#filter_id']); + $element = NestedArray::getValue($form, array_slice($triggering_element['#array_parents'], 0, -4)); + $ajax_wrapper_id = $this->getAjaxWrapperId($element); + $form_state->set(static::getFilterType() . '_facet_id_' . $ajax_wrapper_id, $triggering_element['#facet_id']); + $form_state->set(static::getFilterType() . '_filter_id_' . $ajax_wrapper_id, $triggering_element['#filter_id']); $form_state->setRebuild(TRUE); } @@ -357,8 +361,11 @@ public function editFilterSubmit(array &$form, FormStateInterface $form_state): * The form state. */ public function cancelValueSubmit(array &$form, FormStateInterface $form_state): void { - $form_state->set(static::getFilterType() . '_facet_id', NULL); - $form_state->set(static::getFilterType() . '_filter_id', NULL); + $triggering_element = $form_state->getTriggeringElement(); + $element = NestedArray::getValue($form, array_slice($triggering_element['#array_parents'], 0, -4)); + $ajax_wrapper_id = $this->getAjaxWrapperId($element); + $form_state->set(static::getFilterType() . '_facet_id_' . $ajax_wrapper_id, NULL); + $form_state->set(static::getFilterType() . '_filter_id_' . $ajax_wrapper_id, NULL); // Clear also any filter specific storage information plugins may set. $form_state->set(static::getFilterType() . '_filter_storage', NULL); $form_state->setRebuild(TRUE); diff --git a/src/Form/ListPageConfigurationSubForm.php b/src/Form/ListPageConfigurationSubForm.php index bf747945..28908149 100644 --- a/src/Form/ListPageConfigurationSubForm.php +++ b/src/Form/ListPageConfigurationSubForm.php @@ -310,12 +310,26 @@ public function entityTypeSelectSubmit(array &$form, FormStateInterface $form_st $form_state->set('entity_type', $triggering_element['#value']); $form_state->set('bundle', NULL); + $element = NestedArray::getValue($form, array_slice($triggering_element['#array_parents'], 0, -4)); + $ajax_wrapper_id_part = ($element['#parents'] ? '-' . implode('-', $element['#parents']) : ''); + // In this form we embed the default filters form as well so if we change // entity types, we need to reset any filter selection. - $form_state->set('default_facet_id', NULL); - $form_state->set('default_filter_id', NULL); - $form_state->set('contextual_facet_id', NULL); - $form_state->set('contextual_filter_id', NULL); + $remove = []; + foreach ($form_state->getStorage() as $name => $value) { + if (strpos($name, $ajax_wrapper_id_part) === FALSE) { + continue; + } + + if (str_starts_with($name, 'default_facet_id') || str_starts_with($name, 'default_filter_id') || str_starts_with($name, 'contextual_facet_id') || str_starts_with($name, 'contextual_filter_id')) { + $remove[] = $name; + } + } + + foreach ($remove as $name) { + $form_state->set($name, NULL); + } + $form_state->setRebuild(TRUE); } @@ -326,18 +340,33 @@ public function entityTypeSelectSubmit(array &$form, FormStateInterface $form_st * The form. * @param \Drupal\Core\Form\FormStateInterface $form_state * The form state. + * + * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function bundleSelectSubmit(array &$form, FormStateInterface $form_state): void { $triggering_element = $form_state->getTriggeringElement(); $form_state->set('bundle', $triggering_element['#value']); $form_state->setRebuild(TRUE); + $element = NestedArray::getValue($form, array_slice($triggering_element['#array_parents'], 0, -4)); + $ajax_wrapper_id_part = ($element['#parents'] ? '-' . implode('-', $element['#parents']) : ''); + // In this form we embed the default filters form as well so if we change // entity types, we need to reset any filter selection. - $form_state->set('default_facet_id', NULL); - $form_state->set('default_filter_id', NULL); - $form_state->set('contextual_facet_id', NULL); - $form_state->set('contextual_filter_id', NULL); + $remove = []; + foreach ($form_state->getStorage() as $name => $value) { + if (strpos($name, $ajax_wrapper_id_part) === FALSE) { + continue; + } + + if (str_starts_with($name, 'default_facet_id') || str_starts_with($name, 'default_filter_id') || str_starts_with($name, 'contextual_facet_id') || str_starts_with($name, 'contextual_filter_id')) { + $remove[] = $name; + } + } + + foreach ($remove as $name) { + $form_state->set($name, NULL); + } // When we change the bundle, we want to set the default exposed filter // values to the user input so that the checkboxes can be checked when the diff --git a/tests/src/FunctionalJavascript/ListPagePluginFormTestBase.php b/tests/src/FunctionalJavascript/ListPagePluginFormTestBase.php index f02c077c..63ff88f2 100644 --- a/tests/src/FunctionalJavascript/ListPagePluginFormTestBase.php +++ b/tests/src/FunctionalJavascript/ListPagePluginFormTestBase.php @@ -190,11 +190,13 @@ protected function assertListPageEntityTypeSelection(): void { * * @param string $default_value_name_prefix * The prefix of the preset filter element names. + * @param string $ajax_wrapper_id + * The ajax wrapper ID. * * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ - public function assertListPagePresetFilters(string $default_value_name_prefix): void { + public function assertListPagePresetFilters(string $default_value_name_prefix, string $ajax_wrapper_id): void { // Set tabs. $this->drupalPlaceBlock('local_tasks_block', ['primary' => TRUE]); @@ -326,9 +328,9 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): $this->assertDefaultValueForFilters($expected_set_filters); // Assert the Edit and Remove buttons are in the right place. - $edit = $this->getSession()->getPage()->find('css', '.default-filters-table td input[name="default-edit-' . $body_filter_id . '"]'); + $edit = $this->getSession()->getPage()->find('css', '.default-filters-table td input[name="default-edit-' . $body_filter_id . '-' . $ajax_wrapper_id . '"]'); $this->assertEquals('Edit', $edit->getValue()); - $delete = $this->getSession()->getPage()->find('css', '.default-filters-table td input[name="default-delete-' . $body_filter_id . '"]'); + $delete = $this->getSession()->getPage()->find('css', '.default-filters-table td input[name="default-delete-' . $body_filter_id . '-' . $ajax_wrapper_id . '"]'); $this->assertEquals('Delete', $delete->getValue()); // Set preset filter for Created. @@ -378,7 +380,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): // Switch content type again, but this time while on the edit form of a // default filter. - $page->pressButton('default-edit-' . $created_filter_id); + $page->pressButton('default-edit-' . $created_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set default value for Created'); $page->selectFieldOption('Source bundle', 'Content type two'); @@ -392,7 +394,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): ], ]); // Try to edit and make sure that works. - $page->pressButton('default-edit-' . $select_two_filter_id); + $page->pressButton('default-edit-' . $select_two_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set default value for Select two'); // Switch back to content type one. @@ -432,7 +434,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): $this->assertDefaultValueForFilters($expected_set_filters); // Set additional value for reference. - $page->pressButton('default-edit-' . $reference_filter_id); + $page->pressButton('default-edit-' . $reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $assert = $this->assertSession(); $assert->pageTextContains('Set default value for Reference'); @@ -448,7 +450,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): $this->assertDefaultValueForFilters($expected_set_filters); // Remove the yellow animal. - $page->pressButton('default-edit-' . $reference_filter_id); + $page->pressButton('default-edit-' . $reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $assert = $this->assertSession(); $assert->pageTextContains('Set default value for Reference'); @@ -485,7 +487,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): // Remove preset filter for Published. $this->assertSession()->elementTextContains('css', 'table.default-filters-table', 'Published'); - $page->pressButton('default-delete-' . $published_filter_id); + $page->pressButton('default-delete-' . $published_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); unset($expected_set_filters['published']); $this->assertDefaultValueForFilters($expected_set_filters); @@ -493,7 +495,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): // Remove preset filter for Reference. $this->assertSession()->elementTextContains('css', 'table.default-filters-table', 'Reference'); - $page->pressButton('default-delete-' . $reference_filter_id); + $page->pressButton('default-delete-' . $reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); unset($expected_set_filters['reference']); $this->assertDefaultValueForFilters($expected_set_filters); @@ -501,14 +503,14 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): // Remove preset filter for select one. $this->assertSession()->elementTextContains('css', 'table.default-filters-table', 'Select one'); - $page->pressButton('default-delete-' . $select_one_filter_id); + $page->pressButton('default-delete-' . $select_one_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); unset($expected_set_filters['select_one']); $this->assertDefaultValueForFilters($expected_set_filters); $this->assertSession()->elementTextNotContains('css', 'table.default-filters-table', 'Select one'); // Edit preset filter for Body and cancel. - $page->pressButton('default-edit-' . $body_filter_id); + $page->pressButton('default-edit-' . $body_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $this->assertSession()->pageTextContains('Set default value for Body'); $page = $this->getSession()->getPage(); @@ -520,7 +522,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): $this->assertDefaultValueForFilters($expected_set_filters); // Edit preset filter for Body. - $page->pressButton('default-edit-' . $body_filter_id); + $page->pressButton('default-edit-' . $body_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $this->assertSession()->pageTextContains('Set default value for Body'); $page = $this->getSession()->getPage(); @@ -535,7 +537,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): $this->assertDefaultValueForFilters($expected_set_filters); // Edit preset filter for Created. - $page->pressButton('default-edit-' . $created_filter_id); + $page->pressButton('default-edit-' . $created_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $assert = $this->assertSession(); $assert->pageTextContains('Set default value for Created'); @@ -567,7 +569,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-edit-' . $body_filter_id); + $page->pressButton('default-edit-' . $body_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $assert = $this->assertSession(); $assert->pageTextContains(' Set default value for Body'); @@ -593,7 +595,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-delete-' . $body_filter_id); + $page->pressButton('default-delete-' . $body_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); unset($expected_set_filters['body']); $this->assertDefaultValueForFilters($expected_set_filters); @@ -609,7 +611,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-edit-' . $created_filter_id); + $page->pressButton('default-edit-' . $created_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $assert = $this->assertSession(); $assert->pageTextContains('Set default value for Created'); @@ -658,7 +660,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-edit-' . $reference_filter_id); + $page->pressButton('default-edit-' . $reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $assert->pageTextContains('Set default value for Reference'); $this->getSession()->getPage()->fillField($default_value_name_prefix . '[wrapper][edit][' . $reference_filter_id . '][reference][0][entity_reference]', 'Red (1)'); @@ -682,9 +684,9 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-delete-' . $created_filter_id); + $page->pressButton('default-delete-' . $created_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); - $page->pressButton('default-delete-' . $reference_filter_id); + $page->pressButton('default-delete-' . $reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); // Add a Link filter. @@ -711,7 +713,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-edit-' . $link_filter_id); + $page->pressButton('default-edit-' . $link_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $nodes = \Drupal::entityTypeManager()->getStorage('node')->loadByProperties(['title' => 'Sun title']); $sun_title = reset($nodes); @@ -730,7 +732,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-delete-' . $link_filter_id); + $page->pressButton('default-delete-' . $link_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); // Test an OR filter. @@ -764,7 +766,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-edit-' . $reference_filter_id); + $page->pressButton('default-edit-' . $reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $page->selectFieldOption($default_value_name_prefix . '[wrapper][edit][' . $reference_filter_id . '][oe_list_pages_filter_operator]', 'All of'); $this->assertSession()->assertWaitOnAjaxRequest(); @@ -790,7 +792,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-edit-' . $reference_filter_id); + $page->pressButton('default-edit-' . $reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $page->selectFieldOption($default_value_name_prefix . '[wrapper][edit][' . $reference_filter_id . '][oe_list_pages_filter_operator]', 'None of'); $this->assertSession()->assertWaitOnAjaxRequest(); @@ -815,7 +817,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-edit-' . $reference_filter_id); + $page->pressButton('default-edit-' . $reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $this->getSession()->getPage()->fillField($default_value_name_prefix . '[wrapper][edit][' . $reference_filter_id . '][reference][1][entity_reference]', ''); $page->selectFieldOption($default_value_name_prefix . '[wrapper][edit][' . $reference_filter_id . '][oe_list_pages_filter_operator]', 'Any of'); @@ -859,7 +861,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $page->pressButton('default-edit-' . $second_reference_filter_id); + $page->pressButton('default-edit-' . $second_reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $this->getSession()->getPage()->fillField($default_value_name_prefix . '[wrapper][edit][' . $second_reference_filter_id . '][reference][0][entity_reference]', 'Yellow (2)'); $page->selectFieldOption($default_value_name_prefix . '[wrapper][edit][' . $second_reference_filter_id . '][oe_list_pages_filter_operator]', 'Any of'); @@ -892,9 +894,9 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): $link->click(); } - $page->pressButton('default-delete-' . $reference_filter_id); + $page->pressButton('default-delete-' . $reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); - $page->pressButton('default-delete-' . $second_reference_filter_id); + $page->pressButton('default-delete-' . $second_reference_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $page->pressButton('Save'); @@ -963,7 +965,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): } // Fill in the country code. - $this->getSession()->getPage()->pressButton('default-edit-' . $country_filter_id); + $this->getSession()->getPage()->pressButton('default-edit-' . $country_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $this->getSession()->getPage()->fillField($filter_selector, 'BE'); $this->getSession()->getPage()->pressButton('Set default value'); @@ -986,7 +988,7 @@ public function assertListPagePresetFilters(string $default_value_name_prefix): if ($link) { $link->click(); } - $this->getSession()->getPage()->pressButton('default-delete-' . $country_filter_id); + $this->getSession()->getPage()->pressButton('default-delete-' . $country_filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $this->getSession()->getPage()->selectFieldOption('Add default value for', 'Foo'); $this->assertSession()->assertWaitOnAjaxRequest(); diff --git a/tests/src/FunctionalJavascript/ListPagesPresetFiltersTest.php b/tests/src/FunctionalJavascript/ListPagesPresetFiltersTest.php index 67353798..9d578242 100755 --- a/tests/src/FunctionalJavascript/ListPagesPresetFiltersTest.php +++ b/tests/src/FunctionalJavascript/ListPagesPresetFiltersTest.php @@ -98,7 +98,7 @@ public function testListPagePresetFilters(): void { $this->drupalGet('/node/add/oe_list_page'); $this->getSession()->getPage()->fillField('Title', 'List page for ct1'); $this->clickLink('List Page'); - $this->assertListPagePresetFilters('emr_plugins_oe_list_page[wrapper][default_filter_values]'); + $this->assertListPagePresetFilters('emr_plugins_oe_list_page[wrapper][default_filter_values]', 'list-page-default_filter_values--emr_plugins_oe_list_page-wrapper-default_filter_values'); } /** @@ -110,6 +110,7 @@ public function testListPagePresetFilters(): void { public function testListPageDefaultStatusPresetFilters(): void { // Create the configured facet. $list_id = ListSourceFactory::generateFacetSourcePluginId('node', 'content_type_one'); + $ajax_wrapper_id = 'list-page-default_filter_values--emr_plugins_oe_list_page-wrapper-default_filter_values'; $processor_options = [ 'default_status' => DateStatus::PAST, @@ -211,7 +212,7 @@ public function testListPageDefaultStatusPresetFilters(): void { // Include both upcoming and past. $this->drupalGet($node->toUrl('edit-form')); $this->clickLink('List Page'); - $this->getSession()->getPage()->pressButton('default-edit-' . $filter_id); + $this->getSession()->getPage()->pressButton('default-edit-' . $filter_id . '-' . $ajax_wrapper_id); $this->assertSession()->assertWaitOnAjaxRequest(); $this->getSession()->getPage()->selectFieldOption('emr_plugins_oe_list_page[wrapper][default_filter_values][wrapper][edit][' . $filter_id . '][oe_list_pages_filter_operator]', 'Any of'); $this->getSession()->getPage()->selectFieldOption($filter_selector . '[' . $facet->id() . '][1][list]', DateStatus::PAST);