import { useState } from "react"; import { Container, Title, Group, Button, SimpleGrid, Select, Text, Center, Skeleton, Card, } from "@mantine/core"; import { modals } from "@mantine/modals"; import { IconPlus } from "@tabler/icons-react"; import { Helmet } from "react-helmet-async"; import { useTranslation } from "react-i18next"; import { useNavigate } from "react-router-dom"; import { useDisclosure } from "@mantine/hooks"; import { getAppName } from "@/lib/config"; import { useGetTemplatesQuery, useDeleteTemplateMutation, } from "@/ee/template/queries/template-query"; import TemplateCard from "@/ee/template/components/template-card"; import { ITemplate } from "@/ee/template/types/template.types"; import { useGetSpacesQuery } from "@/features/space/queries/space-query"; import UseTemplateModal from "@/ee/template/components/use-template-modal"; import TemplatePreviewModal from "@/ee/template/components/template-preview-modal"; import useUserRole from "@/hooks/use-user-role"; import CreateTemplateModal from "@/ee/template/components/create-template-modal"; export default function TemplateList() { const { t } = useTranslation(); const navigate = useNavigate(); const { isAdmin: isWorkspaceAdmin } = useUserRole(); const [spaceFilter, setSpaceFilter] = useState(null); const [selectedTemplate, setSelectedTemplate] = useState( null, ); const [useModalOpened, { open: openUseModal, close: closeUseModal }] = useDisclosure(false); const [previewOpened, { open: openPreview, close: closePreview }] = useDisclosure(false); const [createModalOpened, { open: openCreateModal, close: closeCreateModal }] = useDisclosure(false); const { data, isLoading, hasNextPage, fetchNextPage, isFetchingNextPage, } = useGetTemplatesQuery({ spaceId: spaceFilter || undefined, }); const templates = data?.pages.flatMap((p) => p.items) ?? []; const { data: spaces } = useGetSpacesQuery({ limit: 100 }); const deleteTemplateMutation = useDeleteTemplateMutation(); const spaceOptions = [ { value: "", label: t("All templates") }, ...(spaces?.items?.map((s) => ({ value: s.id, label: s.name })) || []), ]; const spaceNameMap = new Map( spaces?.items?.map((s) => [s.id, s.name]) || [], ); const handlePreview = (template: ITemplate) => { setSelectedTemplate(template); openPreview(); }; const handleUse = (template: ITemplate) => { setSelectedTemplate(template); closePreview(); openUseModal(); }; const handleEdit = (template: ITemplate) => { navigate(`/templates/${template.id}`); }; const handleDelete = (template: ITemplate) => { modals.openConfirmModal({ title: t("Are you sure you want to delete this template?"), centered: true, labels: { confirm: t("Delete"), cancel: t("Cancel") }, confirmProps: { color: "red" }, onConfirm: () => deleteTemplateMutation.mutate(template.id), }); }; return ( <> {t("Templates")} - {getAppName()} {t("Templates")} {isWorkspaceAdmin && ( )}