From 35b20c5055845dfa204e3a7e592f5271998022a7 Mon Sep 17 00:00:00 2001
From: Scott Euser <scotteuser@gmail.com>
Date: Sat, 15 Feb 2025 07:03:49 +0000
Subject: [PATCH] Flatten returned options

---
 src/AiReferenceGenerator.php                  | 13 +++++
 .../src/Functional/AiAutoReferenceUiTest.php  | 56 +++++++++++++++++++
 2 files changed, 69 insertions(+)

diff --git a/src/AiReferenceGenerator.php b/src/AiReferenceGenerator.php
index 0983393..647d229 100644
--- a/src/AiReferenceGenerator.php
+++ b/src/AiReferenceGenerator.php
@@ -262,6 +262,19 @@ class AiReferenceGenerator {
           unset($options[$existing_value['target_id']]);
         }
       }
+
+      // Get settable options can return options group by bundle type if there
+      // are multiple target bundles.
+      if ($options) {
+        $first_option = reset($options);
+        if (is_array($first_option)) {
+          $merged_options = [];
+          foreach ($options as $option_group) {
+            $merged_options += $option_group;
+          }
+          return $merged_options;
+        }
+      }
       return $options;
     }
     return [];
diff --git a/tests/src/Functional/AiAutoReferenceUiTest.php b/tests/src/Functional/AiAutoReferenceUiTest.php
index de42512..4079b49 100644
--- a/tests/src/Functional/AiAutoReferenceUiTest.php
+++ b/tests/src/Functional/AiAutoReferenceUiTest.php
@@ -279,4 +279,60 @@ class AiAutoReferenceUiTest extends BrowserTestBase {
     );
   }
 
+  /**
+   * Tests that the allowed values provides expected results.
+   */
+  public function testAiGeneratorAllowedValues(): void {
+    $this->drupalCreateContentType([
+      'type' => 'recipe',
+      'name' => 'Recipe',
+    ]);
+    $this->createEntityReferenceField(
+      'node',
+      'article',
+      'field_related_multiple',
+      'Related multiple types',
+      'node',
+      ['article', 'recipe'],
+    );
+    $this->nodes[] = $this->drupalCreateNode([
+      'type' => 'recipe',
+      'title' => 'Chocolate Cake Recipe',
+      'field_body' => [
+        'value' => '10 cups of sugar',
+        'format' => 'plain_text',
+      ],
+    ]);
+    $article = $this->drupalCreateNode([
+      'type' => 'article',
+      'title' => 'All about chocolate cakes',
+      'field_body' => [
+        'value' => 'Here we reference multiple types',
+        'format' => 'plain_text',
+      ],
+    ]);
+
+    /** @var \Drupal\ai_auto_reference\AiReferenceGenerator */
+    $generator = \Drupal::service('ai_auto_reference.ai_references_generator');
+
+    // Field with a single target bundle.
+    $allowed_values = $generator->getFieldAllowedValues($article, 'field_related_food');
+    $this->assertSame([
+      1 => 'Chocolate Cake',
+      3 => 'Vanilla Ice Cream',
+      4 => 'Tomato Soup',
+      6 => 'All about chocolate cakes',
+    ], $allowed_values);
+
+    // Field with multiple target bundles.
+    $allowed_values = $generator->getFieldAllowedValues($article, 'field_related_multiple');
+    $this->assertSame([
+      1 => 'Chocolate Cake',
+      3 => 'Vanilla Ice Cream',
+      4 => 'Tomato Soup',
+      6 => 'All about chocolate cakes',
+      5 => 'Chocolate Cake Recipe',
+    ], $allowed_values);
+  }
+
 }
-- 
GitLab