MaterioSchemaExtension.php 42 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262
  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:node'))
  975. ->map('value', $builder->fromParent())
  976. ->map('path', $builder->fromValue('body.value'))
  977. );
  978. $registry->addFieldResolver('Product', 'variations',
  979. $builder->produce('entity_reference')
  980. ->map('entity', $builder->fromParent())
  981. ->map('field', $builder->fromValue('variations'))
  982. );
  983. }
  984. protected function addVariation(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  985. // $registry->addFieldResolver('Query', 'product',
  986. // $builder->produce('entity_load')
  987. // ->map('type', $builder->fromValue('commerce_product_variation'))
  988. // // ->map('bundles', $builder->fromValue(['materiau']))
  989. // ->map('id', $builder->fromArgument('id'))
  990. // );
  991. // $registry->addFieldResolver('Query', 'product',
  992. // $builder->produce('entity_load_multiple')
  993. // ->map('type', $builder->fromValue('product'))
  994. // // ->map('bundles', $builder->fromValue(['materiau']))
  995. // ->map('ids', $builder->fromArgument('ids'))
  996. // );
  997. $registry->addFieldResolver('Variation', 'id',
  998. $builder->produce('entity_id')
  999. ->map('entity', $builder->fromParent())
  1000. );
  1001. $registry->addFieldResolver('Variation', 'uuid',
  1002. $builder->produce('entity_uuid')
  1003. ->map('entity', $builder->fromParent())
  1004. );
  1005. $registry->addFieldResolver('Variation', 'bundle',
  1006. $builder->produce('entity_bundle')
  1007. ->map('entity', $builder->fromParent())
  1008. );
  1009. $registry->addFieldResolver('Variation', 'path',
  1010. $builder->compose(
  1011. $builder->produce('entity_url')
  1012. ->map('entity', $builder->fromParent()),
  1013. $builder->produce('url_path')
  1014. ->map('url', $builder->fromParent())
  1015. )
  1016. );
  1017. $registry->addFieldResolver('Variation', 'title',
  1018. $builder->compose(
  1019. $builder->produce('entity_label')
  1020. ->map('entity', $builder->fromParent())
  1021. ));
  1022. $registry->addFieldResolver('Variation', 'description',
  1023. $builder->produce('property_path')
  1024. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1025. ->map('value', $builder->fromParent())
  1026. ->map('path', $builder->fromValue('field_description.value'))
  1027. );
  1028. $registry->addFieldResolver('Variation', 'subscription_type',
  1029. $builder->produce('property_path')
  1030. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1031. ->map('value', $builder->fromParent())
  1032. ->map('path', $builder->fromValue('subscription_type.value'))
  1033. );
  1034. $registry->addFieldResolver('Variation', 'sku',
  1035. $builder->produce('property_path')
  1036. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1037. ->map('value', $builder->fromParent())
  1038. ->map('path', $builder->fromValue('sku.value'))
  1039. );
  1040. $registry->addFieldResolver('Variation', 'price',
  1041. $builder->produce('property_path')
  1042. ->map('type', $builder->fromValue('entity:commerce_product_variation'))
  1043. ->map('value', $builder->fromParent())
  1044. ->map('path', $builder->fromValue('price'))
  1045. );
  1046. // product_id
  1047. // list_price
  1048. // billing_schedule
  1049. // license_expiration
  1050. // license_type
  1051. // field_multiple
  1052. }
  1053. protected function addPrice(ResolverRegistryInterface $registry, ResolverBuilder $builder) {
  1054. $registry->addFieldResolver('Price', 'value',
  1055. $builder->compose(
  1056. $builder->callback(function($parent, $args){
  1057. return $parent[0]['number'];
  1058. })
  1059. ));
  1060. $registry->addFieldResolver('Price', 'currency',
  1061. $builder->compose(
  1062. $builder->callback(function($parent, $args){
  1063. return $parent[0]['currency_code'];
  1064. })
  1065. ));
  1066. }
  1067. /**
  1068. * Resolves the response type.
  1069. *
  1070. * @param \Drupal\graphql\GraphQL\Response\ResponseInterface $response
  1071. * Response object.
  1072. *
  1073. * @return string
  1074. * Response type.
  1075. *
  1076. * @throws \Exception
  1077. * Invalid response type.
  1078. */
  1079. public static function resolveResponse(ResponseInterface $response): string {
  1080. // Resolve content response.
  1081. if ($response instanceof MateriauResponse) {
  1082. return 'MateriauResponse';
  1083. }
  1084. throw new \Exception('Invalid response type.');
  1085. }
  1086. }