Skip to content

Commit 63cd1e9

Browse files
committed
Merge PR #268: refactor: extract settings hub entry wrappers
# Conflicts: # lib/codex-manager/backend-settings-prompt.ts # lib/codex-manager/settings-hub.ts # test/backend-settings-prompt.test.ts
2 parents 5e8f5fd + 8fe9b82 commit 63cd1e9

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
@@ -66,6 +66,7 @@ import {
6666
cloneDashboardSettingsData,
6767
dashboardSettingsDataEqual,
6868
} from "./dashboard-settings-data.js";
69+
import { configureDashboardSettingsEntry } from "./dashboard-settings-entry.js";
6970
import { promptExperimentalSettingsMenu } from "./experimental-settings-prompt.js";
7071
import {
7172
getExperimentalSelectOptions,
@@ -466,7 +467,8 @@ async function promptDashboardDisplaySettings(
466467
async function configureDashboardDisplaySettings(
467468
currentSettings?: DashboardDisplaySettings,
468469
): Promise<DashboardDisplaySettings> {
469-
return configureDashboardSettingsController(currentSettings, {
470+
return configureDashboardSettingsEntry(currentSettings, {
471+
configureDashboardSettingsController,
470472
loadDashboardDisplaySettings,
471473
promptSettings: promptDashboardDisplaySettings,
472474
settingsEqual: dashboardSettingsEqual,
@@ -504,7 +506,8 @@ async function promptStatuslineSettings(
504506
async function configureStatuslineSettings(
505507
currentSettings?: DashboardDisplaySettings,
506508
): Promise<DashboardDisplaySettings> {
507-
return configureDashboardSettingsController(currentSettings, {
509+
return configureDashboardSettingsEntry(currentSettings, {
510+
configureDashboardSettingsController,
508511
loadDashboardDisplaySettings,
509512
promptSettings: promptStatuslineSettings,
510513
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)