Revert "fix(app): stale read error"

This reverts commit 152df2428d.
This commit is contained in:
Adam
2026-03-05 20:08:49 -06:00
parent 2094e8b255
commit eeeb21ff86

View File

@@ -10,9 +10,8 @@ import {
ParentProps, ParentProps,
Show, Show,
untrack, untrack,
type JSX,
} from "solid-js" } from "solid-js"
import { A, useNavigate, useParams } from "@solidjs/router" import { useNavigate, useParams } from "@solidjs/router"
import { useLayout, LocalProject } from "@/context/layout" import { useLayout, LocalProject } from "@/context/layout"
import { useGlobalSync } from "@/context/global-sync" import { useGlobalSync } from "@/context/global-sync"
import { Persist, persisted } from "@/utils/persist" import { Persist, persisted } from "@/utils/persist"
@@ -20,7 +19,6 @@ import { base64Encode } from "@opencode-ai/util/encode"
import { decode64 } from "@/utils/base64" import { decode64 } from "@/utils/base64"
import { ResizeHandle } from "@opencode-ai/ui/resize-handle" import { ResizeHandle } from "@opencode-ai/ui/resize-handle"
import { Button } from "@opencode-ai/ui/button" import { Button } from "@opencode-ai/ui/button"
import { Icon } from "@opencode-ai/ui/icon"
import { IconButton } from "@opencode-ai/ui/icon-button" import { IconButton } from "@opencode-ai/ui/icon-button"
import { Tooltip } from "@opencode-ai/ui/tooltip" import { Tooltip } from "@opencode-ai/ui/tooltip"
import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu" import { DropdownMenu } from "@opencode-ai/ui/dropdown-menu"
@@ -59,7 +57,6 @@ import { Titlebar } from "@/components/titlebar"
import { useServer } from "@/context/server" import { useServer } from "@/context/server"
import { useLanguage, type Locale } from "@/context/language" import { useLanguage, type Locale } from "@/context/language"
import { import {
childMapByParent,
displayName, displayName,
effectiveWorkspaceOrder, effectiveWorkspaceOrder,
errorMessage, errorMessage,
@@ -1846,7 +1843,7 @@ export default function Layout(props: ParentProps) {
}} }}
style={{ width: panelProps.mobile ? undefined : `${Math.max(layout.sidebar.width() - 64, 0)}px` }} style={{ width: panelProps.mobile ? undefined : `${Math.max(layout.sidebar.width() - 64, 0)}px` }}
> >
<Show when={panelProps.project} keyed> <Show when={panelProps.project}>
{(p) => ( {(p) => (
<> <>
<div class="shrink-0 px-2 py-1"> <div class="shrink-0 px-2 py-1">
@@ -1855,7 +1852,7 @@ export default function Layout(props: ParentProps) {
<InlineEditor <InlineEditor
id={`project:${projectId()}`} id={`project:${projectId()}`}
value={projectName} value={projectName}
onSave={(next) => renameProject(p, next)} onSave={(next) => renameProject(p(), next)}
class="text-14-medium text-text-strong truncate" class="text-14-medium text-text-strong truncate"
displayClass="text-14-medium text-text-strong truncate" displayClass="text-14-medium text-text-strong truncate"
stopPropagation stopPropagation
@@ -1864,7 +1861,7 @@ export default function Layout(props: ParentProps) {
<Tooltip <Tooltip
placement="bottom" placement="bottom"
gutter={2} gutter={2}
value={p.worktree} value={p().worktree}
class="shrink-0" class="shrink-0"
contentStyle={{ contentStyle={{
"max-width": "640px", "max-width": "640px",
@@ -1872,7 +1869,7 @@ export default function Layout(props: ParentProps) {
}} }}
> >
<span class="text-12-regular text-text-base truncate select-text"> <span class="text-12-regular text-text-base truncate select-text">
{p.worktree.replace(homedir(), "~")} {p().worktree.replace(homedir(), "~")}
</span> </span>
</Tooltip> </Tooltip>
</div> </div>
@@ -1883,7 +1880,7 @@ export default function Layout(props: ParentProps) {
icon="dot-grid" icon="dot-grid"
variant="ghost" variant="ghost"
data-action="project-menu" data-action="project-menu"
data-project={base64Encode(p.worktree)} data-project={base64Encode(p().worktree)}
class="shrink-0 size-6 rounded-md data-[expanded]:bg-surface-base-active" class="shrink-0 size-6 rounded-md data-[expanded]:bg-surface-base-active"
classList={{ classList={{
"opacity-0 group-hover/project:opacity-100 data-[expanded]:opacity-100": !panelProps.mobile, "opacity-0 group-hover/project:opacity-100 data-[expanded]:opacity-100": !panelProps.mobile,
@@ -1892,24 +1889,24 @@ export default function Layout(props: ParentProps) {
/> />
<DropdownMenu.Portal mount={!panelProps.mobile ? state.nav : undefined}> <DropdownMenu.Portal mount={!panelProps.mobile ? state.nav : undefined}>
<DropdownMenu.Content class="mt-1"> <DropdownMenu.Content class="mt-1">
<DropdownMenu.Item onSelect={() => showEditProjectDialog(p)}> <DropdownMenu.Item onSelect={() => showEditProjectDialog(p())}>
<DropdownMenu.ItemLabel>{language.t("common.edit")}</DropdownMenu.ItemLabel> <DropdownMenu.ItemLabel>{language.t("common.edit")}</DropdownMenu.ItemLabel>
</DropdownMenu.Item> </DropdownMenu.Item>
<DropdownMenu.Item <DropdownMenu.Item
data-action="project-workspaces-toggle" data-action="project-workspaces-toggle"
data-project={base64Encode(p.worktree)} data-project={base64Encode(p().worktree)}
disabled={p.vcs !== "git" && !layout.sidebar.workspaces(p.worktree)()} disabled={p().vcs !== "git" && !layout.sidebar.workspaces(p().worktree)()}
onSelect={() => toggleProjectWorkspaces(p)} onSelect={() => toggleProjectWorkspaces(p())}
> >
<DropdownMenu.ItemLabel> <DropdownMenu.ItemLabel>
{layout.sidebar.workspaces(p.worktree)() {layout.sidebar.workspaces(p().worktree)()
? language.t("sidebar.workspaces.disable") ? language.t("sidebar.workspaces.disable")
: language.t("sidebar.workspaces.enable")} : language.t("sidebar.workspaces.enable")}
</DropdownMenu.ItemLabel> </DropdownMenu.ItemLabel>
</DropdownMenu.Item> </DropdownMenu.Item>
<DropdownMenu.Item <DropdownMenu.Item
data-action="project-clear-notifications" data-action="project-clear-notifications"
data-project={base64Encode(p.worktree)} data-project={base64Encode(p().worktree)}
disabled={unseenCount() === 0} disabled={unseenCount() === 0}
onSelect={clearNotifications} onSelect={clearNotifications}
> >
@@ -1920,8 +1917,8 @@ export default function Layout(props: ParentProps) {
<DropdownMenu.Separator /> <DropdownMenu.Separator />
<DropdownMenu.Item <DropdownMenu.Item
data-action="project-close-menu" data-action="project-close-menu"
data-project={base64Encode(p.worktree)} data-project={base64Encode(p().worktree)}
onSelect={() => closeProject(p.worktree)} onSelect={() => closeProject(p().worktree)}
> >
<DropdownMenu.ItemLabel>{language.t("common.close")}</DropdownMenu.ItemLabel> <DropdownMenu.ItemLabel>{language.t("common.close")}</DropdownMenu.ItemLabel>
</DropdownMenu.Item> </DropdownMenu.Item>
@@ -1941,7 +1938,7 @@ export default function Layout(props: ParentProps) {
size="large" size="large"
icon="plus-small" icon="plus-small"
class="w-full" class="w-full"
onClick={() => navigateWithSidebarReset(`/${base64Encode(p.worktree)}/session`)} onClick={() => navigateWithSidebarReset(`/${base64Encode(p().worktree)}/session`)}
> >
{language.t("command.session.new")} {language.t("command.session.new")}
</Button> </Button>
@@ -1949,7 +1946,7 @@ export default function Layout(props: ParentProps) {
<div class="flex-1 min-h-0"> <div class="flex-1 min-h-0">
<LocalWorkspace <LocalWorkspace
ctx={workspaceSidebarCtx} ctx={workspaceSidebarCtx}
project={p} project={p()}
sortNow={sortNow} sortNow={sortNow}
mobile={panelProps.mobile} mobile={panelProps.mobile}
/> />
@@ -1959,7 +1956,7 @@ export default function Layout(props: ParentProps) {
> >
<> <>
<div class="shrink-0 py-4 px-3"> <div class="shrink-0 py-4 px-3">
<Button size="large" icon="plus-small" class="w-full" onClick={() => createWorkspace(p)}> <Button size="large" icon="plus-small" class="w-full" onClick={() => createWorkspace(p())}>
{language.t("workspace.new")} {language.t("workspace.new")}
</Button> </Button>
</div> </div>
@@ -1984,7 +1981,7 @@ export default function Layout(props: ParentProps) {
<SortableWorkspace <SortableWorkspace
ctx={workspaceSidebarCtx} ctx={workspaceSidebarCtx}
directory={directory} directory={directory}
project={p} project={p()}
sortNow={sortNow} sortNow={sortNow}
mobile={panelProps.mobile} mobile={panelProps.mobile}
/> />
@@ -2096,11 +2093,9 @@ export default function Layout(props: ParentProps) {
/> />
</div> </div>
<Show when={!layout.sidebar.opened() ? hoverProjectData()?.worktree : undefined} keyed> <Show when={!layout.sidebar.opened() ? hoverProjectData()?.worktree : undefined} keyed>
{(worktree) => ( <div class="absolute inset-y-0 left-16 z-50 flex" onMouseEnter={aim.reset}>
<div class="absolute inset-y-0 left-16 z-50 flex" onMouseEnter={aim.reset}> <SidebarPanel project={hoverProjectData()} />
<SidebarPanel project={hoverProjectData()} /> </div>
</div>
)}
</Show> </Show>
<Show when={layout.sidebar.opened()}> <Show when={layout.sidebar.opened()}>
<ResizeHandle <ResizeHandle