mirror of
https://github.com/docmost/docmost.git
synced 2026-08-28 09:17:06 +08:00
fix: sidebar list when changing workspace (#1150)
* init * navigate in overview if current page is in deleted node * fix: implement pagination in sidebar-pages queries * fix: appendNodeChildren() Preserve deeper children if they exist and remove node if deleted
This commit is contained in:
@@ -164,16 +164,35 @@ export function appendNodeChildren(
|
||||
nodeId: string,
|
||||
children: SpaceTreeNode[],
|
||||
) {
|
||||
return treeItems.map((nodeItem) => {
|
||||
if (nodeItem.id === nodeId) {
|
||||
return { ...nodeItem, children };
|
||||
}
|
||||
if (nodeItem.children) {
|
||||
// Preserve deeper children if they exist and remove node if deleted
|
||||
return treeItems.map((node) => {
|
||||
if (node.id === nodeId) {
|
||||
const newIds = new Set(children.map(c => c.id));
|
||||
|
||||
const existingMap = new Map(
|
||||
(node.children ?? []).filter(c => newIds.has(c.id)).map(c => [c.id, c])
|
||||
);
|
||||
|
||||
const merged = children.map((newChild) => {
|
||||
const existing = existingMap.get(newChild.id);
|
||||
return existing && existing.children
|
||||
? { ...newChild, children: existing.children }
|
||||
: newChild;
|
||||
});
|
||||
|
||||
return {
|
||||
...nodeItem,
|
||||
children: appendNodeChildren(nodeItem.children, nodeId, children),
|
||||
...node,
|
||||
children: merged,
|
||||
};
|
||||
}
|
||||
return nodeItem;
|
||||
|
||||
if (node.children) {
|
||||
return {
|
||||
...node,
|
||||
children: appendNodeChildren(node.children, nodeId, children),
|
||||
};
|
||||
}
|
||||
|
||||
return node;
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user