graphql_core_schema-1.0.x-dev/src/Plugin/GraphQL/SchemaExtension/FieldConfigExtension.php

src/Plugin/GraphQL/SchemaExtension/FieldConfigExtension.php
<?php

namespace Drupal\graphql_core_schema\Plugin\GraphQL\SchemaExtension;

use Drupal\Core\Field\BaseFieldDefinition;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\graphql\GraphQL\ResolverBuilder;
use Drupal\graphql\GraphQL\ResolverRegistryInterface;
use Drupal\graphql\Plugin\GraphQL\SchemaExtension\SdlSchemaExtensionPluginBase;
use Drupal\graphql_core_schema\CoreComposableResolver;
use Drupal\graphql_core_schema\CoreSchemaExtensionInterface;

/**
 * A schema extension to read field configuration.
 *
 * @SchemaExtension(
 *   id = "field_config",
 *   name = "Field Config Extension",
 *   description = "An extension that provides additional properties for field config entities.",
 *   schema = "core_composable"
 * )
 */
class FieldConfigExtension extends SdlSchemaExtensionPluginBase implements CoreSchemaExtensionInterface {

  /**
   * {@inheritdoc}
   */
  public function getEntityTypeDependencies() {
    return ['field_config', 'field_storage_config'];
  }

  /**
   * {@inheritdoc}
   */
  public function getExtensionDependencies() {
    return [];
  }

  /**
   * {@inheritdoc}
   */
  public function registerResolvers(ResolverRegistryInterface $registry): void {
    $builder = new ResolverBuilder();

    $registry->addFieldResolver(
      'FieldItemList',
      'fieldConfig',
      $builder->callback(function ($value) {
        if ($value instanceof FieldItemListInterface) {
          return $value->getFieldDefinition();
        }
      })
    );

    $registry->addFieldResolver(
      'FieldConfig',
      'fieldStorageDefinition',
      CoreComposableResolver::resolveCallMethod($builder, 'getFieldStorageDefinition')
    );

    $registry->addFieldResolver(
      'FieldDefinition',
      'name',
      CoreComposableResolver::resolveCallMethod($builder, 'getName')
    );

    $registry->addFieldResolver(
      'FieldDefinition',
      'type',
      CoreComposableResolver::resolveCallMethod($builder, 'getType')
    );

    $registry->addFieldResolver(
      'FieldDefinition',
      'targetEntityTypeId',
      CoreComposableResolver::resolveCallMethod($builder, 'getTargetEntityTypeId')
    );

    $registry->addFieldResolver(
      'FieldDefinition',
      'targetBundle',
      CoreComposableResolver::resolveCallMethod($builder, 'getTargetBundle')
    );

    $registry->addFieldResolver(
      'FieldDefinition',
      'isRequired',
      CoreComposableResolver::resolveCallMethod($builder, 'isRequired')
    );

    $registry->addFieldResolver(
      'FieldDefinition',
      'isReadOnly',
      CoreComposableResolver::resolveCallMethod($builder, 'isReadOnly')
    );

    $registry->addFieldResolver(
      'FieldDefinition',
      'isTranslatable',
      CoreComposableResolver::resolveCallMethod($builder, 'isTranslatable')
    );

    $registry->addFieldResolver(
      'FieldDefinition',
      'uniqueIdentifier',
      CoreComposableResolver::resolveCallMethod($builder, 'getUniqueIdentifier')
    );

    $registry->addFieldResolver(
      'BaseFieldDefinition',
      'description',
      CoreComposableResolver::resolveCallMethod($builder, 'getDescription')
    );

    $registry->addTypeResolver('FieldDefinition', function ($value) {
      if ($value instanceof BaseFieldDefinition) {
        return 'BaseFieldDefinition';
      }
      return 'FieldConfig';
    });
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc