import { TextInput } from '@/components/inputs' import { useToast } from '@/hooks/useToast' import { trpc } from '@/lib/trpc' import { Button, HStack, Modal, ModalBody, ModalCloseButton, ModalContent, ModalFooter, ModalHeader, ModalOverlay, } from '@chakra-ui/react' import { createId } from '@paralleldrive/cuid2' import { useTranslate } from '@tolgee/react' import { ThemeTemplate } from '@typebot.io/schemas' import { FormEvent, useRef, useState } from 'react' type Props = { workspaceId: string isOpen: boolean onClose: (template?: Pick) => void selectedTemplate: Pick | undefined theme: ThemeTemplate['theme'] } export const SaveThemeModal = ({ workspaceId, isOpen, onClose, selectedTemplate, theme, }: Props) => { const { t } = useTranslate() const { showToast } = useToast() const [isSaving, setIsSaving] = useState(false) const inputRef = useRef(null) const { theme: { listThemeTemplates: { refetch: refetchThemeTemplates }, }, } = trpc.useContext() const { mutate } = trpc.theme.saveThemeTemplate.useMutation({ onMutate: () => setIsSaving(true), onSettled: () => setIsSaving(false), onSuccess: ({ themeTemplate }) => { refetchThemeTemplates() onClose(themeTemplate) }, onError: (error) => { showToast({ description: error.message, }) }, }) const updateExistingTemplate = (e: FormEvent) => { e.preventDefault() const newName = inputRef.current?.value if (!newName) return mutate({ name: newName, theme, workspaceId, themeTemplateId: selectedTemplate?.id ?? createId(), }) } const saveNewTemplate = () => { const newName = inputRef.current?.value if (!newName) return mutate({ name: newName, theme, workspaceId, themeTemplateId: createId(), }) } return ( {t('theme.sideMenu.template.myTemplates.saveTheme.title')} {selectedTemplate?.id && ( )} ) }