diff --git a/components/admin/editor-workspace.tsx b/components/admin/editor-workspace.tsx index f0c92ae..7e0c589 100644 --- a/components/admin/editor-workspace.tsx +++ b/components/admin/editor-workspace.tsx @@ -97,18 +97,33 @@ export function EditorWorkspace({ }) { const router = useRouter(); const initialDraft = draftFromSnapshot(snapshot); - const [history, setHistory] = useState({ items: [initialDraft], index: 0 }); + const [history, setHistory] = useState({ + items: [initialDraft], + index: 0, + }); const draft = history.items[history.index]; - const [selectedId, setSelectedId] = useState(draft.blocks[0]?.id ?? null); + const [selectedId, setSelectedId] = useState( + draft.blocks[0]?.id ?? null, + ); const [commandOpen, setCommandOpen] = useState(false); const [viewport, setViewport] = useState("desktop"); - const [autosaveStatus, setAutosaveStatus] = useState({ state: "idle" }); + const [autosaveStatus, setAutosaveStatus] = useState({ + state: "idle", + }); const [dataSources, setDataSources] = useState(snapshot.dataSources); const [sourceSaving, setSourceSaving] = useState(false); - const coordinatorRef = useRef | null>(null); + const coordinatorRef = useRef | null>(null); useEffect(() => { - const coordinator = new AutosaveCoordinator({ + const coordinator = new AutosaveCoordinator< + EditorDraft, + EditorSaveInput, + PageSnapshot + >({ initialVersion: snapshot.page.version, createPayload: (next, expectedVersion) => ({ ...next, expectedVersion }), save: saveEditorPage, @@ -137,7 +152,10 @@ export function EditorWorkspace({ function commit(next: EditorDraft) { setHistory((current) => ({ - items: [...current.items.slice(0, current.index + 1), structuredClone(next)].slice(-80), + items: [ + ...current.items.slice(0, current.index + 1), + structuredClone(next), + ].slice(-80), index: Math.min(current.index + 1, 79), })); coordinatorRef.current?.schedule(next); @@ -164,7 +182,10 @@ export function EditorWorkspace({ setSourceSaving(false); if (result.status === "saved") { if (result.snapshot) { - setDataSources((current) => ({ ...current, [source.id]: result.snapshot! })); + setDataSources((current) => ({ + ...current, + [source.id]: result.snapshot!, + })); } toast.success("บันทึกแหล่งข้อมูลแล้ว"); } else if (result.status === "conflict") { @@ -203,7 +224,9 @@ export function EditorWorkspace({ selectedId={selectedId} dataSources={dataSources} onDraftChange={commit} - onDataSourceChange={(source) => setDataSources((current) => ({ ...current, [source.id]: source }))} + onDataSourceChange={(source) => + setDataSources((current) => ({ ...current, [source.id]: source })) + } onSaveDataSource={saveSource} sourceSaving={sourceSaving} onMediaReady={addUploadedMedia} @@ -222,13 +245,35 @@ export function EditorWorkspace({ - {snapshot.character.nameTh} + + {snapshot.character.nameTh} + - {draft.title} + + + {draft.title} + + - - + +