"use client"; import { useParams } from "next/navigation"; import { FileStack, Plus, Loader2 } from "lucide-react"; import { useState } from "react"; import { Button } from "@/components/ui/button"; import { api } from "@/lib/trpc"; import { cn } from "@/lib/utils"; import { TemplateEditor } from "@/components/templates"; export default function TemplatesSettingsPage() { const params = useParams(); const workspaceSlug = typeof params?.workspaceSlug === "string" ? params.workspaceSlug : ""; const [selectedId, setSelectedId] = useState(null); const utils = api.useUtils(); const { data, isLoading } = api.templates.list.useQuery( { workspace: workspaceSlug }, { enabled: Boolean(workspaceSlug) }, ); const templates = data?.templates ?? []; const createMutation = api.templates.create.useMutation({ onSuccess: (newTemplate) => { setSelectedId(newTemplate.id); void utils.templates.list.invalidate({ workspace: workspaceSlug }); }, }); const getByIdQuery = api.templates.getById.useQuery( { workspace: workspaceSlug, id: selectedId! }, { enabled: Boolean(workspaceSlug && selectedId) }, ); if (!workspaceSlug) { return (
No workspace selected.
); } const invalidateAfterSave = () => { void utils.templates.list.invalidate({ workspace: workspaceSlug }); if (selectedId) void utils.templates.getById.invalidate({ workspace: workspaceSlug, id: selectedId }); }; return (

Templates

{/* Left: Template list */}
{isLoading ? (
) : templates.length === 0 ? (

No templates yet

) : (
{templates.map((t) => ( ))}
)}
{/* Right: Template editor */}
{selectedId ? ( getByIdQuery.isLoading ? (
) : getByIdQuery.data ? ( ) : (
Template not found
) ) : (
Select a template or create a new one
)}
); }