Problem/Motivation

Following the description in the parent issue, goal is to implement "duplicate" feature on the current stable release.

Proposed resolution

Implement "duplicate" option in Paragraph "closed" overview. Use dropdown button.

Remaining tasks

User interface changes

API changes

Data model changes

CommentFileSizeAuthor
#53 interdiff-2829316-51-53.txt505 bytesdrobnjak
#53 implement_duplicate-2829316-53.patch10.59 KBdrobnjak
#51 interdiff-2829316-49-51.txt6.06 KBdrobnjak
#51 implement_duplicate-2829316-51.patch10.64 KBdrobnjak
#49 implement_duplicate-2829316-49.patch10.73 KBdrobnjak
#49 interdiff-2829316-47-49.txt2.8 KBdrobnjak
#47 interdiff-2829316-45-47.txt4.54 KBdrobnjak
#47 implement_duplicate-2829316-47.patch13.77 KBdrobnjak
#45 implement_duplicate-2829316-45.patch15.97 KBdrobnjak
#41 implement_duplicate-2829316-41.patch15.58 KBdrobnjak
#39 implement_duplicate-2829316-39.patch8.76 KBdrobnjak
#35 implement_duplicate-2829316-32.patch8.8 KBdrobnjak
#35 interdiff-2829316-30-32.txt972 bytesdrobnjak
#32 interdiff-2829316-30-32.txt972 bytesdrobnjak
#32 implement_duplicate-2829316-32.patch8.8 KBdrobnjak
#30 interdiff-2829316-25-30.txt4.07 KBdrobnjak
#30 implement_duplicate-2829316-30.patch8.63 KBdrobnjak
#27 interdiff-2829316-25-27.txt4.54 KBdrobnjak
#27 implement_duplicate-2829316-27.patch9.19 KBdrobnjak
#25 implement_duplicate-2829316-25.patch5.97 KBdrobnjak
#25 interdiff-2829316-23-25.txt1.68 KBdrobnjak
#23 interdiff-2829316-21-23.txt1.19 KBdrobnjak
#23 implement_duplicate-2829316-23.patch5.9 KBdrobnjak
#21 interdiff-2829316-19-21.txt5.18 KBdrobnjak
#21 implement_duplicate-2829316-21.patch5.95 KBdrobnjak
#19 implement_duplicate-2829316-19.patch3.64 KBdrobnjak
#18 interdiff-2829316-12-18.txt8.03 KBdrobnjak
#18 implement_duplicate-2829316-18.patch4.34 KBdrobnjak
#12 interdiff-2829316-10-12.txt2.58 KBdrobnjak
#12 implement_duplicate-2829316-12.patch4.1 KBdrobnjak
#10 interdiff-2829316-8-10.txt1.1 KBdrobnjak
#10 implement_duplicate-2829316-10.patch3.62 KBdrobnjak
#8 implement_duplicate-2829316-8.patch3.06 KBjohnchque
#8 interdiff-2829316-6-8.txt927 bytesjohnchque
#6 interdiff-2829316-5-6.txt5.52 KBjohnchque
#6 implement_duplicate-2829316-6.patch3 KBjohnchque
#5 interdiff-2829316-2-5.txt1.21 KBdrobnjak
#5 implement_duplicate-2829316-5.patch2.86 KBdrobnjak
#2 implement_duplicate-2829316-2.patch2.98 KBdrobnjak
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

drobnjak created an issue. See original summary.

drobnjak’s picture

Created completely new function duplicateSubmit based on addMoreSubmit and part of code used for duplicate.
Last paragraph item is copied into a new array place, with delta increase by 1. Same procedure is following for the previous item, and all before it, until delta of the item that is duplicated currently. Items before duplicated item should not be changed.

I also created new link in dropdown button in "closed" paragraph mode for duplicate feature. There is a unknown reason that link is sometimes recognized as "edit", sometimes as "collapsed" and few times as "duplicate" without any changes in the code in between.

drobnjak’s picture

Status: Active » Needs review

Tests will probably fail, as the feature is also not working properly but let's give it a try.

