-
- {(dimens) => (
- setTreeApi(t)}
- openByDefault={false}
- disableMultiSelection={true}
- className={classes.tree}
- rowClassName={classes.row}
- rowHeight={30}
- overscanCount={8}
- dndRootElement={rootElement.current}
- selectionFollowsFocus
- >
- {Node}
-
- )}
-
+
+ {
+ setOpenTreeNodes(treeApiRef.current.openState);
+ }}
+ >
+ {Node}
+
);
}
-function Node({ node, style, dragHandle }: NodeRendererProps
) {
+function Node({ node, style, dragHandle, tree }: NodeRendererProps) {
const navigate = useNavigate();
const updatePageMutation = useUpdatePageMutation();
const [treeData, setTreeData] = useAtom(treeDataAtom);
- function updateTreeData(
- treeItems: SpaceTreeNode[],
- nodeId: string,
- children: SpaceTreeNode[],
- ) {
- return treeItems.map((nodeItem) => {
- if (nodeItem.id === nodeId) {
- return { ...nodeItem, children };
- }
- if (nodeItem.children) {
- return {
- ...nodeItem,
- children: updateTreeData(nodeItem.children, nodeId, children),
- };
- }
- return nodeItem;
- });
- }
-
async function handleLoadChildren(node: NodeApi) {
if (!node.data.hasChildren) return;
if (node.data.children && node.data.children.length > 0) {
@@ -139,11 +221,12 @@ function Node({ node, style, dragHandle }: NodeRendererProps) {
const newChildren = await queryClient.fetchQuery({
queryKey: ["sidebar-pages", params],
queryFn: () => getSidebarPages(params),
+ staleTime: 30 * 60 * 1000,
});
const childrenTree = buildTree(newChildren.items);
- const updatedTreeData = updateTreeData(
+ const updatedTreeData = appendNodeChildren(
treeData,
node.data.id,
childrenTree,
@@ -160,11 +243,11 @@ function Node({ node, style, dragHandle }: NodeRendererProps) {
};
const handleUpdateNodeIcon = (nodeId: string, newIcon: string) => {
- const updatedTree = updateTreeNodeIcon(treeData, node.id, newIcon);
+ const updatedTree = updateTreeNodeIcon(treeData, nodeId, newIcon);
setTreeData(updatedTree);
};
- const handleEmojiIconClick = (e) => {
+ const handleEmojiIconClick = (e: any) => {
e.preventDefault();
e.stopPropagation();
};
@@ -213,9 +296,10 @@ function Node({ node, style, dragHandle }: NodeRendererProps) {
{node.data.name || "untitled"}
-
+
handleLoadChildren(node)}
/>
@@ -226,11 +310,10 @@ function Node({ node, style, dragHandle }: NodeRendererProps) {
interface CreateNodeProps {
node: NodeApi;
+ treeApi: TreeApi;
onExpandTree?: () => void;
}
-function CreateNode({ node, onExpandTree }: CreateNodeProps) {
- const [treeApi] = useAtom(treeApiAtom);
-
+function CreateNode({ node, treeApi, onExpandTree }: CreateNodeProps) {
function handleCreate() {
if (node.data.hasChildren && node.children.length === 0) {
node.toggle();
@@ -259,9 +342,11 @@ function CreateNode({ node, onExpandTree }: CreateNodeProps) {
);
}
-function NodeMenu({ node }: { node: NodeApi }) {
- const [treeApi] = useAtom(treeApiAtom);
-
+interface NodeMenuProps {
+ node: NodeApi;
+ treeApi: TreeApi;
+}
+function NodeMenu({ node, treeApi }: NodeMenuProps) {
return (