MCPcopy
hub / github.com/anomalyco/opencode / DirectoryDataProvider

Function DirectoryDataProvider

packages/app/src/pages/directory-layout.tsx:16–74  ·  view source on GitHub ↗
(
  props: ParentProps<{
    directory: string | Accessor<string>
    draftID?: string
    server?: Accessor<ServerConnection.Key | undefined>
  }>,
)

Source from the content-addressed store, hash-verified

14import { useServerSync } from "@/context/server-sync"
15
16export function DirectoryDataProvider(
17 props: ParentProps<{
18 directory: string | Accessor<string>
19 draftID?: string
20 server?: Accessor<ServerConnection.Key | undefined>
21 }>,
22) {
23 const location = useLocation()
24 const navigate = useNavigate()
25 const params = useParams()
26 const sync = useSync()
27 const serverSync = useServerSync()
28 const directory = () => (typeof props.directory === "function" ? props.directory() : props.directory)
29 const slug = createMemo(() => base64Encode(directory()))
30 const href = (sessionID: string) => {
31 const server = props.server?.()
32 if (server) return sessionHref(server, sessionID)
33 return `/${slug()}/session/${sessionID}`
34 }
35
36 createEffect(() => {
37 // A draft lives at /new-session?draftId=… and has no directory segment to normalize.
38 if (props.draftID || props.server?.()) return
39 const next = sync().data.path.directory
40 if (!next || next === directory()) return
41 const path = location.pathname.slice(slug().length + 1)
42 navigate(`/${base64Encode(next)}${path}${location.search}${location.hash}`, { replace: true })
43 })
44
45 createResource(
46 () => params.id,
47 (id) =>
48 sync()
49 .session.sync(id)
50 .catch(() => {}),
51 )
52
53 createEffect(() => {
54 const sessionID = params.id
55 if (!sessionID) return
56 serverSync().session.pin(sessionID)
57 onCleanup(() => serverSync().session.unpin(sessionID))
58 })
59
60 return (
61 <Show when={directory()} keyed>
62 {(directory) => (
63 <DataProvider
64 data={sync().data}
65 directory={directory}
66 onNavigateToSession={(sessionID: string) => navigate(href(sessionID))}
67 onSessionHref={href}
68 >
69 <LocalProvider>{props.children}</LocalProvider>
70 </DataProvider>
71 )}
72 </Show>
73 )

Callers

nothing calls this directly

Calls 9

useSyncFunction · 0.90
base64EncodeFunction · 0.90
useLocationFunction · 0.85
syncMethod · 0.80
directoryFunction · 0.70
hrefFunction · 0.70
syncFunction · 0.50
navigateFunction · 0.50
serverSyncFunction · 0.50

Tested by

no test coverage detected