auto-save 2026-05-21 02:36 (~2)

This commit is contained in:
2026-05-21 02:36:11 +08:00
parent 9520d9328c
commit 515ef798ad
2 changed files with 33 additions and 4 deletions

View File

@@ -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
}
]
}

View File

@@ -384,7 +384,8 @@ export default function Home() {
const [uploadLoading, setUploadLoading] = useState(false);
const [provider, setProvider] = useState<string>('?');
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();
}}
/>
<main className="project-stage min-w-0 flex-1">
<div className="project-stage-inner">
@@ -729,7 +751,7 @@ export default function Home() {
<PackPanel
session={current}
activeNav={activeAssetPanel}
onActiveNavChange={setActiveAssetPanel}
onActiveNavChange={id => setActiveAssetPanel(normalizeAssetPanel(id))}
textLoading={textLoading}
videoLoading={videoLoading}
onGenerateText={handleGenerateText}