fix: nested tree open state

This commit is contained in:
Philip Okugbe
2025-04-21 19:24:25 +01:00
committed by GitHub
parent 862f6d4820
commit 5c957fda8d

View File

@ -7,7 +7,7 @@ import {
usePageQuery, usePageQuery,
useUpdatePageMutation, useUpdatePageMutation,
} from "@/features/page/queries/page-query.ts"; } from "@/features/page/queries/page-query.ts";
import { useEffect, useRef } from "react"; import { useEffect, useRef, useState } from "react";
import { useNavigate, useParams } from "react-router-dom"; import { useNavigate, useParams } from "react-router-dom";
import classes from "@/features/page/tree/styles/tree.module.css"; import classes from "@/features/page/tree/styles/tree.module.css";
import { ActionIcon, Menu, rem } from "@mantine/core"; import { ActionIcon, Menu, rem } from "@mantine/core";
@ -84,7 +84,7 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
const rootElement = useRef<HTMLDivElement>(); const rootElement = useRef<HTMLDivElement>();
const { ref: sizeRef, width, height } = useElementSize(); const { ref: sizeRef, width, height } = useElementSize();
const mergedRef = useMergedRef(rootElement, sizeRef); const mergedRef = useMergedRef(rootElement, sizeRef);
const isDataLoaded = useRef(false); const [isDataLoaded, setIsDataLoaded] = useState(false);
const { data: currentPage } = usePageQuery({ const { data: currentPage } = usePageQuery({
pageId: extractPageSlugId(pageSlug), pageId: extractPageSlugId(pageSlug),
}); });
@ -108,7 +108,7 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
// and append root pages instead of resetting the entire tree // and append root pages instead of resetting the entire tree
// which looses async loaded children too // which looses async loaded children too
setData(treeData); setData(treeData);
isDataLoaded.current = true; setIsDataLoaded(true);
setOpenTreeNodes({}); setOpenTreeNodes({});
} }
} }
@ -116,7 +116,7 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
useEffect(() => { useEffect(() => {
const fetchData = async () => { const fetchData = async () => {
if (isDataLoaded.current && currentPage) { if (isDataLoaded && currentPage) {
// check if pageId node is present in the tree // check if pageId node is present in the tree
const node = dfs(treeApiRef.current?.root, currentPage.id); const node = dfs(treeApiRef.current?.root, currentPage.id);
if (node) { if (node) {
@ -178,7 +178,7 @@ export default function SpaceTree({ spaceId, readOnly }: SpaceTreeProps) {
}; };
fetchData(); fetchData();
}, [isDataLoaded.current, currentPage?.id]); }, [isDataLoaded, currentPage?.id]);
useEffect(() => { useEffect(() => {
if (currentPage?.id) { if (currentPage?.id) {