diff -u b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php --- b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php @@ -1093,7 +1093,7 @@ $paragraph[] = [ 'entity' => $field_state['paragraphs'][$delta]['entity']->createDuplicate(), 'display' => $field_state['paragraphs'][$delta]['display'], - 'mode' => 'closed' + 'mode' => 'edit' ]; array_splice($field_state['paragraphs'], $delta + 1, 0, $paragraph); diff -u b/src/Tests/ParagraphsWidgetButtonsTest.php b/src/Tests/ParagraphsWidgetButtonsTest.php --- b/src/Tests/ParagraphsWidgetButtonsTest.php +++ b/src/Tests/ParagraphsWidgetButtonsTest.php @@ -137,7 +137,6 @@ $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_duplicate'); $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_edit'); $this->assertFieldByName('field_paragraphs[0][subform][field_text][0][value]', $text); - $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_1_edit'); $this->assertFieldByName('field_paragraphs[1][subform][field_text][0][value]', $text); // Save and check if both paragraphs are present. @@ -146,6 +145,66 @@ } /** + * Tests duplicate paragraph feature with nested paragraphs. + */ + public function testDuplicateButtonWithNesting(){ + $this->addParagraphedContentType('paragraphed_test', 'field_paragraphs'); + + $this->loginAsAdmin(['create paragraphed_test content', 'edit any paragraphed_test content']); + // Add nested Paragraph type. + $nested_paragraph_type = 'nested_paragraph'; + $this->addParagraphsType($nested_paragraph_type); + // Add text Paragraph type + $paragraph_type = 'text'; + $this->addParagraphsType($paragraph_type); + + // Add a text field to the text_paragraph type. + static::fieldUIAddNewField('admin/structure/paragraphs_type/' . $paragraph_type, 'text', 'Text', 'text_long', [], []); + + // Add a ERR paragraph field to the nested_paragraph type. + static::fieldUIAddNewField('admin/structure/paragraphs_type/' . $nested_paragraph_type, 'nested', 'Nested', 'field_ui:entity_reference_revisions:paragraph', [ + 'settings[target_type]' => 'paragraph', + 'cardinality' => '-1', + ], []); + $this->drupalPostAjaxForm('node/add/paragraphed_test', [], 'field_paragraphs_nested_paragraph_add_more'); + + // Create a node with a Paragraph. + $edit = [ + 'title[0][value]' => 'paragraphs_mode_test', + ]; + $this->drupalPostForm(NULL, $edit, t('Save and publish')); + $node = $this->drupalGetNodeByTitle('paragraphs_mode_test'); + + // Add a text field to nested paragraph + $text = 'recognizable_text'; + $this->drupalPostAjaxForm('node/' . $node->id() . '/edit', [], 'field_paragraphs_0_subform_field_nested_text_add_more'); + $edit = [ + 'field_paragraphs[0][subform][field_nested][0][subform][field_text][0][value]' => $text, + ]; + $this->drupalPostForm(NULL, $edit, 'Save and keep published'); + + // Switch mode to closed + $this->setParagraphsWidgetMode('paragraphed_test', 'field_paragraphs', 'closed'); + $this->drupalGet('node/' . $node->id() . '/edit'); + + // Click "Duplicate" button. + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_duplicate'); + $this->drupalPostAjaxForm(NULL, [], 'field_paragraphs_0_edit'); + $this->assertFieldByName('field_paragraphs[0][subform][field_nested][0][subform][field_text][0][value]', $text); + + // Change the text paragraph value of duplicated nested paragraph + $second_paragraph_text = 'duplicated_text'; + $edit = [ + 'field_paragraphs[1][subform][field_nested][0][subform][field_text][0][value]' => $second_paragraph_text, + ]; + + // Save and check if the changed text paragraph value of the duplicated + // paragraph is not the same as in the original paragraph + $this->drupalPostForm(NULL, $edit, t('Save and keep published')); + $this->assertUniqueText($text); + } + + /** * Sets the Paragraphs widget display mode. * * @param string $content_type only in patch2: unchanged: --- a/src/Tests/ParagraphsTestBase.php +++ b/src/Tests/ParagraphsTestBase.php @@ -129,9 +129,9 @@ abstract class ParagraphsTestBase extends WebTestBase { 'field_name' => $paragraphs_field_name, 'entity_type' => $entity_type, 'type' => 'entity_reference_revisions', + 'cardinality' => '-1', 'settings' => [ 'target_type' => 'paragraph', - 'cardinality' => '-1', ], ]); $field_storage->save();