update AllNodesOfVariant to also get content

This commit is contained in:
axolotle
2021-07-08 16:11:31 +02:00
parent a5c4cd0f51
commit ec2cfb3a26
5 changed files with 50 additions and 34 deletions
+1 -1
View File
@@ -1,5 +1,5 @@
query AllNodesOfVariant ($variantId: Int!) { query AllNodesOfVariant ($variantId: Int!) {
nodes: allmapitemsof(familyId: $variantId) { nodes: allmapitemsof(familyId: $variantId) {
id FRAGMENTS
} }
} }
+7 -5
View File
@@ -10,8 +10,8 @@ export default {
}, },
actions: { actions: {
async 'INIT_KIT' ({ state, commit, dispatch, getters }, payload) { 'INIT_KIT' ({ state, commit, dispatch, getters }) {
const ids = await dispatch('GET_ALL_NODES_IDS', 'kit') const ids = dispatch('GET_ALL_NODES_IDS', { variant: 'kit', dataLevel: 'partial' })
return dispatch('GET_NODES', { ids, dataLevel: 'partial' }) return dispatch('GET_NODES', { ids, dataLevel: 'partial' })
}, },
@@ -28,9 +28,11 @@ export default {
getters: { getters: {
sheets: (state, getters, rootState) => { sheets: (state, getters, rootState) => {
const kitIds = rootState.ids.kit const ids = rootState.ids.kit
if (kitIds === undefined || rootState.nodes[kitIds[0]] === undefined) return if (ids === undefined) return
return kitIds.map(id => rootState.nodes[id]) const nodes = ids.map(id => rootState.nodes[id])
if (nodes.some(node => node === undefined)) return
return nodes
}, },
sheet: (state, getters, rootState) => { sheet: (state, getters, rootState) => {
+4 -5
View File
@@ -106,13 +106,12 @@ export default {
// │ │ │╶┤├┬╯├─┤├┬╯╰─┤ // │ │ │╶┤├┬╯├─┤├┬╯╰─┤
// ╰─╴╶┴╴└─╯╵ ╰╵ ╵╵ ╰╶─╯ // ╰─╴╶┴╴└─╯╵ ╰╵ ╵╵ ╰╶─╯
async 'INIT_LIBRARY' ({ state, commit, dispatch, rootState }) { async 'INIT_LIBRARY' ({ state, commit, dispatch, rootState }, { dataLevel = 'initial' } = {}) {
const departIds = await dispatch('GET_ALL_NODES_IDS', 'depart') await dispatch('GET_ALL_NODES_IDS', { variant: 'depart', dataLevel })
await dispatch('GET_NODES', { ids: departIds, dataLevel: 'initial' })
if (state.nodebook && state.nodebook.length) { if (state.nodebook && state.nodebook.length) {
commit('UPDATE_OPTIONS_VISIBILITY', false) commit('UPDATE_OPTIONS_VISIBILITY', false)
} }
return departIds return rootState.ids.depart
}, },
async 'INIT_LIBRARY_TREE' ({ state, commit, dispatch, rootState }) { async 'INIT_LIBRARY_TREE' ({ state, commit, dispatch, rootState }) {
@@ -126,7 +125,7 @@ export default {
}, },
async 'INIT_LIBRARY_LIST' ({ state, commit, dispatch }) { async 'INIT_LIBRARY_LIST' ({ state, commit, dispatch }) {
const departIds = await dispatch('INIT_LIBRARY') const departIds = await dispatch('INIT_LIBRARY', { dataLevel: 'partial' })
const nodes = await dispatch('GET_NODES', { ids: departIds, dataLevel: 'partial' }) const nodes = await dispatch('GET_NODES', { ids: departIds, dataLevel: 'partial' })
commit('SET_TAGS_OPTIONS', nodes) commit('SET_TAGS_OPTIONS', nodes)
return nodes return nodes
+12 -23
View File
@@ -5,7 +5,9 @@ import {
DATA_LEVELS, DATA_LEVELS,
ID_VARIANTS, ID_VARIANTS,
VARIANT_IDS, VARIANT_IDS,
RELATIONS // FIXME REMOVE WHEN DB MAJ RELATIONS,
reduceQueryIds,
reduceQueryLevels
} from '@/store/utils' } from '@/store/utils'
import { import {
AllNodesOfVariant AllNodesOfVariant
@@ -116,35 +118,22 @@ export default {
}, },
actions: { actions: {
async 'GET_ALL_NODES_IDS' ({ state, commit }, variant) { async 'GET_ALL_NODES_IDS' ({ state, commit }, { variant, dataLevel = 'initial' }) {
if (state.ids[variant] === undefined) { if (state.ids[variant] === undefined) {
// FIXME UPDATE WHEN QUERY OK const levels = reduceQueryLevels(DATA_LEVELS[dataLevel])
// await api.query(AllNodesOfVariant, { variantId: VARIANT_IDS[variant] }).then(data => { await api.queryAllNodes(VARIANT_IDS[variant], levels).then(({ nodes }) => {
await api.query(AllNodesOfVariant, { variantId: VARIANT_IDS[variant] }).then(data => { commit('SET_ALL_NODES_IDS', [variant, nodes])
commit('SET_ALL_NODES_IDS', [variant, data.nodes]) commit('ADD_NODES', [nodes, DATA_LEVELS[dataLevel]])
}) })
} }
return state.ids[variant] return state.ids[variant]
}, },
async 'GET_NODES' ({ state, commit, getters }, { ids, dataLevel = 'partial' }) { async 'GET_NODES' ({ state, commit, getters }, { ids, dataLevel = 'partial' }) {
const lvl = DATA_LEVELS[dataLevel] const { idsToQuery, levelsToQuery } = reduceQueryIds(ids, dataLevel, state.nodes)
const nodesIdsToQuery = [] if (idsToQuery) {
let lowestLvl = lvl await api.queryNodes(idsToQuery, levelsToQuery).then(data => {
for (const id of ids) { commit('ADD_NODES', [data.nodes, DATA_LEVELS[dataLevel]])
const nodeLvl = id in state.nodes ? state.nodes[id].dataLevel : -1
if (nodeLvl < lvl) {
nodesIdsToQuery.push(id)
}
if (nodeLvl < lowestLvl) {
lowestLvl = nodeLvl
}
}
if (nodesIdsToQuery.length) {
const levelsToQuery = Array(lvl - lowestLvl).fill(lowestLvl + 1).map((v, i) => v + i)
await api.queryNodes(nodesIdsToQuery, levelsToQuery).then(data => {
commit('ADD_NODES', [data.nodes, lvl])
}) })
} }
+26
View File
@@ -42,6 +42,32 @@ export function parseNodesQueryParams ({ mode, nodes = [] }) {
} }
export function reduceQueryLevels (lvl, lowestLvl = -1) {
return Array(lvl - lowestLvl).fill(lowestLvl + 1).map((v, i) => v + i)
}
export function reduceQueryIds (ids, dataLevel, data) {
const lvl = DATA_LEVELS[dataLevel]
const idsToQuery = []
let lowestLvl = lvl
for (const id of ids) {
const nodeLvl = id in data ? data[id].dataLevel : -1
if (nodeLvl < lvl) {
idsToQuery.push(id)
}
if (nodeLvl < lowestLvl) {
lowestLvl = nodeLvl
}
}
return idsToQuery.length === 0 ? {} : {
idsToQuery,
levelsToQuery: reduceQueryLevels(lvl, lowestLvl)
}
}
export function getUniqueNodesIds (tree) { export function getUniqueNodesIds (tree) {
function extractId (ids, node) { function extractId (ids, node) {
ids.add(node.id) ids.add(node.id)