import { Box } from "@mui/material"; import { Plus } from "lucide-react"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { PageHeader } from "@/components/ui/page-header"; import { QueryErrorPanel } from "@/components/ui/query-error-panel"; import { SearchInput } from "@/components/ui/search-input"; import { Text } from "@/components/ui/text"; import { COMPLETION_TEMPLATE_COPY, templateCountLabel, } from "@/domain/completion-templates/constants/completion-template-constants"; import type { CompletionTemplate } from "@/domain/completion-templates/types/completion-template"; import { useCompletionTemplates } from "@/domain/completion-templates/use-cases/use-completion-templates"; import { useDebounce } from "@/hooks/use-debounce"; import { CompletionTemplateDialog } from "./_components/completion-template-dialog"; import { CompletionTemplatesTable } from "./_components/completion-templates-table"; import type { CompletionTemplateDialogMode } from "./_components/use-completion-template-dialog"; import { useCompletionTemplatePermissions } from "./_components/use-completion-template-permissions"; type OpenDialog = { template: CompletionTemplate | null; mode: CompletionTemplateDialogMode }; export default function CompletionDocsPage() { const permissions = useCompletionTemplatePermissions(); const [search, setSearch] = useState(""); const debouncedSearch = useDebounce(search, 250); const all = useCompletionTemplates(); const filtered = useCompletionTemplates(debouncedSearch); const [dialog, setDialog] = useState(null); const templates = filtered.data ?? []; return ( {permissions.canCreate && ( )} } /> {filtered.error !== null && ( void filtered.refetch()} /> )}
setDialog({ template, mode: "view" })} onEdit={(template) => setDialog({ template, mode: "edit" })} />
{templateCountLabel(templates.length)}
{dialog !== null && ( setDialog(null)} onSaved={(template) => setDialog({ template, mode: "view" })} /> )}
); }