addFieldResolver('Query', 'materiau', $builder->produce('entity_load') ->map('type', $builder->fromValue('node')) ->map('bundles', $builder->fromValue(['materiau'])) ->map('id', $builder->fromArgument('id')) ); $registry->addFieldResolver('Materiau', 'id', $builder->produce('entity_id') ->map('entity', $builder->fromParent()) ); $registry->addFieldResolver('Materiau', 'uuid', $builder->produce('entity_uuid') ->map('entity', $builder->fromParent()) ); $registry->addFieldResolver('Materiau', 'title', $builder->compose( $builder->produce('entity_label') ->map('entity', $builder->fromParent()) ) ); $registry->addFieldResolver('Materiau', 'author', $builder->compose( $builder->produce('entity_owner') ->map('entity', $builder->fromParent()), $builder->produce('entity_label') ->map('entity', $builder->fromParent()) ) ); // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md // https://blog.chrismitchellonline.com/posts/custom_graphql_data/ $registry->addFieldResolver('Materiau', 'linked_materials', $builder->compose( $builder->produce('entity_reference') ->map('entity', $builder->fromParent()) ->map('field', $builder->fromValue('field_linked_materials')) ) ); $registry->addFieldResolver('Materiau', 'memo', $builder->produce('property_path') ->map('type', $builder->fromValue('entity:node')) ->map('value', $builder->fromParent()) ->map('path', $builder->fromValue('field_memo.value')) ); $registry->addFieldResolver('Materiau', 'images', $builder->produce('entity_reference') ->map('entity', $builder->fromParent()) ->map('field', $builder->fromValue('field_materiau_images')) ); // Article $registry->addFieldResolver('Query', 'article', $builder->produce('entity_load') ->map('type', $builder->fromValue('node')) ->map('bundles', $builder->fromValue(['article'])) ->map('id', $builder->fromArgument('id')) ); // $registry->addFieldResolver('ArticleResponse', 'article', // $builder->callback(function (ArticleResponse $response) { // return $response->article(); // }) // ); $registry->addFieldResolver('Article', 'id', $builder->produce('entity_id') ->map('entity', $builder->fromParent()) ); $registry->addFieldResolver('Article', 'uuid', $builder->produce('entity_uuid') ->map('entity', $builder->fromParent()) ); $registry->addFieldResolver('Article', 'title', $builder->compose( $builder->produce('entity_label') ->map('entity', $builder->fromParent()) ) ); $registry->addFieldResolver('Article', 'author', $builder->compose( $builder->produce('entity_owner') ->map('entity', $builder->fromParent()), $builder->produce('entity_label') ->map('entity', $builder->fromParent()) ) ); $registry->addFieldResolver('Article', 'body', $builder->produce('property_path') ->map('type', $builder->fromValue('entity:node')) ->map('value', $builder->fromParent()) ->map('path', $builder->fromValue('body.value')) ); // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md // https://blog.chrismitchellonline.com/posts/custom_graphql_data/ $registry->addFieldResolver('Article', 'linked_materials', $builder->compose( $builder->produce('entity_reference') ->map('entity', $builder->fromParent()) ->map('field', $builder->fromValue('field_linked_materials')) ) ); $registry->addFieldResolver('Article', 'images', $builder->produce('entity_reference') ->map('entity', $builder->fromParent()) ->map('field', $builder->fromValue('field_visuel')) ); $registry->addFieldResolver('Article', 'videos', $builder->produce('property_path') ->map('type', $builder->fromValue('entity:node')) ->map('value', $builder->fromParent()) ->map('path', $builder->fromValue('field_video')) ); // VideoLink $registry->addFieldResolver('VideoLink', 'url', $builder->produce('property_path') ->map('type', $builder->fromValue('field_item:video_embed_field')) ->map('value', $builder->fromParent()) ->map('path', $builder->fromValue('value')) ); // Image $registry->addFieldResolver('Image', 'id', $builder->produce('entity_id') ->map('entity', $builder->fromParent()) ); $registry->addFieldResolver('Image', 'url', $builder->produce('image_url') ->map('entity', $builder->fromParent()) ); $registry->addFieldResolver('Image', 'alt', $builder->produce('property_path') ->map('type', $builder->fromValue('entity:node')) ->map('value', $builder->fromParent()) ->map('path', $builder->fromValue('field_image.alt')) ); $registry->addFieldResolver('Image', 'style_minicard', $builder->produce('image_derivative') ->map('entity', $builder->fromParent()) ->map('style', $builder->fromValue('card_medium_half')) ); // Response type resolver. $registry->addTypeResolver('Response', [ __CLASS__, 'resolveResponse', ]); } /** * Resolves the response type. * * @param \Drupal\graphql\GraphQL\Response\ResponseInterface $response * Response object. * * @return string * Response type. * * @throws \Exception * Invalid response type. */ public static function resolveResponse(ResponseInterface $response): string { // Resolve content response. if ($response instanceof MateriauResponse) { return 'MateriauResponse'; } throw new \Exception('Invalid response type.'); } }