Berdir’s picture

+++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
@@ -978,6 +997,28 @@ class InlineParagraphsWidget extends WidgetBase {
+    // Copy the content of the last paragraph into the new element in array.
+    // Following, copy all further elements into the next ones down to delta.
+    $field_state = static::getWidgetState($parents, $field_name, $form_state);
+    $delta = $button['#delta'];
+    for($i = $field_state['real_item_count']; $i > $delta; $i--){
+      $field_state['paragraphs'][$i] = $field_state['paragraphs'][$i-1];
+    }

you shouldn't have to do this by hand, there are php functions to insert things into an array: http://php.net/manual/en/function.array-splice.php. See the last example with length 0, that inserts purple.

What you are missing is calling createDuplicate() on the paragraph object. If you don't do that, we use the same paragraph twice and making changes to one will update both (actually the second will probably win and only those changes will be kept.

It is important to test that. Duplicate, make sure the initial text is duplicated but then make a change and ensure that they are separate and the old text still exists on the original.

drobnjak’s picture

Uploading patch with changes from comment #4. There is still problem with the button so the "duplicate" feature still can not be tested.

johnchque’s picture

Discussed with @drobnjak, this should make it work. One thing that we should think about is what we gonna do when we have already more than 2 paragraphs and we want to duplicate the first one? does it work? or it justs over writes the old one? we need tests about it. :)
And also didn't fix the "array" things. :)

johnchque’s picture

Just tested, it works when we have multiple Paragraphs and adds the right one in the correct position! Nice!!!!

johnchque’s picture

This works duplicating just below the original paragraph. I noticed that it doesn't work well for nested ones, because when duplicating them the children are also added but as a "reference" of the original one and they are all updated equally. We need to loop over them and create duplicates of each children. might be recursive?

Berdir’s picture

Yes, the recursion is fun. I think what you want to do is override createDuplicate() on the paragraph entity and loop over fields, any ERR reference that points to paragraphs should then also be duplicated. Then it will automatically be recursive.

drobnjak’s picture

Added support for nested paragraphs to evade having changes on one nested paragraph to apply also on duplicated one.
Currently the duplicate option is not working. Error is somewhere in the last foreach.

foreach($field as $item=>$entity){
                $entity->createDuplicate();
              }

$field variable has ERR Items but probably a part is missing in targeting entity that should be duplicated.

Berdir’s picture

