fix(app): file tree out of sync

This commit is contained in:
Adam
2026-02-05 06:49:47 -06:00
parent 1a6a3f4b54
commit 5b3d94ebaa
4 changed files with 18 additions and 17 deletions

View File

@@ -1,5 +1,5 @@
import { createEffect, createMemo, createRoot, onCleanup } from "solid-js"
import { createStore, produce } from "solid-js/store"
import { batch, createEffect, createMemo, createRoot, onCleanup } from "solid-js"
import { createStore, produce, reconcile } from "solid-js/store"
import { createSimpleContext } from "@opencode-ai/ui/context"
import type { FileContent, FileNode } from "@opencode-ai/sdk/v2"
import { showToast } from "@opencode-ai/ui/toast"
@@ -8,7 +8,6 @@ import { getFilename } from "@opencode-ai/util/path"
import { useSDK } from "./sdk"
import { useSync } from "./sync"
import { useLanguage } from "@/context/language"
import { decode64 } from "@/utils/base64"
import { Persist, persisted } from "@/utils/persist"
export type FileSelection = {
@@ -276,12 +275,10 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({
const params = useParams()
const language = useLanguage()
const directory = createMemo(() => decode64(params.dir) ?? sdk.directory)
const scope = createMemo(() => directory())
const scope = createMemo(() => sdk.directory)
function normalize(input: string) {
const root = directory()
const root = scope()
const prefix = root.endsWith("/") ? root : root + "/"
let path = unquoteGitPath(stripQueryAndHash(stripFileProtocol(input)))
@@ -372,9 +369,13 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({
inflight.clear()
treeInflight.clear()
contentLru.clear()
setStore("file", {})
setTree("node", {})
setTree("dir", { "": { expanded: true } })
batch(() => {
setStore("file", reconcile({}))
setTree("node", reconcile({}))
setTree("dir", reconcile({}))
setTree("dir", "", { expanded: true })
})
})
const viewCache = new Map<string, ViewCacheEntry>()
@@ -415,7 +416,7 @@ export const { use: useFile, provider: FileProvider } = createSimpleContext({
return entry.value
}
const view = createMemo(() => loadView(directory(), params.id))
const view = createMemo(() => loadView(scope(), params.id))
function ensure(path: string) {
if (!path) return

View File

@@ -1,17 +1,17 @@
import { createOpencodeClient, type Event } from "@opencode-ai/sdk/v2/client"
import { createSimpleContext } from "@opencode-ai/ui/context"
import { createGlobalEmitter } from "@solid-primitives/event-bus"
import { createEffect, createMemo, onCleanup } from "solid-js"
import { createEffect, createMemo, onCleanup, type Accessor } from "solid-js"
import { useGlobalSDK } from "./global-sdk"
import { usePlatform } from "./platform"
export const { use: useSDK, provider: SDKProvider } = createSimpleContext({
name: "SDK",
init: (props: { directory: string }) => {
init: (props: { directory: Accessor<string> }) => {
const platform = usePlatform()
const globalSDK = useGlobalSDK()
const directory = createMemo(() => props.directory)
const directory = createMemo(props.directory)
const client = createMemo(() =>
createOpencodeClient({
baseUrl: globalSDK.url,

View File

@@ -31,7 +31,7 @@ export default function Layout(props: ParentProps) {
})
return (
<Show when={directory()}>
<SDKProvider directory={directory()}>
<SDKProvider directory={directory}>
<SyncProvider>
{iife(() => {
const sync = useSync()

View File

@@ -490,7 +490,7 @@ export default function Page() {
createEffect(
on(
() => params.id,
sessionKey,
() => setTitle({ draft: "", editing: false, saving: false, menuOpen: false, pendingRename: false }),
{ defer: true },
),
@@ -1672,7 +1672,7 @@ export default function Page() {
createEffect(
on(
() => params.dir,
() => sdk.directory,
() => {
void file.tree.list("")