Improvement

This commit is contained in:
William Buezas 2024-05-24 12:27:15 -03:00
parent 722f1e8a03
commit 9e264e6f1f
1 changed files with 22 additions and 10 deletions

View File

@ -6,6 +6,7 @@ import { useRoute } from 'vue-router';
import { useState } from 'src/composables/useState';
import axios from 'axios';
import { useArrayData } from 'composables/useArrayData';
import { tree } from 'quasar/dist/icon-set/material-icons.umd.prod';
const { t } = useI18n();
const route = useRoute();
@ -24,15 +25,25 @@ const nodes = ref([
{ id: null, name: t('zoneLocations.locations'), sons: true, children: [{}] },
]);
const fetchedChildrensSet = ref(new Set());
const previousExpandedNodes = ref(new Set());
const onNodeExpanded = (nodeKeysArray) => {
if (!fetchedChildrensSet.value.has(nodeKeysArray.at(-1))) {
fetchedChildrensSet.value.add(nodeKeysArray.at(-1));
fetchNodeLeaves(nodeKeysArray.at(-1));
const onNodeExpanded = async (nodeKeysArray) => {
const nodeKeysSet = new Set(nodeKeysArray);
const lastNodeKey = nodeKeysArray.at(-1);
const wasExpanded = !previousExpandedNodes.value.has(lastNodeKey);
if (wasExpanded) await fetchNodeLeaves(lastNodeKey);
else {
const difference = new Set(
[...previousExpandedNodes.value].filter((x) => !nodeKeysSet.has(x))
);
const collapsedNode = Array.from(difference).pop();
const node = treeRef.value?.getNodeByKey(collapsedNode);
const allNodeIds = getNodeIds(node);
expanded.value = expanded.value.filter((id) => !allNodeIds.includes(id));
}
state.set('Tree', nodeKeysArray);
previousExpandedNodes.value = nodeKeysSet;
};
const formatNodeSelected = (node) => {
@ -43,7 +54,6 @@ const formatNodeSelected = (node) => {
const fetchNodeLeaves = async (nodeKey) => {
try {
const node = treeRef.value?.getNodeByKey(nodeKey);
if (!node || node.sons === 0) return;
const params = { parentId: node.id };
@ -86,8 +96,9 @@ function getNodeIds(node) {
let ids = [];
if (node.id) ids.push(node.id);
if (node.childs) {
node.childs.forEach((child) => {
const children = node.child || node.children;
if (children) {
children.forEach((child) => {
ids = ids.concat(getNodeIds(child));
});
}
@ -110,7 +121,8 @@ onMounted(async () => {
await arrayData.fetch({ append: false });
return;
}
const tree = [...state.get('Tree'), 1];
const stateTree = state.get('Tree');
const tree = stateTree ? [...state.get('Tree'), 1] : [null, 1];
const lastStateTree = state.get('TreeState');
if (tree) {
for (let n of tree) {