diff --git a/packages/tui/src/ui/dialog-select.tsx b/packages/tui/src/ui/dialog-select.tsx index 40ad0f24b14..1d225dffc08 100644 --- a/packages/tui/src/ui/dialog-select.tsx +++ b/packages/tui/src/ui/dialog-select.tsx @@ -155,11 +155,10 @@ export function DialogSelect(props: DialogSelectProps) { .filter((item) => item.label), ...(props.footerHints ?? []), ]) - const actionItems = createMemo(() => + const actionItems = () => visibleActions() .filter(isActionItem) - .filter((item) => !isActionDisabled(item)), - ) + .filter((item) => !isActionDisabled(item)) createEffect(() => { const index = focusedAction() diff --git a/packages/tui/test/cli/tui/dialog-select.test.tsx b/packages/tui/test/cli/tui/dialog-select.test.tsx index 96c849186db..c9404706d8b 100644 --- a/packages/tui/test/cli/tui/dialog-select.test.tsx +++ b/packages/tui/test/cli/tui/dialog-select.test.tsx @@ -16,6 +16,7 @@ async function renderSelect( options: DialogSelectOption[], onGlobal: () => void, onRow: (option: DialogSelectOption) => void, + current?: string, ) { const state = path.join(root, "state") await mkdir(state, { recursive: true }) @@ -52,6 +53,7 @@ async function renderSelect( []) return { app, moved, replaceOptions, selected } } +test("renders actions with a current selection", async () => { + await using tmp = await tmpdir() + const app = await renderSelect( + tmp.path, + [{ title: "Alpha", value: "alpha" }], + () => {}, + () => {}, + "alpha", + ) + + try { + await app.waitForFrame((frame) => frame.includes("delete")) + } finally { + app.renderer.destroy() + } +}) + test("dialog actions run without options while row actions still require a selection", async () => { await using tmp = await tmpdir() let global = 0