diff --git a/packages/app/e2e/browser/agent-message-submission.spec.ts b/packages/app/e2e/browser/agent-message-submission.spec.ts index 6bf5b13ce..d2c836b61 100644 --- a/packages/app/e2e/browser/agent-message-submission.spec.ts +++ b/packages/app/e2e/browser/agent-message-submission.spec.ts @@ -315,10 +315,11 @@ async function configureInterruptInSettings(page: Page): Promise { async function selectSendBehaviorInSettings( page: Page, - buttonName: string, + behaviorLabel: string, stored: string, ): Promise { - await page.getByRole("button", { name: buttonName, exact: true }).click(); + await page.getByRole("button", { name: /^Default send: / }).click(); + await page.getByRole("menuitem", { name: behaviorLabel, exact: true }).click(); await expect .poll(async () => { const raw = await page.evaluate(() => localStorage.getItem("@paseo:app-settings")); diff --git a/packages/app/e2e/browser/settings-toggle-tab-regression.spec.ts b/packages/app/e2e/browser/settings-toggle-tab-regression.spec.ts index 456f8e623..f1abdd090 100644 --- a/packages/app/e2e/browser/settings-toggle-tab-regression.spec.ts +++ b/packages/app/e2e/browser/settings-toggle-tab-regression.spec.ts @@ -70,9 +70,28 @@ test.describe("Settings toggle tab regression", () => { await pressSettingsToggleShortcut(page); await expect(page).toHaveURL(/\/settings\/general$/); - await page.getByRole("button", { name: "Queue", exact: true }).click(); + const defaultSendTrigger = page.getByRole("button", { + name: "Default send: Steer", + exact: true, + }); + await expect(defaultSendTrigger).toBeVisible(); + await expect(page.getByRole("menuitem", { name: "Queue", exact: true })).toHaveCount(0); + + await defaultSendTrigger.click(); + await expect(page.getByRole("menuitem", { name: "Steer", exact: true })).toHaveAttribute( + "aria-checked", + "true", + ); + await page.getByRole("menuitem", { name: "Queue", exact: true }).click(); await expectSendBehavior(page, "queue"); - await page.getByRole("button", { name: "Interrupt", exact: true }).click(); + const queuedDefaultSendTrigger = page.getByRole("button", { + name: "Default send: Queue", + exact: true, + }); + await expect(queuedDefaultSendTrigger).toBeVisible(); + + await queuedDefaultSendTrigger.click(); + await page.getByRole("menuitem", { name: "Interrupt", exact: true }).click(); await expectSendBehavior(page, "interrupt"); await pressSettingsToggleShortcut(page); diff --git a/packages/app/src/screens/settings-screen.tsx b/packages/app/src/screens/settings-screen.tsx index 1dda09811..9bd91798f 100644 --- a/packages/app/src/screens/settings-screen.tsx +++ b/packages/app/src/screens/settings-screen.tsx @@ -284,6 +284,24 @@ interface ServiceUrlBehaviorMenuItemProps { onChange: (value: ServiceUrlBehavior) => void; } +interface SendBehaviorMenuItemProps { + value: SendBehavior; + label: string; + selected: boolean; + onChange: (value: SendBehavior) => void; +} + +function SendBehaviorMenuItem({ value, label, selected, onChange }: SendBehaviorMenuItemProps) { + const handleSelect = useCallback(() => { + onChange(value); + }, [onChange, value]); + return ( + + {label} + + ); +} + function ServiceUrlBehaviorMenuItem({ value, label, @@ -336,6 +354,9 @@ function GeneralSection({ const { t, i18n } = useTranslation(); const activeLocale = getActiveLocale(i18n.language); const sendBehaviorOptions = useMemo(() => getSendBehaviorOptions(t), [t]); + const selectedSendBehaviorLabel = + sendBehaviorOptions.find((option) => option.value === settings.sendBehavior)?.label ?? + settings.sendBehavior; const sendBehaviorDescriptionKey = `settings.general.defaultSend.descriptions.${settings.sendBehavior}`; const selectedLanguageOption = LANGUAGE_OPTIONS.find( (option) => option.value === settings.language, @@ -380,12 +401,26 @@ function GeneralSection({ {t("settings.general.defaultSend.label")} {t(sendBehaviorDescriptionKey)} - + + + {selectedSendBehaviorLabel} + + + {sendBehaviorOptions.map((option) => ( + + ))} + +