feat: refine frontend folder management and display by merging folder tree data.
This commit is contained in:
@@ -238,9 +238,30 @@ const SelectionFloatingActions: React.FC<SelectionFloatingActionsProps> = ({
|
||||
() => foldersManager.getTreeSnapshot(),
|
||||
);
|
||||
|
||||
const dataSnapshot = useSyncExternalStore(
|
||||
useCallback(cb => foldersManager.subscribe(cb), [foldersManager]),
|
||||
() => foldersManager.getSnapshot(),
|
||||
() => foldersManager.getSnapshot(),
|
||||
);
|
||||
|
||||
useEffect(() => {
|
||||
setRemoteFolderTree(treeSnapshot);
|
||||
}, [treeSnapshot]);
|
||||
if (!treeSnapshot || treeSnapshot.length === 0) {
|
||||
setRemoteFolderTree([]);
|
||||
return;
|
||||
}
|
||||
|
||||
const map = dataSnapshot;
|
||||
|
||||
const mergeNode = (node: FolderTreeNode): FolderTreeNode => {
|
||||
const liveData = map.get(node.id);
|
||||
const name = liveData?.name ?? node.name;
|
||||
const children = node.children ? node.children.map(mergeNode) : [];
|
||||
return { ...node, name, children };
|
||||
};
|
||||
|
||||
const mergedTree = treeSnapshot.map(mergeNode);
|
||||
setRemoteFolderTree(mergedTree);
|
||||
}, [treeSnapshot, dataSnapshot]);
|
||||
|
||||
const requestFolderTree = useCallback(() => {
|
||||
foldersManager.ensureTree();
|
||||
|
||||
Reference in New Issue
Block a user