'use client'; import { useState, useEffect } from 'react'; import { createProjectAdmin, updateProjectAdmin } from '../../../actions'; import { Save, CheckCircle2, AlertCircle, X } from 'lucide-react'; import { useRouter } from 'next/navigation'; const slugify = (text: string) => { return text .toString() .normalize('NFD') .replace(/[\u0300-\u036f]/g, '') .toLowerCase() .trim() .replace(/\s+/g, '-') .replace(/[^\w-]+/g, '') .replace(/--+/g, '-'); }; export default function ProjectForm({ initialData, services = [], partners = [] }: { initialData?: any, services?: any[], partners?: any[] }) { const [status, setStatus] = useState<'idle' | 'loading' | 'success' | 'error'>('idle'); const [errorMsg, setErrorMsg] = useState(''); const [title, setTitle] = useState(initialData?.title || ''); const [slug, setSlug] = useState(initialData?.slug || ''); const router = useRouter(); // Auto-slug generation when title changes (only if it's a new project or manually changed title) const handleTitleChange = (newTitle: string) => { setTitle(newTitle); if (!initialData) { setSlug(slugify(newTitle)); } }; const parseSafe = (data: any) => { let current = data; try { for (let i = 0; i < 3; i++) { if (typeof current === 'string' && (current.trim().startsWith('[') || current.trim().startsWith('"'))) { current = JSON.parse(current); } else { break; } } return Array.isArray(current) ? current : (typeof current === 'string' && current ? [current] : []); } catch (e) { return Array.isArray(current) ? current : (typeof current === 'string' && current ? [current] : []); } }; const initialTechStack = parseSafe(initialData?.tech_stack); const initialGallery = parseSafe(initialData?.gallery); const initialCategories = parseSafe(initialData?.category); async function handleSubmit(formData: FormData) { setStatus('loading'); let res; if (initialData?.id) { res = await updateProjectAdmin(initialData.id, formData); } else { res = await createProjectAdmin(formData); } if (res.error) { setErrorMsg(res.error); setStatus('error'); } else { setStatus('success'); setTimeout(() => { router.push('/admin/projects'); router.refresh(); }, 1000); } } return (
); }