From 02694be5c4a7d5d04c0ed07940f7752f1242aefc Mon Sep 17 00:00:00 2001
From: Al Munnings <al.munnings@gmail.com>
Date: Sun, 22 Oct 2023 15:21:49 +1100
Subject: [PATCH] Issue #3388494: Enabling metatags submodule generates error
 "Interface field MetaTagInterface.metatag expected.."

---
 .../graphql_compose_metatags.module           | 23 +++++++++++++++----
 1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/modules/graphql_compose_metatags/graphql_compose_metatags.module b/modules/graphql_compose_metatags/graphql_compose_metatags.module
index 75aefc0d..da18602b 100644
--- a/modules/graphql_compose_metatags/graphql_compose_metatags.module
+++ b/modules/graphql_compose_metatags/graphql_compose_metatags.module
@@ -7,6 +7,7 @@
 
 declare(strict_types=1);
 
+use Drupal\Core\Entity\EntityFieldManagerInterface;
 use Drupal\Core\Field\FieldDefinitionInterface;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\graphql_compose\Plugin\GraphQLCompose\GraphQLComposeEntityTypeInterface;
@@ -16,15 +17,27 @@ use Drupal\metatag\Form\MetatagDefaultsForm;
  * Implements hook_graphql_compose_entity_base_fields_alter().
  */
 function graphql_compose_metatags_graphql_compose_entity_base_fields_alter(array &$fields, string $entity_type_id): void {
-  static $supported_types;
+  static $enabled_types;
+
+  if (!isset($enabled_types)) {
+    $enabled_types = [];
+
+    /** @var EntityFieldManagerInterface $manager */
+    $manager = \Drupal::service('entity_field.manager');
 
-  if (!isset($supported_types)) {
     $supported_types = MetatagDefaultsForm::getSupportedEntityTypes();
+    foreach (array_keys($supported_types) as $entity_type_id) {
+      $base_fields = $manager->getBaseFieldDefinitions($entity_type_id);
+
+      // Check the entity has a meta tag field.
+      if (array_key_exists('metatag', $base_fields)) {
+        $enabled_types[$entity_type_id] = $entity_type_id;
+      }
+    }
   }
 
-  if (array_key_exists($entity_type_id, $supported_types)) {
-    // Metatag field on the entity type is not multiple, force multiple.
-    // 'metatag' field is a computed metatag_computed field type.
+  // Enable and force multiple.
+  if (array_key_exists($entity_type_id, $enabled_types)) {
     $fields['metatag'] = [
       'multiple' => TRUE,
     ];
-- 
GitLab