wip: desktop work

This commit is contained in:
Adam
2025-10-13 10:19:46 -05:00
parent bb82d43094
commit c04e892991
3 changed files with 32 additions and 16 deletions

View File

@@ -1,26 +1,36 @@
import { useSync, useLocal } from "@/context" import { useSync, useLocal } from "@/context"
import { Button, Tooltip } from "@/ui" import { Tooltip } from "@/ui"
import { DateTime } from "luxon"
import { VList } from "virtua/solid" import { VList } from "virtua/solid"
export default function SessionList() { export default function SessionList() {
const sync = useSync() const sync = useSync()
const local = useLocal() const local = useLocal()
return ( return (
<VList data={sync.data.session} class="p-2"> <VList data={sync.data.session} class="p-3">
{(session) => ( {(session) => (
<Tooltip placement="right" value={session.title} class="w-full min-w-0"> <Tooltip placement="right" value={session.title} class="w-full min-w-0">
<Button <button
size="sm" data-active={local.session.active()?.id === session.id}
variant="ghost" class="group w-full min-w-0 text-left truncate justify-start text-xs my-0.5 cursor-pointer
classList={{ flex flex-col gap-1 rounded-md p-2 border-[0.5px] border-transparent
"w-full min-w-0 py-1 text-left truncate justify-start text-text-muted text-xs": true, hover:not-data-[active=true]:bg-background-panel
"text-text!": local.session.active()?.id === session.id, data-[active=true]:bg-background-element data-[active=true]:border-border-subtle"
}}
onClick={() => local.session.setActive(session.id)} onClick={() => local.session.setActive(session.id)}
> >
<span class="truncate">{session.title}</span> <div class="flex gap-1 items-center">
</Button> <div
classList={{
"text-text/80 min-w-0 grow truncate": true,
"group-data-[active=true]:text-text!": true,
}}
>
{session.title}
</div>
<div class="shrink-0 text-text-muted/60">{DateTime.fromMillis(session.time.updated).toRelative()}</div>
</div>
<span class="text-text-muted truncate">{session.share?.url}</span>
</button>
</Tooltip> </Tooltip>
)} )}
</VList> </VList>

View File

@@ -467,6 +467,11 @@ function init() {
return sync.session.get(store.active) return sync.session.get(store.active)
}) })
createEffect(() => {
if (!store.active) return
sync.session.sync(store.active)
})
return { return {
active, active,
setActive(sessionId: string | undefined) { setActive(sessionId: string | undefined) {

View File

@@ -214,9 +214,10 @@ export default function Page() {
} }
return ( return (
<div class="relative"> <div class="relative h-screen flex flex-col">
<div class="h-screen flex"> <header class="h-10 shrink-0 bg-background-panel"></header>
<div class="shrink-0 w-56"> <main class="h-[calc(100vh-2.5rem)] flex">
<div class="shrink-0 w-64">
<SessionList /> <SessionList />
</div> </div>
<div class="grow w-full min-w-0 overflow-y-auto flex justify-center"> <div class="grow w-full min-w-0 overflow-y-auto flex justify-center">
@@ -342,7 +343,7 @@ export default function Page() {
</Show> </Show>
</div> </div>
</div> </div>
</div> </main>
<Show when={store.modelSelectOpen}> <Show when={store.modelSelectOpen}>
<SelectDialog <SelectDialog
key={(x) => `${x.provider.id}:${x.id}`} key={(x) => `${x.provider.id}:${x.id}`}