MaterioSchemaExtension.php 43 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269
  1. <?php
  2. namespace Drupal\materio_graphql\Plugin\GraphQL\SchemaExtension;
  3. use Drupal\graphql\GraphQL\ResolverBuilder;
  4. use Drupal\graphql\GraphQL\ResolverRegistryInterface;
  5. use Drupal\graphql\GraphQL\Response\ResponseInterface;
  6. use Drupal\graphql\Plugin\GraphQL\SchemaExtension\SdlSchemaExtensionPluginBase;
  7. use Drupal\materio_graphql\GraphQL\Response\MaterioResponse;
  8. use Drupal\Core\Url;
  9. use GraphQL\Error\Error;
  10. /**
  11. * @SchemaExtension(
  12. * id = "materio_extension",
  13. * name = "Materio extension",
  14. * description = "Materio extension.",
  15. * schema = "materio"
  16. * )
  17. */
  18. class MaterioSchemaExtension extends SdlSchemaExtensionPluginBase {
  19. /**
  20. * {@inheritdoc}
  21. */
  22. public function registerResolvers(ResolverRegistryInterface $registry) {
  23. $builder = new ResolverBuilder();
  24. $this->addRouteResolver($registry, $builder);
  25. $this->addMateriau($registry, $builder);
  26. $this->addSearchResult($registry, $builder);
  27. $this->addSample($registry, $builder);
  28. $this->addArticle($registry, $builder);
  29. $this->addThematique($registry, $builder);
  30. $this->addCompany($registry, $builder);
  31. $this->addProduct($registry, $builder);
  32. $this->addVariation($registry, $builder);
  33. $this->addPrice($registry, $builder);
  34. $this->addAddress($registry, $builder);
  35. $this->addFilefield($registry, $builder);
  36. $this->addFile($registry, $builder);
  37. $this->addDate($registry, $builder);
  38. $this->addLink($registry, $builder);
  39. $this->addShowroom($registry, $builder);
  40. $this->addTag($registry, $builder);
  41. $this->addThesaurus($registry, $builder);
  42. $this->addVideolink($registry, $builder);
  43. $this->addImage($registry, $builder);
  44. // Response type resolver.
  45. $registry->addTypeResolver('Response', [
  46. __CLASS__,
  47. 'resolveResponse',
  48. ]);
  49. }
  50. // ___ _
  51. // | _ \___ _ _| |_ ___
  52. // | / _ \ || | _/ -_)
  53. // |_|_\___/\_,_|\__\___|
  54. protected function addRouteResolver(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  55. // Tell GraphQL how to resolve types of a common interface.
  56. $registry->addTypeResolver('NodeInterface', function ($value) {
  57. $path = explode('\\', get_class($value));
  58. $class = array_pop($path);
  59. if ($class === 'Node') {
  60. switch ($value->bundle()) {
  61. case 'article': return 'Article';
  62. case 'materiau': return 'Materiau';
  63. case 'thematique': return 'Thematique';
  64. }
  65. }
  66. throw new Error('Could not resolve content type.');
  67. });
  68. $registry->addFieldResolver('Query', 'route',
  69. $builder->compose(
  70. $builder->produce('route_load')
  71. ->map('path', $builder->fromArgument('path')),
  72. $builder->produce('route_entity')
  73. ->map('url', $builder->fromParent())
  74. ));
  75. }
  76. // __ __ _ _
  77. // | \/ |__ _| |_ ___ _ _(_)__ _ _ _
  78. // | |\/| / _` | _/ -_) '_| / _` | || |
  79. // |_| |_\__,_|\__\___|_| |_\__,_|\_,_|
  80. protected function addMateriau(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  81. $registry->addFieldResolver('Query', 'materiau',
  82. $builder->produce('entity_load')
  83. ->map('type', $builder->fromValue('node'))
  84. ->map('bundles', $builder->fromValue(['materiau']))
  85. ->map('id', $builder->fromArgument('id'))
  86. );
  87. $registry->addFieldResolver('Query', 'materiaux',
  88. $builder->produce('entity_load_multiple')
  89. ->map('type', $builder->fromValue('node'))
  90. // ->map('bundles', $builder->fromValue(['materiau']))
  91. ->map('ids', $builder->fromArgument('ids'))
  92. );
  93. $registry->addFieldResolver('Materiau', 'id',
  94. $builder->produce('entity_id')
  95. ->map('entity', $builder->fromParent())
  96. );
  97. $registry->addFieldResolver('Materiau', 'uuid',
  98. $builder->produce('entity_uuid')
  99. ->map('entity', $builder->fromParent())
  100. );
  101. $registry->addFieldResolver('Materiau', 'path',
  102. $builder->compose(
  103. $builder->produce('entity_url')
  104. ->map('entity', $builder->fromParent()),
  105. $builder->produce('url_path')
  106. ->map('url', $builder->fromParent())
  107. )
  108. );
  109. $registry->addFieldResolver('Materiau', 'title',
  110. $builder->compose(
  111. $builder->produce('entity_label')
  112. ->map('entity', $builder->fromParent())
  113. ));
  114. $registry->addFieldResolver('Materiau', 'body',
  115. $builder->produce('property_path')
  116. ->map('type', $builder->fromValue('entity:node'))
  117. ->map('value', $builder->fromParent())
  118. ->map('path', $builder->fromValue('body.value'))
  119. );
  120. $registry->addFieldResolver('Materiau', 'short_description',
  121. $builder->produce('property_path')
  122. ->map('type', $builder->fromValue('entity:node'))
  123. ->map('value', $builder->fromParent())
  124. ->map('path', $builder->fromValue('field_short_description.value'))
  125. );
  126. $registry->addFieldResolver('Materiau', 'author',
  127. $builder->compose(
  128. $builder->produce('entity_owner')
  129. ->map('entity', $builder->fromParent()),
  130. $builder->produce('entity_label')
  131. ->map('entity', $builder->fromParent())
  132. ));
  133. // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
  134. // https://blog.chrismitchellonline.com/posts/custom_graphql_data/
  135. $registry->addFieldResolver('Materiau', 'linked_materials',
  136. $builder->compose(
  137. $builder->produce('entity_reference')
  138. ->map('entity', $builder->fromParent())
  139. ->map('field', $builder->fromValue('field_linked_materials'))
  140. ));
  141. $registry->addFieldResolver('Materiau', 'linked_articles',
  142. $builder->compose(
  143. $builder->produce('entity_reference')
  144. ->map('entity', $builder->fromParent())
  145. ->map('field', $builder->fromValue('field_linked_articles'))
  146. ));
  147. $registry->addFieldResolver('Materiau', 'memo',
  148. $builder->produce('property_path')
  149. ->map('type', $builder->fromValue('entity:node'))
  150. ->map('value', $builder->fromParent())
  151. ->map('path', $builder->fromValue('field_memo.value'))
  152. );
  153. $registry->addFieldResolver('Materiau', 'images',
  154. $builder->produce('entity_reference')
  155. ->map('entity', $builder->fromParent())
  156. ->map('field', $builder->fromValue('field_materiau_images'))
  157. );
  158. $registry->addFieldResolver('Materiau', 'attachments',
  159. $builder->produce('property_path')
  160. ->map('type', $builder->fromValue('entity:node'))
  161. ->map('value', $builder->fromParent())
  162. ->map('path', $builder->fromValue('field_attachments'))
  163. );
  164. $registry->addFieldResolver('Materiau', 'videos',
  165. $builder->produce('property_path')
  166. ->map('type', $builder->fromValue('entity:node'))
  167. ->map('value', $builder->fromParent())
  168. ->map('path', $builder->fromValue('field_video'))
  169. );
  170. $registry->addFieldResolver('Materiau', 'tags',
  171. $builder->produce('entity_reference')
  172. ->map('entity', $builder->fromParent())
  173. ->map('field', $builder->fromValue('field_tags'))
  174. );
  175. $registry->addFieldResolver('Materiau', 'thesaurus',
  176. $builder->produce('entity_reference')
  177. ->map('entity', $builder->fromParent())
  178. ->map('field', $builder->fromValue('field_thesaurus'))
  179. );
  180. $registry->addFieldResolver('Materiau', 'manufacturer',
  181. $builder->produce('entity_reference')
  182. ->map('entity', $builder->fromParent())
  183. ->map('field', $builder->fromValue('field_manufacturer'))
  184. );
  185. $registry->addFieldResolver('Materiau', 'distributor',
  186. $builder->produce('entity_reference')
  187. ->map('entity', $builder->fromParent())
  188. ->map('field', $builder->fromValue('field_distributor'))
  189. );
  190. // $registry->addFieldResolver('Materiau', 'famille',
  191. // $builder->produce('property_path')
  192. // ->map('type', $builder->fromValue('entity:node'))
  193. // ->map('value', $builder->fromParent())
  194. // ->map('path', $builder->fromValue('field_famille.value'))
  195. // );
  196. //
  197. // $registry->addFieldResolver('Materiau', 'index',
  198. // $builder->produce('property_path')
  199. // ->map('type', $builder->fromValue('entity:node'))
  200. // ->map('value', $builder->fromParent())
  201. // ->map('path', $builder->fromValue('field_index.value'))
  202. // );
  203. $registry->addFieldResolver('Materiau', 'reference',
  204. $builder->produce('property_path')
  205. ->map('type', $builder->fromValue('entity:node'))
  206. ->map('value', $builder->fromParent())
  207. ->map('path', $builder->fromValue('field_reference.value'))
  208. );
  209. $registry->addFieldResolver('Materiau', 'samples',
  210. $builder->produce('property_path')
  211. ->map('type', $builder->fromValue('entity:node'))
  212. ->map('value', $builder->fromParent())
  213. ->map('path', $builder->fromValue('field_samples'))
  214. );
  215. }
  216. // ___ _ ___ _ _
  217. // / __| ___ __ _ _ _ __| |_ | _ \___ ____ _| | |_
  218. // \__ \/ -_) _` | '_/ _| ' \| / -_|_-< || | | _|
  219. // |___/\___\__,_|_| \__|_||_|_|_\___/__/\_,_|_|\__|
  220. protected function addSearchResult(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  221. $registry->addFieldResolver('Query', 'searchresults',
  222. $builder->produce('entity_load_multiple')
  223. ->map('type', $builder->fromValue('node'))
  224. ->map('ids', $builder->fromArgument('ids'))
  225. );
  226. $registry->addFieldResolver('SearchResult', 'id',
  227. $builder->produce('entity_id')
  228. ->map('entity', $builder->fromParent())
  229. );
  230. $registry->addFieldResolver('SearchResult', 'bundle',
  231. $builder->produce('entity_bundle')
  232. ->map('entity', $builder->fromParent())
  233. );
  234. $registry->addFieldResolver('SearchResult', 'uuid',
  235. $builder->produce('entity_uuid')
  236. ->map('entity', $builder->fromParent())
  237. );
  238. $registry->addFieldResolver('SearchResult', 'path',
  239. $builder->compose(
  240. $builder->produce('entity_url')
  241. ->map('entity', $builder->fromParent()),
  242. $builder->produce('url_path')
  243. ->map('url', $builder->fromParent())
  244. )
  245. );
  246. $registry->addFieldResolver('SearchResult', 'title',
  247. $builder->compose(
  248. $builder->produce('entity_label')
  249. ->map('entity', $builder->fromParent())
  250. ));
  251. $registry->addFieldResolver('SearchResult', 'short_description',
  252. $builder->produce('property_path')
  253. ->map('type', $builder->fromValue('entity:node'))
  254. ->map('value', $builder->fromParent())
  255. ->map('path', $builder->fromValue('field_short_description.value'))
  256. );
  257. $registry->addFieldResolver('SearchResult', 'images',
  258. $builder->produce('entity_reference')
  259. ->map('entity', $builder->fromParent())
  260. ->map('field', $builder->fromValue('field_materiau_images'))
  261. );
  262. $registry->addFieldResolver('SearchResult', 'visuels',
  263. $builder->produce('entity_reference')
  264. ->map('entity', $builder->fromParent())
  265. ->map('field', $builder->fromValue('field_visuel'))
  266. );
  267. $registry->addFieldResolver('SearchResult', 'reference',
  268. $builder->produce('property_path')
  269. ->map('type', $builder->fromValue('entity:node'))
  270. ->map('value', $builder->fromParent())
  271. ->map('path', $builder->fromValue('field_reference.value'))
  272. );
  273. }
  274. // ___ _
  275. // / __| __ _ _ __ _ __| |___
  276. // \__ \/ _` | ' \| '_ \ / -_)
  277. // |___/\__,_|_|_|_| .__/_\___|
  278. // |_|
  279. protected function addSample(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  280. $registry->addFieldResolver('Sample', 'showroom',
  281. $builder->callback(function($parent, $args){
  282. return \Drupal\taxonomy\Entity\Term::load($parent['target_id']);
  283. })
  284. );
  285. $registry->addFieldResolver('Sample', 'location',
  286. $builder->callback(function($parent, $args){
  287. return $parent['location'];
  288. })
  289. );
  290. }
  291. // _ _ _ _
  292. // /_\ _ _| |_(_)__| |___
  293. // / _ \| '_| _| / _| / -_)
  294. // /_/ \_\_| \__|_\__|_\___|
  295. protected function addArticle(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  296. $registry->addFieldResolver('Query', 'article',
  297. $builder->produce('entity_load')
  298. ->map('type', $builder->fromValue('node'))
  299. ->map('bundles', $builder->fromValue(['article']))
  300. ->map('id', $builder->fromArgument('id'))
  301. );
  302. $registry->addFieldResolver('Article', 'id',
  303. $builder->produce('entity_id')
  304. ->map('entity', $builder->fromParent())
  305. );
  306. $registry->addFieldResolver('Article', 'uuid',
  307. $builder->produce('entity_uuid')
  308. ->map('entity', $builder->fromParent())
  309. );
  310. $registry->addFieldResolver('Article', 'path',
  311. $builder->compose(
  312. $builder->produce('entity_url')
  313. ->map('entity', $builder->fromParent()),
  314. $builder->produce('url_path')
  315. ->map('url', $builder->fromParent())
  316. )
  317. );
  318. $registry->addFieldResolver('Article', 'title',
  319. $builder->compose(
  320. $builder->produce('entity_label')
  321. ->map('entity', $builder->fromParent())
  322. ));
  323. $registry->addFieldResolver('Article', 'author',
  324. $builder->compose(
  325. $builder->produce('entity_owner')
  326. ->map('entity', $builder->fromParent()),
  327. $builder->produce('entity_label')
  328. ->map('entity', $builder->fromParent())
  329. ));
  330. $registry->addFieldResolver('Article', 'body',
  331. $builder->produce('property_path')
  332. ->map('type', $builder->fromValue('entity:node'))
  333. ->map('value', $builder->fromParent())
  334. ->map('path', $builder->fromValue('body.value'))
  335. );
  336. $registry->addFieldResolver('Article', 'memo',
  337. $builder->produce('property_path')
  338. ->map('type', $builder->fromValue('entity:node'))
  339. ->map('value', $builder->fromParent())
  340. ->map('path', $builder->fromValue('field_memo.value'))
  341. );
  342. // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
  343. // https://blog.chrismitchellonline.com/posts/custom_graphql_data/
  344. $registry->addFieldResolver('Article', 'linked_materials',
  345. $builder->produce('entity_reference')
  346. ->map('entity', $builder->fromParent())
  347. ->map('field', $builder->fromValue('field_linked_materials'))
  348. );
  349. $registry->addFieldResolver('Article', 'images',
  350. $builder->produce('entity_reference')
  351. ->map('entity', $builder->fromParent())
  352. ->map('field', $builder->fromValue('field_visuel'))
  353. );
  354. $registry->addFieldResolver('Article', 'videos',
  355. $builder->produce('property_path')
  356. ->map('type', $builder->fromValue('entity:node'))
  357. ->map('value', $builder->fromParent())
  358. ->map('path', $builder->fromValue('field_video'))
  359. );
  360. $registry->addFieldResolver('Article', 'tags',
  361. $builder->produce('entity_reference')
  362. ->map('entity', $builder->fromParent())
  363. ->map('field', $builder->fromValue('field_tags'))
  364. );
  365. $registry->addFieldResolver('Article', 'thesaurus',
  366. $builder->produce('entity_reference')
  367. ->map('entity', $builder->fromParent())
  368. ->map('field', $builder->fromValue('field_thesaurus'))
  369. );
  370. $registry->addFieldResolver('Article', 'showroom',
  371. $builder->compose(
  372. $builder->produce('entity_reference')
  373. ->map('entity', $builder->fromParent())
  374. ->map('field', $builder->fromValue('field_showroom')),
  375. $builder->callback(function ($items) {
  376. return $items[0];
  377. })
  378. ));
  379. $registry->addFieldResolver('Article', 'source',
  380. $builder->produce('property_path')
  381. ->map('type', $builder->fromValue('entity:node'))
  382. ->map('value', $builder->fromParent())
  383. ->map('path', $builder->fromValue('field_source'))
  384. );
  385. $registry->addFieldResolver('Article', 'date',
  386. $builder->produce('property_path')
  387. ->map('type', $builder->fromValue('entity:node'))
  388. ->map('value', $builder->fromParent())
  389. ->map('path', $builder->fromValue('field_date'))
  390. );
  391. }
  392. // _____ _ _ _
  393. // |_ _| |_ ___ _ __ __ _| |_(_)__ _ _ _ ___
  394. // | | | ' \/ -_) ' \/ _` | _| / _` | || / -_)
  395. // |_| |_||_\___|_|_|_\__,_|\__|_\__, |\_,_\___|
  396. // |_|
  397. protected function addThematique(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  398. $registry->addFieldResolver('Query', 'Thematique',
  399. $builder->produce('entity_load')
  400. ->map('type', $builder->fromValue('node'))
  401. ->map('bundles', $builder->fromValue(['thematique']))
  402. ->map('id', $builder->fromArgument('id'))
  403. );
  404. $registry->addFieldResolver('Thematique', 'id',
  405. $builder->produce('entity_id')
  406. ->map('entity', $builder->fromParent())
  407. );
  408. $registry->addFieldResolver('Thematique', 'uuid',
  409. $builder->produce('entity_uuid')
  410. ->map('entity', $builder->fromParent())
  411. );
  412. $registry->addFieldResolver('Thematique', 'path',
  413. $builder->compose(
  414. $builder->produce('entity_url')
  415. ->map('entity', $builder->fromParent()),
  416. $builder->produce('url_path')
  417. ->map('url', $builder->fromParent())
  418. )
  419. );
  420. $registry->addFieldResolver('Thematique', 'title',
  421. $builder->compose(
  422. $builder->produce('entity_label')
  423. ->map('entity', $builder->fromParent())
  424. ));
  425. $registry->addFieldResolver('Thematique', 'author',
  426. $builder->compose(
  427. $builder->produce('entity_owner')
  428. ->map('entity', $builder->fromParent()),
  429. $builder->produce('entity_label')
  430. ->map('entity', $builder->fromParent())
  431. ));
  432. $registry->addFieldResolver('Thematique', 'body',
  433. $builder->produce('property_path')
  434. ->map('type', $builder->fromValue('entity:node'))
  435. ->map('value', $builder->fromParent())
  436. ->map('path', $builder->fromValue('body.value'))
  437. );
  438. $registry->addFieldResolver('Thematique', 'memo',
  439. $builder->produce('property_path')
  440. ->map('type', $builder->fromValue('entity:node'))
  441. ->map('value', $builder->fromParent())
  442. ->map('path', $builder->fromValue('field_memo.value'))
  443. );
  444. // https://github.com/drupal-graphql/graphql/blob/8.x-4.x/doc/SUMMARY.md
  445. // https://blog.chrismitchellonline.com/posts/custom_graphql_data/
  446. $registry->addFieldResolver('Thematique', 'linked_materials',
  447. $builder->produce('entity_reference')
  448. ->map('entity', $builder->fromParent())
  449. ->map('field', $builder->fromValue('field_linked_materials'))
  450. );
  451. $registry->addFieldResolver('Thematique', 'images',
  452. $builder->produce('entity_reference')
  453. ->map('entity', $builder->fromParent())
  454. ->map('field', $builder->fromValue('field_visuel'))
  455. );
  456. $registry->addFieldResolver('Thematique', 'tags',
  457. $builder->produce('entity_reference')
  458. ->map('entity', $builder->fromParent())
  459. ->map('field', $builder->fromValue('field_tags'))
  460. );
  461. }
  462. // ___
  463. // |_ _|_ __ __ _ __ _ ___
  464. // | || ' \/ _` / _` / -_)
  465. // |___|_|_|_\__,_\__, \___|
  466. // |___/
  467. protected function addImage(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  468. $registry->addFieldResolver('Image', 'id',
  469. $builder->produce('entity_id')
  470. ->map('entity', $builder->fromParent())
  471. );
  472. $registry->addFieldResolver('Image', 'url',
  473. $builder->produce('image_url')
  474. ->map('entity', $builder->fromParent())
  475. );
  476. $registry->addFieldResolver('Image', 'alt',
  477. $builder->produce('property_path')
  478. ->map('type', $builder->fromValue('entity:node'))
  479. ->map('value', $builder->fromParent())
  480. ->map('path', $builder->fromValue('field_image.alt'))
  481. );
  482. $registry->addFieldResolver('Image', 'style_minicard',
  483. $builder->produce('image_derivative')
  484. ->map('entity', $builder->fromParent())
  485. ->map('style', $builder->fromValue('card_medium_half'))
  486. );
  487. $registry->addFieldResolver('Image', 'style_minicard_url',
  488. $builder->compose(
  489. $builder->produce('image_derivative')
  490. ->map('entity', $builder->fromParent())
  491. ->map('style', $builder->fromValue('card_medium_half')),
  492. $builder->callback(function($parent, $args){
  493. return $parent['url'];
  494. })
  495. ));
  496. $registry->addFieldResolver('Image', 'style_cardmedium',
  497. $builder->produce('image_derivative')
  498. ->map('entity', $builder->fromParent())
  499. ->map('style', $builder->fromValue('card_medium'))
  500. );
  501. $registry->addFieldResolver('Image', 'style_cardmedium_url',
  502. $builder->compose(
  503. $builder->produce('image_derivative')
  504. ->map('entity', $builder->fromParent())
  505. ->map('style', $builder->fromValue('card_medium')),
  506. $builder->callback(function($parent, $args){
  507. return $parent['url'];
  508. })
  509. ));
  510. $registry->addFieldResolver('Image', 'style_cardfull',
  511. $builder->produce('image_derivative')
  512. ->map('entity', $builder->fromParent())
  513. ->map('style', $builder->fromValue('card_full'))
  514. );
  515. $registry->addFieldResolver('Image', 'style_cardfull_url',
  516. $builder->compose(
  517. $builder->produce('image_derivative')
  518. ->map('entity', $builder->fromParent())
  519. ->map('style', $builder->fromValue('card_full')),
  520. $builder->callback(function($parent, $args){
  521. return $parent['url'];
  522. })
  523. ));
  524. $registry->addFieldResolver('Image', 'style_articlecardmedium',
  525. $builder->produce('image_derivative')
  526. ->map('entity', $builder->fromParent())
  527. ->map('style', $builder->fromValue('article_card_medium'))
  528. );
  529. $registry->addFieldResolver('Image', 'style_articlecardmedium_url',
  530. $builder->compose(
  531. $builder->produce('image_derivative')
  532. ->map('entity', $builder->fromParent())
  533. ->map('style', $builder->fromValue('article_card_medium')),
  534. $builder->callback(function($parent, $args){
  535. return $parent['url'];
  536. })
  537. ));
  538. $registry->addFieldResolver('Image', 'style_hd',
  539. $builder->produce('image_derivative')
  540. ->map('entity', $builder->fromParent())
  541. ->map('style', $builder->fromValue('hd'))
  542. );
  543. $registry->addFieldResolver('Image', 'style_hd_url',
  544. $builder->compose(
  545. $builder->produce('image_derivative')
  546. ->map('entity', $builder->fromParent())
  547. ->map('style', $builder->fromValue('hd')),
  548. $builder->callback(function($parent, $args){
  549. return $parent['url'];
  550. })
  551. ));
  552. }
  553. // __ ___ _ _ _ _
  554. // \ \ / (_)__| |___ ___| | (_)_ _ | |__
  555. // \ V /| / _` / -_) _ \ |__| | ' \| / /
  556. // \_/ |_\__,_\___\___/____|_|_||_|_\_\
  557. protected function addVideolink(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  558. $registry->addFieldResolver('VideoLink', 'url',
  559. $builder->produce('property_path')
  560. ->map('type', $builder->fromValue('field_item:video_embed_field'))
  561. ->map('value', $builder->fromParent())
  562. ->map('path', $builder->fromValue('value'))
  563. );
  564. }
  565. // _____ _
  566. // |_ _| |_ ___ ___ __ _ _ _ _ _ _ _ ___
  567. // | | | ' \/ -_|_-</ _` | || | '_| || (_-<
  568. // |_| |_||_\___/__/\__,_|\_,_|_| \_,_/__/
  569. protected function addThesaurus(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  570. $registry->addFieldResolver('Query', 'thesaurus',
  571. $builder->produce('entity_load')
  572. ->map('type', $builder->fromValue('taxonomy_term'))
  573. ->map('bundles', $builder->fromValue(['thesaurus']))
  574. ->map('id', $builder->fromArgument('id'))
  575. );
  576. $registry->addFieldResolver('Thesaurus', 'id',
  577. $builder->produce('entity_id')
  578. ->map('entity', $builder->fromParent())
  579. );
  580. $registry->addFieldResolver('Thesaurus', 'uuid',
  581. $builder->produce('entity_uuid')
  582. ->map('entity', $builder->fromParent())
  583. );
  584. $registry->addFieldResolver('Thesaurus', 'name',
  585. $builder->produce('entity_label')
  586. ->map('entity', $builder->fromParent())
  587. );
  588. }
  589. // _____
  590. // |_ _|_ _ __ _
  591. // | |/ _` / _` |
  592. // |_|\__,_\__, |
  593. // |___/
  594. protected function addTag(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  595. $registry->addFieldResolver('Query', 'tag',
  596. $builder->produce('entity_load')
  597. ->map('type', $builder->fromValue('taxonomy_term'))
  598. ->map('bundles', $builder->fromValue(['tags']))
  599. ->map('id', $builder->fromArgument('id'))
  600. );
  601. $registry->addFieldResolver('Tag', 'id',
  602. $builder->produce('entity_id')
  603. ->map('entity', $builder->fromParent())
  604. );
  605. $registry->addFieldResolver('Tag', 'uuid',
  606. $builder->produce('entity_uuid')
  607. ->map('entity', $builder->fromParent())
  608. );
  609. $registry->addFieldResolver('Tag', 'name',
  610. $builder->produce('entity_label')
  611. ->map('entity', $builder->fromParent())
  612. );
  613. }
  614. // ___ _
  615. // / __| |_ _____ __ ___ _ ___ ___ _ __
  616. // \__ \ ' \/ _ \ V V / '_/ _ \/ _ \ ' \
  617. // |___/_||_\___/\_/\_/|_| \___/\___/_|_|_|
  618. protected function addShowroom(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  619. $registry->addFieldResolver('Query', 'showroom',
  620. $builder->produce('entity_load')
  621. ->map('type', $builder->fromValue('taxonomy_term'))
  622. ->map('bundles', $builder->fromValue(['showroom']))
  623. ->map('id', $builder->fromArgument('id'))
  624. );
  625. $registry->addFieldResolver('Showroom', 'id',
  626. $builder->produce('entity_id')
  627. ->map('entity', $builder->fromParent())
  628. );
  629. $registry->addFieldResolver('Showroom', 'uuid',
  630. $builder->produce('entity_uuid')
  631. ->map('entity', $builder->fromParent())
  632. );
  633. $registry->addFieldResolver('Showroom', 'name',
  634. $builder->produce('entity_label')
  635. ->map('entity', $builder->fromParent())
  636. );
  637. $registry->addFieldResolver('Showroom', 'email',
  638. $builder->produce('property_path')
  639. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  640. ->map('value', $builder->fromParent())
  641. ->map('path', $builder->fromValue('field_public_email.value'))
  642. );
  643. $registry->addFieldResolver('Showroom', 'address',
  644. $builder->produce('property_path')
  645. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  646. ->map('value', $builder->fromParent())
  647. ->map('path', $builder->fromValue('field_public_address'))
  648. );
  649. $registry->addFieldResolver('Showroom', 'phone',
  650. $builder->produce('property_path')
  651. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  652. ->map('value', $builder->fromParent())
  653. ->map('path', $builder->fromValue('field_public_phone.value'))
  654. );
  655. }
  656. // _ _ _
  657. // | | (_)_ _ | |__
  658. // | |__| | ' \| / /
  659. // |____|_|_||_|_\_\
  660. protected function addLink(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  661. $registry->addFieldResolver('Link', 'url',
  662. $builder->callback(function ($parent, $args) {
  663. return isset($parent[0]) ? $parent[0]['uri'] : null;
  664. })
  665. );
  666. $registry->addFieldResolver('Link', 'title',
  667. $builder->callback(function ($parent, $args) {
  668. return isset($parent[0]) ? $parent[0]['title'] : null;
  669. })
  670. );
  671. }
  672. // ___ _
  673. // | \ __ _| |_ ___
  674. // | |) / _` | _/ -_)
  675. // |___/\__,_|\__\___|
  676. protected function addDate(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  677. $registry->addFieldResolver('Date', 'start',
  678. $builder->callback(function ($parent, $args) {
  679. return isset($parent[0]) ? $parent[0]['value'] : null;
  680. })
  681. );
  682. $registry->addFieldResolver('Date', 'end',
  683. $builder->callback(function ($parent, $args) {
  684. return isset($parent[0]) ? $parent[0]['end_value'] : null;
  685. })
  686. );
  687. }
  688. // ___ _ _ __ _ _ _
  689. // | __(_) |___ / _(_)___| |__| |
  690. // | _|| | / -_) _| / -_) / _` |
  691. // |_| |_|_\___|_| |_\___|_\__,_|
  692. protected function addFilefield(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  693. $registry->addFieldResolver('Filefield', 'description',
  694. $builder->callback(function ($parent, $args) {
  695. return $parent['description'];
  696. })
  697. );
  698. $registry->addFieldResolver('Filefield', 'file',
  699. $builder->callback(function ($parent, $args) {
  700. return \Drupal\file\Entity\File::load($parent['target_id']);
  701. })
  702. );
  703. }
  704. // ___ _ _
  705. // | __(_) |___
  706. // | _|| | / -_)
  707. // |_| |_|_\___|
  708. protected function addFile(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  709. $registry->addFieldResolver('File', 'url',
  710. $builder->callback(function ($parent, $args) {
  711. return $parent->url();
  712. })
  713. );
  714. $registry->addFieldResolver('File', 'filesize',
  715. $builder->callback(function ($parent, $args) {
  716. return $parent->getSize();
  717. })
  718. );
  719. $registry->addFieldResolver('File', 'filemime',
  720. $builder->callback(function ($parent, $args) {
  721. return $parent->getMimeType();
  722. })
  723. );
  724. $registry->addFieldResolver('File', 'filename',
  725. $builder->callback(function ($parent, $args) {
  726. return $parent->getFilename();
  727. })
  728. );
  729. $registry->addFieldResolver('File', 'fid',
  730. $builder->callback(function ($parent, $args) {
  731. return $parent->id();
  732. })
  733. );
  734. $registry->addFieldResolver('File', 'uuid',
  735. $builder->callback(function ($parent, $args) {
  736. return $parent->uuid();
  737. })
  738. );
  739. }
  740. // _ _ _
  741. // /_\ __| |__| |_ _ ___ ______
  742. // / _ \/ _` / _` | '_/ -_|_-<_-<
  743. // /_/ \_\__,_\__,_|_| \___/__/__/
  744. protected function addAddress(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  745. // $addr_fields = [
  746. // 'langcode',
  747. // 'country_code',
  748. // 'administrative_area',
  749. // 'locality',
  750. // 'dependent_locality',
  751. // 'postal_code',
  752. // 'sorting_code',
  753. // 'address_line1',
  754. // 'address_line2',
  755. // 'organization',
  756. // 'given_name',
  757. // 'additional_name',
  758. // 'family_name'
  759. // ];
  760. //
  761. // foreach ($addr_fields as $key => $value) {
  762. // $registry->addFieldResolver('Address', $value,
  763. // $builder->callback(function ($parent, $args) {
  764. // return $parent[0][$value];
  765. // })
  766. // );
  767. // }
  768. $registry->addFieldResolver('Address', 'langcode',
  769. $builder->callback(function ($parent, $args) {
  770. return $parent[0]['langcode'];
  771. })
  772. );
  773. $registry->addFieldResolver('Address', 'country_code',
  774. $builder->callback(function ($parent, $args) {
  775. return $parent[0]['country_code'];
  776. })
  777. );
  778. $registry->addFieldResolver('Address', 'administrative_area',
  779. $builder->callback(function ($parent, $args) {
  780. return $parent[0]['administrative_area'];
  781. })
  782. );
  783. $registry->addFieldResolver('Address', 'locality',
  784. $builder->callback(function ($parent, $args) {
  785. return $parent[0]['locality'];
  786. })
  787. );
  788. $registry->addFieldResolver('Address', 'dependent_locality',
  789. $builder->callback(function ($parent, $args) {
  790. return $parent[0]['dependent_locality'];
  791. })
  792. );
  793. $registry->addFieldResolver('Address', 'postal_code',
  794. $builder->callback(function ($parent, $args) {
  795. return $parent[0]['postal_code'];
  796. })
  797. );
  798. $registry->addFieldResolver('Address', 'sorting_code',
  799. $builder->callback(function ($parent, $args) {
  800. return $parent[0]['sorting_code'];
  801. })
  802. );
  803. $registry->addFieldResolver('Address', 'address_line1',
  804. $builder->callback(function ($parent, $args) {
  805. return $parent[0]['address_line1'];
  806. })
  807. );
  808. $registry->addFieldResolver('Address', 'address_line2',
  809. $builder->callback(function ($parent, $args) {
  810. return $parent[0]['address_line2'];
  811. })
  812. );
  813. $registry->addFieldResolver('Address', 'organization',
  814. $builder->callback(function ($parent, $args) {
  815. return $parent[0]['organization'];
  816. })
  817. );
  818. $registry->addFieldResolver('Address', 'given_name',
  819. $builder->callback(function ($parent, $args) {
  820. return $parent[0]['given_name'];
  821. })
  822. );
  823. $registry->addFieldResolver('Address', 'additional_name',
  824. $builder->callback(function ($parent, $args) {
  825. return $parent[0]['additional_name'];
  826. })
  827. );
  828. $registry->addFieldResolver('Address', 'family_name',
  829. $builder->callback(function ($parent, $args) {
  830. return $parent[0]['family_name'];
  831. })
  832. );
  833. }
  834. // ___
  835. // / __|___ _ __ _ __ __ _ _ _ _ _
  836. // | (__/ _ \ ' \| '_ \/ _` | ' \ || |
  837. // \___\___/_|_|_| .__/\__,_|_||_\_, |
  838. // |_| |__/
  839. protected function addCompany(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  840. $registry->addFieldResolver('Query', 'company',
  841. $builder->produce('entity_load')
  842. ->map('type', $builder->fromValue('taxonomy_term'))
  843. ->map('bundles', $builder->fromValue(['company']))
  844. ->map('id', $builder->fromArgument('id'))
  845. );
  846. $registry->addFieldResolver('Company', 'id',
  847. $builder->produce('entity_id')
  848. ->map('entity', $builder->fromParent())
  849. );
  850. $registry->addFieldResolver('Company', 'uuid',
  851. $builder->produce('entity_uuid')
  852. ->map('entity', $builder->fromParent())
  853. );
  854. $registry->addFieldResolver('Company', 'name',
  855. $builder->produce('entity_label')
  856. ->map('entity', $builder->fromParent())
  857. );
  858. $registry->addFieldResolver('Company', 'description',
  859. $builder->callback(function($parent, $args){
  860. return $parent->getDescription();
  861. })
  862. );
  863. // TODO: property_path helper
  864. // $props = [
  865. // [
  866. // "res" => "attachments",
  867. // "type" => "entity:taxonomy_term",
  868. // "path" => "field_attachments",
  869. // ]
  870. // ]
  871. // foreach ($props as $key => $value) {
  872. // $registry->addFieldResolver('Company', $value['res'],
  873. // $builder->produce('property_path')
  874. // ->map('type', $builder->fromValue('entity:taxonomy_term'))
  875. // ->map('value', $builder->fromParent())
  876. // ->map('path', $builder->fromValue('field_attachments'))
  877. // );
  878. // }
  879. $registry->addFieldResolver('Company', 'attachments',
  880. $builder->produce('property_path')
  881. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  882. ->map('value', $builder->fromParent())
  883. ->map('path', $builder->fromValue('field_attachments'))
  884. );
  885. $registry->addFieldResolver('Company', 'memo',
  886. $builder->produce('property_path')
  887. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  888. ->map('value', $builder->fromParent())
  889. ->map('path', $builder->fromValue('field_memo.value'))
  890. );
  891. $registry->addFieldResolver('Company', 'note',
  892. $builder->produce('property_path')
  893. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  894. ->map('value', $builder->fromParent())
  895. ->map('path', $builder->fromValue('field_note.value'))
  896. );
  897. $registry->addFieldResolver('Company', 'website',
  898. $builder->produce('property_path')
  899. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  900. ->map('value', $builder->fromParent())
  901. ->map('path', $builder->fromValue('field_website'))
  902. );
  903. $registry->addFieldResolver('Company', 'departement',
  904. $builder->produce('property_path')
  905. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  906. ->map('value', $builder->fromParent())
  907. ->map('path', $builder->fromValue('field_departement.value'))
  908. );
  909. $registry->addFieldResolver('Company', 'email',
  910. $builder->produce('property_path')
  911. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  912. ->map('value', $builder->fromParent())
  913. ->map('path', $builder->fromValue('field_public_email.value'))
  914. );
  915. $registry->addFieldResolver('Company', 'address',
  916. $builder->produce('property_path')
  917. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  918. ->map('value', $builder->fromParent())
  919. ->map('path', $builder->fromValue('field_public_address'))
  920. );
  921. $registry->addFieldResolver('Company', 'phone',
  922. $builder->produce('property_path')
  923. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  924. ->map('value', $builder->fromParent())
  925. ->map('path', $builder->fromValue('field_public_phone.value'))
  926. );
  927. $registry->addFieldResolver('Company', 'infos',
  928. $builder->produce('property_path')
  929. ->map('type', $builder->fromValue('entity:taxonomy_term'))
  930. ->map('value', $builder->fromParent())
  931. ->map('path', $builder->fromValue('field_infos_from_company.value'))
  932. );
  933. }
  934. protected function addProduct(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  935. $registry->addFieldResolver('Query', 'product',
  936. $builder->produce('entity_load')
  937. ->map('type', $builder->fromValue('commerce_product'))
  938. // ->map('bundles', $builder->fromValue(['materiau']))
  939. ->map('id', $builder->fromArgument('id'))
  940. );
  941. $registry->addFieldResolver('Query', 'products',
  942. $builder->produce('entity_load_multiple')
  943. ->map('type', $builder->fromValue('commerce_product'))
  944. // ->map('bundles', $builder->fromValue(['materiau']))
  945. ->map('ids', $builder->fromArgument('ids'))
  946. );
  947. $registry->addFieldResolver('Product', 'id',
  948. $builder->produce('entity_id')
  949. ->map('entity', $builder->fromParent())
  950. );
  951. $registry->addFieldResolver('Product', 'uuid',
  952. $builder->produce('entity_uuid')
  953. ->map('entity', $builder->fromParent())
  954. );
  955. $registry->addFieldResolver('Product', 'bundle',
  956. $builder->produce('entity_bundle')
  957. ->map('entity', $builder->fromParent())
  958. );
  959. $registry->addFieldResolver('Product', 'path',
  960. $builder->compose(
  961. $builder->produce('entity_url')
  962. ->map('entity', $builder->fromParent()),
  963. $builder->produce('url_path')
  964. ->map('url', $builder->fromParent())
  965. )
  966. );
  967. $registry->addFieldResolver('Product', 'title',
  968. $builder->compose(
  969. $builder->produce('entity_label')
  970. ->map('entity', $builder->fromParent())
  971. ));
  972. $registry->addFieldResolver('Product', 'body',
  973. $builder->produce('property_path')
  974. ->map('type', $builder->fromValue('entity:commerce_product'))
  975. ->map('value', $builder->fromParent())
  976. ->map('path', $builder->fromValue('body.value'))
  977. );
  978. $registry->addFieldResolver('Product', 'price_description',
  979. $builder->produce('property_path')
  980. ->map('type', $builder->fromValue('entity:commerce_product'))
  981. ->map('value', $builder->fromParent())
  982. ->map('path', $builder->fromValue('field_price_description.value'))
  983. );
  984. $registry->addFieldResolver('Product', 'variations',
  985. $builder->produce('entity_reference')
  986. ->map('entity', $builder->fromParent())
  987. ->map('field', $builder->fromValue('variations'))
  988. );
  989. }
  990. protected function addVariation(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  991. // $registry->addFieldResolver('Query', 'product',
  992. // $builder->produce('entity_load')
  993. // ->map('type', $builder->fromValue('commerce_product_variation'))
  994. // // ->map('bundles', $builder->fromValue(['materiau']))
  995. // ->map('id', $builder->fromArgument('id'))
  996. // );
  997. // $registry->addFieldResolver('Query', 'product',
  998. // $builder->produce('entity_load_multiple')
  999. // ->map('type', $builder->fromValue('product'))
  1000. // // ->map('bundles', $builder->fromValue(['materiau']))
  1001. // ->map('ids', $builder->fromArgument('ids'))
  1002. // );
  1003. $registry->addFieldResolver('Variation', 'id',
  1004. $builder->produce('entity_id')
  1005. ->map('entity', $builder->fromParent())
  1006. );
  1007. $registry->addFieldResolver('Variation', 'uuid',
  1008. $builder->produce('entity_uuid')
  1009. ->map('entity', $builder->fromParent())
  1010. );
  1011. $registry->addFieldResolver('Variation', 'bundle',
  1012. $builder->produce('entity_bundle')
  1013. ->map('entity', $builder->fromParent())
  1014. );
  1015. $registry->addFieldResolver('Variation', 'path',
  1016. $builder->compose(
  1017. $builder->produce('entity_url')
  1018. ->map('entity', $builder->fromParent()),
  1019. $builder->produce('url_path')
  1020. ->map('url', $builder->fromParent())
  1021. )
  1022. );
  1023. $registry->addFieldResolver('Variation', 'title',
  1024. $builder->compose(
  1025. $builder->produce('entity_label')
  1026. ->map('entity', $builder->fromParent())
  1027. ));
  1028. $registry->addFieldResolver('Variation', 'description',
  1029. $builder->produce('property_path')
  1030. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1031. ->map('value', $builder->fromParent())
  1032. ->map('path', $builder->fromValue('field_description.value'))
  1033. );
  1034. $registry->addFieldResolver('Variation', 'subscription_type',
  1035. $builder->produce('property_path')
  1036. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1037. ->map('value', $builder->fromParent())
  1038. ->map('path', $builder->fromValue('subscription_type.value'))
  1039. );
  1040. $registry->addFieldResolver('Variation', 'sku',
  1041. $builder->produce('property_path')
  1042. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1043. ->map('value', $builder->fromParent())
  1044. ->map('path', $builder->fromValue('sku.value'))
  1045. );
  1046. $registry->addFieldResolver('Variation', 'price',
  1047. $builder->produce('property_path')
  1048. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1049. ->map('value', $builder->fromParent())
  1050. ->map('path', $builder->fromValue('price'))
  1051. );
  1052. // product_id
  1053. // list_price
  1054. // billing_schedule
  1055. // license_expiration
  1056. // license_type
  1057. // field_multiple
  1058. }
  1059. protected function addPrice(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  1060. $registry->addFieldResolver('Price', 'value',
  1061. $builder->compose(
  1062. $builder->callback(function($parent, $args){
  1063. return $parent[0]['number'];
  1064. })
  1065. ));
  1066. $registry->addFieldResolver('Price', 'currency',
  1067. $builder->compose(
  1068. $builder->callback(function($parent, $args){
  1069. return $parent[0]['currency_code'];
  1070. })
  1071. ));
  1072. }
  1073. /**
  1074. * Resolves the response type.
  1075. *
  1076. * @param \Drupal\graphql\GraphQL\Response\ResponseInterface $response
  1077. * Response object.
  1078. *
  1079. * @return string
  1080. * Response type.
  1081. *
  1082. * @throws \Exception
  1083. * Invalid response type.
  1084. */
  1085. public static function resolveResponse(ResponseInterface $response): string {
  1086. // Resolve content response.
  1087. if ($response instanceof MateriauResponse) {
  1088. return 'MateriauResponse';
  1089. }
  1090. throw new \Exception('Invalid response type.');
  1091. }
  1092. }