From ead8765e3707e9d4a0599fb8863ecb3bc69ee402 Mon Sep 17 00:00:00 2001
From: itamair <itamair@me.com>
Date: Sat, 20 Jun 2020 22:28:25 +0200
Subject: [PATCH] LayoutParagraphsWidget: correct definition of 
 $target_bundles, with more accurate handle of use case of no choices for
 include and exclude.

---
 .../FieldWidget/LayoutParagraphsWidget.php      | 17 +++++++++--------
 1 file changed, 9 insertions(+), 8 deletions(-)

diff --git a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
index a1cce608..cd908880 100644
--- a/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
+++ b/src/Plugin/Field/FieldWidget/LayoutParagraphsWidget.php
@@ -223,11 +223,13 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
     $this->itemFormWrapperId = trim(Html::getId(implode('-', $parents) . '-' . $this->fieldName . '-form'), '-');
 
     $handler_settings = $items->getSetting('handler_settings');
-    $target_bundles = $handler_settings['target_bundles'] ?? [];
-
-    if (!empty($handler_settings['negate'])) {
-      $target_bundles_options = array_keys($handler_settings['target_bundles_drag_drop']);
-      $target_bundles = array_diff($target_bundles_options, $target_bundles);
+    $bundles = array_keys($handler_settings["target_bundles_drag_drop"]);
+    $selected_bundles = !empty($handler_settings['target_bundles']) ? $handler_settings['target_bundles'] : [];
+    if (!$handler_settings["negate"]) {
+      $target_bundles = empty($selected_bundles) ? $bundles : array_intersect($bundles, $selected_bundles);
+    }
+    else {
+      $target_bundles = empty($selected_bundles) ? [] : array_diff($bundles, $selected_bundles);
     }
     $title = $this->fieldDefinition->getLabel();
     $description = FieldFilteredMarkup::create(\Drupal::token()->replace($this->fieldDefinition->getDescription()));
@@ -1843,11 +1845,10 @@ class LayoutParagraphsWidget extends WidgetBase implements ContainerFactoryPlugi
     $bundles = array_keys($handler_settings["target_bundles_drag_drop"]);
     $selected_bundles = !empty($handler_settings['target_bundles']) ? $handler_settings['target_bundles'] : [];
     if (!$handler_settings["negate"]) {
-      $selected_bundles = empty($selected_bundles) ? [] : $selected_bundles;
-      $target_bundles = array_intersect($bundles, $selected_bundles);
+      $target_bundles = empty($selected_bundles) ? $bundles : array_intersect($bundles, $selected_bundles);
     }
     else {
-      $target_bundles = array_diff($bundles, $selected_bundles);
+      $target_bundles = empty($selected_bundles) ? [] : array_diff($bundles, $selected_bundles);
     }
     $definition = $this->entityTypeManager->getDefinition($entity_type);
     $storage = $this->entityTypeManager->getStorage($definition->getBundleEntityType());
-- 
GitLab