'use client'; import { useEffect, useState } from 'react'; import { ApiClient } from '@/api-client/ApiClient'; import { Modal, Stack, TextInput, Textarea, Button, Group, Alert, } from '@mantine/core'; import { useForm } from '@mantine/form'; interface CreateCollectionModalProps { isOpen: boolean; onClose: () => void; onSuccess?: (collectionId: string, collectionName: string) => void; apiClient: ApiClient; initialName?: string; } export function CreateCollectionModal({ isOpen, onClose, onSuccess, apiClient, initialName = '', }: CreateCollectionModalProps) { const form = useForm({ initialValues: { name: initialName, description: '', }, }); const [loading, setLoading] = useState(false); const [error, setError] = useState(''); const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); e.stopPropagation(); if (!form.getValues().name.trim()) { setError('Collection name is required'); return; } setLoading(true); setError(''); try { const response = await apiClient.createCollection({ name: form.getValues().name.trim(), description: form.getValues().description.trim() || undefined, }); // Success onSuccess?.(response.collectionId, form.getValues().name.trim()); handleClose(); } catch (error: any) { console.error('Error creating collection:', error); setError( error.message || 'Failed to create collection. Please try again.', ); } finally { setLoading(false); } }; const handleClose = () => { if (!loading) { onClose(); form.reset(); setError(''); } }; // Update form when initialName changes useEffect(() => { if (isOpen && initialName !== form.getValues().name) { form.setFieldValue('name', initialName); } }, [isOpen, initialName, form]); return (