diff --git a/src/Plugin/Field/FieldWidget/ParagraphsWidget.php b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php index 2039580..f01a2be 100644 --- a/src/Plugin/Field/FieldWidget/ParagraphsWidget.php +++ b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php @@ -178,6 +178,11 @@ class ParagraphsWidget extends WidgetBase { '#options' => $this->getSettingOptions('autocollapse'), '#default_value' => $this->getSetting('autocollapse'), '#required' => TRUE, + '#states' => [ + 'visible' => [ + 'select[name="fields[' . $this->fieldDefinition->getName() . '][settings_edit_form][settings][edit_mode]"]' => ['value' => 'closed'], + ], + ], ]; $elements['add_mode'] = array( @@ -277,12 +282,14 @@ class ParagraphsWidget extends WidgetBase { $edit_mode = $this->getSettingOptions('edit_mode')[$this->getSetting('edit_mode')]; $closed_mode = $this->getSettingOptions('closed_mode')[$this->getSetting('closed_mode')]; - $autocollapse = $this->getSettingOptions('autocollapse')[$this->getSetting('autocollapse')]; $add_mode = $this->getSettingOptions('add_mode')[$this->getSetting('add_mode')]; $summary[] = $this->t('Edit mode: @edit_mode', ['@edit_mode' => $edit_mode]); $summary[] = $this->t('Closed mode: @closed_mode', ['@closed_mode' => $closed_mode]); - $summary[] = $this->t('Autocollapse: @autocollapse', ['@autocollapse' => $autocollapse]); + if ($this->getSetting('edit_mode') == 'closed') { + $autocollapse = $this->getSettingOptions('autocollapse')[$this->getSetting('autocollapse')]; + $summary[] = $this->t('Autocollapse: @autocollapse', ['@autocollapse' => $autocollapse]); + } $summary[] = $this->t('Add mode: @add_mode', ['@add_mode' => $add_mode]); $summary[] = $this->t('Form display mode: @form_display_mode', [ @@ -2365,14 +2372,6 @@ class ParagraphsWidget extends WidgetBase { } } - // Disable autocollapse when editing all and enable it when closing all. - if ($submit['button']['#paragraphs_mode'] === 'edit') { - $submit['widget_state']['autocollapse'] = 'none'; - } - elseif ($submit['button']['#paragraphs_mode'] === 'closed') { - $submit['widget_state']['autocollapse'] = 'all'; - } - static::setWidgetState($submit['parents'], $submit['field_name'], $form_state, $submit['widget_state']); $form_state->setRebuild(); } diff --git a/src/Tests/Experimental/ParagraphsExperimentalHeaderActionsTest.php b/src/Tests/Experimental/ParagraphsExperimentalHeaderActionsTest.php index 02ef44e..89f572e 100644 --- a/src/Tests/Experimental/ParagraphsExperimentalHeaderActionsTest.php +++ b/src/Tests/Experimental/ParagraphsExperimentalHeaderActionsTest.php @@ -119,6 +119,39 @@ class ParagraphsExperimentalHeaderActionsTest extends ParagraphsExperimentalTest $this->assertRaw('name="field_paragraphs_dragdrop_mode"'); $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_remove'); $this->assertNoRaw('name="field_paragraphs_dragdrop_mode"'); + + // Assert functionality of autocollapse mode. + $settings = [ + 'edit_mode' => 'closed', + 'autocollapse' => 'all', + ]; + $this->setParagraphsWidgetSettings('paragraphed_test', 'field_paragraphs', $settings); + $this->drupalGet('node/' . $node->id() . '/edit'); + // When editing all, collapsing and editing the first paragraph, the + // second should be collapsed if the autocollapse setting is set to 'all'. + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_edit_all'); + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_collapse'); + $this->assertRaw('class="paragraphs-collapsed-description">First text'); + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_edit'); + $this->assertRaw('class="paragraphs-collapsed-description">Second text'); + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_1_edit'); + $this->assertRaw('class="paragraphs-collapsed-description">First text'); + $settings = [ + 'edit_mode' => 'closed', + 'autocollapse' => 'none', + ]; + $this->setParagraphsWidgetSettings('paragraphed_test', 'field_paragraphs', $settings); + $this->drupalGet('node/' . $node->id() . '/edit'); + // When editing all, collapsing and editing the first paragraph, the + // second should not be collapsed if the autocollapse setting is set to + // 'none'. + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_edit_all'); + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_collapse'); + $this->assertRaw('class="paragraphs-collapsed-description">First text'); + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_edit'); + $this->assertNoRaw('class="paragraphs-collapsed-description">Second text'); + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_1_collapse'); + $this->assertNoRaw('class="paragraphs-collapsed-description">First text'); } /**