From ec2cfb3a26f9e48dbff42169a3c573411c8ae2c1 Mon Sep 17 00:00:00 2001 From: axolotle Date: Thu, 8 Jul 2021 16:11:31 +0200 Subject: [PATCH] update AllNodesOfVariant to also get content --- src/api/queries/AllNodesOfVariant.gql | 2 +- src/store/modules/kit.js | 12 +++++---- src/store/modules/library.js | 9 +++---- src/store/nodes.js | 35 +++++++++------------------ src/store/utils.js | 26 ++++++++++++++++++++ 5 files changed, 50 insertions(+), 34 deletions(-) diff --git a/src/api/queries/AllNodesOfVariant.gql b/src/api/queries/AllNodesOfVariant.gql index 26ce013..b16c03b 100644 --- a/src/api/queries/AllNodesOfVariant.gql +++ b/src/api/queries/AllNodesOfVariant.gql @@ -1,5 +1,5 @@ query AllNodesOfVariant ($variantId: Int!) { nodes: allmapitemsof(familyId: $variantId) { - id + FRAGMENTS } } diff --git a/src/store/modules/kit.js b/src/store/modules/kit.js index 8dd6a13..a52f35b 100644 --- a/src/store/modules/kit.js +++ b/src/store/modules/kit.js @@ -10,8 +10,8 @@ export default { }, actions: { - async 'INIT_KIT' ({ state, commit, dispatch, getters }, payload) { - const ids = await dispatch('GET_ALL_NODES_IDS', 'kit') + 'INIT_KIT' ({ state, commit, dispatch, getters }) { + const ids = dispatch('GET_ALL_NODES_IDS', { variant: 'kit', dataLevel: 'partial' }) return dispatch('GET_NODES', { ids, dataLevel: 'partial' }) }, @@ -28,9 +28,11 @@ export default { getters: { sheets: (state, getters, rootState) => { - const kitIds = rootState.ids.kit - if (kitIds === undefined || rootState.nodes[kitIds[0]] === undefined) return - return kitIds.map(id => rootState.nodes[id]) + const ids = rootState.ids.kit + if (ids === undefined) return + const nodes = ids.map(id => rootState.nodes[id]) + if (nodes.some(node => node === undefined)) return + return nodes }, sheet: (state, getters, rootState) => { diff --git a/src/store/modules/library.js b/src/store/modules/library.js index 04554a7..8aa4a2d 100644 --- a/src/store/modules/library.js +++ b/src/store/modules/library.js @@ -106,13 +106,12 @@ export default { // │ │ │╶┤├┬╯├─┤├┬╯╰─┤ // ╰─╴╶┴╴└─╯╵ ╰╵ ╵╵ ╰╶─╯ - async 'INIT_LIBRARY' ({ state, commit, dispatch, rootState }) { - const departIds = await dispatch('GET_ALL_NODES_IDS', 'depart') - await dispatch('GET_NODES', { ids: departIds, dataLevel: 'initial' }) + async 'INIT_LIBRARY' ({ state, commit, dispatch, rootState }, { dataLevel = 'initial' } = {}) { + await dispatch('GET_ALL_NODES_IDS', { variant: 'depart', dataLevel }) if (state.nodebook && state.nodebook.length) { commit('UPDATE_OPTIONS_VISIBILITY', false) } - return departIds + return rootState.ids.depart }, async 'INIT_LIBRARY_TREE' ({ state, commit, dispatch, rootState }) { @@ -126,7 +125,7 @@ export default { }, 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' }) commit('SET_TAGS_OPTIONS', nodes) return nodes diff --git a/src/store/nodes.js b/src/store/nodes.js index 81acff8..d4eb86d 100644 --- a/src/store/nodes.js +++ b/src/store/nodes.js @@ -5,7 +5,9 @@ import { DATA_LEVELS, ID_VARIANTS, VARIANT_IDS, - RELATIONS // FIXME REMOVE WHEN DB MAJ + RELATIONS, + reduceQueryIds, + reduceQueryLevels } from '@/store/utils' import { AllNodesOfVariant @@ -116,35 +118,22 @@ export default { }, actions: { - async 'GET_ALL_NODES_IDS' ({ state, commit }, variant) { + async 'GET_ALL_NODES_IDS' ({ state, commit }, { variant, dataLevel = 'initial' }) { if (state.ids[variant] === undefined) { - // FIXME UPDATE WHEN QUERY OK - // await api.query(AllNodesOfVariant, { variantId: VARIANT_IDS[variant] }).then(data => { - await api.query(AllNodesOfVariant, { variantId: VARIANT_IDS[variant] }).then(data => { - commit('SET_ALL_NODES_IDS', [variant, data.nodes]) + const levels = reduceQueryLevels(DATA_LEVELS[dataLevel]) + await api.queryAllNodes(VARIANT_IDS[variant], levels).then(({ nodes }) => { + commit('SET_ALL_NODES_IDS', [variant, nodes]) + commit('ADD_NODES', [nodes, DATA_LEVELS[dataLevel]]) }) } return state.ids[variant] }, async 'GET_NODES' ({ state, commit, getters }, { ids, dataLevel = 'partial' }) { - const lvl = DATA_LEVELS[dataLevel] - const nodesIdsToQuery = [] - let lowestLvl = lvl - for (const id of ids) { - 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]) + const { idsToQuery, levelsToQuery } = reduceQueryIds(ids, dataLevel, state.nodes) + if (idsToQuery) { + await api.queryNodes(idsToQuery, levelsToQuery).then(data => { + commit('ADD_NODES', [data.nodes, DATA_LEVELS[dataLevel]]) }) } diff --git a/src/store/utils.js b/src/store/utils.js index 42bf68d..77a9ea3 100644 --- a/src/store/utils.js +++ b/src/store/utils.js @@ -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) { function extractId (ids, node) { ids.add(node.id)