Kairo-Jinkendo/frontend/src/registry/widgetRegistry.js

92 lines
2.8 KiB
JavaScript
Raw Normal View History

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)
}