93 lines
2.3 KiB
JavaScript
93 lines
2.3 KiB
JavaScript
import axios from 'axios'
|
|
import { print } from 'graphql/language/printer'
|
|
|
|
import { Node, Nodes, NodesTrees } from '@/api/queries'
|
|
import * as nodesFragments from '@/api/fragments'
|
|
|
|
|
|
const api = axios.create({
|
|
baseURL: window.location.origin + '/api/gql',
|
|
headers: {
|
|
Accept: 'application/json',
|
|
'Content-Type': 'application/json'
|
|
}
|
|
})
|
|
|
|
|
|
export default {
|
|
getQueryString (query, levels) {
|
|
const FRAGMENTS_NAMES = ['NodeInitial', 'NodePartial', 'NodeFull']
|
|
const names = levels.map(level => FRAGMENTS_NAMES[level])
|
|
const fragments = names.map(name => '...' + name).join('\n')
|
|
const fragmentsDefs = names.map(name => print(nodesFragments[name])).join('\n')
|
|
return print(query).replace('FRAGMENTS', fragments) + fragmentsDefs
|
|
},
|
|
|
|
query (query, variables = {}) {
|
|
return api
|
|
.post('', { query: print(query), variables })
|
|
.then(response => {
|
|
return response.data.data
|
|
})
|
|
},
|
|
|
|
queryNodes (ids, levels) {
|
|
return api.post('', {
|
|
query: this.getQueryString(Nodes, levels),
|
|
variables: { ids }
|
|
}).then(response => response.data.data)
|
|
},
|
|
|
|
queryNode (id, levels) {
|
|
return api.post('', {
|
|
query: this.getQueryString(Node, levels),
|
|
variables: { id }
|
|
}).then(response => response.data.data)
|
|
},
|
|
|
|
queryRecursiveNodes (ids, depth = 4) {
|
|
const baseQuery = print(NodesTrees)
|
|
const prodFragment = `
|
|
... on Textprod {
|
|
parents: text_de_depart {
|
|
id
|
|
}
|
|
|
|
siblings: text_en_rebond {
|
|
id
|
|
FRAGMENT_REF
|
|
}
|
|
}
|
|
`
|
|
const refFragment = `
|
|
... on Textref {
|
|
siblings: text_en_rebond {
|
|
id
|
|
FRAGMENT_REF
|
|
}
|
|
|
|
children: text_produits {
|
|
id
|
|
FRAGMENT_PROD
|
|
}
|
|
}
|
|
`
|
|
|
|
function formatFragment (str, depth) {
|
|
if (depth > 0) {
|
|
return formatFragment(
|
|
str.replaceAll('FRAGMENT_REF', refFragment).replaceAll('FRAGMENT_PROD', prodFragment),
|
|
--depth
|
|
)
|
|
} else {
|
|
return str.replaceAll('FRAGMENT_REF', '').replaceAll('FRAGMENT_PROD', '')
|
|
}
|
|
}
|
|
|
|
return api.post('', {
|
|
query: baseQuery.replace('FRAGMENT', formatFragment(refFragment + prodFragment, depth)),
|
|
variables: { id: ids[0] }
|
|
}).then(response => response.data.data.node)
|
|
}
|
|
}
|