Skip to content

Commit 86fcb67

Browse files
authored
Add global ai toggle to omnibar config (#1845)
1 parent 557ef84 commit 86fcb67

File tree

6 files changed

+34
-3
lines changed

6 files changed

+34
-3
lines changed

special-pages/pages/new-tab/app/omnibar/components/OmnibarConsumer.js

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,17 @@ export function OmnibarConsumer() {
3535
* @param {object} props
3636
* @param {OmnibarConfig} props.config
3737
*/
38-
function OmnibarReadyState({ config: { enableAi = true, mode } }) {
38+
function OmnibarReadyState({ config: { enableAi = true, showAiSetting = true, mode } }) {
3939
const { t } = useTypedTranslationWith(/** @type {Strings} */ ({}));
4040

4141
const { settingsLinks } = useContext(CustomizerContext);
4242
const { setMode, setEnableAi } = useContext(OmnibarContext);
4343

4444
useEffect(() => {
45+
if (!showAiSetting) {
46+
return;
47+
}
48+
4549
settingsLinks.value = {
4650
...settingsLinks.value,
4751
duckAi: {
@@ -54,7 +58,7 @@ function OmnibarReadyState({ config: { enableAi = true, mode } }) {
5458
const { duckAi: _, ...rest } = settingsLinks.value;
5559
settingsLinks.value = rest;
5660
};
57-
}, [enableAi]);
61+
}, [enableAi, showAiSetting]);
5862

5963
return <Omnibar mode={mode} setMode={setMode} enableAi={enableAi} />;
6064
}

special-pages/pages/new-tab/app/omnibar/integration-tests/omnibar.spec.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,22 @@ test.describe('omnibar widget', () => {
272272
await expect(omnibar.hideDuckAiButton()).toHaveCount(0);
273273
});
274274

275+
test('Duck.ai toggle is hidden when showAiSetting is false', async ({ page }, workerInfo) => {
276+
const ntp = NewtabPage.create(page, workerInfo);
277+
const omnibar = new OmnibarPage(ntp);
278+
await ntp.reducedMotion();
279+
280+
await ntp.openPage({ additional: { omnibar: true, 'omnibar.showAiSetting': false } });
281+
await omnibar.ready();
282+
283+
// Open Customize panel
284+
await omnibar.customizeButton().click();
285+
286+
// The Duck.ai toggle button should not be visible
287+
await expect(omnibar.hideDuckAiButton()).toHaveCount(0);
288+
await expect(omnibar.showDuckAiButton()).toHaveCount(0);
289+
});
290+
275291
test('suggestions list arrow down navigation', async ({ page }, workerInfo) => {
276292
const ntp = NewtabPage.create(page, workerInfo);
277293
const omnibar = new OmnibarPage(ntp);

special-pages/pages/new-tab/app/omnibar/mocks/omnibar.mock-transport.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ export function omnibarMockTransport() {
5050
if (enableAiOverride === 'true' || enableAiOverride === 'false') {
5151
config.enableAi = enableAiOverride === 'true';
5252
}
53+
const showAiSettingOverride = url.searchParams.get('omnibar.showAiSetting');
54+
if (showAiSettingOverride === 'true' || showAiSettingOverride === 'false') {
55+
config.showAiSetting = showAiSettingOverride === 'true';
56+
}
5357
return config;
5458
}
5559
case 'omnibar_getSuggestions': {

special-pages/pages/new-tab/integration-tests/new-tab.page.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ export class NewtabPage {
4949
nextSteps_getData: {},
5050
rmf_getData: {},
5151
widgets_setConfig: {},
52-
omnibar_getConfig: { mode: 'search', enableAi: false },
52+
omnibar_getConfig: { mode: 'search', enableAi: false, showAiSetting: true },
5353
omnibar_getSuggestions: { suggestions: { topHits: [], duckduckgoSuggestions: [], localSuggestions: [] } },
5454
omnibar_setConfig: {},
5555
omnibar_openSuggestion: {},

special-pages/pages/new-tab/messages/types/omnibar-config.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,11 @@
1515
"title": "Enable Duck.ai",
1616
"type": "boolean",
1717
"default": true
18+
},
19+
"showAiSetting": {
20+
"title": "Show Duck.ai Setting",
21+
"type": "boolean",
22+
"default": true
1823
}
1924
}
2025
}

special-pages/pages/new-tab/types/new-tab.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ export type Suggestion =
6464
| InternalPageSuggestion;
6565
export type OmnibarMode = "search" | "ai";
6666
export type EnableDuckAi = boolean;
67+
export type ShowDuckAiSetting = boolean;
6768
export type FeedType = "privacy-stats" | "activity";
6869
/**
6970
* The visibility state of the widget, as configured by the user
@@ -507,6 +508,7 @@ export interface OmnibarSetConfigNotification {
507508
export interface OmnibarConfig {
508509
mode: OmnibarMode;
509510
enableAi?: EnableDuckAi;
511+
showAiSetting?: ShowDuckAiSetting;
510512
}
511513
/**
512514
* Generated from @see "../messages/omnibar_submitChat.notify.json"

0 commit comments

Comments
 (0)