feat(housekeeping): compose operations workspace
This commit is contained in:
1 parent
5574e601bb
commit
85ad0452d3
22 files changed
+1240
-87
No files matched your search
@@ -0,0 +1,47 @@
|
||||
import { createElement } from "react";
|
||||
import { satisfiesCapability } from "../../foundation/capability-context";
|
||||
import { createHousekeepingRegistry } from "../../foundation/registry";
|
||||
import { HOUSEKEEPING_MANIFESTS } from "../../manifests";
|
||||
import type { HousekeepingRouteHandler } from "../../route-handlers";
|
||||
import { OperationsWorkspacePage } from "./pages/workspace";
|
||||
import { operationsWorkspaceQuery } from "./queries";
|
||||
|
||||
export async function renderOperationsWorkspacePage(
|
||||
input: Parameters<HousekeepingRouteHandler["render"]>[0],
|
||||
) {
|
||||
const registry = createHousekeepingRegistry(HOUSEKEEPING_MANIFESTS);
|
||||
const accessibleDomains = registry.domains.filter(
|
||||
(domain) =>
|
||||
domain.id !== "operations" &&
|
||||
satisfiesCapability(input.context, domain.capability),
|
||||
);
|
||||
const routes = accessibleDomains.flatMap((domain) =>
|
||||
domain.routes.filter((route) =>
|
||||
satisfiesCapability(input.context, route.capability),
|
||||
),
|
||||
);
|
||||
const widgetDefinitions = registry.domains
|
||||
.filter((domain) => satisfiesCapability(input.context, domain.capability))
|
||||
.flatMap((domain) =>
|
||||
domain.widgets.filter((widget) =>
|
||||
satisfiesCapability(input.context, widget.capability),
|
||||
),
|
||||
);
|
||||
return createElement(OperationsWorkspacePage, {
|
||||
result: await operationsWorkspaceQuery(input.context),
|
||||
routes,
|
||||
widgetDefinitions,
|
||||
surface: input.surface ?? "preview",
|
||||
...(input.savePreferences
|
||||
? { savePreferences: input.savePreferences }
|
||||
: {}),
|
||||
});
|
||||
}
|
||||
|
||||
export const OPERATIONS_ROUTE_HANDLERS: readonly HousekeepingRouteHandler[] =
|
||||
Object.freeze([
|
||||
Object.freeze({
|
||||
routeId: "operations.workspace",
|
||||
render: renderOperationsWorkspacePage,
|
||||
}),
|
||||
]);
|
||||
Reference in new issue
Block a user