diff options
Diffstat (limited to 'packages/desktop/src/context')
| -rw-r--r-- | packages/desktop/src/context/global-sync.tsx | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/packages/desktop/src/context/global-sync.tsx b/packages/desktop/src/context/global-sync.tsx index 4c461a4e9..8151a2c6f 100644 --- a/packages/desktop/src/context/global-sync.tsx +++ b/packages/desktop/src/context/global-sync.tsx @@ -69,6 +69,32 @@ export const { use: useGlobalSync, provider: GlobalSyncProvider } = createSimple children: {}, }) + const children: Record<string, ReturnType<typeof createStore<State>>> = {} + function child(directory: string) { + if (!children[directory]) { + setGlobalStore("children", directory, { + project: "", + provider: { all: [], connected: [], default: {} }, + config: {}, + path: { state: "", config: "", worktree: "", directory: "", home: "" }, + ready: false, + agent: [], + session: [], + session_status: {}, + session_diff: {}, + todo: {}, + limit: 5, + message: {}, + part: {}, + node: [], + changes: [], + }) + children[directory] = createStore(globalStore.children[directory]) + bootstrapInstance(directory) + } + return children[directory] + } + async function loadSessions(directory: string) { globalSDK.client.session.list({ directory }).then((x) => { const sessions = (x.data ?? []) @@ -76,7 +102,8 @@ export const { use: useGlobalSync, provider: GlobalSyncProvider } = createSimple .filter((s) => !s.time.archived) .sort((a, b) => a.id.localeCompare(b.id)) .slice(0, 5) - setGlobalStore("children", directory, "session", sessions) + const [, setStore] = child(directory) + setStore("session", sessions) }) } @@ -100,32 +127,6 @@ export const { use: useGlobalSync, provider: GlobalSyncProvider } = createSimple await Promise.all(Object.values(load).map((p) => p())).then(() => setStore("ready", true)) } - const children: Record<string, ReturnType<typeof createStore<State>>> = {} - function child(directory: string) { - if (!children[directory]) { - setGlobalStore("children", directory, { - project: "", - provider: { all: [], connected: [], default: {} }, - config: {}, - path: { state: "", config: "", worktree: "", directory: "", home: "" }, - ready: false, - agent: [], - session: [], - session_status: {}, - session_diff: {}, - todo: {}, - limit: 5, - message: {}, - part: {}, - node: [], - changes: [], - }) - children[directory] = createStore(globalStore.children[directory]) - bootstrapInstance(directory) - } - return children[directory] - } - globalSDK.event.listen((e) => { const directory = e.name const event = e.details @@ -164,7 +165,12 @@ export const { use: useGlobalSync, provider: GlobalSyncProvider } = createSimple const result = Binary.search(store.session, event.properties.info.id, (s) => s.id) if (event.properties.info.time.archived) { if (result.found) { - setStore("session", (s) => s.filter((x) => x.id !== event.properties.info.id)) + setStore( + "session", + produce((draft) => { + draft.splice(result.index, 1) + }), + ) } break } |
