You are here

public function Fields::resolve in GraphQL 8.4

Resolves the list of fields for a given entity.

Respects the optional context parameters "bundle" and "field_types". If bundle context is set it resolves the fields only for that entity bundle. The same goes for field types when either base fields of configurable fields may be returned.

Parameters

\Drupal\Core\Entity\EntityTypeInterface $entity_definition: The entity type definition.

array|null $bundle_context: Bundle context.

string|null $field_types_context: Field types context.

\Drupal\graphql\GraphQL\Execution\FieldContext $field_context: Field context.

File

src/Plugin/GraphQL/DataProducer/EntityDefinition/Fields.php, line 118

Class

Fields
Retrieve the list of fields from a given entity definition.

Namespace

Drupal\graphql\Plugin\GraphQL\DataProducer\EntityDefinition

Code

public function resolve(EntityTypeInterface $entity_definition, ?array $bundle_context = NULL, ?string $field_types_context = NULL, FieldContext $field_context) : \Iterator {
  if ($entity_definition instanceof ContentEntityTypeInterface) {
    $entity_type_id = $entity_definition
      ->id();
    if ($bundle_context) {
      $key = $bundle_context['key'];
      $fields = $this->entityFieldManager
        ->getFieldDefinitions($entity_type_id, $key);

      // Set entity form default display as context.
      $form_display_id = $entity_type_id . '.' . $key . '.default';
      $form_display_context = $this->entityTypeManager
        ->getStorage('entity_form_display')
        ->load($form_display_id);
      $field_context
        ->setContextValue('entity_form_display', $form_display_context);
    }
    else {
      $fields = $this->entityFieldManager
        ->getFieldDefinitions($entity_type_id, $entity_type_id);
    }
    if ($field_types_context) {
      foreach ($fields as $field) {
        if ($field_types_context === 'BASE_FIELDS') {
          if ($field instanceof BaseFieldDefinition) {
            (yield $field);
          }
        }
        elseif ($field_types_context === 'FIELD_CONFIG') {
          if ($field instanceof FieldConfig || $field instanceof BaseFieldOverride) {
            (yield $field);
          }
        }
        else {
          (yield $field);
        }
      }
    }
    else {
      yield from $fields;
    }
  }
}