summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/pages
diff options
context:
space:
mode:
authorAdam <[email protected]>2026-01-20 10:00:59 -0600
committerAdam <[email protected]>2026-01-20 10:01:04 -0600
commit8595dae1a47bff819bb507d77d0dddf14c335757 (patch)
treef8fa7a333d4e792c95f0b2fed11350e60b75f41b /packages/app/src/pages
parentc365f0a7c12ccd9e2dc85108934092532499b03c (diff)
downloadopencode-8595dae1a47bff819bb507d77d0dddf14c335757.tar.gz
opencode-8595dae1a47bff819bb507d77d0dddf14c335757.zip
fix(app): session loading loop
Diffstat (limited to 'packages/app/src/pages')
-rw-r--r--packages/app/src/pages/layout.tsx24
1 files changed, 21 insertions, 3 deletions
diff --git a/packages/app/src/pages/layout.tsx b/packages/app/src/pages/layout.tsx
index 8ea21bd34..64fc52739 100644
--- a/packages/app/src/pages/layout.tsx
+++ b/packages/app/src/pages/layout.tsx
@@ -563,9 +563,13 @@ export default function Layout(props: ParentProps) {
if (!project) return [] as Session[]
if (workspaceSetting()) {
const dirs = workspaceIds(project)
+ const activeDir = params.dir ? base64Decode(params.dir) : ""
const result: Session[] = []
for (const dir of dirs) {
- const [dirStore] = globalSync.child(dir)
+ const expanded = store.workspaceExpanded[dir] ?? dir === project.worktree
+ const active = dir === activeDir
+ if (!expanded && !active) continue
+ const [dirStore] = globalSync.child(dir, { bootstrap: true })
const dirSessions = dirStore.session
.filter((session) => session.directory === dirStore.path.directory)
.filter((session) => !session.parentID && !session.time?.archived)
@@ -1238,8 +1242,12 @@ export default function Layout(props: ParentProps) {
if (!project) return
if (workspaceSetting()) {
+ const activeDir = params.dir ? base64Decode(params.dir) : ""
const dirs = [project.worktree, ...(project.sandboxes ?? [])]
for (const directory of dirs) {
+ const expanded = store.workspaceExpanded[directory] ?? directory === project.worktree
+ const active = directory === activeDir
+ if (!expanded && !active) continue
globalSync.project.loadSessions(directory)
}
return
@@ -1558,7 +1566,7 @@ export default function Layout(props: ParentProps) {
const SortableWorkspace = (props: { directory: string; project: LocalProject; mobile?: boolean }): JSX.Element => {
const sortable = createSortable(props.directory)
- const [workspaceStore, setWorkspaceStore] = globalSync.child(props.directory)
+ const [workspaceStore, setWorkspaceStore] = globalSync.child(props.directory, { bootstrap: false })
const [menuOpen, setMenuOpen] = createSignal(false)
const [pendingRename, setPendingRename] = createSignal(false)
const slug = createMemo(() => base64Encode(props.directory))
@@ -1569,12 +1577,17 @@ export default function Layout(props: ParentProps) {
.toSorted(sortSessions),
)
const local = createMemo(() => props.directory === props.project.worktree)
+ const active = createMemo(() => {
+ const current = params.dir ? base64Decode(params.dir) : ""
+ return current === props.directory
+ })
const workspaceValue = createMemo(() => {
const branch = workspaceStore.vcs?.branch
const name = branch ?? getFilename(props.directory)
return workspaceName(props.directory, props.project.id, branch) ?? name
})
- const open = createMemo(() => store.workspaceExpanded[props.directory] ?? true)
+ const open = createMemo(() => store.workspaceExpanded[props.directory] ?? local())
+ const boot = createMemo(() => open() || active())
const loading = createMemo(() => open() && workspaceStore.status !== "complete" && sessions().length === 0)
const hasMore = createMemo(() => local() && workspaceStore.sessionTotal > workspaceStore.session.length)
const loadMore = async () => {
@@ -1591,6 +1604,11 @@ export default function Layout(props: ParentProps) {
if (editorOpen(`workspace:${props.directory}`)) closeEditor()
}
+ createEffect(() => {
+ if (!boot()) return
+ globalSync.child(props.directory, { bootstrap: true })
+ })
+
const header = () => (
<div class="flex items-center gap-1 min-w-0 flex-1">
<div class="flex items-center justify-center shrink-0 size-6">