diff --git a/src/features/housekeeping/domains/operations/pages/personalization.tsx b/src/features/housekeeping/domains/operations/pages/personalization.tsx index 4bc79c65..d5575cd5 100644 --- a/src/features/housekeeping/domains/operations/pages/personalization.tsx +++ b/src/features/housekeeping/domains/operations/pages/personalization.tsx @@ -5,6 +5,7 @@ import type { HousekeepingSurface, } from "../../../foundation/contracts"; import type { HousekeepingPreferences } from "../../../foundation/preferences/schema"; +import type { HousekeepingWidgetOption } from "../../../foundation/preferences/widget-options"; import type { HousekeepingWidgetLoadResult } from "../../../foundation/registry"; import { Favorites } from "../../../foundation/shell/favorites"; import { WidgetGrid } from "../../../foundation/shell/widget-grid"; @@ -12,7 +13,6 @@ import { type HousekeepingPreferenceSaver, WidgetSettings, } from "../../../foundation/shell/widget-settings"; -import type { OperationsWidgetOption } from "../personalization-model"; export interface OperationsPersonalizationLabels { readonly favorites: { @@ -55,7 +55,7 @@ export function OperationsPersonalization({ }: { readonly preferences: HousekeepingPreferences; readonly routes: readonly HousekeepingRouteDefinition[]; - readonly widgets: readonly OperationsWidgetOption[]; + readonly widgets: readonly HousekeepingWidgetOption[]; readonly widgetResult: HousekeepingWidgetLoadResult; readonly surface: HousekeepingSurface; readonly labels: OperationsPersonalizationLabels; diff --git a/src/features/housekeeping/domains/operations/pages/workspace.test.tsx b/src/features/housekeeping/domains/operations/pages/workspace.test.tsx index c3badcdf..0f5a7bf1 100644 --- a/src/features/housekeeping/domains/operations/pages/workspace.test.tsx +++ b/src/features/housekeeping/domains/operations/pages/workspace.test.tsx @@ -7,7 +7,7 @@ import { ok, } from "../../../foundation/contracts"; import { defaultHousekeepingPreferences } from "../../../foundation/preferences/schema"; -import type { OperationsWidgetOption } from "../personalization-model"; +import type { HousekeepingWidgetOption } from "../../../foundation/preferences/widget-options"; import type { OperationsWorkspaceLoadResult } from "../queries"; import { OperationsWorkspacePage } from "./workspace"; @@ -20,7 +20,7 @@ const routes: readonly HousekeepingRouteDefinition[] = [ capability, }, ]; -const widgets: readonly OperationsWidgetOption[] = [ +const widgets: readonly HousekeepingWidgetOption[] = [ { id: "people.queue", kind: "mandatory", diff --git a/src/features/housekeeping/domains/operations/pages/workspace.tsx b/src/features/housekeeping/domains/operations/pages/workspace.tsx index 4150a4d8..d4325e2c 100644 --- a/src/features/housekeeping/domains/operations/pages/workspace.tsx +++ b/src/features/housekeeping/domains/operations/pages/workspace.tsx @@ -3,10 +3,10 @@ import type { HousekeepingSurface, } from "../../../foundation/contracts"; import { HousekeepingPageShell } from "../../../foundation/page/housekeeping-page-shell"; +import type { HousekeepingWidgetOption } from "../../../foundation/preferences/widget-options"; import { OperationalInbox } from "../../../foundation/shell/operational-inbox"; import { RecentWork } from "../../../foundation/shell/recent-work"; import type { HousekeepingPreferenceSaver } from "../../../foundation/shell/widget-settings"; -import type { OperationsWidgetOption } from "../personalization-model"; import type { OperationsWorkspaceLoadResult } from "../queries"; import { OperationsPersonalization, @@ -50,7 +50,7 @@ export function OperationsWorkspacePage({ }: { readonly result: OperationsWorkspaceLoadResult; readonly routes: readonly HousekeepingRouteDefinition[]; - readonly widgetDefinitions: readonly OperationsWidgetOption[]; + readonly widgetDefinitions: readonly HousekeepingWidgetOption[]; readonly surface: HousekeepingSurface; readonly labels: OperationsWorkspaceLabels; readonly routeTitles: Readonly>; diff --git a/src/features/housekeeping/domains/operations/route-handlers.ts b/src/features/housekeeping/domains/operations/route-handlers.ts index be60b102..1b63d185 100644 --- a/src/features/housekeeping/domains/operations/route-handlers.ts +++ b/src/features/housekeeping/domains/operations/route-handlers.ts @@ -1,5 +1,6 @@ import { createElement } from "react"; import { satisfiesCapability } from "../../foundation/capability-context"; +import { toHousekeepingWidgetOptions } from "../../foundation/preferences/widget-options"; import { createHousekeepingRegistry } from "../../foundation/registry"; import { HOUSEKEEPING_MANIFESTS } from "../../manifests"; import type { HousekeepingRouteHandler } from "../../route-handlers"; @@ -7,7 +8,6 @@ import { type OperationsWorkspaceLabels, OperationsWorkspacePage, } from "./pages/workspace"; -import { toOperationsWidgetOptions } from "./personalization-model"; import { operationsWorkspaceQuery } from "./queries"; export async function renderOperationsWorkspacePage( @@ -139,7 +139,7 @@ export async function renderOperationsWorkspacePage( return createElement(OperationsWorkspacePage, { result: workspaceResult, routes, - widgetDefinitions: toOperationsWidgetOptions(widgetDefinitions), + widgetDefinitions: toHousekeepingWidgetOptions(widgetDefinitions), surface: input.surface ?? "preview", labels, routeTitles, diff --git a/src/features/housekeeping/domains/operations/personalization-model.test.ts b/src/features/housekeeping/foundation/preferences/widget-options.test.ts similarity index 76% rename from src/features/housekeeping/domains/operations/personalization-model.test.ts rename to src/features/housekeeping/foundation/preferences/widget-options.test.ts index 04039f39..83e4ee16 100644 --- a/src/features/housekeeping/domains/operations/personalization-model.test.ts +++ b/src/features/housekeeping/foundation/preferences/widget-options.test.ts @@ -3,10 +3,10 @@ import { anyCapability, type HousekeepingWidgetDefinition, ok, -} from "../../foundation/contracts"; -import { toOperationsWidgetOptions } from "./personalization-model"; +} from "../contracts"; +import { toHousekeepingWidgetOptions } from "./widget-options"; -describe("toOperationsWidgetOptions", () => { +describe("toHousekeepingWidgetOptions", () => { it("projects provider definitions to a serializable client view model", () => { const load = vi.fn(async () => ok({ count: 1 }, "widget")); const definitions: readonly HousekeepingWidgetDefinition[] = [ @@ -19,7 +19,7 @@ describe("toOperationsWidgetOptions", () => { }, ]; - const options = toOperationsWidgetOptions(definitions); + const options = toHousekeepingWidgetOptions(definitions); expect(options).toEqual([{ id: "people.queue", kind: "mandatory" }]); expect(structuredClone(options)).toEqual(options); diff --git a/src/features/housekeeping/domains/operations/personalization-model.ts b/src/features/housekeeping/foundation/preferences/widget-options.ts similarity index 61% rename from src/features/housekeeping/domains/operations/personalization-model.ts rename to src/features/housekeeping/foundation/preferences/widget-options.ts index e7c7f2f9..79ede729 100644 --- a/src/features/housekeeping/domains/operations/personalization-model.ts +++ b/src/features/housekeeping/foundation/preferences/widget-options.ts @@ -1,15 +1,15 @@ import type { HousekeepingWidgetDefinition, HousekeepingWidgetKind, -} from "../../foundation/contracts"; +} from "../contracts"; -export interface OperationsWidgetOption { +export interface HousekeepingWidgetOption { readonly id: string; readonly kind: HousekeepingWidgetKind; } -export function toOperationsWidgetOptions( +export function toHousekeepingWidgetOptions( definitions: readonly HousekeepingWidgetDefinition[], -): readonly OperationsWidgetOption[] { +): readonly HousekeepingWidgetOption[] { return definitions.map(({ id, kind }) => ({ id, kind })); } diff --git a/src/features/housekeeping/foundation/shell/widget-settings.tsx b/src/features/housekeeping/foundation/shell/widget-settings.tsx index 5d810585..ca259c0d 100644 --- a/src/features/housekeeping/foundation/shell/widget-settings.tsx +++ b/src/features/housekeeping/foundation/shell/widget-settings.tsx @@ -1,8 +1,9 @@ "use client"; import { useState } from "react"; -import type { HousekeepingResult, HousekeepingWidgetKind } from "../contracts"; +import type { HousekeepingResult } from "../contracts"; import type { HousekeepingPreferences } from "../preferences/schema"; +import type { HousekeepingWidgetOption } from "../preferences/widget-options"; export type HousekeepingPreferenceSaver = ( preferences: HousekeepingPreferences, @@ -41,11 +42,6 @@ export interface WidgetSettingsLabels { readonly error: string; } -export interface HousekeepingWidgetOption { - readonly id: string; - readonly kind: HousekeepingWidgetKind; -} - export function WidgetSettings({ preferences: initialPreferences, widgets,