api.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import axios from 'axios'
  2. import { print } from 'graphql/language/printer'
  3. import { Node, Nodes, NodesTrees } from '@/api/queries'
  4. import * as nodesFragments from '@/api/fragments'
  5. const api = axios.create({
  6. baseURL: window.location.origin + '/api/gql',
  7. headers: {
  8. Accept: 'application/json',
  9. 'Content-Type': 'application/json'
  10. }
  11. })
  12. export default {
  13. getQueryString (query, levels) {
  14. const FRAGMENTS_NAMES = ['NodeInitial', 'NodePartial', 'NodeFull']
  15. const names = levels.map(level => FRAGMENTS_NAMES[level])
  16. const fragments = names.map(name => '...' + name).join('\n')
  17. const fragmentsDefs = names.map(name => print(nodesFragments[name])).join('\n')
  18. return print(query).replace('FRAGMENTS', fragments) + fragmentsDefs
  19. },
  20. query (query, variables = {}) {
  21. return api
  22. .post('', { query: print(query), variables })
  23. .then(response => {
  24. return response.data.data
  25. })
  26. },
  27. queryNodes (ids, levels) {
  28. return api.post('', {
  29. query: this.getQueryString(Nodes, levels),
  30. variables: { ids }
  31. }).then(response => response.data.data)
  32. },
  33. queryNode (id, levels) {
  34. return api.post('', {
  35. query: this.getQueryString(Node, levels),
  36. variables: { id }
  37. }).then(response => response.data.data)
  38. },
  39. queryRecursiveNodes (ids, depth = 4) {
  40. const baseQuery = print(NodesTrees)
  41. const prodFragment = `
  42. ... on Textprod {
  43. parents: text_de_depart {
  44. id
  45. }
  46. siblings: text_en_rebond {
  47. id
  48. FRAGMENT_REF
  49. }
  50. }
  51. `
  52. const refFragment = `
  53. ... on Textref {
  54. siblings: text_en_rebond {
  55. id
  56. FRAGMENT_REF
  57. }
  58. children: text_produits {
  59. id
  60. FRAGMENT_PROD
  61. }
  62. }
  63. `
  64. function formatFragment (str, depth) {
  65. if (depth > 0) {
  66. return formatFragment(
  67. str.replaceAll('FRAGMENT_REF', refFragment).replaceAll('FRAGMENT_PROD', prodFragment),
  68. --depth
  69. )
  70. } else {
  71. return str.replaceAll('FRAGMENT_REF', '').replaceAll('FRAGMENT_PROD', '')
  72. }
  73. }
  74. return api.post('', {
  75. query: baseQuery.replace('FRAGMENT', formatFragment(refFragment + prodFragment, depth)),
  76. variables: { id: ids[0] }
  77. }).then(response => response.data.data.node)
  78. }
  79. }