import { NodeViewProps, NodeViewWrapper } from "@tiptap/react"; import { Stack, Text, Anchor, ActionIcon } from "@mantine/core"; import { IconFileDescription } from "@tabler/icons-react"; import { useGetSidebarPagesQuery } from "@/features/page/queries/page-query"; import { useMemo } from "react"; import { Link, useParams } from "react-router-dom"; import classes from "./subpages.module.css"; import styles from "../mention/mention.module.css"; import { buildPageUrl, buildSharedPageUrl, } from "@/features/page/page.utils.ts"; import { useTranslation } from "react-i18next"; import { sortPositionKeys } from "@/features/page/tree/utils/utils"; import { useSharedPageSubpages } from "@/features/share/hooks/use-shared-page-subpages"; export default function SubpagesView(props: NodeViewProps) { const { editor } = props; const { spaceSlug, shareId } = useParams(); const { t } = useTranslation(); const currentPageId = editor.storage.pageId; // Get subpages from shared tree if we're in a shared context const sharedSubpages = useSharedPageSubpages(currentPageId); const { data, isLoading, error } = useGetSidebarPagesQuery({ pageId: currentPageId, }); const subpages = useMemo(() => { // If we're in a shared context, use the shared subpages if (shareId && sharedSubpages) { return sharedSubpages.map((node) => ({ id: node.value, slugId: node.slugId, title: node.name, icon: node.icon, position: node.position, })); } // Otherwise use the API data if (!data?.pages) return []; const allPages = data.pages.flatMap((page) => page.items); return sortPositionKeys(allPages); }, [data, shareId, sharedSubpages]); if (isLoading && !shareId) { return null; } if (error && !shareId) { return ( {t("Failed to load subpages")} ); } if (subpages.length === 0) { return (
{t("No subpages")}
); } return (
{subpages.map((page) => ( {page?.icon ? ( {page.icon} ) : ( )} {page?.title || t("untitled")} ))}
); }