42 lines
1.5 KiB
TypeScript
42 lines
1.5 KiB
TypeScript
import { createMemo, Show, type ParentProps } from "solid-js"
|
|
import { useParams } from "@solidjs/router"
|
|
import { SDKProvider, useSDK } from "@/context/sdk"
|
|
import { SyncProvider, useSync } from "@/context/sync"
|
|
import { LocalProvider } from "@/context/local"
|
|
import { PermissionProvider } from "@/context/permission"
|
|
import { base64Decode } from "@opencode-ai/util/encode"
|
|
import { DataProvider } from "@opencode-ai/ui/context"
|
|
import { iife } from "@opencode-ai/util/iife"
|
|
|
|
export default function Layout(props: ParentProps) {
|
|
const params = useParams()
|
|
const directory = createMemo(() => {
|
|
return base64Decode(params.dir!)
|
|
})
|
|
return (
|
|
<Show when={params.dir} keyed>
|
|
<SDKProvider directory={directory()}>
|
|
<SyncProvider>
|
|
{iife(() => {
|
|
const sync = useSync()
|
|
const sdk = useSDK()
|
|
const respond = (input: {
|
|
sessionID: string
|
|
permissionID: string
|
|
response: "once" | "always" | "reject"
|
|
}) => sdk.client.permission.respond(input)
|
|
|
|
return (
|
|
<PermissionProvider permissions={sync.data.permission} onRespond={respond}>
|
|
<DataProvider data={sync.data} directory={directory()} onPermissionRespond={respond}>
|
|
<LocalProvider>{props.children}</LocalProvider>
|
|
</DataProvider>
|
|
</PermissionProvider>
|
|
)
|
|
})}
|
|
</SyncProvider>
|
|
</SDKProvider>
|
|
</Show>
|
|
)
|
|
}
|