Skip to content

Commit 085ca6f

Browse files
committed
refactor: initialize treeItems from cache to prevent empty state flash on remount
1 parent 4652ba8 commit 085ca6f

File tree

1 file changed

+13
-2
lines changed
  • apps/nextjs-app/src/features/app/blocks/base/base-node/hooks

1 file changed

+13
-2
lines changed

apps/nextjs-app/src/features/app/blocks/base/base-node/hooks/useBaseNode.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { useQuery, useQueryClient } from '@tanstack/react-query';
22
import { getBaseNodeChannel } from '@teable/core';
3-
import type { IBaseNodeVo } from '@teable/openapi';
3+
import type { IBaseNodeTreeVo, IBaseNodeVo } from '@teable/openapi';
44
import { getBaseNodeTree } from '@teable/openapi';
55
import { ReactQueryKeys } from '@teable/sdk/config';
66
import { useConnection } from '@teable/sdk/hooks';
@@ -16,10 +16,21 @@ export const useBaseNode = (baseId: string) => {
1616
const channel = getBaseNodeChannel(baseId);
1717
const presence = connection?.getPresence(channel);
1818
const [nodes, setNodes] = useState<IBaseNodeVo[]>([]);
19-
const [treeItems, setTreeItems] = useState<Record<string, TreeItemData>>({});
2019
const [shouldInvalidate, setShouldInvalidate] = useState(0);
2120

2221
const queryClient = useQueryClient();
22+
23+
// Initialize treeItems from cache to avoid flash of empty state on remount
24+
const [treeItems, setTreeItems] = useState<Record<string, TreeItemData>>(() => {
25+
const cachedData = queryClient.getQueryData<IBaseNodeTreeVo>(
26+
ReactQueryKeys.baseNodeTree(baseId)
27+
);
28+
if (cachedData?.nodes && cachedData.nodes.length > 0) {
29+
return buildTreeItems(cachedData.nodes);
30+
}
31+
return {};
32+
});
33+
2334
const { data: queryData, isLoading } = useQuery({
2435
queryKey: ReactQueryKeys.baseNodeTree(baseId),
2536
queryFn: ({ queryKey }) => getBaseNodeTree(queryKey[1]).then((res) => res.data),

0 commit comments

Comments
 (0)