'use client'; import { useState } from 'react'; import { useRouter } from 'next/navigation'; import { JsonForm, type JsonValue } from './JsonForm'; type Status = 'idle' | 'saving' | 'saved' | 'error'; export function SectionEditor({ sectionKey, title, initial, isOverridden, }: { sectionKey: string; title: string; initial: { fa: JsonValue; en: JsonValue }; isOverridden: boolean; }) { const router = useRouter(); const [data, setData] = useState<{ fa: JsonValue; en: JsonValue }>(initial); const [tab, setTab] = useState<'fa' | 'en'>('fa'); const [status, setStatus] = useState('idle'); const [overridden, setOverridden] = useState(isOverridden); async function save() { setStatus('saving'); try { const res = await fetch('/api/admin/section', { method: 'POST', headers: { 'content-type': 'application/json' }, body: JSON.stringify({ key: sectionKey, data }), }); if (!res.ok) throw new Error(String(res.status)); setStatus('saved'); setOverridden(true); router.refresh(); setTimeout(() => setStatus('idle'), 2500); } catch { setStatus('error'); } } async function reset() { if (!confirm('Revert this section to its built-in default? Your edits will be removed.')) return; setStatus('saving'); try { const res = await fetch(`/api/admin/section?key=${encodeURIComponent(sectionKey)}`, { method: 'DELETE', }); if (!res.ok) throw new Error(String(res.status)); router.refresh(); window.location.reload(); } catch { setStatus('error'); } } return (
{/* Toolbar */}
setTab('fa')}>FA · فارسی setTab('en')}>EN · English
{status === 'saved' && Saved ✓} {status === 'error' && Save failed} {overridden && ( )}
{/* The form for the active locale. FA renders RTL. */}
setData((d) => ({ ...d, [tab]: nv }))} />
); } function TabBtn({ active, onClick, children, }: { active: boolean; onClick: () => void; children: React.ReactNode; }) { return ( ); }