| undefined>, editorServi
});
const useStatus = (tree: Ref | undefined>, editorService?: EditorService) => {
- const highlightNode = ref();
const node = ref();
const page = computed(() => editorService?.get('page'));
+ const expandedKeys = new Map();
+
+ const expandNodes = () => {
+ expandedKeys.forEach((key) => {
+ if (!tree.value) return;
+ tree.value.getNode(key)?.expand();
+ });
+ };
watchEffect(() => {
if (!tree.value) return;
- node.value = editorService?.get('node');
- node.value && tree.value.setCurrentKey(node.value.id, true);
+ if (!editorService) return;
+ node.value = editorService.get('node');
- const parent = editorService?.get('parent');
+ if (!node.value) return;
+
+ tree.value.setCurrentKey(node.value.id, true);
+
+ const parent = editorService.get('parent');
if (!parent?.id) return;
const treeNode = tree.value.getNode(parent.id);
treeNode?.updateChildren();
- highlightNode.value = editorService?.get('highlightNode');
+ setTimeout(() => {
+ tree.value &&
+ Object.entries(tree.value.store.nodesMap).forEach(([id, node]) => {
+ if (node.expanded && node.data.items) {
+ expandedKeys.set(id, id);
+ }
+ });
+ expandNodes();
+ });
});
return {
@@ -153,9 +174,19 @@ const useStatus = (tree: Ref | undefined>, editorSer
resolve([]);
},
- highlightNode,
+ highlightNode: computed(() => editorService?.get('highlightNode')),
clickNode: node,
expandedKeys: computed(() => (node.value ? [node.value.id] : [])),
+
+ handleCollapse: (data: MNode) => {
+ expandedKeys.delete(data.id);
+ },
+
+ handleExpand: (data: MNode) => {
+ const parent = editorService?.getParentById(data.id);
+ if (!parent?.id) return;
+ expandedKeys.set(parent.id, parent.id);
+ },
};
};