diff --git a/.memory/worklog.json b/.memory/worklog.json index 43b82ec..38bac06 100644 --- a/.memory/worklog.json +++ b/.memory/worklog.json @@ -1888,6 +1888,13 @@ "message": "auto-save 2026-05-21 02:25 (~2)", "hash": "7524b3c", "files_changed": 2 + }, + { + "ts": "2026-05-21T02:30:46+08:00", + "type": "commit", + "message": "auto-save 2026-05-21 02:30 (~2)", + "hash": "9520d93", + "files_changed": 2 } ] } diff --git a/src/app/page.tsx b/src/app/page.tsx index ae5cdc2..f89e190 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -384,7 +384,8 @@ export default function Home() { const [uploadLoading, setUploadLoading] = useState(false); const [provider, setProvider] = useState('?'); const [sidebarOpen, setSidebarOpen] = useState(true); - const [activeAssetPanel, setActiveAssetPanel] = useState('pack-patent'); + const [activeAssetPanel, setActiveAssetPanel] = useState(DEFAULT_ASSET_PANEL); + const [restoreAttempted, setRestoreAttempted] = useState(false); const refreshSessions = useCallback(async () => { const r = await fetch('/api/sessions'); @@ -394,7 +395,24 @@ export default function Home() { }, []); useEffect(() => { refreshSessions(); }, [refreshSessions]); - useEffect(() => { setActiveAssetPanel('pack-patent'); }, [current?.id]); + + useEffect(() => { + if (restoreAttempted || !sessions.length) return; + const persisted = readPersistedProjectState(); + if (persisted.sessionId) { + const restored = sessions.find(session => session.id === persisted.sessionId); + if (restored) { + setCurrent(restored); + setActiveAssetPanel(persisted.panel); + } + } + setRestoreAttempted(true); + }, [restoreAttempted, sessions]); + + useEffect(() => { + if (!current) return; + writePersistedProjectState(current.id, activeAssetPanel); + }, [activeAssetPanel, current]); async function handleGenerate(opts: { prompt: string; refImages: string[]; count: number; style?: string }) { setLoading(true); @@ -658,7 +676,11 @@ export default function Home() { sessions={sessions} currentId={current?.id ?? null} onPick={id => setCurrent(sessions.find(s => s.id === id) ?? null)} - onNew={() => setCurrent(null)} + onNew={() => { + setCurrent(null); + setActiveAssetPanel(DEFAULT_ASSET_PANEL); + clearPersistedProjectState(); + }} />
@@ -729,7 +751,7 @@ export default function Home() { setActiveAssetPanel(normalizeAssetPanel(id))} textLoading={textLoading} videoLoading={videoLoading} onGenerateText={handleGenerateText}