Status: Needs review » Needs work
  1. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -1010,6 +1010,18 @@
    +    // Creating duplicates of nested paragraph entities.
    +    if ($field_state['paragraphs'][$delta]['entity']->getType() == 'nested_paragraph'){
    +        foreach ($field_state['paragraphs'][$delta]['entity']->getFields() as $type=>$field){
    +          if($field->getFieldDefinition()->getType() == 'entity_reference_revisions'){
    

    as discussed, this needs to live within createDuplicate() of Paragraphs entity, or doesn't work for nesting.

  2. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -1010,6 +1010,18 @@
    +            if($field->getFieldDefinition()->getTargetEntityTypeId()  == "paragraph"){
    +              foreach($field as $item=>$entity){
    +                $entity->createDuplicate();
    +              }
    

    You forgot a lot of spaces ;)

    Also, you are creating the duplicate, but what then? You need to actually set it back on $item->entity, so that $item->entity is then a new entity.

drobnjak’s picture

I override createDuplicate() method and add recursion for nested paragraph elements. Still not working properly.

chr.fritsch’s picture

Could you fire an event when a paragraph is duplicated?

Im thinking about an use case when you have a gallery paragraph. When you duplicate this, the gallery inside should also be duplicated.

johnchque’s picture

Status: Needs review » Needs work

@drobnjak please see:

  1. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -978,6 +997,58 @@ class InlineParagraphsWidget extends WidgetBase {
    +  public function createDuplicateParagraph() {
    ...
    +      'entity' => $field_state['paragraphs'][$delta]['entity']->createDuplicateParagraph(),
    

    AFAIK, @Berdir suggested to overwrite the createDuplicate method in the Paragraph Entity.

  2. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -978,6 +997,58 @@ class InlineParagraphsWidget extends WidgetBase {
    +    if ($this->getType() == 'nested_paragraph') {
    

    We cannot rely on this, the type can be "container" or anything, do this as @Berdir suggested, loop over the fields, check the field type, if it is entity_reference_revisions get its target_type if it is 'paragraph' loop over it.

And @chr.fritsch the current purpose of this feature is to duplicate the paragraph and everything inside it, so if we have nested paragraphs, the children inside it will be also duplicated.

chr.fritsch’s picture

Will the duplication happen with for a media_entity which is inside a paragraph, too?

Berdir’s picture

Not at the moment, but that is somewhat out of our control. A gallery is also something that you reference (even if it is inline entity form) and it is its own thing, unlike a paragraph.

I guess what we could do is look into supporting the replicate module if it is available (We already integrate with it, see ReplicateFieldSubscriber). That would give you an event to do additional stuff. So if replicate.module is available, use its API, otherwise do it ourself as a fallback.

Or we could even only offer the duplicate feature if replicat exists, to avoid duplicating the code.

chr.fritsch’s picture

Yes, thats what i mean. Provide some events to do additional stuff on replication. So if you could integrate the replicate module, i am totally happy :-)

drobnjak’s picture

createDuplicate is now moved to Paragraph Entity class. Also, if check for nested paragraph is removed and now we are iterating over fields for every type of the paragraph and looking for ERR.
Duplicate feature is working now for all types except nested paragraph. The problem is somewhere in the last part when recursion is called -
$item->$entity = $entity->createDuplicateParagraph();
Not sure that I am doing this the right way.

drobnjak’s picture

Feature is finally working. Tested also with nested paragraphs. Interdiff too big.

johnchque’s picture

Status: Needs review » Needs work

Good work! Some nitpicks.

  1. +++ b/src/Entity/Paragraph.php
    @@ -328,4 +328,19 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
    +  public function createDuplicate() {
    

    Missing: /**
    * {@inheritdoc}
    */

  2. +++ b/src/Entity/Paragraph.php
    @@ -328,4 +328,19 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
    +    //Check if the paragraph is nested and call duplicate on its entities.
    

    Space missing after //. Let's change this with: // Loop over entity fields and duplicate nested paragraphs.

  3. +++ b/src/Entity/Paragraph.php
    @@ -328,4 +328,19 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
    +      foreach ($duplicate->getFields() as $field) {
    +        if ($field->getFieldDefinition()->getType() == 'entity_reference_revisions') {
    +          if ($field->getFieldDefinition()->getTargetEntityTypeId()  == "paragraph") {
    +            foreach ($field as $item) {
    +              $item->entity = $item->entity->createDuplicate();
    +            }
    +          }
    +        }
    +      }
    

    Let's fix the indentation here.

  4. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -429,6 +429,25 @@ class InlineParagraphsWidget extends WidgetBase {
    +          $links['duplicate_button'] = array(
    ...
    +            '#submit' => array(array(get_class($this), 'duplicateSubmit')),
    ...
    +              'callback' => array(get_class($this), 'itemAjax'),
    

    Use [].

  5. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -1053,6 +1072,31 @@ class InlineParagraphsWidget extends WidgetBase {
    +  public static function duplicateSubmit(array $form, FormStateInterface $form_state) {
    

    Missing doc with explanation about what it does.

Btw, we need tests about this functionality. Let's add them in ParagraphsWidgetButtonsTest.

drobnjak’s picture

Changes from comment #20. Also, test coverage added.

johnchque’s picture

Status: Needs review » Needs work
  1. +++ b/src/Entity/Paragraph.php
    @@ -328,18 +328,21 @@
    +        if ($field->getFieldDefinition()->getTargetEntityTypeId()  == "paragraph") {
    

    extra space before "=="

  2. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -1072,6 +1072,10 @@
    +   * Creates duplicate of paragraph entity based on the delta value of the
    +   * triggering element.
    

    Change it to: Creates a duplicate of the paragraph entity.

drobnjak’s picture

Changes from comment #22.

johnchque’s picture

Status: Needs review » Needs work
  1. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -429,6 +429,25 @@ class InlineParagraphsWidget extends WidgetBase {
    +            '#limit_validation_errors' => array(array_merge($parents, array($field_name, 'add_more'))),
    

    Still using array.

  2. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -1053,6 +1072,34 @@ class InlineParagraphsWidget extends WidgetBase {
    +    $paragraph[] = [
    

    Let's add a comment before this. "Create the duplicated paragraph and insert it below the original."

  3. +++ b/src/Tests/ParagraphsWidgetButtonsTest.php
    @@ -105,6 +105,47 @@ class ParagraphsWidgetButtonsTest extends ParagraphsTestBase {
    +    // Test the 'Closed' mode.
    

    We are not actually "testing" the closed mode, change this by: "Change edit mode to "closed"."

drobnjak’s picture

Changes from comment #24

miro_dietiker’s picture

Status: Needs review » Needs work
  1. +++ b/src/Plugin/Field/FieldWidget/InlineParagraphsWidget.php
    @@ -1053,6 +1072,35 @@ class InlineParagraphsWidget extends WidgetBase {
    +      'mode' => 'closed'
    

    Why is a duplicated element closed? I'd say it should always be edit since its content are likely duplicates and are subject for override.

  2. +++ b/src/Tests/ParagraphsWidgetButtonsTest.php
    @@ -105,6 +105,47 @@ class ParagraphsWidgetButtonsTest extends ParagraphsTestBase {
    +  public function testDuplicateButton(){
    ...
    +    // Create a node with a Paragraph.
    ...
    +    $this->assertNoUniqueText($text);
    

    You said nesting was challenging and has extra complexity. But the tests don't cover it.

drobnjak’s picture

Duplicated element is now open. I also added test coverage for the nesting case, testing that the changes on nested elements are not also made on nested elements of the duplicated paragraph.

Status: Needs review » Needs work

The last submitted patch, 27: implement_duplicate-2829316-27.patch, failed testing.

The last submitted patch, 27: implement_duplicate-2829316-27.patch, failed testing.

drobnjak’s picture

johnchque’s picture

Status: Needs review » Needs work
  1. +++ b/src/Tests/ParagraphsWidgetButtonsTest.php
    @@ -110,6 +110,106 @@ class ParagraphsWidgetButtonsTest extends ParagraphsTestBase {
    +    $this->assertFieldByName('field_paragraphs[0][subform][field_nested][0][subform][field_text][0][value]', $text);
    

    Let's assert in the same way the duplicated content, just below this line, copy it and change it to field_paragraphs[1]...

  2. +++ b/src/Tests/ParagraphsWidgetButtonsTest.php
    @@ -110,6 +110,106 @@ class ParagraphsWidgetButtonsTest extends ParagraphsTestBase {
    +    $this->assertUniqueText($text);
    

    Let's also assert here the $second_paragraph_text.

And then we will be ready for commit this. :)

drobnjak’s picture

Status: Needs review » Needs work

The last submitted patch, 32: implement_duplicate-2829316-32.patch, failed testing.

The last submitted patch, 32: implement_duplicate-2829316-32.patch, failed testing.

drobnjak’s picture

johnchque’s picture

Status: Needs review » Reviewed & tested by the community

Now is much better, also tested manually, looks really good!

Status: Reviewed & tested by the community » Needs work

The last submitted patch, 35: implement_duplicate-2829316-32.patch, failed testing.

The last submitted patch, 35: implement_duplicate-2829316-32.patch, failed testing.

drobnjak’s picture

johnchque’s picture

Status: Needs review » Reviewed & tested by the community

RTBC-ing again,

drobnjak’s picture

Status: Reviewed & tested by the community » Needs review
FileSize
15.58 KB

We are now using replicate module if it is enabled. Addressing the comment #16 from @Berdir

I guess what we could do is look into supporting the replicate module if it is available (We already integrate with it, see ReplicateFieldSubscriber). That would give you an event to do additional stuff. So if replicate.module is available, use its API, otherwise do it ourself as a fallback.

miro_dietiker’s picture

Status: Needs review » Needs work
+++ b/src/Tests/ParagraphsReplicateEnableTest.php
@@ -0,0 +1,16 @@
+    'replicate',

An empty test class does something? We should either write a test there or add a comment why this is not needed.

+++ b/src/Tests/ParagraphsDuplicateFeatureTest.php
@@ -0,0 +1,143 @@
+  public function testDuplicateButton(){
...
+  public function testDuplicateButtonWithNesting(){

+++ b/src/Tests/ParagraphsWidgetButtonsTest.php
@@ -91,6 +91,108 @@ class ParagraphsWidgetButtonsTest extends ParagraphsTestBase {
+  public function testDuplicateButton(){
...
+  public function testDuplicateButtonWithNesting(){

Missing space at ) {.

Berdir’s picture

The replicate test extends the other one, which means we execute all the test methods of the parent class as well. There isn't really anything specific to assert, as the result for the user is exactly the same. We'd have to add a test replicate integration to do something special, which I think is overkill.

miro_dietiker’s picture

Component: Code » Experimental Widget
drobnjak’s picture

Patch re-roll. Everything is working properly and tests are passing locally.

Status: Needs review » Needs work

The last submitted patch, 45: implement_duplicate-2829316-45.patch, failed testing.

drobnjak’s picture

Change the class that ReplicateTest is extending. Removed duplicate feature test from the WidgetButtonTest class, since it is not needed.

Status: Needs review » Needs work

The last submitted patch, 47: implement_duplicate-2829316-47.patch, failed testing.

drobnjak’s picture

Reverting extra deleted content from previous patch.

mbovan’s picture

Status: Needs review » Needs work

Providing a review for #47.

Tested manually with built-in paragraphs types and multiple nested ones. It works quite nice.

Some code (style) comments:

  1. +++ b/src/Entity/Paragraph.php
    @@ -411,4 +411,21 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
    +  +   * {@inheritdoc}
    +  +   */
    

    Leftovers.

  2. +++ b/src/Entity/Paragraph.php
    @@ -411,4 +411,21 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
    +   foreach ($duplicate->getFields() as $field) {
    +     if ($field->getFieldDefinition()->getType() == 'entity_reference_revisions') {
    +       if ($field->getFieldDefinition()->getTargetEntityTypeId() == "paragraph") {
    

    We could loop over field definitions ($field_name, $field_definition) instead and if there is a match (ERR, Paragraph target entity type in one condition) loop over duplicate field items in the same way.

  3. +++ b/src/Entity/Paragraph.php
    @@ -411,4 +411,21 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
    +                     $item->entity = $item->entity->createDuplicate();
    
    +++ b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php
    @@ -1095,6 +1114,44 @@ class ParagraphsWidget extends WidgetBase {
    +      }
    +    else {
    +      $duplicate_entity = $field_state['paragraphs'][$delta]['entity']->createDuplicate();
    +     }
    
    +++ b/src/Tests/Experimental/ParagraphsExperimentalDuplicateFeatureTest.php
    @@ -0,0 +1,144 @@
    +  public static $modules = [
    +      'node',
    +      'paragraphs',
    +      'field',
    +      'field_ui',
    +      'block',
    +      'paragraphs_test',
    +    ];
    

    Code indentation.

  4. +++ b/src/Entity/Paragraph.php
    @@ -411,4 +411,21 @@ class Paragraph extends ContentEntityBase implements ParagraphInterface, EntityN
    +   return $duplicate;
    + }
     }
    
    +++ b/src/Tests/Experimental/ParagraphsExperimentalDuplicateFeatureTest.php
    @@ -0,0 +1,144 @@
    +    $this->drupalPostForm(NULL, [], 'Save');
    +  }
    +}
    

    A new line is missing.

  5. +++ b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php
    @@ -479,6 +479,25 @@ class ParagraphsWidget extends WidgetBase {
    +            '#paragraphs_mode' => 'duplicate',
    
    @@ -1095,6 +1114,44 @@ class ParagraphsWidget extends WidgetBase {
    +      'mode' => 'edit'
    

    Does 'duplicate' serve as an identifier or it's related to the second?

  6. +++ b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php
    @@ -1095,6 +1114,44 @@ class ParagraphsWidget extends WidgetBase {
    +  * Creates a duplicate of the paragraph entity.
    +  */
    

    One more space.

  7. +++ b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php
    @@ -1095,6 +1114,44 @@ class ParagraphsWidget extends WidgetBase {
    +    $field_state = static::getWidgetState($parents, $field_name, $form_state);
    

    This seems to be $widget_state.

  8. +++ b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php
    @@ -1095,6 +1114,44 @@ class ParagraphsWidget extends WidgetBase {
    +    $field_state['original_deltas'] = array_merge($field_state['original_deltas'], ['1' => 1]) ;
    

    Can we add a comment why we merge original deltas with ['1' => 1]?

  9. +++ b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php
    @@ -1095,6 +1114,44 @@ class ParagraphsWidget extends WidgetBase {
    +    // Check if the replicate module is enabled
    
    +++ b/src/Tests/Experimental/ParagraphsExperimentalDuplicateFeatureTest.php
    @@ -0,0 +1,144 @@
    +    // Add text Paragraph type
    ...
    +    // Add a text field to nested paragraph
    ...
    +    // Switch mode to closed
    ...
    +    // Change the text paragraph value of duplicated nested paragraph
    ...
    +    // Save and check if the changed text paragraph value of the duplicated
    +    // paragraph is not the same as in the original paragraph
    

    Dot at the end.

  10. +++ b/src/Plugin/Field/FieldWidget/ParagraphsWidget.php
    @@ -1095,6 +1114,44 @@ class ParagraphsWidget extends WidgetBase {
    +    $form_state->setRebuild();
    +  }
    +
    +
    

    An extra line.

  11. +++ b/src/Tests/Experimental/ParagraphsExperimentalDuplicateFeatureTest.php
    @@ -0,0 +1,144 @@
    +use Drupal\field_ui\Tests\FieldUiTestTrait;
    ...
    +  use FieldUiTestTrait;
    

    Not needed as the parent class uses it too.

  12. +++ b/src/Tests/Experimental/ParagraphsExperimentalDuplicateFeatureTest.php
    @@ -0,0 +1,144 @@
    + */
    +
    
    +++ b/src/Tests/Experimental/ParagraphsExperimentalReplicateEnableTest.php
    @@ -0,0 +1,17 @@
    + */
    +
    +class ParagraphsExperimentalReplicateEnableTest extends ParagraphsExperimentalDuplicateFeatureTest {
    

    An extra empty line.

  13. +++ b/src/Tests/Experimental/ParagraphsExperimentalWidgetButtonsTest.php
    @@ -93,22 +93,44 @@ class ParagraphsExperimentalWidgetButtonsTest extends ParagraphsExperimentalTest
         $this->assertNoText($preview_mode_text);
       }
    -
       /**
    

    Sort of needed.

  14. +++ b/src/Tests/Experimental/ParagraphsExperimentalWidgetButtonsTest.php
    @@ -93,22 +93,44 @@ class ParagraphsExperimentalWidgetButtonsTest extends ParagraphsExperimentalTest
    +    $this->setParagraphsWidgetMode('paragraphed_test', 'field_paragraphs', 'closed');
    

    This helper method would make sense in ParagraphsExperimentalTestBase.

drobnjak’s picture

Addressing the changes from comment #50.

johnchque’s picture

Do we really need the paragraphs_mode to be "duplicate"? I think we can just remove it?

drobnjak’s picture

Agreed. I was using it at the beginning but then forgot to remove it, completely obsolete.

miro_dietiker’s picture

Status: Needs review » Needs work

Pretty nice, committed. :-)

Note though this is only visible if the default paragraph edit mode is closed. It took me a few mins to identify this problem!
I think, we should split the tests into the two user journeys ASAP because the UX will also differ more soon.

Back to needs work to create follow-ups. Please close when done.

tduong’s picture

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.