import { CreateCollectionPayload } from "@vertesia/common"; import { useToast, ModalBody, FormItem, ModalFooter, Input, Switch, Button, Modal, ModalTitle, Textarea } from "@vertesia/ui/core"; import { SelectContentType } from "../types/SelectContentType"; import { useNavigate } from "@vertesia/ui/router"; import { useUserSession } from "@vertesia/ui/session"; import { useState } from "react"; import { useUITranslation } from '../../../i18n/index.js'; interface CreateCollectionFormProps { onClose: () => void; redirect?: boolean onAddToCollection?: (collectionId: string) => void; } export function CreateCollectionForm({ onClose, redirect = true, onAddToCollection }: CreateCollectionFormProps) { const navigate = useNavigate(); const toast = useToast(); const { t } = useUITranslation(); const [isProcessing, setProcessing] = useState(false); const { client } = useUserSession(); const [payload, setPayload] = useState({ dynamic: false, name: "", description: "", }); function setPayloadProp(name: string, value: any) { setPayload({ ...payload, [name]: value, }); } const onCreate = () => { if (!payload?.name || !payload.name.trim()) { toast({ title: t('type.nameRequired'), description: t('store.pleaseProvideName'), status: "error", duration: 5000, }); return; } payload.name = payload.name.trim(); if (payload.description) { payload.description = payload.description.trim(); } if (payload.dynamic == null) { payload.dynamic = false; } setProcessing(true); client.store.collections .create(payload as CreateCollectionPayload) .then((r) => { onClose(); toast({ title: t('store.collectionCreated'), description: `Collection "${r.name}" created successfully`, status: "success", duration: 3000, }); if (redirect) navigate(`/collections/${r.id}`); if (onAddToCollection) { onAddToCollection(r.id); } }) .catch((err) => { toast({ title: t('store.failedToCreateCollection'), description: err.message, status: "error", duration: 5000, }); }) .finally(() => setProcessing(false)); }; return ( <>
e.preventDefault()}> setPayloadProp("name", value)} />