Skip to content

Commit 4ba7d3b

Browse files
committed
app: replace autoselect effects with single resource
1 parent a43783a commit 4ba7d3b

2 files changed

Lines changed: 33 additions & 40 deletions

File tree

packages/app/src/pages/layout.tsx

Lines changed: 19 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import {
22
batch,
33
createEffect,
44
createMemo,
5+
createResource,
56
For,
67
on,
78
onCleanup,
@@ -277,16 +278,6 @@ export default function Layout(props: ParentProps) {
277278
setHoverProject(undefined)
278279
})
279280

280-
const autoselecting = createMemo(() => {
281-
if (params.dir) return false
282-
if (!state.autoselect) return false
283-
if (!pageReady()) return true
284-
if (!layoutReady()) return true
285-
const list = layout.projects.list()
286-
if (list.length > 0) return true
287-
return !!server.projects.last()
288-
})
289-
290281
createEffect(() => {
291282
if (!state.autoselect) return
292283
const dir = params.dir
@@ -572,33 +563,22 @@ export default function Layout(props: ParentProps) {
572563
return projects.find((p) => p.worktree === root)
573564
})
574565

575-
createEffect(
576-
on(
577-
() => ({ ready: pageReady(), layoutReady: layoutReady(), dir: params.dir, list: layout.projects.list() }),
578-
(value) => {
579-
if (!value.ready) return
580-
if (!value.layoutReady) return
581-
if (!state.autoselect) return
582-
if (value.dir) return
583-
584-
const last = server.projects.last()
585-
586-
if (value.list.length === 0) {
587-
if (!last) return
588-
setState("autoselect", false)
589-
openProject(last, false)
590-
navigateToProject(last)
591-
return
592-
}
566+
const [autoselecting] = createResource(async () => {
567+
await ready.promise
568+
await layout.ready.promise
593569

594-
const next = value.list.find((project) => project.worktree === last) ?? value.list[0]
595-
if (!next) return
596-
setState("autoselect", false)
597-
openProject(next.worktree, false)
598-
navigateToProject(next.worktree)
599-
},
600-
),
601-
)
570+
const list = layout.projects.list()
571+
const last = server.projects.last()
572+
573+
if (list.length === 0) {
574+
if (!last) return
575+
await openProject(last, true)
576+
} else {
577+
const next = list.find((project) => project.worktree === last) ?? list[0]
578+
if (!next) return
579+
await openProject(next.worktree, true)
580+
}
581+
})
602582

603583
const workspaceName = (directory: string, projectId?: string, branch?: string) => {
604584
const key = workspaceKey(directory)
@@ -1311,7 +1291,7 @@ export default function Layout(props: ParentProps) {
13111291

13121292
function openProject(directory: string, navigate = true) {
13131293
layout.projects.open(directory)
1314-
if (navigate) navigateToProject(directory)
1294+
if (navigate) return navigateToProject(directory)
13151295
}
13161296

13171297
const handleDeepLinks = (urls: string[]) => {
@@ -2381,7 +2361,8 @@ export default function Layout(props: ParentProps) {
23812361
"size-full overflow-x-hidden flex flex-col items-start contain-strict border-t border-border-weak-base bg-background-base xl:border-l xl:rounded-tl-[12px]": true,
23822362
}}
23832363
>
2384-
<Show when={!autoselecting()} fallback={<div class="size-full" />}>
2364+
<Show when={!autoselecting.loading} fallback={<div class="size-full" />}>
2365+
slkdjflkj
23852366
{props.children}
23862367
</Show>
23872368
</main>

packages/app/src/utils/persist.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,12 @@ import { createResource, type Accessor } from "solid-js"
55
import type { SetStoreFunction, Store } from "solid-js/store"
66

77
type InitType = Promise<string> | string | null
8-
type PersistedWithReady<T> = [Store<T>, SetStoreFunction<T>, InitType, Accessor<boolean>]
8+
type PersistedWithReady<T> = [
9+
Store<T>,
10+
SetStoreFunction<T>,
11+
InitType,
12+
Accessor<boolean> & { promise: undefined | Promise<any> },
13+
]
914

1015
type PersistTarget = {
1116
storage?: string
@@ -460,5 +465,12 @@ export function persisted<T>(
460465
{ initialValue: !isAsync },
461466
)
462467

463-
return [state, setState, init, () => ready() === true]
468+
return [
469+
state,
470+
setState,
471+
init,
472+
Object.assign(() => ready() === true, {
473+
promise: init instanceof Promise ? init : undefined,
474+
}),
475+
]
464476
}

0 commit comments

Comments
 (0)