| 82 | |
| 83 | useEffect(() => { |
| 84 | const loadPersistedData = async () => { |
| 85 | try { |
| 86 | const loadedProjects = await invoke<Project[]>('list_projects'); |
| 87 | setProjects(loadedProjects); |
| 88 | |
| 89 | if (loadedProjects.length === 0) { |
| 90 | setActiveProjectId(null); |
| 91 | setSessions([]); |
| 92 | setActiveSessionId(null); |
| 93 | return; |
| 94 | } |
| 95 | |
| 96 | const allSessions = ( |
| 97 | await Promise.all( |
| 98 | loadedProjects.map((p) => invoke<Session[]>('list_sessions', { projectId: p.id })) |
| 99 | ) |
| 100 | ).flat(); |
| 101 | setSessions(allSessions); |
| 102 | |
| 103 | const activeProject = [...loadedProjects].sort( |
| 104 | (a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime() |
| 105 | )[0]; |
| 106 | setActiveProjectId(activeProject.id); |
| 107 | |
| 108 | const projectSessions = allSessions.filter((s) => s.projectId === activeProject.id); |
| 109 | if (projectSessions.length === 0) { |
| 110 | setActiveSessionId(null); |
| 111 | return; |
| 112 | } |
| 113 | |
| 114 | const activeSession = [...projectSessions].sort( |
| 115 | (a, b) => new Date(b.updatedAt).getTime() - new Date(a.updatedAt).getTime() |
| 116 | )[0]; |
| 117 | setActiveSessionId(activeSession.id); |
| 118 | } catch (error) { |
| 119 | console.error('Failed to load projects and sessions:', error); |
| 120 | } |
| 121 | }; |
| 122 | |
| 123 | void loadPersistedData(); |
| 124 | }, [setProjects, setActiveProjectId, setSessions, setActiveSessionId]); |