summaryrefslogtreecommitdiffhomepage
path: root/packages/desktop/src/context/layout.tsx
diff options
context:
space:
mode:
authorAdam <[email protected]>2025-12-09 11:08:55 -0600
committerAdam <[email protected]>2025-12-09 11:09:00 -0600
commit5442adb5174cee717b9a301d0cce8be8f3338388 (patch)
treee6b74870c33ad5501fe202595af3d510930c0084 /packages/desktop/src/context/layout.tsx
parent6b2ac20abc19d3678b251cc730b3faf56e916bb5 (diff)
downloadopencode-5442adb5174cee717b9a301d0cce8be8f3338388.tar.gz
opencode-5442adb5174cee717b9a301d0cce8be8f3338388.zip
wip(desktop): progress
Diffstat (limited to 'packages/desktop/src/context/layout.tsx')
-rw-r--r--packages/desktop/src/context/layout.tsx34
1 files changed, 26 insertions, 8 deletions
diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx
index 1b43cf511..5ef41c1f4 100644
--- a/packages/desktop/src/context/layout.tsx
+++ b/packages/desktop/src/context/layout.tsx
@@ -1,14 +1,18 @@
import { createStore } from "solid-js/store"
-import { createMemo } from "solid-js"
+import { createMemo, onMount } from "solid-js"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { makePersisted } from "@solid-primitives/storage"
+import { useGlobalSync } from "./global-sync"
+import { useGlobalSDK } from "./global-sdk"
export const { use: useLayout, provider: LayoutProvider } = createSimpleContext({
name: "Layout",
init: () => {
+ const globalSdk = useGlobalSDK()
+ const globalSync = useGlobalSync()
const [store, setStore] = makePersisted(
createStore({
- projects: [] as { directory: string; expanded: boolean; lastSession?: string }[],
+ projects: [] as { directory: string; expanded: boolean }[],
sidebar: {
opened: false,
width: 280,
@@ -26,11 +30,31 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
},
)
+ async function loadProjectSessions(directory: string) {
+ const [, setStore] = globalSync.child(directory)
+ globalSdk.client.session.list({ directory }).then((x) => {
+ const sessions = (x.data ?? [])
+ .slice()
+ .sort((a, b) => a.id.localeCompare(b.id))
+ .slice(0, 5)
+ setStore("session", sessions)
+ })
+ }
+
+ onMount(() => {
+ Promise.all(
+ store.projects.map(({ directory }) => {
+ return loadProjectSessions(directory)
+ }),
+ )
+ })
+
return {
projects: {
list: createMemo(() => store.projects),
open(directory: string) {
if (store.projects.find((x) => x.directory === directory)) return
+ loadProjectSessions(directory)
setStore("projects", (x) => [...x, { directory, expanded: true }])
},
close(directory: string) {
@@ -42,12 +66,6 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext(
collapse(directory: string) {
setStore("projects", (x) => x.map((x) => (x.directory === directory ? { ...x, expanded: false } : x)))
},
- lastSession(directory: string) {
- return store.projects.find((x) => x.directory === directory)?.lastSession
- },
- setLastSession(directory: string, session: string | undefined) {
- setStore("projects", (x) => x.map((x) => (x.directory === directory ? { ...x, lastSession: session } : x)))
- },
},
sidebar: {
opened: createMemo(() => store.sidebar.opened),