diff --git a/apps/client/src/pages/page/page.tsx b/apps/client/src/pages/page/page.tsx index b4e3baa8..424f16c7 100644 --- a/apps/client/src/pages/page/page.tsx +++ b/apps/client/src/pages/page/page.tsx @@ -7,12 +7,15 @@ import PageHeader from "@/features/page/components/header/page-header.tsx"; import { extractPageSlugId } from "@/lib"; import { useGetSpaceBySlugQuery } from "@/features/space/queries/space-query.ts"; import { useTranslation } from "react-i18next"; -import React from "react"; +import React, { useEffect } from "react"; import { EmptyState } from "@/components/ui/empty-state.tsx"; import { IconAlertTriangle, IconFileOff } from "@tabler/icons-react"; import { Button } from "@mantine/core"; import { Link } from "react-router-dom"; import { ErrorBoundary } from "react-error-boundary"; +import { useDisclosure } from "@mantine/hooks"; +// Acadenice R4.8 — /template slash command wires to TemplatePickerModal via DOM event +import TemplatePickerModal from "@/features/acadenice/templates/components/template-picker-modal"; const MemoizedFullEditor = React.memo(FullEditor); const MemoizedPageHeader = React.memo(PageHeader); const MemoizedHistoryModal = React.memo(HistoryModal); @@ -43,6 +46,17 @@ export default function Page() { function PageContent({ pageSlug }: { pageSlug: string | undefined }) { const { t } = useTranslation(); + // Acadenice R4.8 — /template slash command opens TemplatePickerModal via DOM event. + // The slash command in menu-items.ts dispatches 'acadenice:open-template-picker'. + // We listen here (page level) so the modal has access to the current page/space context. + const [templatePickerOpened, { open: openTemplatePicker, close: closeTemplatePicker }] = + useDisclosure(false); + + useEffect(() => { + const handler = () => openTemplatePicker(); + document.addEventListener("acadenice:open-template-picker", handler); + return () => document.removeEventListener("acadenice:open-template-picker", handler); + }, [openTemplatePicker]); const { data: page, @@ -112,6 +126,16 @@ function PageContent({ pageSlug }: { pageSlug: string | undefined }) { canComment={canComment} /> + + {/* Acadenice R4.8 — template picker opened via /template slash command */} + {page.space?.id && ( + + )} ) );