Kairo-Jinkendo/frontend/src/registry/widgetRegistry.js
Lars fe3bc4f057
All checks were successful
Deploy Development / deploy (push) Successful in 45s
Test Suite / pytest-backend (push) Successful in 58s
Test Suite / lint-backend (push) Successful in 2s
Test Suite / compose-smoke (push) Has been skipped
Test Suite / k6 /api/health Baseline (push) Successful in 18s
Test Suite / playwright-smoke (push) Successful in 12s
AP0.8: Operating Model Extension I (Attention, Blocker, Backlog, Milestone)
Schema 007, regelbasierte Attention/NextAction im Data Layer, CRUD fuer Blocker/Backlog/Meilensteine, Workspace-Widget und Initiative-Detail-Sektionen. 25 Capabilities. Tests fuer Remote-Pytest auf Pi angepasst (conftest Session-Guard).

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-05 15:11:15 +02:00

92 lines
2.8 KiB
JavaScript

import { MyOpenActionsWidget } from '../widgets/MyOpenActionsWidget.jsx'
import { InitiativesWidget } from '../widgets/InitiativesWidget.jsx'
import { BlockedActionsWidget } from '../widgets/BlockedActionsWidget.jsx'
import { TenantContextWidget } from '../widgets/TenantContextWidget.jsx'
import { WorkspaceSummaryWidget } from '../widgets/WorkspaceSummaryWidget.jsx'
import { AttentionWidget } from '../widgets/AttentionWidget.jsx'
/** @typedef {import('react').ComponentType<any>} WidgetComponent */
/**
* @typedef {Object} WidgetDefinition
* @property {string} key
* @property {string} title
* @property {string} [description]
* @property {string} area
* @property {string} [requiredCapability]
* @property {number} defaultOrder
* @property {WidgetComponent} component
*/
/** @type {WidgetDefinition[]} */
export const WIDGETS = [
{
key: 'kairo.tenant_context',
title: 'Kontext',
description: 'Aktiver Tenant und Actor',
area: 'workspace',
defaultOrder: 0,
component: TenantContextWidget,
},
{
key: 'kairo.workspace_summary',
title: 'Überblick',
description: 'Workspace-Kennzahlen aus Data Layer',
area: 'workspace',
requiredCapability: 'kairo.workspace.read',
defaultOrder: 5,
component: WorkspaceSummaryWidget,
},
{
key: 'kairo.attention',
title: 'Aufmerksamkeit',
description: 'Regelbasierte Attention-Items',
area: 'workspace',
requiredCapability: 'kairo.attention.read',
defaultOrder: 8,
component: AttentionWidget,
},
{
key: 'kairo.my_open_actions',
title: 'Meine offenen Maßnahmen',
description: 'Offene Maßnahmen, die mir zugewiesen sind',
area: 'workspace',
requiredCapability: 'kairo.action.read',
defaultOrder: 10,
component: MyOpenActionsWidget,
},
{
key: 'kairo.blocked_actions',
title: 'Blockierte Maßnahmen',
description: 'Mir zugewiesene blockierte Maßnahmen',
area: 'workspace',
requiredCapability: 'kairo.action.read',
defaultOrder: 20,
component: BlockedActionsWidget,
},
{
key: 'kairo.active_initiatives',
title: 'Aktive Vorhaben',
description: 'Aktive und pausierte Vorhaben im Tenant',
area: 'workspace',
requiredCapability: 'kairo.initiative.read',
defaultOrder: 30,
component: InitiativesWidget,
},
]
/**
* @param {string} area
* @param {Set<string>|string[]} capabilities
*/
export function getWidgetsForArea(area, capabilities) {
const capSet = capabilities instanceof Set ? capabilities : new Set(capabilities)
return WIDGETS.filter((w) => w.area === area)
.filter((w) => !w.requiredCapability || capSet.has(w.requiredCapability))
.sort((a, b) => a.defaultOrder - b.defaultOrder)
}
export function getWidgetByKey(key) {
return WIDGETS.find((w) => w.key === key)
}