From 7c30a4230eb43a24028ea116cbf9dd2ca19bfd0a Mon Sep 17 00:00:00 2001 From: LukeParkerDev <10430890+Hona@users.noreply.github.com> Date: Tue, 11 Aug 2026 15:53:50 +1000 Subject: [PATCH] fix(app): preserve settings server context --- .../components/project-settings-extensions.tsx | 6 +++--- .../app/src/components/server/server-row-menu.tsx | 15 ++++++++++++--- .../app/src/components/settings-v2/appearance.tsx | 6 +++--- .../components/settings-v2/dialog-settings-v2.tsx | 3 +++ .../app/src/components/settings-v2/extensions.tsx | 6 +++--- .../app/src/components/settings-v2/servers.tsx | 9 ++------- .../src/pages/home/home-projects-controller.tsx | 2 +- .../app/src/pages/home/home-projects-view.tsx | 2 +- packages/app/src/wsl/settings.tsx | 4 ---- 9 files changed, 28 insertions(+), 25 deletions(-) diff --git a/packages/app/src/components/project-settings-extensions.tsx b/packages/app/src/components/project-settings-extensions.tsx index 0e42d66516..4c427a2258 100644 --- a/packages/app/src/components/project-settings-extensions.tsx +++ b/packages/app/src/components/project-settings-extensions.tsx @@ -8,7 +8,7 @@ import { useSDK } from "@/context/sdk" import { useServerSDK } from "@/context/server-sdk" import { useServerSync } from "@/context/server-sync" import { useSync } from "@/context/sync" -import { Link } from "./link" +import { ExternalLink } from "./external-link" type SkillItem = { name: string @@ -198,9 +198,9 @@ export const ProjectSettingsExtensions: Component = () => {
{language.t("project.settings.extensions.added")} - + {language.t("settings.extensions.addSkills")} - +
0}> {skillRows(projectSkills())} diff --git a/packages/app/src/components/server/server-row-menu.tsx b/packages/app/src/components/server/server-row-menu.tsx index aedcae8537..619c8a50be 100644 --- a/packages/app/src/components/server/server-row-menu.tsx +++ b/packages/app/src/components/server/server-row-menu.tsx @@ -9,7 +9,7 @@ import { ServerConnection } from "@/context/server" export const ServerRowMenu: Component<{ server: ServerConnection.Any domain: ServerActionsController - onEdit: (server: ServerConnection.Any) => void + onEdit: (server: ServerConnection.Http) => void open?: boolean onOpenChange?: (open: boolean) => void }> = (props) => { @@ -49,7 +49,7 @@ export const ServerRowMenuView: Component<{ canDefault: boolean isDefault: boolean canRemove: boolean - onEdit: (server: ServerConnection.Any) => void + onEdit: (server: ServerConnection.Http) => void onSetDefault: () => void onRemoveDefault: () => void onRemove: () => void @@ -57,6 +57,7 @@ export const ServerRowMenuView: Component<{ onOpenChange?: (open: boolean) => void }> = (props) => { const builtin = () => ServerConnection.builtin(props.server) + const httpServer = () => (props.server.type === "http" ? props.server : undefined) return ( {props.labels.server} - props.onEdit(props.server)}>{props.labels.edit} + { + const server = httpServer() + if (server) props.onEdit(server) + }} + > + {props.labels.edit} + {props.labels.default} diff --git a/packages/app/src/components/settings-v2/appearance.tsx b/packages/app/src/components/settings-v2/appearance.tsx index c9a937081e..beb72b0b85 100644 --- a/packages/app/src/components/settings-v2/appearance.tsx +++ b/packages/app/src/components/settings-v2/appearance.tsx @@ -2,7 +2,7 @@ import { Component, createMemo } from "solid-js" import { SelectV2 } from "@opencode-ai/ui/v2/select-v2" import { TextInputV2 } from "@opencode-ai/ui/v2/text-input-v2" import { useLanguage } from "@/context/language" -import { Link } from "../link" +import { ExternalLink } from "../external-link" import { SettingsListV2 } from "./parts/list" import { SettingsRowV2 } from "./parts/row" import { createAppearanceSettingsController, type AppearanceSettingsController } from "./general-controllers" @@ -104,9 +104,9 @@ export const SettingsAppearanceV2: Component = () => { description={ <> {language.t("settings.general.row.theme.description")}{" "} - + {language.t("common.learnMore")} - + } > diff --git a/packages/app/src/components/settings-v2/dialog-settings-v2.tsx b/packages/app/src/components/settings-v2/dialog-settings-v2.tsx index 4dad7fe061..d4b73ee6ca 100644 --- a/packages/app/src/components/settings-v2/dialog-settings-v2.tsx +++ b/packages/app/src/components/settings-v2/dialog-settings-v2.tsx @@ -19,6 +19,7 @@ import { useLayout } from "@/context/layout" import { useTabs } from "@/context/tabs" import { useServerSync } from "@/context/server-sync" import { useGlobal } from "@/context/global" +import { ServerConnection } from "@/context/server" import "./settings-v2.css" export const DialogSettings: Component<{ @@ -32,6 +33,8 @@ export const DialogSettings: Component<{ const tabs = useTabs() const serverSync = useServerSync() const global = useGlobal() + const currentServer = global.servers.list().find((server) => global.ensureServerCtx(server).sync === serverSync()) + if (currentServer) global.settings.server.set(ServerConnection.key(currentServer)) const [tab, setTab] = createSignal(props.defaultValue ?? "general") const directory = createMemo(() => { const server = global.settings.server.selected() diff --git a/packages/app/src/components/settings-v2/extensions.tsx b/packages/app/src/components/settings-v2/extensions.tsx index efb0909362..89d1a4da4c 100644 --- a/packages/app/src/components/settings-v2/extensions.tsx +++ b/packages/app/src/components/settings-v2/extensions.tsx @@ -5,7 +5,7 @@ import { TabsV2 } from "@opencode-ai/ui/v2/tabs-v2" import { useLanguage } from "@/context/language" import { useServerSDK } from "@/context/server-sdk" import { useServerSync } from "@/context/server-sync" -import { Link } from "../link" +import { ExternalLink } from "../external-link" import { InlineServerSelect } from "./parts/server-select" import "./settings-v2.css" @@ -128,12 +128,12 @@ export const SettingsExtensionsV2: Component = () => { {language.t("settings.extensions.availableAll")} - {language.t("settings.extensions.addSkills")} - +
diff --git a/packages/app/src/components/settings-v2/servers.tsx b/packages/app/src/components/settings-v2/servers.tsx index 54e93c4891..e30e9e99db 100644 --- a/packages/app/src/components/settings-v2/servers.tsx +++ b/packages/app/src/components/settings-v2/servers.tsx @@ -42,15 +42,10 @@ export const SettingsServersV2: Component = () => { void dialog.push(() => ) } - const openEdit = (server: ServerConnection.Any) => { + const openEdit = (server: ServerConnection.Http) => { void dialog.push(() => ) } - const openWslEdit = (key: ServerConnection.Key) => { - const item = controller.collection.items().find((candidate) => ServerConnection.key(candidate) === key) - if (item) openEdit(item) - } - return ( <>
{ } > - + {(item) => { const key = ServerConnection.key(item) diff --git a/packages/app/src/pages/home/home-projects-controller.tsx b/packages/app/src/pages/home/home-projects-controller.tsx index bad16b4e75..f62907e203 100644 --- a/packages/app/src/pages/home/home-projects-controller.tsx +++ b/packages/app/src/pages/home/home-projects-controller.tsx @@ -62,7 +62,7 @@ export function createHomeProjectsController(home: HomeController) { serverManagement.defaults.set(conn ? ServerConnection.key(conn) : null), canRemove: (conn: ServerConnection.Any) => serverManagement.connection.canRemove(ServerConnection.key(conn)), remove: (conn: ServerConnection.Any) => serverManagement.connection.remove(ServerConnection.key(conn)), - edit: (conn: ServerConnection.Any) => dialog.show(() => ), + edit: (conn: ServerConnection.Http) => dialog.show(() => ), focus: home.selection.focusServer, }, project: { diff --git a/packages/app/src/pages/home/home-projects-view.tsx b/packages/app/src/pages/home/home-projects-view.tsx index 7745eee636..a7dd6ee907 100644 --- a/packages/app/src/pages/home/home-projects-view.tsx +++ b/packages/app/src/pages/home/home-projects-view.tsx @@ -45,7 +45,7 @@ export type HomeProjectsViewProps = { onChooseProject: (server: ServerConnection.Any) => void onFocusServer: (server: ServerConnection.Any) => void onToggleCollapsed: (server: ServerConnection.Any) => void - onEditServer: (server: ServerConnection.Any) => void + onEditServer: (server: ServerConnection.Http) => void onSetDefaultServer: (server: ServerConnection.Any | undefined) => void canRemoveServer: (server: ServerConnection.Any) => boolean onRemoveServer: (server: ServerConnection.Any) => void diff --git a/packages/app/src/wsl/settings.tsx b/packages/app/src/wsl/settings.tsx index 971f5b4d23..22b302e51a 100644 --- a/packages/app/src/wsl/settings.tsx +++ b/packages/app/src/wsl/settings.tsx @@ -67,7 +67,6 @@ export function useFilteredWslServers(filter: Accessor) { export function WslServerSettings(props: { domain: Pick servers: ReturnType - onEdit: (key: ServerConnection.Key) => void }) { const platform = usePlatform() const language = useLanguage() @@ -139,9 +138,6 @@ export function WslServerSettings(props: { {language.t("wsl.server.menu.label")} - props.onEdit(key)}> - {language.t("dialog.server.menu.edit")} - api && request.mutate(() => api.startServer(key))}> {language.t("wsl.server.retryStart")}