Skip to content

Commit 4c0f2b5

Browse files
committed
refactor: extract dashboard settings entry wrapper
1 parent ac2ac29 commit 4c0f2b5

3 files changed

Lines changed: 88 additions & 2 deletions

File tree

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
import type { DashboardDisplaySettings } from "../dashboard-settings.js";
2+
3+
export async function configureDashboardSettingsEntry(
4+
currentSettings: DashboardDisplaySettings | undefined,
5+
deps: {
6+
configureDashboardSettingsController: (
7+
currentSettings: DashboardDisplaySettings | undefined,
8+
deps: {
9+
loadDashboardDisplaySettings: () => Promise<DashboardDisplaySettings>;
10+
promptSettings: (
11+
settings: DashboardDisplaySettings,
12+
) => Promise<DashboardDisplaySettings | null>;
13+
settingsEqual: (
14+
left: DashboardDisplaySettings,
15+
right: DashboardDisplaySettings,
16+
) => boolean;
17+
persistSelection: (
18+
selected: DashboardDisplaySettings,
19+
) => Promise<DashboardDisplaySettings>;
20+
applyUiThemeFromDashboardSettings: (
21+
settings: DashboardDisplaySettings,
22+
) => void;
23+
isInteractive: () => boolean;
24+
getDashboardSettingsPath: () => string;
25+
writeLine: (message: string) => void;
26+
},
27+
) => Promise<DashboardDisplaySettings>;
28+
loadDashboardDisplaySettings: () => Promise<DashboardDisplaySettings>;
29+
promptSettings: (
30+
settings: DashboardDisplaySettings,
31+
) => Promise<DashboardDisplaySettings | null>;
32+
settingsEqual: (
33+
left: DashboardDisplaySettings,
34+
right: DashboardDisplaySettings,
35+
) => boolean;
36+
persistSelection: (
37+
selected: DashboardDisplaySettings,
38+
) => Promise<DashboardDisplaySettings>;
39+
applyUiThemeFromDashboardSettings: (
40+
settings: DashboardDisplaySettings,
41+
) => void;
42+
isInteractive: () => boolean;
43+
getDashboardSettingsPath: () => string;
44+
writeLine: (message: string) => void;
45+
},
46+
): Promise<DashboardDisplaySettings> {
47+
return deps.configureDashboardSettingsController(currentSettings, {
48+
loadDashboardDisplaySettings: deps.loadDashboardDisplaySettings,
49+
promptSettings: deps.promptSettings,
50+
settingsEqual: deps.settingsEqual,
51+
persistSelection: deps.persistSelection,
52+
applyUiThemeFromDashboardSettings: deps.applyUiThemeFromDashboardSettings,
53+
isInteractive: deps.isInteractive,
54+
getDashboardSettingsPath: deps.getDashboardSettingsPath,
55+
writeLine: deps.writeLine,
56+
});
57+
}

lib/codex-manager/settings-hub.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ import {
6262
cloneDashboardSettingsData,
6363
dashboardSettingsDataEqual,
6464
} from "./dashboard-settings-data.js";
65+
import { configureDashboardSettingsEntry } from "./dashboard-settings-entry.js";
6566
import { promptExperimentalSettingsMenu } from "./experimental-settings-prompt.js";
6667
import {
6768
getExperimentalSelectOptions,
@@ -477,7 +478,8 @@ async function promptDashboardDisplaySettings(
477478
async function configureDashboardDisplaySettings(
478479
currentSettings?: DashboardDisplaySettings,
479480
): Promise<DashboardDisplaySettings> {
480-
return configureDashboardSettingsController(currentSettings, {
481+
return configureDashboardSettingsEntry(currentSettings, {
482+
configureDashboardSettingsController,
481483
loadDashboardDisplaySettings,
482484
promptSettings: promptDashboardDisplaySettings,
483485
settingsEqual: dashboardSettingsEqual,
@@ -533,7 +535,8 @@ async function promptStatuslineSettings(
533535
async function configureStatuslineSettings(
534536
currentSettings?: DashboardDisplaySettings,
535537
): Promise<DashboardDisplaySettings> {
536-
return configureDashboardSettingsController(currentSettings, {
538+
return configureDashboardSettingsEntry(currentSettings, {
539+
configureDashboardSettingsController,
537540
loadDashboardDisplaySettings,
538541
promptSettings: promptStatuslineSettings,
539542
settingsEqual: dashboardSettingsEqual,
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { describe, expect, it, vi } from "vitest";
2+
import { configureDashboardSettingsEntry } from "../lib/codex-manager/dashboard-settings-entry.js";
3+
4+
describe("dashboard settings entry", () => {
5+
it("delegates to dashboard settings controller with provided deps", async () => {
6+
const configureDashboardSettingsController = vi.fn(async () => ({
7+
menuShowStatusBadge: false,
8+
}));
9+
const result = await configureDashboardSettingsEntry(undefined, {
10+
configureDashboardSettingsController,
11+
loadDashboardDisplaySettings: vi.fn(async () => ({
12+
menuShowStatusBadge: true,
13+
})),
14+
promptSettings: vi.fn(),
15+
settingsEqual: vi.fn(() => false),
16+
persistSelection: vi.fn(),
17+
applyUiThemeFromDashboardSettings: vi.fn(),
18+
isInteractive: vi.fn(() => true),
19+
getDashboardSettingsPath: vi.fn(() => "/tmp/settings.json"),
20+
writeLine: vi.fn(),
21+
});
22+
23+
expect(configureDashboardSettingsController).toHaveBeenCalled();
24+
expect(result).toEqual({ menuShowStatusBadge: false });
25+
});
26+
});

0 commit comments

Comments
 (0)