Skip to content

Commit 05defab

Browse files
committed
refactor: extract unified settings entry wrapper
1 parent ac31f47 commit 05defab

3 files changed

Lines changed: 168 additions & 1 deletion

File tree

lib/codex-manager/settings-hub.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ import {
9393
configureUnifiedSettingsController,
9494
type SettingsHubActionType,
9595
} from "./unified-settings-controller.js";
96+
import { configureUnifiedSettingsEntry } from "./unified-settings-entry.js";
9697

9798
type DashboardDisplaySettingKey =
9899
| "menuShowStatusBadge"
@@ -776,7 +777,8 @@ async function promptSettingsHub(
776777
async function configureUnifiedSettings(
777778
initialSettings?: DashboardDisplaySettings,
778779
): Promise<DashboardDisplaySettings> {
779-
return configureUnifiedSettingsController(initialSettings, {
780+
return configureUnifiedSettingsEntry(initialSettings, {
781+
configureUnifiedSettingsController,
780782
cloneDashboardSettings,
781783
cloneBackendPluginConfig,
782784
loadDashboardDisplaySettings,
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
import type { DashboardDisplaySettings } from "../dashboard-settings.js";
2+
import type { PluginConfig } from "../types.js";
3+
import type { SettingsHubActionType } from "./unified-settings-controller.js";
4+
5+
export async function configureUnifiedSettingsEntry(
6+
initialSettings: DashboardDisplaySettings | undefined,
7+
deps: {
8+
configureUnifiedSettingsController: (
9+
initialSettings: DashboardDisplaySettings | undefined,
10+
deps: {
11+
cloneDashboardSettings: (
12+
settings: DashboardDisplaySettings,
13+
) => DashboardDisplaySettings;
14+
cloneBackendPluginConfig: (config: PluginConfig) => PluginConfig;
15+
loadDashboardDisplaySettings: () => Promise<DashboardDisplaySettings>;
16+
loadPluginConfig: () => PluginConfig;
17+
applyUiThemeFromDashboardSettings: (
18+
settings: DashboardDisplaySettings,
19+
) => void;
20+
promptSettingsHub: (
21+
focus: SettingsHubActionType,
22+
) => Promise<{ type: SettingsHubActionType } | null>;
23+
configureDashboardDisplaySettings: (
24+
current: DashboardDisplaySettings,
25+
) => Promise<DashboardDisplaySettings>;
26+
configureStatuslineSettings: (
27+
current: DashboardDisplaySettings,
28+
) => Promise<DashboardDisplaySettings>;
29+
promptBehaviorSettings: (
30+
current: DashboardDisplaySettings,
31+
) => Promise<DashboardDisplaySettings | null>;
32+
promptThemeSettings: (
33+
current: DashboardDisplaySettings,
34+
) => Promise<DashboardDisplaySettings | null>;
35+
dashboardSettingsEqual: (
36+
left: DashboardDisplaySettings,
37+
right: DashboardDisplaySettings,
38+
) => boolean;
39+
persistDashboardSettingsSelection: (
40+
selected: DashboardDisplaySettings,
41+
keys: readonly (keyof DashboardDisplaySettings)[],
42+
scope: string,
43+
) => Promise<DashboardDisplaySettings>;
44+
promptExperimentalSettings: (
45+
config: PluginConfig,
46+
) => Promise<PluginConfig | null>;
47+
backendSettingsEqual: (
48+
left: PluginConfig,
49+
right: PluginConfig,
50+
) => boolean;
51+
persistBackendConfigSelection: (
52+
config: PluginConfig,
53+
scope: string,
54+
) => Promise<PluginConfig>;
55+
configureBackendSettings: (
56+
config: PluginConfig,
57+
) => Promise<PluginConfig>;
58+
BEHAVIOR_PANEL_KEYS: readonly (keyof DashboardDisplaySettings)[];
59+
THEME_PANEL_KEYS: readonly (keyof DashboardDisplaySettings)[];
60+
},
61+
) => Promise<DashboardDisplaySettings>;
62+
cloneDashboardSettings: (
63+
settings: DashboardDisplaySettings,
64+
) => DashboardDisplaySettings;
65+
cloneBackendPluginConfig: (config: PluginConfig) => PluginConfig;
66+
loadDashboardDisplaySettings: () => Promise<DashboardDisplaySettings>;
67+
loadPluginConfig: () => PluginConfig;
68+
applyUiThemeFromDashboardSettings: (
69+
settings: DashboardDisplaySettings,
70+
) => void;
71+
promptSettingsHub: (
72+
focus: SettingsHubActionType,
73+
) => Promise<{ type: SettingsHubActionType } | null>;
74+
configureDashboardDisplaySettings: (
75+
current: DashboardDisplaySettings,
76+
) => Promise<DashboardDisplaySettings>;
77+
configureStatuslineSettings: (
78+
current: DashboardDisplaySettings,
79+
) => Promise<DashboardDisplaySettings>;
80+
promptBehaviorSettings: (
81+
current: DashboardDisplaySettings,
82+
) => Promise<DashboardDisplaySettings | null>;
83+
promptThemeSettings: (
84+
current: DashboardDisplaySettings,
85+
) => Promise<DashboardDisplaySettings | null>;
86+
dashboardSettingsEqual: (
87+
left: DashboardDisplaySettings,
88+
right: DashboardDisplaySettings,
89+
) => boolean;
90+
persistDashboardSettingsSelection: (
91+
selected: DashboardDisplaySettings,
92+
keys: readonly (keyof DashboardDisplaySettings)[],
93+
scope: string,
94+
) => Promise<DashboardDisplaySettings>;
95+
promptExperimentalSettings: (
96+
config: PluginConfig,
97+
) => Promise<PluginConfig | null>;
98+
backendSettingsEqual: (left: PluginConfig, right: PluginConfig) => boolean;
99+
persistBackendConfigSelection: (
100+
config: PluginConfig,
101+
scope: string,
102+
) => Promise<PluginConfig>;
103+
configureBackendSettings: (config: PluginConfig) => Promise<PluginConfig>;
104+
BEHAVIOR_PANEL_KEYS: readonly (keyof DashboardDisplaySettings)[];
105+
THEME_PANEL_KEYS: readonly (keyof DashboardDisplaySettings)[];
106+
},
107+
): Promise<DashboardDisplaySettings> {
108+
return deps.configureUnifiedSettingsController(initialSettings, {
109+
cloneDashboardSettings: deps.cloneDashboardSettings,
110+
cloneBackendPluginConfig: deps.cloneBackendPluginConfig,
111+
loadDashboardDisplaySettings: deps.loadDashboardDisplaySettings,
112+
loadPluginConfig: deps.loadPluginConfig,
113+
applyUiThemeFromDashboardSettings: deps.applyUiThemeFromDashboardSettings,
114+
promptSettingsHub: deps.promptSettingsHub,
115+
configureDashboardDisplaySettings: deps.configureDashboardDisplaySettings,
116+
configureStatuslineSettings: deps.configureStatuslineSettings,
117+
promptBehaviorSettings: deps.promptBehaviorSettings,
118+
promptThemeSettings: deps.promptThemeSettings,
119+
dashboardSettingsEqual: deps.dashboardSettingsEqual,
120+
persistDashboardSettingsSelection: deps.persistDashboardSettingsSelection,
121+
promptExperimentalSettings: deps.promptExperimentalSettings,
122+
backendSettingsEqual: deps.backendSettingsEqual,
123+
persistBackendConfigSelection: deps.persistBackendConfigSelection,
124+
configureBackendSettings: deps.configureBackendSettings,
125+
BEHAVIOR_PANEL_KEYS: deps.BEHAVIOR_PANEL_KEYS,
126+
THEME_PANEL_KEYS: deps.THEME_PANEL_KEYS,
127+
});
128+
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import { describe, expect, it, vi } from "vitest";
2+
import { configureUnifiedSettingsEntry } from "../lib/codex-manager/unified-settings-entry.js";
3+
4+
describe("unified settings entry", () => {
5+
it("delegates to the unified settings controller with provided deps", async () => {
6+
const configureUnifiedSettingsController = vi.fn(async () => ({
7+
menuShowStatusBadge: true,
8+
}));
9+
10+
const result = await configureUnifiedSettingsEntry(undefined, {
11+
configureUnifiedSettingsController,
12+
cloneDashboardSettings: vi.fn((settings) => settings),
13+
cloneBackendPluginConfig: vi.fn((config) => config),
14+
loadDashboardDisplaySettings: vi.fn(async () => ({
15+
menuShowStatusBadge: false,
16+
})),
17+
loadPluginConfig: vi.fn(() => ({ fetchTimeoutMs: 1000 })),
18+
applyUiThemeFromDashboardSettings: vi.fn(),
19+
promptSettingsHub: vi.fn(),
20+
configureDashboardDisplaySettings: vi.fn(),
21+
configureStatuslineSettings: vi.fn(),
22+
promptBehaviorSettings: vi.fn(),
23+
promptThemeSettings: vi.fn(),
24+
dashboardSettingsEqual: vi.fn(),
25+
persistDashboardSettingsSelection: vi.fn(),
26+
promptExperimentalSettings: vi.fn(),
27+
backendSettingsEqual: vi.fn(),
28+
persistBackendConfigSelection: vi.fn(),
29+
configureBackendSettings: vi.fn(),
30+
BEHAVIOR_PANEL_KEYS: [],
31+
THEME_PANEL_KEYS: [],
32+
});
33+
34+
expect(configureUnifiedSettingsController).toHaveBeenCalled();
35+
expect(result).toEqual({ menuShowStatusBadge: true });
36+
});
37+
});

0 commit comments

Comments
 (0)