From c29ce25868b7a4b7fb29b1dfa40710dc49bebccc Mon Sep 17 00:00:00 2001 From: Aiden Cline Date: Sat, 13 Jun 2026 19:05:16 -0500 Subject: [PATCH] fix(tui): render move errors inline --- .../tui/src/component/dialog-move-session.tsx | 56 ++++++++++++++----- 1 file changed, 43 insertions(+), 13 deletions(-) diff --git a/packages/tui/src/component/dialog-move-session.tsx b/packages/tui/src/component/dialog-move-session.tsx index c3039a5a7b..5b4dac5357 100644 --- a/packages/tui/src/component/dialog-move-session.tsx +++ b/packages/tui/src/component/dialog-move-session.tsx @@ -1,6 +1,6 @@ import { useTerminalDimensions } from "@opentui/solid" import { TextAttributes } from "@opentui/core" -import { createMemo, createResource, createSignal, onMount, Show } from "solid-js" +import { createMemo, createResource, createSignal, ErrorBoundary, onMount, Show } from "solid-js" import path from "path" import { DialogSelect, type DialogSelectOption } from "../ui/dialog-select" import { useDialog } from "../ui/dialog" @@ -12,7 +12,7 @@ import { useTuiPaths } from "../context/runtime" import { Locale } from "../util/locale" import { errorMessage } from "../util/error" import { useToast } from "../ui/toast" -import { useCommandShortcut } from "../keymap" +import { useBindings, useCommandShortcut } from "../keymap" import { useProject } from "../context/project" import { Spinner } from "./spinner" import { DialogWorkspaceFileChanges } from "./dialog-workspace-file-changes" @@ -22,14 +22,26 @@ import { useRoute } from "../context/route" export type MoveSessionSelection = { type: "directory"; directory: string; subdirectory: boolean } | { type: "new" } type ProjectDirectory = ProjectDirectories[number] -export function DialogMoveSession(props: { +type DialogMoveSessionProps = { projectID: string current?: MoveSessionSelection onSelect: (selection: MoveSessionSelection) => void onCurrentChange?: (selection: MoveSessionSelection) => void initialDirectories?: ProjectDirectory[] initialRemoving?: string -}) { +} + +export function DialogMoveSession(props: DialogMoveSessionProps) { + const dialog = useDialog() + onMount(() => dialog.setSize("xlarge")) + return ( + }> + + + ) +} + +function DialogMoveSessionContent(props: DialogMoveSessionProps) { const dialog = useDialog() const sdk = useSDK() const dimensions = useTerminalDimensions() @@ -73,13 +85,6 @@ export function DialogMoveSession(props: { ) const directories = await sdk.client.project.directories({ projectID }, { throwOnError: true }) return directories.data ?? [] - } catch (error) { - toast.show({ - variant: "error", - title: "Failed to load project directories", - message: errorMessage(error), - }) - return [] } finally { setWorking(false) } @@ -271,8 +276,6 @@ export function DialogMoveSession(props: { if (await removedCurrent(deletingCurrent)) return } - onMount(() => dialog.setSize("xlarge")) - return ( void }) { + const { theme } = useTheme() + useBindings(() => ({ + bindings: [ + { + key: "return", + desc: "Retry loading project directories", + group: "Dialog", + cmd: props.retry, + }, + ], + })) + return ( + + + Failed to load project directories + + {errorMessage(props.error)} + + + retry + + + + ) +} + function contains(root: string, directory: string) { if (root === directory) return true const relative = path.relative(root, directory)