summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-11-05 16:32:05 -0600
committerAdam <[email protected]>2025-11-05 16:32:08 -0600
commite006e3355cff3de25e023edcee0b59985e7db66b (patch)
tree97d54c28fe10801fadfdb28adce18d1c68c4c0ea /packages/desktop/src/context
parentd7e31f76c480be81985590dfabcca353be8442bc (diff)
downloadopencode-e006e3355cff3de25e023edcee0b59985e7db66b.tar.gz
opencode-e006e3355cff3de25e023edcee0b59985e7db66b.zip
feat(desktop): incrementally load sessions in side nav
Diffstat (limited to 'packages/desktop/src/context')
-rw-r--r--packages/desktop/src/context/sync.tsx22
1 files changed, 16 insertions, 6 deletions
diff --git a/packages/desktop/src/context/sync.tsx b/packages/desktop/src/context/sync.tsx
index c60206b0b..1e960397b 100644
--- a/packages/desktop/src/context/sync.tsx
+++ b/packages/desktop/src/context/sync.tsx
@@ -16,6 +16,8 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
config: Config
path: Path
session: Session[]
+ limit: number
+ more: boolean
message: {
[sessionID: string]: Message[]
}
@@ -32,6 +34,8 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
agent: [],
provider: [],
session: [],
+ limit: 10,
+ more: false,
message: {},
part: {},
node: [],
@@ -106,12 +110,14 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
path: () => sdk.client.path.get().then((x) => setStore("path", x.data!)),
agent: () => sdk.client.app.agents().then((x) => setStore("agent", x.data ?? [])),
session: () =>
- sdk.client.session.list().then((x) =>
- setStore(
- "session",
- (x.data ?? []).slice().sort((a, b) => a.id.localeCompare(b.id)),
- ),
- ),
+ sdk.client.session.list().then((x) => {
+ const sessions = (x.data ?? [])
+ .slice()
+ .sort((a, b) => a.id.localeCompare(b.id))
+ .slice(0, store.limit)
+ setStore("session", sessions)
+ setStore("more", sessions.length === store.limit)
+ }),
config: () => sdk.client.config.get().then((x) => setStore("config", x.data!)),
changes: () => sdk.client.file.status().then((x) => setStore("changes", x.data!)),
node: () => sdk.client.file.list({ query: { path: "/" } }).then((x) => setStore("node", x.data!)),
@@ -184,6 +190,10 @@ export const { use: useSync, provider: SyncProvider } = createSimpleContext({
}),
)
},
+ fetch: async (count = 10) => {
+ setStore("limit", (x) => x + count)
+ await load.session()
+ },
},
load,
absolute,