mirror of
https://gitea.toothfairyai.com/ToothFairyAI/tf_code.git
synced 2026-04-26 10:34:47 +00:00
app: replace autoselect effects with single resource
This commit is contained in:
@@ -2,6 +2,7 @@ import {
|
|||||||
batch,
|
batch,
|
||||||
createEffect,
|
createEffect,
|
||||||
createMemo,
|
createMemo,
|
||||||
|
createResource,
|
||||||
For,
|
For,
|
||||||
on,
|
on,
|
||||||
onCleanup,
|
onCleanup,
|
||||||
@@ -277,16 +278,6 @@ export default function Layout(props: ParentProps) {
|
|||||||
setHoverProject(undefined)
|
setHoverProject(undefined)
|
||||||
})
|
})
|
||||||
|
|
||||||
const autoselecting = createMemo(() => {
|
|
||||||
if (params.dir) return false
|
|
||||||
if (!state.autoselect) return false
|
|
||||||
if (!pageReady()) return true
|
|
||||||
if (!layoutReady()) return true
|
|
||||||
const list = layout.projects.list()
|
|
||||||
if (list.length > 0) return true
|
|
||||||
return !!server.projects.last()
|
|
||||||
})
|
|
||||||
|
|
||||||
createEffect(() => {
|
createEffect(() => {
|
||||||
if (!state.autoselect) return
|
if (!state.autoselect) return
|
||||||
const dir = params.dir
|
const dir = params.dir
|
||||||
@@ -572,33 +563,22 @@ export default function Layout(props: ParentProps) {
|
|||||||
return projects.find((p) => p.worktree === root)
|
return projects.find((p) => p.worktree === root)
|
||||||
})
|
})
|
||||||
|
|
||||||
createEffect(
|
const [autoselecting] = createResource(async () => {
|
||||||
on(
|
await ready.promise
|
||||||
() => ({ ready: pageReady(), layoutReady: layoutReady(), dir: params.dir, list: layout.projects.list() }),
|
await layout.ready.promise
|
||||||
(value) => {
|
|
||||||
if (!value.ready) return
|
|
||||||
if (!value.layoutReady) return
|
|
||||||
if (!state.autoselect) return
|
|
||||||
if (value.dir) return
|
|
||||||
|
|
||||||
const last = server.projects.last()
|
const list = layout.projects.list()
|
||||||
|
const last = server.projects.last()
|
||||||
|
|
||||||
if (value.list.length === 0) {
|
if (list.length === 0) {
|
||||||
if (!last) return
|
if (!last) return
|
||||||
setState("autoselect", false)
|
await openProject(last, true)
|
||||||
openProject(last, false)
|
} else {
|
||||||
navigateToProject(last)
|
const next = list.find((project) => project.worktree === last) ?? list[0]
|
||||||
return
|
if (!next) return
|
||||||
}
|
await openProject(next.worktree, true)
|
||||||
|
}
|
||||||
const next = value.list.find((project) => project.worktree === last) ?? value.list[0]
|
})
|
||||||
if (!next) return
|
|
||||||
setState("autoselect", false)
|
|
||||||
openProject(next.worktree, false)
|
|
||||||
navigateToProject(next.worktree)
|
|
||||||
},
|
|
||||||
),
|
|
||||||
)
|
|
||||||
|
|
||||||
const workspaceName = (directory: string, projectId?: string, branch?: string) => {
|
const workspaceName = (directory: string, projectId?: string, branch?: string) => {
|
||||||
const key = workspaceKey(directory)
|
const key = workspaceKey(directory)
|
||||||
@@ -1311,7 +1291,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
|
|
||||||
function openProject(directory: string, navigate = true) {
|
function openProject(directory: string, navigate = true) {
|
||||||
layout.projects.open(directory)
|
layout.projects.open(directory)
|
||||||
if (navigate) navigateToProject(directory)
|
if (navigate) return navigateToProject(directory)
|
||||||
}
|
}
|
||||||
|
|
||||||
const handleDeepLinks = (urls: string[]) => {
|
const handleDeepLinks = (urls: string[]) => {
|
||||||
@@ -2381,7 +2361,8 @@ export default function Layout(props: ParentProps) {
|
|||||||
"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,
|
"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,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Show when={!autoselecting()} fallback={<div class="size-full" />}>
|
<Show when={!autoselecting.loading} fallback={<div class="size-full" />}>
|
||||||
|
slkdjflkj
|
||||||
{props.children}
|
{props.children}
|
||||||
</Show>
|
</Show>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -5,7 +5,12 @@ import { createResource, type Accessor } from "solid-js"
|
|||||||
import type { SetStoreFunction, Store } from "solid-js/store"
|
import type { SetStoreFunction, Store } from "solid-js/store"
|
||||||
|
|
||||||
type InitType = Promise<string> | string | null
|
type InitType = Promise<string> | string | null
|
||||||
type PersistedWithReady<T> = [Store<T>, SetStoreFunction<T>, InitType, Accessor<boolean>]
|
type PersistedWithReady<T> = [
|
||||||
|
Store<T>,
|
||||||
|
SetStoreFunction<T>,
|
||||||
|
InitType,
|
||||||
|
Accessor<boolean> & { promise: undefined | Promise<any> },
|
||||||
|
]
|
||||||
|
|
||||||
type PersistTarget = {
|
type PersistTarget = {
|
||||||
storage?: string
|
storage?: string
|
||||||
@@ -460,5 +465,12 @@ export function persisted<T>(
|
|||||||
{ initialValue: !isAsync },
|
{ initialValue: !isAsync },
|
||||||
)
|
)
|
||||||
|
|
||||||
return [state, setState, init, () => ready() === true]
|
return [
|
||||||
|
state,
|
||||||
|
setState,
|
||||||
|
init,
|
||||||
|
Object.assign(() => ready() === true, {
|
||||||
|
promise: init instanceof Promise ? init : undefined,
|
||||||
|
}),
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user