add api module
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user