'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 (
setSlug(e.target.value)} required className="w-full bg-white/5 border border-white/10 rounded-xl px-4 py-3 text-white focus:border-[#1e9a83] outline-none font-mono text-xs" placeholder="örn: marka-ismi" />
{services.map(s => { const isChecked = initialCategories.includes(s.title); return ( ); })}

Hikaye & Detay

{status === 'success' && (
Proje başarıyla {initialData ? 'güncellendi' : 'eklendi'}! Yönlendiriliyorsunuz...
)} {status === 'error' && (
{errorMsg}
)}
); }