@yuuvis/bpm-management-app 1.1.0-alpha.2 → 1.1.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/yuuvis-bpm-management-app-extensions.mjs.map +1 -1
- package/fesm2022/yuuvis-bpm-management-app.mjs +368 -366
- package/fesm2022/yuuvis-bpm-management-app.mjs.map +1 -1
- package/lib/assets/i18n/de.json +5 -2
- package/lib/assets/i18n/en.json +5 -2
- package/package.json +5 -2
- package/types/yuuvis-bpm-management-app-extensions.d.ts +1 -1
- package/types/yuuvis-bpm-management-app.d.ts +44 -20
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-bpm-management-app.mjs","sources":["../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-management.schema.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-management.config.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-filter.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-management.service.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-management.state.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/entity-switch/entity-switch.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/entity-switch/entity-switch.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/filter-clear/filter-clear.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/date-time-field/date-time-field.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/date-time-range-field/date-time-range-field.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/filter-operator/filter-operator.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/date-filter/date-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/date-filter/date-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/number-filter/number-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/number-filter/number-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/select-filter/select-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/select-filter/select-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/text-filter/text-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/text-filter/text-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/user-filter/user-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/user-filter/user-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/filter-bar/filter-bar.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/filter-bar/filter-bar.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/pane-gutter/pane-gutter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/pane-gutter/pane-gutter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/pane-toggle-button/pane-toggle-button.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/pane-toggle-button/pane-toggle-button.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/pipes/format-date-time.pipe.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/deployment-details/deployment-details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/deployment-details/deployment-details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/process-definition-details/process-definition-details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/process-definition-details/process-definition-details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/process-details/process-details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/process-details/process-details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/editor-history/editor-history.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/editor-history/editor-history.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/task-details/task-details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/task-details/task-details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/checkbox-overlay/checkbox-overlay.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/checkbox-overlay/checkbox-overlay.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/task-assign-overlay/task-assign-overlay.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/task-assign-overlay/task-assign-overlay.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/task-candidates-overlay/task-candidates-overlay.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/task-candidates-overlay/task-candidates-overlay.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/container/areas/details/details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/container/areas/details/details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/container/bpm-management.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/container/bpm-management.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/lib.routes.ts","../../../../../projects/yuuvis/bpm-management-app/src/yuuvis-bpm-management-app.ts"],"sourcesContent":["export const APP_ID = 'io.yuuvis.app.bpm-management';\n\n/**\n * Custom data a shell client can set on the app's route (`App.data`) to configure the app.\n */\nexport interface BpmManagementAppData {\n /** Show the deployments tab. Shown unless set to `false`. */\n showDeployments?: boolean;\n /** Show the process definitions tab. Shown unless set to `false`. */\n showProcessDefinitions?: boolean;\n}\n\nexport interface DeploymentInstance {\n id: string,\n name: string;\n category: string;\n deploymentTime: string;\n resources?: DeploymentResourceData[];\n definitions?: ProcessDefinitionInstance[];\n}\n\nexport interface DeploymentResourceData {\n id: string;\n mediaType: string;\n type: string;\n}\n\nexport interface ProcessDefinitionInstance {\n id: string,\n name: string;\n description: string;\n category: string;\n version: string;\n key: string;\n global: boolean;\n suspended: boolean;\n deploymentId: string;\n statistics: ProcessdefinitionStatisticsData;\n}\n\nexport interface ProcessdefinitionStatisticsData {\n processInstanceCount: ProcessinstanceCountData;\n}\n\nexport interface ProcessinstanceCountData {\n active: number;\n suspended: number;\n completed: number\n}\n\nexport interface ProcessVariable {\n name: string;\n type: string;\n value: any;\n scope: string;\n}\n\nexport interface ProcessInstance {\n id: string;\n name: string;\n businessKey: string;\n processDefinitionId: string;\n processDefinitionName: string;\n processDefinitionDescription: string | null;\n startUserId: string;\n startTime: string;\n deleteReason: string | null;\n endActivityId: string | null;\n startActivityId: string;\n durationInMillis: number | null;\n endTime: string | null;\n suspended: boolean;\n variables?: ProcessVariable[];\n}\n\nexport interface ProcessHistory {\n tasks: TaskInstance[];\n}\n\nexport interface TaskInstance {\n id: string;\n name: string;\n description: string | null;\n assignee: string;\n owner: string;\n createTime: string;\n endTime: string | null;\n claimTime: string | null;\n dueDate: string | null;\n processDefinitionId: string;\n processInstanceId: string | null;\n processInstanceName: string | null;\n parentTaskId: string | null;\n taskDefinitionKey: string;\n delegationState: string | null;\n suspended: boolean;\n hasForm: boolean;\n formKey: string | null;\n variables?: TaskVariable[];\n identityLinks?: TaskIdentityLinks;\n}\n\nexport interface TaskVariable {\n name: string;\n type: string;\n value: any;\n valueUrl?: string;\n scope: string;\n}\n\nexport interface TaskIdentityLinks {\n candidates: {\n users: string[];\n roles: string[];\n };\n assignmentHistory: TaskAssignmentHistoryEntry[];\n}\n\nexport interface TaskAssignmentHistoryEntry {\n type: 'ASSIGNMENT' | 'DELEGATION' | 'RESOLVE';\n assignee: string;\n owner?: string;\n timestamp: string;\n}\n\nexport const ProcessDefinitionScope = {\n GLOBAL: { value: 'GLOBAL', label: 'yuv.app.bpm-management.definitions.scope.global', icon: 'globe' },\n TENANT: { value: 'TENANT', label: 'yuv.app.bpm-management.definitions.scope.tenant', icon: 'tenant' }\n} as const;\n\nexport const ProcessDefinitionStatus = {\n ACTIVE: { value: 'ACTIVE', label: 'yuv.app.bpm-management.status.active' },\n SUSPENDED: { value: 'SUSPENDED', label: 'yuv.app.bpm-management.status.suspended' }\n} as const;\n\nexport const ProcessStatus = {\n RUNNING: { value: 'RUNNING', label: 'yuv.app.bpm-management.status.running' },\n SUSPENDED: { value: 'SUSPENDED', label: 'yuv.app.bpm-management.status.suspended' },\n RUNNING_SUSPENDED: { value: 'RUNNING_SUSPENDED', label: 'yuv.app.bpm-management.status.runningORsuspended' },\n COMPLETED: { value: 'COMPLETED', label: 'yuv.app.bpm-management.status.completed' },\n /** Display only, not a filter value: an ended process with a delete reason was cancelled. */\n CANCELED: { value: 'CANCELED', label: 'yuv.app.bpm-management.status.canceled' }\n} as const;\n\nexport const TaskStatus = {\n RUNNING: { value: 'RUNNING', label: 'yuv.app.bpm-management.status.running' },\n /** Display only, not a filter value: the task (or its process) is suspended. */\n SUSPENDED: { value: 'SUSPENDED', label: 'yuv.app.bpm-management.status.suspended' },\n COMPLETED: { value: 'COMPLETED', label: 'yuv.app.bpm-management.status.completed' }\n} as const;\n\nexport interface DeploymentsSearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: DeploymentInstance[];\n}\n\nexport interface ProcessDefinitionSearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: ProcessDefinitionInstance[];\n}\n\nexport interface ProcessesSearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: ProcessInstance[];\n}\n\nexport interface TasksSearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: TaskInstance[];\n}\n\nexport const APP_ICONS = {\n assign: 'person_add',\n cancel: 'cancel',\n unassign: 'person_remove',\n clearFilter: 'filter_alt_off',\n dockToLeft: 'dock_to_left',\n filterActive: 'filter_alt',\n filterEquals: 'equal',\n filterContains: 'match_word',\n filterStartsWith: 'text_select_jump_to_beginning',\n filterEndsWith: 'text_select_jump_to_end',\n filterGreaterThan: 'arrow_upward',\n filterLessThan: 'arrow_downward',\n filterAfter: 'east',\n filterBefore: 'west',\n filterBetween: 'compare_arrows',\n globe: 'public',\n info: 'info',\n refresh: 'refresh',\n radioButtonChecked: 'radio_button_checked',\n radioButtonUnchecked: 'radio_button_unchecked',\n tenant: 'groups',\n delegated: 'assignment',\n resolved: 'order_approve',\n activate: 'not_started',\n suspend: 'hourglass_pause'\n}\n\nexport interface Pagination {\n total: number;\n pageSize: number;\n page: number;\n}\n\nexport interface Column {\n name: string;\n displayName: string;\n template?: any; // TemplateRef or function\n filter?: ColumnFilter;\n}\n\nexport type ColumnFilter =\n | TextColumnFilter\n | NumberColumnFilter\n | DateColumnFilter\n | SelectColumnFilter\n | UserColumnFilter;\n\nexport interface TextColumnFilter {\n type: typeof FILTER_TYPES.TEXT;\n placeholder?: string;\n operators?: FilterOption[];\n}\n\nexport interface NumberColumnFilter {\n type: typeof FILTER_TYPES.NUMBER;\n placeholder?: string;\n operators?: FilterOption[];\n minValue?: number;\n maxValue?: number;\n step?: number;\n}\n\nexport interface DateColumnFilter {\n type: typeof FILTER_TYPES.DATE;\n placeholder?: string;\n operators?: FilterOption[];\n}\n\nexport interface SelectColumnFilter {\n type: typeof FILTER_TYPES.SELECT;\n placeholder?: string;\n options: FilterOption[];\n enableMultiselect?: boolean;\n}\n\nexport interface UserColumnFilter {\n type: typeof FILTER_TYPES.USER;\n}\n\nexport interface FilterOption {\n value: string;\n label: string;\n icon?: string;\n}\n\nexport const FILTER_OPERATORS = {\n // Text operators\n CONTAINS: { value: 'contains', label: 'yuv.app.bpm-management.filters.operators.contains', icon: 'filterContains' },\n EQUALS: { value: 'equals', label: 'yuv.app.bpm-management.filters.operators.equals', icon: 'filterEquals' },\n STARTS_WITH: { value: 'startsWith', label: 'yuv.app.bpm-management.filters.operators.startsWith', icon: 'filterStartsWith' },\n ENDS_WITH: { value: 'endsWith', label: 'yuv.app.bpm-management.filters.operators.endsWith', icon: 'filterEndsWith' },\n\n // Number operators\n GREATER_THAN: { value: 'greaterThan', label: 'yuv.app.bpm-management.filters.operators.greaterThan', icon: 'filterGreaterThan' },\n LESS_THAN: { value: 'lessThan', label: 'yuv.app.bpm-management.filters.operators.lessThan', icon: 'filterLessThan' },\n \n // Date operators\n BEFORE: { value: 'before', label: 'yuv.app.bpm-management.filters.operators.before', icon: 'filterBefore' },\n AFTER: { value: 'after', label: 'yuv.app.bpm-management.filters.operators.after', icon: 'filterAfter' },\n BETWEEN: { value: 'between', label: 'yuv.app.bpm-management.filters.operators.between', icon: 'filterBetween' }\n} as const;\n\nexport const FILTER_TYPES = {\n TEXT: 'text',\n NUMBER: 'number',\n DATE: 'date',\n SELECT: 'select',\n CHECKBOX: 'checkbox',\n USER: 'user'\n} as const;\n\nexport interface TableFilters {\n [columnName: string]: FilterValue;\n}\n\nexport interface FilterValue {\n type: typeof FILTER_TYPES.TEXT | typeof FILTER_TYPES.NUMBER | typeof FILTER_TYPES.DATE | typeof FILTER_TYPES.SELECT | typeof FILTER_TYPES.CHECKBOX;\n value: any;\n operator?: string;\n endDate?: Date | null; // Für date between\n}\n\nexport type DateFormatType = 'datetime' | 'date' | 'time';\n\nexport function formatDateTime(\n utcDateString: string,\n locale: string,\n type: DateFormatType = 'datetime'\n): string {\n if (!utcDateString) return '';\n\n try {\n const date = new Date(utcDateString);\n\n const formatOptions: Record<DateFormatType, Intl.DateTimeFormatOptions> = {\n datetime: {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n },\n date: {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit'\n },\n time: {\n hour: '2-digit',\n minute: '2-digit'\n }\n };\n\n return type === 'datetime'\n ? date.toLocaleString(locale, formatOptions[type])\n : type === 'date'\n ? date.toLocaleDateString(locale, formatOptions[type])\n : date.toLocaleTimeString(locale, formatOptions[type]);\n\n } catch (error) {\n console.error('Error formatting date:', error);\n return utcDateString;\n }\n}\n\n/** The entities of the app. The value is also the route path. */\nexport type BpmEntity = 'deployments' | 'definitions' | 'processes' | 'tasks';\n\nexport const BPM_ENTITIES: BpmEntity[] = ['deployments', 'definitions', 'processes', 'tasks'];\n\n/** `icon` stands for the entity as a whole (navigation, list header), `itemIcon` for one item of it (details header, list row, references from other lists). */\nexport const BPM_ENTITY_META: Record<BpmEntity, { icon: string; itemIcon: string; label: string }> = {\n deployments: { icon: 'inventory_2', itemIcon: 'deployed_code', label: 'yuv.app.bpm-management.entity.deployments' },\n definitions: { icon: 'stacks', itemIcon: 'flowchart', label: 'yuv.app.bpm-management.entity.definitions' },\n processes: { icon: 'view_timeline', itemIcon: 'route', label: 'yuv.app.bpm-management.entity.processes' },\n tasks: { icon: 'inbox', itemIcon: 'assignment_ind', label: 'yuv.app.bpm-management.entity.tasks' }\n};\n\n/** An item of any entity of the app. */\nexport type BpmItem = DeploymentInstance | ProcessDefinitionInstance | ProcessInstance | TaskInstance;\n\n/** Severity of a status badge (see `ymt-badge`). */\nexport type BadgeSeverity = 'primary' | 'success' | 'warning' | 'neutral';\n\nexport function processSeverity(p: ProcessInstance): BadgeSeverity {\n return p.endTime ? (p.deleteReason ? 'warning' : 'success') : p.suspended ? 'neutral' : 'primary';\n}\n\n/** Material icon for the status badge of a process. */\nexport function processStatusIcon(p: ProcessInstance): string {\n return p.endTime ? (p.deleteReason ? 'cancel' : 'task_alt') : p.suspended ? 'pause_circle' : 'autorenew';\n}\n\nexport function processStatusLabel(p: ProcessInstance): string {\n return (p.endTime ? (p.deleteReason ? ProcessStatus.CANCELED : ProcessStatus.COMPLETED) : p.suspended ? ProcessStatus.SUSPENDED : ProcessStatus.RUNNING).label;\n}\n\nexport function taskSeverity(t: TaskInstance): BadgeSeverity {\n return t.endTime ? 'success' : t.suspended ? 'neutral' : 'primary';\n}\n\n/** Material icon for the status badge of a task. */\nexport function taskStatusIcon(t: TaskInstance): string {\n return t.endTime ? 'task_alt' : t.suspended ? 'pause_circle' : 'autorenew';\n}\n\nexport function taskStatusLabel(t: TaskInstance): string {\n return (t.endTime ? TaskStatus.COMPLETED : t.suspended ? TaskStatus.SUSPENDED : TaskStatus.RUNNING).label;\n}\n\nexport function definitionSeverity(d: ProcessDefinitionInstance): BadgeSeverity {\n return d.suspended ? 'neutral' : 'primary';\n}\n\n/** The icon of a process definition. Always the default for now, definitions will get custom icons. */\nexport function definitionIcon(_d: ProcessDefinitionInstance): string {\n return BPM_ENTITY_META.definitions.itemIcon;\n}\n\nexport function definitionStatusLabel(d: ProcessDefinitionInstance): string {\n return (d.suspended ? ProcessDefinitionStatus.SUSPENDED : ProcessDefinitionStatus.ACTIVE).label;\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { App } from '@yuuvis/client-shell-core';\nimport { BPM_ENTITIES, BpmEntity, BpmManagementAppData } from './bpm-management.schema';\n\n/**\n * Resolves the configuration of the app entry a route was loaded through. The same app can be\n * registered multiple times by a shell client (with different `data`), so the configuration is\n * taken from the route and not from a fixed app id.\n *\n * @returns The id of the app entry (if any) and the merged `data` of the route's ancestors.\n */\nexport function resolveAppConfig(route: ActivatedRouteSnapshot): { appId?: string; data: BpmManagementAppData } {\n let appId: string | undefined;\n let data: BpmManagementAppData = {};\n for (const r of route.pathFromRoot) {\n const cfg = r.routeConfig as Partial<App> | null;\n if (cfg?.id) appId = cfg.id;\n if (cfg?.data) data = { ...data, ...cfg.data };\n }\n return { appId, data };\n}\n\n/**\n * Whether the host shell client enabled the deployments tab unless `data: { showDeployments: false }` hides it (shown by default).\n */\nexport function isDeploymentsEnabled(route: ActivatedRouteSnapshot): boolean {\n return resolveAppConfig(route).data.showDeployments !== false;\n}\n\n/**\n * Whether the host shell client enabled the process definitions tab unless `data: { showProcessDefinitions: false }` hides it (shown by default).\n */\nexport function isProcessDefinitionsEnabled(route: ActivatedRouteSnapshot): boolean {\n return resolveAppConfig(route).data.showProcessDefinitions !== false;\n}\n\n/**\n * The entities the host shell client enabled (deployments and process definitions are optional, both on by default).\n */\nexport function enabledEntities(route: ActivatedRouteSnapshot): BpmEntity[] {\n const { showDeployments, showProcessDefinitions } = resolveAppConfig(route).data;\n return BPM_ENTITIES.filter(e => (e !== 'deployments' || showDeployments !== false) && (e !== 'definitions' || showProcessDefinitions !== false));\n}\n\n/**\n * Guard for an optional tab's route. If the tab is not enabled, redirects to the processes page.\n */\nfunction optionalTabGuard(path: string, isEnabled: (route: ActivatedRouteSnapshot) => boolean): CanActivateFn {\n const pathRegex = new RegExp(`/${path}(?=[/?#]|$)`);\n return (route, state) =>\n isEnabled(route) || inject(Router).parseUrl(state.url.replace(pathRegex, '/processes').split(/[?#]/)[0]);\n}\n\n/**\n * Guard for the empty path of the app: redirects to the first enabled entity (deployments, process\n * definitions, processes, tasks), keeping the query string.\n */\nexport const defaultEntityGuard: CanActivateFn = (route, state) => {\n const [path, query] = state.url.split('#')[0].split('?');\n const base = path.replace(/\\/+$/, '');\n return inject(Router).parseUrl(`${base}/${enabledEntities(route)[0]}${query ? '?' + query : ''}`);\n};\n\nexport const deploymentsGuard = optionalTabGuard('deployments', isDeploymentsEnabled);\nexport const processDefinitionsGuard = optionalTabGuard('definitions', isProcessDefinitionsEnabled);\n","import { TranslateService } from \"@yuuvis/client-core\";\nimport { FILTER_OPERATORS, FILTER_TYPES, FilterValue, ProcessDefinitionScope, ProcessDefinitionStatus, ProcessStatus, TableFilters, TaskStatus } from \"./bpm-management.schema\";\nimport { formatDate } from \"@angular/common\";\nimport { HttpParams } from \"@angular/common/http\";\n\n/**\n * Appends the set criteria of a filter to the REST parameters.\n * Skips unset (undefined/null) criteria and keys without a REST name, but keeps falsy values such as `false`.\n */\nexport function applyBpmFilterParams(params: HttpParams, filter: object | undefined, restNames: Record<string, string>): HttpParams {\n for (const [key, criterion] of Object.entries(filter ?? {}) as [string, FilterValue | undefined][]) {\n const value = criterion?.value;\n if (value === undefined || value === null || !restNames[key]) continue;\n params = params.set(restNames[key], value as string | number | boolean);\n }\n return params;\n}\n\n/**\n * Base class for BPM filter conversion with shared logic\n */\nabstract class BaseBpmFilter {\n /**\n * Converts AG Grid filter model to BPM filter format\n * @param tableFilters - The AG Grid table filters\n * @param ts - Optional TranslateService for date formatting\n * @returns The converted BPM filter instance\n */\n protected static convertFromAgFilterModel<T extends BaseBpmFilter>(\n filterInstance: T,\n tableFilters: TableFilters,\n ts?: TranslateService\n ): T {\n for (const columnFilter in tableFilters) {\n const columnFilterData = tableFilters[columnFilter];\n \n switch (columnFilterData['type']) {\n case FILTER_TYPES.TEXT:\n filterInstance[columnFilter] = this.handleTextFilter(columnFilterData);\n break;\n case FILTER_TYPES.NUMBER:\n filterInstance[columnFilter] = { value: columnFilterData.value, type: FILTER_TYPES.NUMBER };\n break;\n case FILTER_TYPES.DATE:\n this.handleDateFilter(filterInstance, columnFilter, columnFilterData, ts);\n break;\n case FILTER_TYPES.SELECT:\n this.handleSelectFilter(filterInstance, columnFilter, columnFilterData);\n break;\n }\n }\n\n return filterInstance;\n }\n\n private static handleTextFilter(columnFilterData: any): FilterValue {\n if (columnFilterData.operator === FILTER_OPERATORS.CONTAINS.value) {\n return { value: '%' + columnFilterData.value + '%', type: FILTER_TYPES.TEXT };\n } else if (columnFilterData.operator === FILTER_OPERATORS.STARTS_WITH.value) {\n return { value: columnFilterData.value + '%', type: FILTER_TYPES.TEXT };\n } else if (columnFilterData.operator === FILTER_OPERATORS.ENDS_WITH.value) {\n return { value: '%' + columnFilterData.value, type: FILTER_TYPES.TEXT };\n } else {\n return { value: columnFilterData.value, type: FILTER_TYPES.TEXT };\n }\n }\n\n private static handleDateFilter(\n filterInstance: any,\n columnFilter: string,\n columnFilterData: any,\n ts?: TranslateService\n ): void {\n if (!ts) return;\n\n if (columnFilterData.operator === FILTER_OPERATORS.BETWEEN.value) {\n if (columnFilterData.value !== null && columnFilterData.value instanceof Date) {\n const formattedStartDate = formatDate(columnFilterData.value, 'yyyy-MM-ddTHH:mm:ss', ts.currentLang, 'UTC');\n filterInstance[columnFilter + 'After'] = { value: formattedStartDate, type: FILTER_TYPES.DATE };\n }\n if (columnFilterData.endDate !== null && columnFilterData.endDate instanceof Date) {\n const formattedEndDate = formatDate(columnFilterData.endDate, 'yyyy-MM-ddTHH:mm:ss', ts.currentLang, 'UTC');\n filterInstance[columnFilter + 'Before'] = { value: formattedEndDate, type: FILTER_TYPES.DATE };\n }\n } else if (columnFilterData.operator === FILTER_OPERATORS.AFTER.value) {\n if (columnFilterData.value !== null && columnFilterData.value instanceof Date) {\n const formattedDate = formatDate(columnFilterData.value, 'yyyy-MM-ddTHH:mm:ss', ts.currentLang, 'UTC');\n filterInstance[columnFilter + 'After'] = { value: formattedDate, type: FILTER_TYPES.DATE };\n }\n } else if (columnFilterData.operator === FILTER_OPERATORS.BEFORE.value) {\n if (columnFilterData.value !== null && columnFilterData.value instanceof Date) {\n const formattedDate = formatDate(columnFilterData.value, 'yyyy-MM-ddTHH:mm:ss', ts.currentLang, 'UTC');\n filterInstance[columnFilter + 'Before'] = { value: formattedDate, type: FILTER_TYPES.DATE };\n }\n }\n }\n\n protected static handleSelectFilter(\n _filterInstance: any,\n _columnFilter: string,\n _columnFilterData: any\n ): void {\n return;\n }\n}\n\nexport class DeploymentFilter extends BaseBpmFilter {\n static bpmFilterToRestApiName = {\n id: 'id',\n name: 'nameLike',\n category: 'category'\n };\n declare id: FilterValue | undefined;\n declare name: FilterValue | undefined;\n declare category: FilterValue | undefined;\n \n static fromAgFilterModel(tableFilters: TableFilters) {\n return this.convertFromAgFilterModel(new DeploymentFilter(), tableFilters);\n }\n}\n\nexport class ProcessDefinitionFilter extends BaseBpmFilter {\n static bpmFilterToRestApiName = {\n id: 'id',\n deploymentId: 'deploymentId',\n name: 'nameLikeIgnoreCase',\n category: 'categoryLike',\n version: 'version',\n key: 'keyLike',\n status: 'suspended',\n global: 'global',\n latest: 'latest'\n };\n declare id: FilterValue | undefined;\n declare deploymentId: FilterValue | undefined;\n declare name: FilterValue | undefined;\n declare category: FilterValue | undefined;\n declare version: FilterValue | undefined;\n declare key: FilterValue | undefined;\n declare status: FilterValue | undefined;\n declare global: FilterValue | undefined;\n declare latest: FilterValue | undefined;\n \n static fromAgFilterModel(tableFilters: TableFilters) {\n return this.convertFromAgFilterModel(new ProcessDefinitionFilter(), tableFilters);\n }\n\n protected static override handleSelectFilter(\n filterInstance: any,\n columnFilter: string,\n columnFilterData: any\n ): void {\n if (Array.isArray(columnFilterData.value)) {\n // Not supported in current implementation\n return;\n }\n\n const value = columnFilterData.value;\n \n if (value === ProcessDefinitionStatus.ACTIVE.value || value === ProcessDefinitionScope.TENANT.value) {\n filterInstance[columnFilter] = { value: 'false', type: FILTER_TYPES.SELECT };\n } else if (value === ProcessDefinitionStatus.SUSPENDED.value || value === ProcessDefinitionScope.GLOBAL.value) {\n filterInstance[columnFilter] = { value: 'true', type: FILTER_TYPES.SELECT };\n }\n }\n}\n\nexport class ProcessFilter extends BaseBpmFilter {\n static bpmFilterToRestApiName = {\n id: 'processInstanceId',\n processDefinitionId: 'processDefinitionId',\n name: 'nameLikeIgnoreCase',\n startUserId: 'startedBy',\n businessKey: 'businessKeyLike',\n startTimeBefore: 'startedBefore',\n startTimeAfter: 'startedAfter',\n endTimeBefore: 'finishedBefore',\n endTimeAfter: 'finishedAfter',\n status: 'isCompleted'\n };\n declare id: FilterValue | undefined;\n declare processDefinitionId: FilterValue | undefined;\n declare name: FilterValue | undefined;\n declare startUserId: FilterValue | undefined;\n declare startTimeBefore: FilterValue | undefined;\n declare startTimeAfter: FilterValue | undefined;\n declare endTimeBefore: FilterValue | undefined;\n declare endTimeAfter: FilterValue | undefined;\n declare businessKey: FilterValue | undefined;\n declare status: FilterValue | undefined;\n\n static fromAgFilterModel(tableFilters: TableFilters, ts: TranslateService) {\n return this.convertFromAgFilterModel(new ProcessFilter(), tableFilters, ts);\n }\n\n protected static override handleSelectFilter(\n filterInstance: any,\n columnFilter: string,\n columnFilterData: any\n ): void {\n if (Array.isArray(columnFilterData.value)) {\n // Not supported in current implementation\n return;\n }\n\n const value = columnFilterData.value;\n \n if (value === ProcessStatus.RUNNING_SUSPENDED.value) {\n filterInstance[columnFilter] = { value: 'false', type: FILTER_TYPES.SELECT };\n } else if (value === ProcessStatus.COMPLETED.value) {\n filterInstance[columnFilter] = { value: 'true', type: FILTER_TYPES.SELECT };\n }\n }\n}\n\nexport class TaskFilter extends BaseBpmFilter {\n static bpmFilterToRestApiName = {\n id: 'id',\n name: 'nameLikeIgnoreCase',\n status: 'isCompleted',\n processDefinitionId: 'processDefinitionId',\n processInstanceId: 'processInstanceId',\n assignee: 'visibleTo',\n owner: 'owner',\n createTimeBefore: 'createdBefore',\n createTimeAfter: 'createdAfter',\n endTimeBefore: 'completedBefore',\n endTimeAfter: 'completedAfter'\n };\n declare id: FilterValue | undefined;\n declare name: FilterValue | undefined;\n declare status: FilterValue | undefined;\n declare processDefinitionId: FilterValue | undefined;\n declare processInstanceId: FilterValue | undefined;\n declare assignee: FilterValue | undefined;\n declare owner: FilterValue | undefined;\n declare createTimeBefore: FilterValue | undefined;\n declare createTimeAfter: FilterValue | undefined;\n declare endTimeBefore: FilterValue | undefined;\n declare endTimeAfter: FilterValue | undefined;\n\n static fromAgFilterModel(tableFilters: TableFilters, ts: TranslateService) {\n return this.convertFromAgFilterModel(new TaskFilter(), tableFilters, ts);\n }\n\n protected static override handleSelectFilter(\n filterInstance: any,\n columnFilter: string,\n columnFilterData: any\n ): void {\n if (Array.isArray(columnFilterData.value)) {\n // Not supported in current implementation\n return;\n }\n\n const value = columnFilterData.value;\n \n if (value === TaskStatus.RUNNING.value) {\n filterInstance[columnFilter] = { value: 'false', type: FILTER_TYPES.SELECT };\n } else if (value === TaskStatus.COMPLETED.value) {\n filterInstance[columnFilter] = { value: 'true', type: FILTER_TYPES.SELECT };\n }\n }\n}","import { HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { ApiBase, BackendService, Utils } from '@yuuvis/client-core';\nimport { map, Observable } from 'rxjs';\nimport { DeploymentInstance, ProcessHistory, ProcessInstance, TaskInstance, ProcessDefinitionInstance } from './bpm-management.schema';\nimport { applyBpmFilterParams, DeploymentFilter, ProcessDefinitionFilter, ProcessFilter, TaskFilter } from './bpm-filter';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class YuvBpmManagementService {\n \n static DEFAULT_PAGE_SIZE = 15;\n private readonly bpmApiBase = '/bpm-engine/api';\n readonly #backendService = inject(BackendService);\n\n getDeployments(page: number, size: number, filter?: DeploymentFilter, sort?: { by: string; order: 'asc' | 'desc' }): Observable<any> {\n let filterParams = new HttpParams().set('page', page).set('size', size);\n if (sort) {\n filterParams = filterParams.set('sort', `${sort.by},${sort.order}`);\n }\n filterParams = applyBpmFilterParams(filterParams, filter, DeploymentFilter.bpmFilterToRestApiName);\n \n return this.#backendService\n .get(`${this.bpmApiBase}/deployments`, ApiBase.none, { params:filterParams } );\n }\n\n getDeployment(deploymentId: string): Observable<DeploymentInstance | null> {\n return this.#backendService\n .get(`${this.bpmApiBase}/deployments/${deploymentId}`, ApiBase.none );\n }\n\n getDeploymentResources(deploymentId: string): Observable<any> {\n return this.#backendService\n .get(`${this.bpmApiBase}/deployments/${deploymentId}/resources`, ApiBase.none );\n }\n\n getProcessDefinitions(page: number, size: number, filter?: ProcessDefinitionFilter, sort?: { by: string; order: 'asc' | 'desc' }): Observable<any> {\n let filterParams = new HttpParams().set('page', page).set('size', size);\n if (sort) {\n // Spring Pageable format: one parameter, \"field,direction\"\n filterParams = filterParams.set('sort', `${sort.by},${sort.order}`);\n }\n filterParams = applyBpmFilterParams(filterParams, filter, ProcessDefinitionFilter.bpmFilterToRestApiName);\n\n return this.#backendService\n .get(`${this.bpmApiBase}/process-definitions`, ApiBase.none, { params:filterParams } );\n }\n\n getProcessDefinition(processDefinitionInstanceId: string): Observable<ProcessDefinitionInstance | null> {\n const params = new HttpParams().set('includeStatistics', true);\n\n return this.#backendService.get(\n `${this.bpmApiBase}/process-definitions/${processDefinitionInstanceId}`,\n ApiBase.none,\n { params: params }\n );\n }\n\n executeProcessDefinitionAction(processDefinitionInstanceId: string, action: string, includeProcesses: boolean): Observable<any> {\n const body = {\n 'action': action,\n 'includeProcessInstances': includeProcesses\n };\n\n return this.#backendService\n .patch(`${this.bpmApiBase}/process-definitions/${processDefinitionInstanceId}`, body, ApiBase.none)\n .pipe(map(result => result))\n }\n\n executeProcessAction(processInstanceId: string, action: 'suspend' | 'activate'): Observable<any> {\n return this.#backendService.patch(`${this.bpmApiBase}/processes/${processInstanceId}`, { action }, ApiBase.none);\n }\n\n getProcesses(page: number, size: number, filter?: ProcessFilter, sort?: { by: string; order: 'asc' | 'desc' }): Observable<any> {\n let filterParams = new HttpParams().set('page', page).set('size', size);\n if (sort) {\n filterParams = filterParams.set('sort', `${sort.by},${sort.order}`);\n }\n filterParams = applyBpmFilterParams(filterParams, filter, ProcessFilter.bpmFilterToRestApiName);\n\n return this.#backendService.get(\n `${this.bpmApiBase}/processes`,\n ApiBase.none,\n { params: filterParams }\n );\n }\n\n getProcess(processInstanceId: string): Observable<ProcessInstance | null> {\n const params = new HttpParams().set('includeProcessVariables', true);\n\n return this.#backendService.get(\n `${this.bpmApiBase}/processes/${processInstanceId}`,\n ApiBase.none,\n { params: params }\n );\n }\n\n getProcessHistory(processInstanceId: string): Observable<ProcessHistory | null> {\n return this.#backendService.get(\n `${this.bpmApiBase}/processes/${processInstanceId}/history`,\n ApiBase.none\n ).pipe(\n map((result: any) => {\n if (!result || !result.tasks) return result;\n \n return {\n ...result,\n tasks: result.tasks\n .sort(Utils.sortValues('createTime'))\n .reverse()\n };\n })\n );\n }\n\n getTasks(page: number, size: number, filter?: TaskFilter, sort?: { by: string; order: 'asc' | 'desc' }): Observable<any> {\n let filterParams = new HttpParams().set('page', page).set('size', size);\n if (sort) {\n filterParams = filterParams.set('sort', `${sort.by},${sort.order}`);\n }\n filterParams = applyBpmFilterParams(filterParams, filter, TaskFilter.bpmFilterToRestApiName);\n if (filter?.assignee?.value != null) {\n filterParams = filterParams.set('isAssigned', 'true');\n }\n\n return this.#backendService\n .get(`${this.bpmApiBase}/tasks`, ApiBase.none, { params:filterParams } ); \n }\n\n getTask(taskId: string): Observable<TaskInstance | null> {\n const params = new HttpParams().set('includeIdentityLinks', true);\n\n return this.#backendService.get(\n `${this.bpmApiBase}/tasks/${taskId}`,\n ApiBase.none,\n { params: params }\n );\n }\n\n assignTask(taskId: string, assignee: string | null): Observable<any> {\n const body = {\n action: 'claim',\n assignee: assignee\n };\n\n return this.#backendService.patch(\n `${this.bpmApiBase}/tasks/${taskId}`,\n body,\n ApiBase.none\n );\n }\n\n setTaskCandidates(taskId: string, body: { users?: string[], roles?: string[] }): Observable<any> {\n return this.#backendService.post(\n `${this.bpmApiBase}/tasks/${taskId}/candidates`,\n body,\n ApiBase.none\n );\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { LayoutSettingsService } from '@yuuvis/client-components/common';\nimport { APP_ID, BPM_ENTITIES, BpmEntity, TableFilters } from './bpm-management.schema';\n\nexport type QuickFilter = 'active' | 'open' | 'suspended' | 'completed' | 'all';\n\n/** What the lists can be sorted by (which of these an entity offers is up to the backend). */\nexport type SortBy = 'name' | 'key' | 'definitionKey' | 'businessKey' | 'startTime' | 'createTime' | 'dueDate' | 'endTime' | 'deployTime';\nexport type SortOrder = 'asc' | 'desc';\n\nexport const PAGE_SIZE_OPTIONS: number[] = [10, 25, 50, 100];\nexport const DEFAULT_PAGE_SIZE = 50;\n\nexport interface ViewState {\n quick: QuickFilter;\n advanced: TableFilters;\n /** Process definitions only: hide older versions. */\n latestOnly: boolean;\n sortBy: SortBy;\n sortOrder: SortOrder;\n page: number;\n pageSize: number;\n}\n\nexport const initialView = (entity: BpmEntity): ViewState => ({\n quick: 'all',\n advanced: {},\n latestOnly: true,\n // processes and tasks: newest first\n sortBy: entity === 'processes' ? 'startTime' : entity === 'tasks' ? 'createTime' : 'name',\n sortOrder: entity === 'processes' || entity === 'tasks' ? 'desc' : 'asc',\n page: 0,\n pageSize: DEFAULT_PAGE_SIZE\n});\n\n/**\n * Holds the list state (filters, paging) of all entities; the search term is in the URL. Every entity is a separate\n * route, so the page component is recreated when switching — this keeps the state.\n */\n@Injectable({ providedIn: 'root' })\nexport class BpmManagementStateService {\n readonly #layoutSettings = inject(LayoutSettingsService);\n readonly #pageSizeSettingsKey = APP_ID + '#work.pageSize';\n\n /** The page size is one setting for all entities and remembered across sessions. */\n readonly pageSize = this.#loadStoredPageSize();\n\n readonly views = signal<Record<BpmEntity, ViewState>>(\n Object.fromEntries(BPM_ENTITIES.map(e => [e, { ...initialView(e), pageSize: this.pageSize }])) as Record<BpmEntity, ViewState>\n );\n\n /** Remembers the page size and applies it to all entities. */\n savePageSize(pageSize: number): void {\n this.#layoutSettings.saveSettings(this.#pageSizeSettingsKey, { pageSize });\n this.views.update(v => Object.fromEntries(BPM_ENTITIES.map(e => [e, { ...v[e], pageSize, page: 0 }])) as Record<BpmEntity, ViewState>);\n }\n\n /** Falls back to the default for anything unexpected (nothing stored, or a size no longer offered). */\n #loadStoredPageSize(): number {\n const stored = this.#layoutSettings.getSettings(this.#pageSizeSettingsKey) as { pageSize?: number } | undefined;\n const pageSize = Number(stored?.pageSize);\n return PAGE_SIZE_OPTIONS.includes(pageSize) ? pageSize : DEFAULT_PAGE_SIZE;\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { BPM_ENTITY_META, BpmEntity } from '../../bpm-management.schema';\n\n/**\n * Switch between the entities of the app (deployments, process definitions, processes, tasks).\n * Meant to be rendered in the shell's app header, so it is as high as the header's buttons. The header\n * is shared with the search, so the switch shrinks with the window: labels first, then one menu button.\n */\n@Component({\n selector: 'ymbpm-entity-switch',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatButtonToggleModule, MatIconModule, MatMenuModule, MatTooltipModule, TranslatePipe],\n templateUrl: './entity-switch.component.html',\n styleUrl: './entity-switch.component.scss'\n})\nexport class EntitySwitchComponent {\n readonly ENTITY_META = BPM_ENTITY_META;\n\n /** The entities to offer, in the order they are shown. */\n entities = input.required<BpmEntity[]>();\n value = input.required<BpmEntity>();\n valueChange = output<BpmEntity>();\n}\n","<div class=\"bar\">\n<mat-button-toggle-group\n class=\"toggles\"\n hideSingleSelectionIndicator\n [value]=\"value()\"\n (change)=\"valueChange.emit($event.value)\"\n [attr.aria-label]=\"'yuv.app.bpm-management.entity.switch.aria' | translate\"\n>\n @for (entity of entities(); track entity) {\n <mat-button-toggle [value]=\"entity\" [matTooltip]=\"ENTITY_META[entity].label | translate\">\n <mat-icon aria-hidden=\"true\">{{ ENTITY_META[entity].icon }}</mat-icon>\n <span class=\"label\">{{ ENTITY_META[entity].label | translate }}</span>\n </mat-button-toggle>\n }\n</mat-button-toggle-group>\n\n<!-- little space: the toggles collapse into one toggle with the current entity, which opens the menu -->\n<mat-button-toggle-group class=\"compact\" hideSingleSelectionIndicator [value]=\"value()\">\n <mat-button-toggle\n [value]=\"value()\"\n [matMenuTriggerFor]=\"entityMenu\"\n [matTooltip]=\"ENTITY_META[value()].label | translate\"\n [aria-label]=\"('yuv.app.bpm-management.entity.switch.aria' | translate) + ': ' + (ENTITY_META[value()].label | translate)\"\n >\n <mat-icon aria-hidden=\"true\">{{ ENTITY_META[value()].icon }}</mat-icon>\n <mat-icon aria-hidden=\"true\">arrow_drop_down</mat-icon>\n </mat-button-toggle>\n</mat-button-toggle-group>\n<mat-menu #entityMenu=\"matMenu\">\n @for (entity of entities(); track entity) {\n <button mat-menu-item role=\"menuitemradio\" [attr.aria-checked]=\"entity === value()\" (click)=\"valueChange.emit(entity)\">\n <mat-icon aria-hidden=\"true\">{{ ENTITY_META[entity].icon }}</mat-icon>\n {{ ENTITY_META[entity].label | translate }}\n </button>\n }\n</mat-menu>\n</div>\n","import { ChangeDetectionStrategy, Component, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n/**\n * Button to remove the value of a single filter. Meant to be used as suffix of a filter field\n * (`<ymbpm-filter-clear matSuffix>`), shown while the filter has a value.\n */\n@Component({\n selector: 'ymbpm-filter-clear',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [YmtIconButtonDirective, MatIconModule, MatTooltipModule, TranslatePipe],\n template: `\n <button\n ymtIconButton\n icon-button-size=\"small\"\n type=\"button\"\n [attr.aria-label]=\"'yuv.app.bpm-management.filters.clear' | translate\"\n [matTooltip]=\"'yuv.app.bpm-management.filters.clear' | translate\"\n (click)=\"cleared.emit(); $event.stopPropagation()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n `,\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n /* keeps the button off the border of the field, like the operator on the other side */\n padding-inline: var(--ymt-spacing-2xs);\n }\n `\n})\nexport class FilterClearComponent {\n cleared = output<void>();\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, forwardRef, inject, OnDestroy } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { YuvDatepickerModule } from '@yuuvis/client-framework/datepicker';\nimport { Subject } from 'rxjs';\n\nlet nextId = 0;\n\n/**\n * A date and time input that can be used in a `mat-form-field` (label, border and states like any\n * other form field). It wraps the shell's `yuv-datepicker`, which only is a bare input.\n */\n@Component({\n selector: 'ymbpm-date-time-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, YuvDatepickerModule],\n providers: [{ provide: MatFormFieldControl, useExisting: forwardRef(() => DateTimeFieldComponent) }],\n host: {\n '[id]': 'id',\n '[attr.aria-describedby]': 'describedBy',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut()'\n },\n template: `<yuv-datepicker [formControl]=\"inner\" [withTime]=\"true\" [calendar]=\"true\" [locale]=\"locale\" />`,\n styles: `\n :host {\n display: flex;\n align-items: center;\n min-width: 0;\n padding-inline-end: var(--ymt-spacing-2xs);\n }\n yuv-datepicker {\n flex: 1;\n min-width: 0;\n }\n `\n})\nexport class DateTimeFieldComponent implements MatFormFieldControl<Date | null>, ControlValueAccessor, OnDestroy {\n readonly #translate = inject(TranslateService);\n\n readonly inner = new FormControl<Date | null>(null);\n\n // ---- MatFormFieldControl ---------------------------------------------------------------------\n // the control and the value accessor are the same, so the form control is not asked for one\n readonly ngControl: NgControl | null = (ngControl => (ngControl ? ((ngControl.valueAccessor = this), ngControl) : null))(\n inject(NgControl, { self: true, optional: true })\n );\n readonly stateChanges = new Subject<void>();\n readonly id = `ymbpm-date-time-field-${nextId++}`;\n readonly controlType = 'ymbpm-date-time-field';\n readonly placeholder = '';\n readonly required = false;\n readonly autofilled = false;\n focused = false;\n disabled = false;\n describedBy = '';\n value: Date | null = null;\n\n get empty(): boolean {\n return !this.value;\n }\n\n /** The inputs of the date show a mask, so the label must not sit on top of them. */\n get shouldLabelFloat(): boolean {\n return true;\n }\n\n get errorState(): boolean {\n return !!this.ngControl?.invalid && !!this.ngControl?.touched;\n }\n\n get locale(): string {\n return this.#translate.currentLang;\n }\n\n constructor() {\n this.inner.valueChanges.pipe(takeUntilDestroyed(inject(DestroyRef))).subscribe(value => {\n this.value = value;\n this.#onChange(value);\n this.stateChanges.next();\n });\n }\n\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(): void {\n // the inputs of the date picker take the focus themselves\n }\n\n onFocusIn(): void {\n this.focused = true;\n this.stateChanges.next();\n }\n\n onFocusOut(): void {\n this.focused = false;\n this.#onTouched();\n this.stateChanges.next();\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n // ---- ControlValueAccessor --------------------------------------------------------------------\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onChange: (value: Date | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onTouched: () => void = () => {};\n\n writeValue(value: Date | null): void {\n this.value = value instanceof Date ? value : null;\n this.inner.setValue(this.value, { emitEvent: false });\n this.stateChanges.next();\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.#onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n if (isDisabled) {\n this.inner.disable({ emitEvent: false });\n } else {\n this.inner.enable({ emitEvent: false });\n }\n this.stateChanges.next();\n }\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, forwardRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { YuvDatepickerModule } from '@yuuvis/client-framework/datepicker';\nimport { merge, Subject } from 'rxjs';\n\nlet nextId = 0;\n\n/**\n * Start and end of a period as one form field control: one border and one label around both date\n * and time inputs. The values live in the two controls handed in, so it is no value accessor.\n */\n@Component({\n selector: 'ymbpm-date-time-range-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, YuvDatepickerModule],\n providers: [{ provide: MatFormFieldControl, useExisting: forwardRef(() => DateTimeRangeFieldComponent) }],\n host: {\n '[id]': 'id',\n '[attr.aria-describedby]': 'describedBy',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut()'\n },\n template: `\n <yuv-datepicker [formControl]=\"start()\" [withTime]=\"true\" [calendar]=\"true\" [locale]=\"locale\" />\n <span class=\"separator\" aria-hidden=\"true\">–</span>\n <yuv-datepicker [formControl]=\"end()\" [withTime]=\"true\" [calendar]=\"true\" [locale]=\"locale\" />\n `,\n styles: `\n :host {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--ymt-spacing-2xs) var(--ymt-spacing-xs);\n min-width: 0;\n padding-inline-end: var(--ymt-spacing-2xs);\n }\n yuv-datepicker {\n flex: 1 1 0;\n min-width: 0;\n }\n .separator {\n color: var(--ymt-text-color-subtle);\n }\n `\n})\nexport class DateTimeRangeFieldComponent implements MatFormFieldControl<null>, OnInit, OnDestroy {\n readonly #translate = inject(TranslateService);\n readonly #destroyRef = inject(DestroyRef);\n\n readonly start = input.required<FormControl>();\n readonly end = input.required<FormControl>();\n\n // ---- MatFormFieldControl ---------------------------------------------------------------------\n readonly ngControl = null;\n readonly stateChanges = new Subject<void>();\n readonly id = `ymbpm-date-time-range-field-${nextId++}`;\n readonly controlType = 'ymbpm-date-time-range-field';\n readonly placeholder = '';\n readonly required = false;\n readonly errorState = false;\n readonly autofilled = false;\n readonly value = null;\n focused = false;\n describedBy = '';\n\n get disabled(): boolean {\n return this.start().disabled && this.end().disabled;\n }\n\n get empty(): boolean {\n return !this.start().value && !this.end().value;\n }\n\n /** The inputs of the dates show a mask, so the label must not sit on top of them. */\n get shouldLabelFloat(): boolean {\n return true;\n }\n\n get locale(): string {\n return this.#translate.currentLang;\n }\n\n ngOnInit(): void {\n merge(this.start().valueChanges, this.end().valueChanges)\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe(() => this.stateChanges.next());\n }\n\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(): void {\n // the inputs of the date pickers take the focus themselves\n }\n\n onFocusIn(): void {\n this.focused = true;\n this.stateChanges.next();\n }\n\n onFocusOut(): void {\n this.focused = false;\n this.stateChanges.next();\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { APP_ICONS, FilterOption } from '../../../bpm-management.schema';\n\n/**\n * The comparison of a filter field (equals, contains, ...). With several operators the user picks\n * one from a menu, with a single one it is only shown. Both take the same space, so the fields of\n * all filters line up.\n */\n@Component({\n selector: 'ymbpm-filter-operator',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [YmtIconButtonDirective, MatIconModule, MatMenuModule, MatTooltipModule, TranslatePipe],\n template: `\n @if (current(); as current) {\n @if (operators().length > 1) {\n <button ymtIconButton icon-button-size=\"small\" type=\"button\" [matMenuTriggerFor]=\"menu\" [attr.aria-label]=\"current.label | translate\" [matTooltip]=\"current.label | translate\">\n <mat-icon>{{ icons[current.icon || ''] }}</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n @for (operator of operators(); track operator.value) {\n <button mat-menu-item (click)=\"valueChange.emit(operator.value)\">\n <mat-icon>{{ icons[operator.icon || ''] }}</mat-icon>\n {{ operator.label | translate }}\n </button>\n }\n </mat-menu>\n } @else {\n <!-- not interactive, but the same button as the menu trigger so both take the same space -->\n <button ymtIconButton icon-button-size=\"small\" type=\"button\" class=\"fixed\" aria-disabled=\"true\" tabindex=\"-1\" [attr.aria-label]=\"current.label | translate\" [matTooltip]=\"current.label | translate\">\n <mat-icon>{{ icons[current.icon || ''] }}</mat-icon>\n </button>\n }\n }\n `,\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n /* like the buttons of the date control: a little air between the button and the value */\n padding-inline: var(--ymt-spacing-2xs);\n }\n .fixed {\n color: var(--ymt-text-color-subtle);\n cursor: default;\n }\n `\n})\nexport class FilterOperatorComponent {\n readonly icons: Record<string, string> = { ...APP_ICONS };\n\n operators = input.required<FilterOption[]>();\n value = input<string | null>(null);\n valueChange = output<string>();\n\n readonly current = computed(() => this.operators().find(o => o.value === this.value()) ?? this.operators()[0]);\n}\n","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { DateTimeFieldComponent } from '../date-time-field/date-time-field.component';\nimport { DateTimeRangeFieldComponent } from '../date-time-range-field/date-time-range-field.component';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\nimport { Component, forwardRef, inject, input, OnInit, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { CommonModule } from '@angular/common';\nimport { APP_ICONS, FILTER_OPERATORS, FILTER_TYPES, FilterValue, FilterOption } from '../../../bpm-management.schema';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { pairwise, startWith } from 'rxjs';\n\n@Component({\n selector: 'ymbpm-date-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatDividerModule,\n TranslatePipe,\n FilterClearComponent,\n FilterOperatorComponent,\n DateTimeFieldComponent,\n DateTimeRangeFieldComponent,\n MatTooltipModule\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateFilterComponent),\n multi: true\n }\n ],\n host: { '[class.between]': 'isBetweenMode()' },\n templateUrl: './date-filter.component.html',\n styleUrl: './date-filter.component.scss'\n})\nexport class DateFilterComponent implements ControlValueAccessor, OnInit {\n readonly translateService = inject(TranslateService);\n\n @ViewChild(MatTooltip) tooltip?: MatTooltip;\n \n /** Translation key of the field label. */\n label = input<string>('');\n placeholder = input<string>();\n operators = input<FilterOption[]>([FILTER_OPERATORS.BEFORE]);\n \n filterForm = new FormGroup({\n value: new FormControl<Date | null>(null),\n endDate: new FormControl<Date | null>(null),\n operator: new FormControl<string>(FILTER_OPERATORS.BEFORE.value)\n });\n \n icons = {\n ...APP_ICONS,\n };\n\n get valueControl() { return this.filterForm.get('value') as FormControl; }\n get operatorControl() { return this.filterForm.get('operator') as FormControl; }\n get endDateControl() { return this.filterForm.get('endDate') as FormControl; }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n this.operatorControl.setValue(this.operators()[0]);\n \n this.valueControl.valueChanges\n .pipe(\n startWith(null),\n pairwise()\n ) \n .subscribe(([prev, next]: [any, any]) => {\n if (this.isActiveFilter() || prev !== null && next === null) {\n this.fireOnChangeEvent();\n }\n });\n\n this.endDateControl.valueChanges\n .pipe(\n startWith(null),\n pairwise()\n )\n .subscribe(([prev, next]: [any, any]) => {\n if (this.isActiveFilter() || prev !== null && next === null) {\n this.fireOnChangeEvent();\n }\n });\n\n this.operatorControl.valueChanges\n .pipe(\n startWith(this.operators()[0]),\n pairwise()\n )\n .subscribe(([prev, next]: [any, any]) => {\n if (prev !== next) {\n this.fireOnChangeEvent();\n }\n });\n }\n\n isActiveFilter(): boolean {\n const operator = this.operatorControl.value;\n \n if (operator === FILTER_OPERATORS.BETWEEN.value) {\n const startDate = this.valueControl.value;\n const endDate = this.endDateControl.value;\n return startDate !== null || endDate !== null;\n } else {\n const value = this.valueControl.value;\n return value !== null;\n }\n }\n\n isBetweenMode(): boolean {\n return this.operatorControl.value === FILTER_OPERATORS.BETWEEN.value;\n }\n\n getCurrentOperatorOption(): FilterOption | null {\n const operator = this.operatorControl.value;\n return this.operators().find(op => op.value === operator) || null;\n }\n\n setOperator(operator: string): void {\n this.operatorControl.setValue(operator);\n }\n\n clearFilter(fireEvent = false): void {\n this.filterForm.reset({\n value: null,\n operator: this.operators()[0].value,\n endDate: null\n }, { emitEvent: false });\n\n if (fireEvent) {\n this.fireOnChangeEvent();\n }\n }\n\n toggleOperator(): void {\n const currentOperator = this.operatorControl.value;\n const currentIndex = this.operators().findIndex(op => op.value === currentOperator);\n const nextIndex = (currentIndex + 1) % this.operators().length;\n this.operatorControl.setValue(this.operators()[nextIndex].value);\n\n if (this.tooltip) {\n this.tooltip.hide();\n setTimeout(() => {\n this.tooltip?.show();\n }, 0);\n }\n }\n \n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.DATE) {\n if (value.operator && value.operator === FILTER_OPERATORS.BETWEEN.value) {\n this.filterForm.setValue({\n value: value.value instanceof Date ? value.value : null,\n operator: FILTER_OPERATORS.BETWEEN.value,\n endDate: value.endDate instanceof Date ? value.endDate : null\n }, { emitEvent: false });\n } else {\n const operator = value.operator && this.operators().find(op => op.value === value.operator)\n ? value.operator\n : this.operators()[0].value;\n\n this.filterForm.setValue({\n value: value.value instanceof Date ? value.value : null,\n operator: operator,\n endDate: null\n }, { emitEvent: false });\n }\n } else {\n this.clearFilter();\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(): void {\n const operator = this.operatorControl.value;\n if (operator === FILTER_OPERATORS.BETWEEN.value) {\n const startDate = this.valueControl.value;\n const endDate: Date | null = this.endDateControl.value;\n\n this.onChange({\n value: startDate,\n endDate: endDate,\n operator: operator,\n type: FILTER_TYPES.DATE\n });\n } else {\n const value = this.valueControl.value;\n\n this.onChange({\n value: value,\n operator: operator,\n type: FILTER_TYPES.DATE\n });\n }\n }\n}","<div class=\"filter-input-group\" [class.active]=\"isActiveFilter()\">\n <mat-form-field class=\"filter-field\">\n <mat-label>{{ label() | translate }}</mat-label>\n <ymbpm-filter-operator matPrefix [operators]=\"operators()\" [value]=\"operatorControl.value\" (valueChange)=\"setOperator($event)\" />\n @if (isBetweenMode()) {\n <ymbpm-date-time-range-field [start]=\"valueControl\" [end]=\"endDateControl\" />\n } @else {\n <ymbpm-date-time-field [formControl]=\"valueControl\" />\n }\n @if (isActiveFilter()) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n </mat-form-field>\n</div>\n","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\nimport { Component, input, OnInit, forwardRef, ViewChild, ChangeDetectorRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { CommonModule } from '@angular/common';\nimport { debounceTime, distinctUntilChanged, pairwise, startWith, Subscription } from 'rxjs';\nimport { APP_ICONS, FILTER_OPERATORS, FILTER_TYPES, FilterValue, FilterOption } from '../../../bpm-management.schema';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'ymbpm-number-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatDividerModule,\n MatTooltipModule,\n TranslatePipe,\n FilterClearComponent,\n FilterOperatorComponent\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberFilterComponent),\n multi: true\n }\n ],\n templateUrl: './number-filter.component.html',\n styleUrl: './number-filter.component.scss'\n})\nexport class NumberFilterComponent implements ControlValueAccessor, OnInit {\n /** Translation key of the field label. */\n label = input<string>('');\n operators = input<FilterOption[]>([FILTER_OPERATORS.EQUALS]);\n /** The smallest value that is accepted, lower values are raised to it. */\n min = input<number | null>(null);\n \n @ViewChild(MatTooltip) tooltip?: MatTooltip;\n \n filterForm = new FormGroup({\n value: new FormControl(null),\n operator: new FormControl<string>(FILTER_OPERATORS.EQUALS.value)\n });\n \n icons = {\n ...APP_ICONS,\n };\n\n get numberControl() { return this.filterForm.get('value') as FormControl; }\n get operatorControl() { return this.filterForm.get('operator') as FormControl; }\n \n private numberInputSub: Subscription | null = null;\n private lastNumberValue: number | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n this.operatorControl.setValue(this.operators()[0]);\n \n this.createNumberInputSubscription();\n \n this.operatorControl.valueChanges\n .pipe(\n startWith(this.operators()[0]),\n pairwise()\n )\n .subscribe(([prev, next]: [any, any]) => {\n if (prev !== next) {\n if (this.isActiveFilter()) {\n this.fireOnChangeEvent();\n }\n }\n });\n }\n\n onEnter(): void {\n if (this.numberControl.value === this.lastNumberValue) {\n return;\n }\n\n if (this.numberInputSub) {\n this.numberInputSub.unsubscribe();\n }\n\n this.clampToMin();\n this.fireOnChangeEvent();\n this.createNumberInputSubscription();\n }\n\n createNumberInputSubscription(): void {\n this.numberInputSub = this.numberControl.valueChanges\n .pipe(\n debounceTime(300),\n distinctUntilChanged()\n )\n .subscribe(() => {\n this.clampToMin();\n this.fireOnChangeEvent();\n });\n }\n\n private clampToMin(): void {\n const min = this.min();\n const value = this.numberControl.value;\n if (min !== null && value !== null && value !== '' && Number(value) < min) {\n this.numberControl.setValue(min, { emitEvent: false });\n }\n }\n \n isActiveFilter(): boolean {\n const value = this.numberControl.value;\n return value !== null && value !== undefined && !isNaN(Number(value))\n }\n\n getCurrentOperatorOption(): FilterOption | null {\n const operator = this.operatorControl.value;\n return this.operators().find(op => op.value === operator) || null;\n }\n\n setOperator(operator: string): void {\n this.operatorControl.setValue(operator);\n }\n\n clearFilter(fireEvent = false): void {\n this.filterForm.reset({\n value: null,\n operator: this.operators()[0].value\n }, { emitEvent: false });\n\n if (fireEvent) {\n this.fireOnChangeEvent();\n }\n }\n\n toggleOperator(): void {\n const currentOperator = this.operatorControl.value;\n const currentIndex = this.operators().findIndex(op => op.value === currentOperator);\n const nextIndex = (currentIndex + 1) % this.operators().length;\n this.operatorControl.setValue(this.operators()[nextIndex].value);\n\n if (this.tooltip) {\n this.tooltip.hide();\n setTimeout(() => {\n this.tooltip?.show();\n }, 0);\n }\n }\n \n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.NUMBER) {\n const operator = value.operator && this.operators().find(op => op.value === value.operator)\n ? value.operator\n : this.operators()[0].value;\n \n this.filterForm.setValue({\n value: value.value,\n operator: operator\n }, { emitEvent: false });\n } else {\n this.clearFilter();\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(): void {\n this.lastNumberValue = this.numberControl.value;\n this.onChange({\n value: this.numberControl.value,\n operator: this.operatorControl.value,\n type: FILTER_TYPES.NUMBER\n });\n }\n}","<div class=\"filter-input-group\" [class.active]=\"isActiveFilter()\">\n <mat-form-field class=\"filter-field\">\n <mat-label>{{ label() | translate }}</mat-label>\n <ymbpm-filter-operator matPrefix [operators]=\"operators()\" [value]=\"operatorControl.value\" (valueChange)=\"setOperator($event)\" />\n <input matInput type=\"number\" [attr.min]=\"min()\"\n [formControl]=\"numberControl\"\n (keydown.enter)=\"onEnter()\">\n @if (isActiveFilter()) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n </mat-form-field>\n</div>","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\nimport { Component, input, OnInit, forwardRef, ChangeDetectorRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { CommonModule } from '@angular/common';\nimport { APP_ICONS, FILTER_OPERATORS, FILTER_TYPES, FilterValue, FilterOption } from '../../../bpm-management.schema';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'ymbpm-select-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n TranslatePipe,\n MatTooltipModule,\n FilterClearComponent,\n FilterOperatorComponent,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectFilterComponent),\n multi: true\n }\n ],\n templateUrl: './select-filter.component.html',\n styleUrl: './select-filter.component.scss'\n})\nexport class SelectFilterComponent implements ControlValueAccessor, OnInit {\n /** Translation key of the field label. */\n label = input<string>('');\n options = input<FilterOption[]>([]);\n enableMultiselect = input<boolean>(false);\n /** Translation key of what the field shows while nothing is selected. */\n placeholder = input<string>('yuv.app.bpm-management.filters.select');\n \n /** A single choice is compared for equality, shown like the fixed operator of the other filters. */\n readonly equals = [FILTER_OPERATORS.EQUALS];\n\n selectControl = new FormControl();\n \n icons = {\n ...APP_ICONS,\n };\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n if (this.enableMultiselect()) {\n this.selectControl.setValue([]);\n } else {\n this.selectControl.setValue('');\n }\n \n this.selectControl.valueChanges.subscribe(() => {\n this.fireOnChangeEvent();\n });\n }\n\n isActiveFilter(): boolean {\n const value = this.selectControl.value;\n if (this.enableMultiselect()) {\n return value && Array.isArray(value) && value.length > 0;\n } else {\n return value && value !== '';\n }\n }\n\n /** The chosen option of a single select (shown with its icon). */\n selectedOption(): FilterOption | undefined {\n return this.options().find(o => o.value === this.selectControl.value);\n }\n\n getSelectedCount(): number {\n if (!this.enableMultiselect()) return 0;\n \n const values = this.selectControl.value || [];\n return Array.isArray(values) ? values.length : 0;\n }\n\n clearFilter(fireEvent = false): void {\n this.selectControl.setValue(null, { emitEvent: false });\n\n if (fireEvent) {\n this.fireOnChangeEvent();\n }\n }\n\n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.SELECT ) {\n if (this.enableMultiselect()) {\n this.selectControl.setValue(Array.isArray(value.value) ? value.value : [], { emitEvent: false });\n } else {\n this.selectControl.setValue(value.value || '', { emitEvent: false });\n }\n } else {\n this.clearFilter();\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(): void {\n const value = this.selectControl.value;\n const isEmpty = value == null || value === '' || (Array.isArray(value) && value.length === 0);\n // no selection is no filter (the filter bar drops filters without a value)\n this.onChange(isEmpty ? null : { value, type: FILTER_TYPES.SELECT });\n }\n}","<div class=\"filter-input-group\" [class.active]=\"isActiveFilter()\">\n <mat-form-field class=\"filter-field\" floatLabel=\"always\">\n <mat-label>{{ label() | translate }}</mat-label>\n @if (!enableMultiselect()) {\n <ymbpm-filter-operator matPrefix [operators]=\"equals\" value=\"equals\" />\n }\n <mat-select [formControl]=\"selectControl\"\n [placeholder]=\"placeholder() ? (placeholder() | translate) : ''\"\n [multiple]=\"enableMultiselect()\">\n @if (!enableMultiselect()) {\n <mat-select-trigger>\n @if (selectedOption(); as selected) {\n @if (selected.icon) {\n <mat-icon class=\"option-icon\">{{ icons[selected.icon] }}</mat-icon>\n }\n {{ selected.label | translate }}\n }\n </mat-select-trigger>\n }\n @for (option of options(); track option.value) {\n <mat-option [value]=\"option.value\">\n @if (option.icon) {\n <mat-icon class=\"option-icon\">{{ icons[option.icon] }}</mat-icon>\n }\n {{option.label | translate}}\n </mat-option>\n }\n </mat-select>\n @if (isActiveFilter()) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n @if (enableMultiselect()) {\n <div matSuffix class=\"multi-select-suffix\">\n @if (getSelectedCount() > 0) {\n <mat-icon>check_circle</mat-icon>\n <span class=\"count\">{{getSelectedCount()}}</span>\n }\n </div>\n }\n </mat-form-field>\n</div>\n","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\nimport { Component, input, OnInit, forwardRef, ViewChild, ChangeDetectorRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { CommonModule } from '@angular/common';\nimport { debounceTime, distinctUntilChanged, pairwise, startWith, Subscription } from 'rxjs';\nimport { FilterValue, APP_ICONS, FILTER_OPERATORS, FILTER_TYPES, FilterOption } from '../../../bpm-management.schema';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'ymbpm-text-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatDividerModule,\n MatTooltipModule,\n TranslatePipe,\n FilterClearComponent,\n FilterOperatorComponent\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextFilterComponent),\n multi: true\n }\n ],\n templateUrl: './text-filter.component.html',\n styleUrl: './text-filter.component.scss'\n})\nexport class TextFilterComponent implements ControlValueAccessor, OnInit {\n /** Translation key of the field label. */\n label = input<string>('');\n operators = input<FilterOption[]>([FILTER_OPERATORS.EQUALS]);\n \n @ViewChild(MatTooltip) tooltip?: MatTooltip;\n \n filterForm = new FormGroup({\n value: new FormControl(''),\n operator: new FormControl<string>(FILTER_OPERATORS.EQUALS.value)\n });\n\n icons = {\n ...APP_ICONS,\n };\n\n /** The operator a filter starts with: contains if it is offered, otherwise the first one. */\n defaultOperator(): string {\n return (this.operators().find(op => op.value === FILTER_OPERATORS.CONTAINS.value) ?? this.operators()[0]).value;\n }\n\n get textControl() { return this.filterForm.get('value') as FormControl; }\n get operatorControl() { return this.filterForm.get('operator') as FormControl; }\n\n private textInputSub: Subscription | null = null;\n private lastTextValue: string | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n this.operatorControl.setValue(this.defaultOperator());\n \n this.createTextInputSubscription();\n \n this.operatorControl.valueChanges\n .pipe(\n startWith(this.defaultOperator()),\n pairwise()\n )\n .subscribe(([prev, next]: [string, string]) => {\n if (prev !== next) {\n if (this.isActiveFilter()) {\n this.fireOnChangeEvent();\n }\n }\n });\n }\n\n onEnter(): void {\n if (this.textControl.value === this.lastTextValue) {\n return;\n }\n\n if (this.textInputSub) {\n this.textInputSub.unsubscribe();\n }\n\n if (this.isActiveFilter()) {\n this.fireOnChangeEvent();\n } else {\n if (this.isActiveFilter(this.lastTextValue) && (this.textControl.value.toString().trim().length === 0)) {\n this.clearFilter(true);\n }\n }\n this.createTextInputSubscription();\n }\n\n createTextInputSubscription(): void {\n this.textInputSub = this.textControl.valueChanges\n .pipe(\n debounceTime(550),\n distinctUntilChanged(),\n startWith(null),\n pairwise()\n )\n .subscribe(([prev, next]: [any, any]) => {\n if (this.isActiveFilter()) {\n this.fireOnChangeEvent();\n } else if (next !== null && next !== undefined) {\n if (this.isActiveFilter(prev) && (next.toString().trim().length === 0)) {\n this.clearFilter(true);\n }\n }\n });\n }\n\n isActiveFilter(value = this.textControl.value): boolean {\n return value && value.toString().trim().length > 0;\n }\n\n getCurrentOperatorOption(): FilterOption | null {\n const operator = this.operatorControl.value;\n return this.operators().find(op => op.value === operator) || null;\n }\n\n setOperator(operator: string): void {\n this.operatorControl.setValue(operator);\n }\n\n clearFilter(fireEvent = false): void {\n this.filterForm.reset({\n value: null,\n operator: this.defaultOperator()\n }, { emitEvent: false });\n\n if (fireEvent) {\n this.fireOnChangeEvent();\n }\n }\n\n toggleOperator(): void {\n const currentOperator = this.operatorControl.value;\n const currentIndex = this.operators().findIndex(op => op.value === currentOperator);\n const nextIndex = (currentIndex + 1) % this.operators().length;\n this.operatorControl.setValue(this.operators()[nextIndex].value);\n \n if (this.tooltip) {\n this.tooltip.hide();\n setTimeout(() => {\n this.tooltip?.show();\n }, 0);\n }\n }\n\n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.TEXT) {\n const operator = value.operator && this.operators().find(op => op.value === value.operator)\n ? value.operator\n : this.defaultOperator();\n \n this.filterForm.setValue({\n value: value.value ? String(value.value) : '',\n operator: operator\n }, { emitEvent: false });\n } else {\n this.clearFilter();\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(): void {\n this.lastTextValue = this.textControl.value;\n this.onChange({\n value: this.textControl.value,\n operator: this.operatorControl.value,\n type: FILTER_TYPES.TEXT\n });\n }\n}","<div class=\"filter-input-group\" [class.active]=\"isActiveFilter()\">\n <mat-form-field class=\"filter-field\">\n <mat-label>{{ label() | translate }}</mat-label>\n <ymbpm-filter-operator matPrefix [operators]=\"operators()\" [value]=\"operatorControl.value\" (valueChange)=\"setOperator($event)\" />\n <input matInput \n [formControl]=\"textControl\"\n (keydown.enter)=\"onEnter()\">\n @if (isActiveFilter()) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n </mat-form-field>\n</div>","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { Component, forwardRef, input, OnInit, signal, ChangeDetectorRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { OrganizationComponent } from '@yuuvis/client-framework/forms';\nimport { FilterValue, FILTER_OPERATORS, FILTER_TYPES } from '../../../bpm-management.schema';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\n\n@Component({\n selector: 'ymbpm-user-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatIconModule,\n TranslatePipe,\n OrganizationComponent,\n FilterClearComponent,\n FilterOperatorComponent\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserFilterComponent),\n multi: true\n }\n ],\n templateUrl: './user-filter.component.html',\n styleUrl: './user-filter.component.scss'\n})\nexport class UserFilterComponent implements ControlValueAccessor, OnInit {\n /** Translation key of the field label. */\n label = input<string>('');\n /** A user is compared for equality, shown like the fixed operator of the other filters. */\n readonly equals = [FILTER_OPERATORS.EQUALS];\n orgControl = new FormControl<string | null>(null);\n\n showOrganization = signal(true);\n\n private hasWrittenValue = false;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n this.orgControl.valueChanges.subscribe(value => this.fireOnChangeEvent(value));\n }\n\n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.TEXT) {\n this.orgControl.setValue(value.value ? String(value.value) : null, { emitEvent: false });\n } else {\n this.orgControl.setValue(null, { emitEvent: false });\n if (this.hasWrittenValue) {\n this.showOrganization.set(false);\n setTimeout(() => this.showOrganization.set(true));\n }\n }\n this.hasWrittenValue = true;\n }\n\n clearFilter(fireEvent = false): void {\n this.orgControl.setValue(null, { emitEvent: false });\n // the organization field keeps its own state, so it is recreated\n this.showOrganization.set(false);\n setTimeout(() => this.showOrganization.set(true));\n if (fireEvent) {\n this.fireOnChangeEvent(null);\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(value: string | null): void {\n this.onTouched();\n this.onChange({\n value: value || null,\n operator: FILTER_OPERATORS.EQUALS.value,\n type: FILTER_TYPES.TEXT\n });\n }\n}\n","<div class=\"filter-input-group\" [class.active]=\"!!orgControl.value\">\n <mat-form-field class=\"filter-field\">\n <mat-label>{{ label() | translate }}</mat-label>\n <ymbpm-filter-operator matPrefix [operators]=\"equals\" value=\"equals\" />\n @if (showOrganization()) {\n <yuv-organization [formControl]=\"orgControl\" [excludeMe]=\"false\" situation=\"SEARCH\"></yuv-organization>\n }\n @if (orgControl.value) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n </mat-form-field>\n</div>\n","import { CdkConnectedOverlay, ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n Injector,\n input,\n OnDestroy,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { Subscription } from 'rxjs';\nimport { Column, FILTER_OPERATORS, FILTER_TYPES, FilterOption, FilterValue, formatDateTime, TableFilters } from '../../../bpm-management.schema';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\nimport { DateFilterComponent } from '../date-filter/date-filter.component';\nimport { NumberFilterComponent } from '../number-filter/number-filter.component';\nimport { SelectFilterComponent } from '../select-filter/select-filter.component';\nimport { TextFilterComponent } from '../text-filter/text-filter.component';\nimport { UserFilterComponent } from '../user-filter/user-filter.component';\n\nconst OPERATORS = new Map<string, FilterOption>(Object.values(FILTER_OPERATORS).map(o => [o.value, o]));\n\n/** Operators shown as a sign before the value; the text operators are wildcards around it instead. */\nconst OPERATOR_SIGNS: Record<string, string> = {\n [FILTER_OPERATORS.EQUALS.value]: '=',\n [FILTER_OPERATORS.GREATER_THAN.value]: '>',\n [FILTER_OPERATORS.LESS_THAN.value]: '<',\n [FILTER_OPERATORS.BEFORE.value]: '<',\n [FILTER_OPERATORS.AFTER.value]: '>'\n};\n\n/** What a chip shows: the criterion with operator signs, and in words for its tooltip. */\ninterface Chip {\n column: Column;\n /** Set for user criteria, which show the user instead of `text`. */\n userId: string | null;\n text: string;\n title: string;\n}\n\n/**\n * Strip of the list pane with one chip for every active criterion (and the search); empty it takes\n * no space. New criteria are added with `edit()` from outside (the \"add filter\" menu of the pane\n * header). A chip opens the editor of its criterion, which is the filter control of the column in a\n * popover; changes apply while typing, so there is nothing to confirm.\n */\n@Component({\n selector: 'ymbpm-filter-bar',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class.empty]': '!hasChips()' },\n imports: [\n OverlayModule,\n ReactiveFormsModule,\n MatIconModule,\n TranslatePipe,\n OrganizationRendererComponent,\n TextFilterComponent,\n NumberFilterComponent,\n SelectFilterComponent,\n DateFilterComponent,\n UserFilterComponent\n ],\n templateUrl: './filter-bar.component.html',\n styleUrl: './filter-bar.component.scss'\n})\nexport class FilterBarComponent implements OnDestroy {\n readonly #translate = inject(TranslateService);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The columns that can be filtered (the ones without a filter are ignored). */\n columns = input.required<Column[]>();\n filters = input<TableFilters>({});\n /** The search term of the list (it is entered in the app header and shown as a chip here). */\n search = input('');\n filtersChange = output<TableFilters>();\n searchClear = output<void>();\n\n readonly FILTER_TYPES = FILTER_TYPES;\n readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 }\n ];\n\n private readonly overlay = viewChild(CdkConnectedOverlay);\n\n readonly editing = signal<{ column: Column; origin: HTMLElement } | null>(null);\n readonly overlayOrigin = computed(() => this.editing()?.origin ?? this.#host.nativeElement);\n control = new FormControl<FilterValue | null>(null);\n #sub?: Subscription;\n\n readonly #filterable = computed(() => this.columns().filter(c => c.filter));\n readonly addableColumns = computed(() => this.#filterable().filter(c => !this.filters()[c.name]));\n /** Built once per change of the filters, not on every check of the template. */\n readonly chips = computed<Chip[]>(() =>\n this.#filterable()\n .filter(c => this.filters()[c.name])\n .map(column => {\n const filter = this.filters()[column.name];\n const label = this.#translate.instant(column.displayName);\n return {\n column,\n userId: column.filter?.type === FILTER_TYPES.USER ? filter.value : null,\n text: this.#describe(column, filter, true),\n title: `${label}: ${this.#describe(column, filter, false)}`\n };\n })\n );\n readonly hasChips = computed(() => !!this.search() || this.chips().length > 0);\n\n ngOnDestroy(): void {\n this.#sub?.unsubscribe();\n }\n\n edit(column: Column, origin: HTMLElement): void {\n this.#sub?.unsubscribe();\n this.control = new FormControl<FilterValue | null>(this.filters()[column.name] ?? null);\n this.#sub = this.control.valueChanges.subscribe(value => {\n this.#update(column.name, value);\n // a user is picked from a list in one go, there is nothing left to type\n if (column.filter?.type === FILTER_TYPES.USER && value?.value) {\n this.close(true);\n }\n });\n this.editing.set({ column, origin });\n }\n\n /** `restoreFocus` puts the focus back on what opened the editor (the add-filter button or the chip). */\n close(restoreFocus = false): void {\n const origin = this.editing()?.origin;\n this.#sub?.unsubscribe();\n this.editing.set(null);\n if (restoreFocus) {\n afterNextRender(() => origin?.isConnected && origin.focus(), { injector: this.#injector });\n }\n }\n\n /** Escape cancels the popover, Enter in a text field confirms the value (it is applied already while typing). */\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' || (event.key === 'Enter' && !event.defaultPrevented && event.target instanceof HTMLInputElement)) {\n this.close(true);\n }\n }\n\n /** The editor takes the focus once it is rendered (the menu that opens it does not restore its own). */\n focusEditor(): void {\n afterNextRender(() => this.overlay()?.overlayRef?.overlayElement.querySelector<HTMLElement>('input')?.focus(), {\n injector: this.#injector\n });\n }\n\n remove(column: Column): void {\n if (this.editing()?.column === column) {\n this.close();\n }\n const filters = { ...this.filters() };\n delete filters[column.name];\n this.filtersChange.emit(filters);\n }\n\n /** Operator and value of a criterion: with signs (`= x`, `*x*`, `> x`) or in words. */\n #describe(column: Column, filter: FilterValue, signs: boolean): string {\n const operator = filter.operator ? OPERATORS.get(filter.operator) : undefined;\n const word = operator ? this.#translate.instant(operator.label) : '';\n switch (column.filter?.type) {\n case FILTER_TYPES.SELECT:\n return this.#selectText(column, filter.value);\n case FILTER_TYPES.DATE:\n return filter.operator === FILTER_OPERATORS.BETWEEN.value\n ? `${signs ? '' : word + ' '}${this.#date(filter.value)} – ${this.#date(filter.endDate)}`\n : `${signs ? OPERATOR_SIGNS[filter.operator ?? ''] ?? '' : word} ${this.#date(filter.value)}`.trim();\n default:\n return signs ? this.#withSign(filter.operator, String(filter.value)) : `${word} ${filter.value}`.trim();\n }\n }\n\n /** Wildcards for the text operators, a leading sign for the others. */\n #withSign(operator: string | undefined, value: string): string {\n switch (operator) {\n case FILTER_OPERATORS.CONTAINS.value:\n return `*${value}*`;\n case FILTER_OPERATORS.STARTS_WITH.value:\n return `${value}*`;\n case FILTER_OPERATORS.ENDS_WITH.value:\n return `*${value}`;\n default:\n return `${OPERATOR_SIGNS[operator ?? ''] ?? ''} ${value}`.trim();\n }\n }\n\n #selectText(column: Column, value: unknown): string {\n const options = column.filter?.type === FILTER_TYPES.SELECT ? (column.filter.options ?? []) : [];\n const values = Array.isArray(value) ? value : [value];\n return values.map(v => this.#translate.instant(options.find(o => o.value === v)?.label ?? String(v))).join(', ');\n }\n\n /** Same format as the dates of the lists and details. */\n #date(value: Date | string | null | undefined): string {\n return value ? formatDateTime(new Date(value).toISOString(), this.#translate.currentLang) : '';\n }\n\n #update(name: string, value: FilterValue | null): void {\n const filters = { ...this.filters() };\n const isBetween = value?.type === FILTER_TYPES.DATE && value.operator === FILTER_OPERATORS.BETWEEN.value;\n const isEmpty = !value || (isBetween ? value.value == null && value.endDate == null : value.value == null);\n if (isEmpty) {\n delete filters[name];\n } else {\n filters[name] = value;\n }\n this.filtersChange.emit(filters);\n }\n}\n","<div class=\"chips\" role=\"group\" [attr.aria-label]=\"'yuv.app.bpm-management.filters.title' | translate\">\n @if (search()) {\n <span class=\"chip\">\n <span class=\"chip__main chip__main--static\">\n <span class=\"chip__name\">{{ 'yuv.app.bpm-management.filters.search' | translate }}</span>\n <span class=\"chip__value\">{{ search() }}</span>\n </span>\n <button type=\"button\" class=\"chip__remove\" [attr.aria-label]=\"('yuv.app.bpm-management.filters.remove' | translate) + ': ' + ('yuv.app.bpm-management.filters.search' | translate)\" (click)=\"searchClear.emit()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n }\n @for (chip of chips(); track chip.column.name) {\n <span class=\"chip\" [class.chip--editing]=\"editing()?.column === chip.column\">\n <button type=\"button\" class=\"chip__main\" #chipButton [attr.title]=\"chip.userId ? null : chip.title\" (click)=\"edit(chip.column, chipButton)\">\n <span class=\"chip__name\">{{ chip.column.displayName | translate }}</span>\n @if (chip.userId) {\n <yuv-organization-renderer propertyName=\"user\" [value]=\"chip.userId ?? null\"></yuv-organization-renderer>\n } @else {\n <span class=\"chip__value\">{{ chip.text }}</span>\n }\n </button>\n <button type=\"button\" class=\"chip__remove\" [attr.aria-label]=\"('yuv.app.bpm-management.filters.remove' | translate) + ': ' + (chip.column.displayName | translate)\" (click)=\"remove(chip.column)\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOpen]=\"!!editing()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n (backdropClick)=\"close()\"\n (overlayKeydown)=\"onKeydown($event)\"\n (attach)=\"focusEditor()\"\n>\n @if (editing(); as current) {\n <div class=\"popover\" role=\"dialog\" [attr.aria-label]=\"current.column.displayName | translate\">\n @let column = current.column;\n @switch (column.filter?.type) {\n @case (FILTER_TYPES.TEXT) {\n <ymbpm-text-filter [label]=\"column.displayName\" [formControl]=\"control\" [operators]=\"$any(column.filter).operators || []\"></ymbpm-text-filter>\n }\n @case (FILTER_TYPES.NUMBER) {\n <ymbpm-number-filter [label]=\"column.displayName\" [formControl]=\"control\" [min]=\"$any(column.filter).minValue ?? null\" [operators]=\"$any(column.filter).operators || []\"></ymbpm-number-filter>\n }\n @case (FILTER_TYPES.SELECT) {\n <ymbpm-select-filter [label]=\"column.displayName\" [placeholder]=\"$any(column.filter).placeholder ?? 'yuv.app.bpm-management.filters.select'\" [formControl]=\"control\" [options]=\"$any(column.filter).options || []\" [enableMultiselect]=\"!!$any(column.filter).enableMultiselect\"></ymbpm-select-filter>\n }\n @case (FILTER_TYPES.DATE) {\n <ymbpm-date-filter [label]=\"column.displayName\" [formControl]=\"control\" [operators]=\"$any(column.filter).operators || []\"></ymbpm-date-filter>\n }\n @case (FILTER_TYPES.USER) {\n <ymbpm-user-filter [label]=\"column.displayName\" [formControl]=\"control\"></ymbpm-user-filter>\n }\n }\n </div>\n }\n</ng-template>\n","import { Component, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\n\n/**\n * The narrow icon+label strip a `yuv-split-view` area collapses to instead of disappearing\n * entirely (`hideArea()`/`showArea()` still drive the actual split-view visibility - this is\n * just the \"way back in\" rendered as a sibling of the split-view while an area is hidden).\n *\n * The gutter div is the whole interactive target (click, Enter, Space all expand it) - the inner\n * icon is `aria-hidden` and has no click handler of its own, so it's purely decorative rather\n * than a second, independently-focusable interactive control.\n */\n@Component({\n selector: 'ymbpm-pane-gutter',\n standalone: true,\n imports: [MatIconModule, MatTooltipModule, YmtPanesModule],\n templateUrl: './pane-gutter.component.html',\n styleUrl: './pane-gutter.component.scss',\n})\nexport class PaneGutterComponent {\n icon = input.required<string>();\n label = input.required<string>();\n tooltip = input.required<string>();\n /** Flips the label to read bottom-to-top (`vertical-rl` reads top-to-bottom by default) - for a\n * gutter whose collapsed pane sits to the left, so the label flows outward toward that edge. */\n flipLabel = input<boolean>(false);\n expand = output<void>();\n}\n","<ymt-pane>\n <ymt-pane-body>\n <div\n class=\"pane-gutter\"\n role=\"button\"\n tabindex=\"0\"\n [matTooltip]=\"tooltip()\"\n [attr.aria-label]=\"tooltip()\"\n (click)=\"expand.emit()\"\n (keydown.enter)=\"expand.emit()\"\n (keydown.space)=\"$event.preventDefault(); expand.emit()\"\n >\n <mat-icon class=\"icon\" aria-hidden=\"true\">{{ icon() }}</mat-icon>\n <span class=\"label\" [class.label--btt]=\"flipLabel()\">{{ label() }}</span>\n </div>\n </ymt-pane-body>\n</ymt-pane>\n","import { Component, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n/**\n * A small icon button for a `ymt-pane`'s top bar that hides or toggles a sibling area (e.g. in a\n * `yuv-split-view`).\n */\n@Component({\n selector: 'ymbpm-pane-toggle-button',\n standalone: true,\n imports: [MatIconModule, MatTooltipModule, YmtIconButtonDirective],\n templateUrl: './pane-toggle-button.component.html',\n styleUrl: './pane-toggle-button.component.scss',\n})\nexport class PaneToggleButtonComponent {\n icon = input.required<string>();\n tooltip = input.required<string>();\n toggled = output<void>();\n}\n","<button\n ymtIconButton\n icon-button-size=\"small\"\n [matTooltip]=\"tooltip()\"\n [attr.aria-label]=\"tooltip()\"\n (click)=\"toggled.emit()\"\n>\n <mat-icon>{{ icon() }}</mat-icon>\n</button>\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { formatDateTime } from '../bpm-management.schema';\n\n@Pipe({\n name: 'formatDateTime',\n standalone: true\n})\nexport class FormatDateTimePipe implements PipeTransform {\n readonly #translateService = inject(TranslateService);\n\n transform(value: string | null): string {\n if (!value) return '';\n return formatDateTime(value, this.#translateService.currentLang);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { definitionSeverity, definitionStatusLabel, DeploymentInstance } from '../../../bpm-management.schema';\nimport { FormatDateTimePipe } from '../../../pipes/format-date-time.pipe';\n\n/** Deployment details: facts on top, then tabs for the contained process definitions and resources. */\n@Component({\n selector: 'ymbpm-deployment-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatTabsModule, TranslatePipe, YmtBadge, FormatDateTimePipe],\n templateUrl: './deployment-details.component.html',\n styleUrl: './deployment-details.component.scss'\n})\nexport class DeploymentDetailsComponent {\n deployment = input.required<DeploymentInstance>();\n /** Whether the process definitions page is enabled, so definitions can be linked. */\n canOpenDefinition = input(false);\n openDefinition = output<string>();\n\n readonly definitionSeverity = definitionSeverity;\n readonly definitionStatusLabel = definitionStatusLabel;\n}\n","<section class=\"facts\">\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.deploymentTime' | translate }}</span>\n <span>{{ (deployment().deploymentTime | formatDateTime) || '-' }}</span>\n </div>\n @if (deployment().category; as category) {\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.category' | translate }}</span>\n <ymt-badge class=\"category\" [outline]=\"true\">{{ category }}</ymt-badge>\n </div>\n }\n</section>\n\n<mat-tab-group class=\"tabs\" animationDuration=\"0ms\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'yuv.app.bpm-management.entity.definitions' | translate }}\n <ymt-badge class=\"count\">{{ deployment().definitions?.length ?? 0 }}</ymt-badge>\n </ng-template>\n <ng-template matTabContent>\n <div class=\"tab-content\">\n @if (!deployment().definitions?.length) {\n <p class=\"empty\">{{ 'yuv.app.bpm-management.emptyResult' | translate }}</p>\n } @else {\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'yuv.app.bpm-management.column.name' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.column.key' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.column.version' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.column.status' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n @for (definition of deployment().definitions; track definition.id) {\n <tr>\n <td>\n @if (canOpenDefinition()) {\n <a class=\"link\" tabindex=\"0\" role=\"link\" (click)=\"openDefinition.emit(definition.id)\" (keydown.enter)=\"openDefinition.emit(definition.id)\">\n {{ definition.name || definition.id }}<mat-icon>arrow_forward</mat-icon>\n </a>\n } @else {\n {{ definition.name || definition.id }}\n }\n </td>\n <td class=\"mono\">{{ definition.key }}</td>\n <td>{{ definition.version }}</td>\n <td>\n <ymt-badge [severity]=\"definitionSeverity(definition)\">\n {{ definitionStatusLabel(definition) | translate }}\n </ymt-badge>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'yuv.app.bpm-management.deployment.details.resources' | translate }}\n <ymt-badge class=\"count\">{{ deployment().resources?.length ?? 0 }}</ymt-badge>\n </ng-template>\n <ng-template matTabContent>\n <div class=\"tab-content\">\n @if (!deployment().resources?.length) {\n <p class=\"empty\">{{ 'yuv.app.bpm-management.emptyResult' | translate }}</p>\n } @else {\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'yuv.app.bpm-management.column.id' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.deployment.details.resourceMediaType' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n @for (resource of deployment().resources; track resource.id) {\n <tr>\n <td class=\"mono\">{{ resource.id }}</td>\n <td>{{ resource.mediaType }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </ng-template>\n </mat-tab>\n</mat-tab-group>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { ProcessDefinitionInstance } from '../../../bpm-management.schema';\nimport { QuickFilter } from '../../../bpm-management.state';\n\n/** The processes of a definition to show in the processes list; no status shows all of them. */\nexport interface ShowProcessesRequest {\n definitionId: string;\n quick: QuickFilter;\n}\n\n/** Process definition details: facts on top, then a tab with the process statistics. */\n@Component({\n selector: 'ymbpm-process-definition-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatTabsModule, TranslatePipe, YmtBadge, YmtButtonDirective],\n templateUrl: './process-definition-details.component.html',\n styleUrl: './process-definition-details.component.scss'\n})\nexport class ProcessDefinitionDetailsComponent {\n definition = input.required<ProcessDefinitionInstance>();\n /** Whether the deployments page is enabled, so the deployment can be linked. */\n canOpenDeployment = input(false);\n openDeployment = output<string>();\n /** Show the processes of this definition, optionally of one status, in the processes list. */\n showProcesses = output<ShowProcessesRequest>();\n\n /** The list can only tell ended from not ended, so running and suspended are one \"active\" status. */\n cards = computed(() => {\n const c = this.definition().statistics?.processInstanceCount;\n const running = c?.active ?? 0;\n const suspended = c?.suspended ?? 0;\n return [\n {\n quick: 'active' as const,\n icon: 'hourglass_top',\n label: 'yuv.app.bpm-management.statusFilter.processes.active',\n count: running + suspended,\n hint: 'yuv.app.bpm-management.definitions.details.activeBreakdown',\n hintParams: { running, suspended }\n },\n {\n quick: 'completed' as const,\n icon: 'flag',\n label: 'yuv.app.bpm-management.statusFilter.processes.completed',\n count: c?.completed ?? 0,\n hint: 'yuv.app.bpm-management.definitions.details.completedHint',\n hintParams: {}\n }\n ];\n });\n\n /** The tab badge: all processes of the definition. */\n total = computed(() => this.cards().reduce((sum, card) => sum + card.count, 0));\n\n show(quick: QuickFilter): void {\n this.showProcesses.emit({ definitionId: this.definition().id, quick });\n }\n}\n","<section class=\"facts\">\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.deploymentId' | translate }}</span>\n @if (canOpenDeployment() && !definition().global && definition().deploymentId; as deploymentId) {\n <a class=\"link mono\" tabindex=\"0\" role=\"link\" (click)=\"openDeployment.emit(deploymentId)\" (keydown.enter)=\"openDeployment.emit(deploymentId)\">\n {{ deploymentId }}<mat-icon>arrow_forward</mat-icon>\n </a>\n } @else {\n <span class=\"mono\">{{ definition().deploymentId || '-' }}</span>\n }\n </div>\n <div class=\"fact fact--column\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.key' | translate }}</span>\n <span class=\"mono\">{{ definition().key || '-' }}</span>\n </div>\n <div class=\"fact fact--column\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.version' | translate }}</span>\n <span>{{ definition().version || '-' }}</span>\n </div>\n <div class=\"fact fact--column\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.category' | translate }}</span>\n <span>{{ definition().category || '-' }}</span>\n </div>\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.description' | translate }}</span>\n <span>{{ definition().description || '-' }}</span>\n </div>\n</section>\n\n<mat-tab-group class=\"tabs\" animationDuration=\"0ms\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'yuv.app.bpm-management.entity.processes' | translate }}\n <ymt-badge class=\"count\">{{ total() }}</ymt-badge>\n </ng-template>\n <ng-template matTabContent>\n <div class=\"tab-content\">\n <div class=\"cards\">\n @for (card of cards(); track card.quick) {\n <button type=\"button\" class=\"card\" (click)=\"show(card.quick)\">\n <span class=\"card__status\"><mat-icon aria-hidden=\"true\">{{ card.icon }}</mat-icon>{{ card.label | translate }}</span>\n <span class=\"card__count\">{{ card.count }}</span>\n <span class=\"card__hint\">{{ card.hint | translate: card.hintParams }}</span>\n <span class=\"card__link\">{{ 'yuv.app.bpm-management.definitions.showProcesses' | translate }}<mat-icon aria-hidden=\"true\">arrow_forward</mat-icon></span>\n </button>\n }\n </div>\n <button type=\"button\" ymtButton=\"secondary\" class=\"all-link\" (click)=\"show('all')\">\n {{ 'yuv.app.bpm-management.definitions.details.showAll' | translate }}<mat-icon aria-hidden=\"true\">arrow_forward</mat-icon>\n </button>\n </div>\n </ng-template>\n </mat-tab>\n</mat-tab-group>\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { ProcessInstance, TaskInstance, taskSeverity, taskStatusLabel } from '../../../bpm-management.schema';\nimport { FormatDateTimePipe } from '../../../pipes/format-date-time.pipe';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\n\n/**\n * Process details: facts on top, then tabs for the progress timeline and the variables.\n */\n@Component({\n selector: 'ymbpm-process-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatTabsModule, MatTooltipModule, TranslatePipe, YmtBadge, FormatDateTimePipe, OrganizationRendererComponent],\n templateUrl: './process-details.component.html',\n styleUrl: './process-details.component.scss'\n})\nexport class ProcessDetailsComponent {\n readonly #translate = inject(TranslateService);\n\n readonly taskSeverity = taskSeverity;\n readonly taskStatusLabel = taskStatusLabel;\n\n process = input.required<ProcessInstance>();\n tasks = input<TaskInstance[]>([]);\n /** Whether the process definitions page is enabled, so the definition can be linked. */\n canOpenDefinition = input(false);\n openTask = output<string>();\n openDefinition = output<string>();\n\n /** The open tasks of a suspended process are suspended too (the history does not say so). */\n shownTasks = computed(() => (this.process().suspended ? this.tasks().map(t => (t.endTime ? t : { ...t, suspended: true })) : this.tasks()));\n\n variableFilter = signal('');\n variables = computed(() => {\n const q = this.variableFilter().trim().toLowerCase();\n const vars = this.process().variables ?? [];\n return q ? vars.filter(v => `${v.name} ${v.value}`.toLowerCase().includes(q)) : vars;\n });\n\n /** Elapsed time between two timestamps (until now without `to`) as its two largest units, e.g. `2 d 1 h`. */\n duration(from: string | null, to?: string | null): string {\n const ms = (to ? Date.parse(to) : Date.now()) - Date.parse(from ?? '');\n if (!Number.isFinite(ms) || ms < 0) return '';\n const minutes = Math.floor(ms / 60000);\n const units: [string, number][] = [\n ['days', Math.floor(minutes / 1440)],\n ['hours', Math.floor((minutes % 1440) / 60)],\n ['minutes', minutes % 60]\n ];\n const first = Math.max(\n units.findIndex(([, n]) => n > 0),\n 0\n );\n return units\n .slice(first, first + 2)\n .filter(([, n], i) => i === 0 || n > 0)\n .map(([unit, n]) => this.#translate.instant(`yuv.app.bpm-management.duration.${unit}`, { n }))\n .join(' ');\n }\n}\n","<section class=\"facts\">\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.processDefinitionId' | translate }}</span>\n @if (canOpenDefinition()) {\n <a class=\"link mono\" tabindex=\"0\" role=\"link\" [matTooltip]=\"process().processDefinitionName || ''\" (click)=\"openDefinition.emit(process().processDefinitionId)\" (keydown.enter)=\"openDefinition.emit(process().processDefinitionId)\">\n {{ process().processDefinitionId }}<mat-icon>arrow_forward</mat-icon>\n </a>\n } @else {\n <span class=\"mono\" [matTooltip]=\"process().processDefinitionName || ''\">{{ process().processDefinitionId }}</span>\n }\n </div>\n @if (process().processDefinitionDescription) {\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.process.details.processDefinitionDescription' | translate }}</span>\n <span>{{ process().processDefinitionDescription }}</span>\n </div>\n }\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.businessKey' | translate }}</span>\n <span>{{ process().businessKey || '-' }}</span>\n </div>\n</section>\n\n<mat-tab-group class=\"tabs\" animationDuration=\"0ms\">\n <mat-tab [label]=\"'yuv.app.bpm-management.process.details.history' | translate\">\n <ng-template matTabContent>\n <div class=\"tab-content timeline-tab\">\n <ol class=\"timeline\">\n <li class=\"timeline__item\">\n <div class=\"timeline__when\">{{ process().startTime | formatDateTime }}</div>\n <div class=\"timeline__rail\"><span class=\"timeline__dot timeline__dot--start\"><mat-icon aria-hidden=\"true\">play_arrow</mat-icon></span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\"><strong>{{ 'yuv.app.bpm-management.process.details.started' | translate }}</strong></div>\n <div class=\"timeline__people\">\n <yuv-organization-renderer propertyName=\"user\" [value]=\"process().startUserId ?? null\"></yuv-organization-renderer>\n </div>\n </div>\n </li>\n @for (task of shownTasks(); track task.id) {\n <li class=\"timeline__item\">\n <div class=\"timeline__when\">{{ (task.endTime ?? task.createTime) | formatDateTime }}</div>\n <div class=\"timeline__rail\"><span class=\"timeline__dot\" [class.timeline__dot--done]=\"task.endTime\" [class.timeline__dot--suspended]=\"!task.endTime && task.suspended\">\n @if (task.endTime) {\n <mat-icon aria-hidden=\"true\">check</mat-icon>\n } @else if (task.suspended) {\n <mat-icon aria-hidden=\"true\">pause</mat-icon>\n }\n </span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\">\n <a class=\"link timeline__task\" tabindex=\"0\" role=\"link\"\n [attr.aria-label]=\"('yuv.app.bpm-management.task.open' | translate) + ': ' + (task.name || '')\"\n (click)=\"openTask.emit(task.id)\" (keydown.enter)=\"openTask.emit(task.id)\">\n <strong>{{ task.name || '<unnamed>' }}</strong>\n </a>\n <ymt-badge class=\"timeline__state\" [severity]=\"taskSeverity(task)\">\n {{ taskStatusLabel(task) | translate }}\n </ymt-badge>\n </div>\n @if (task.description) {\n <p class=\"timeline__description\">{{ task.description }}</p>\n }\n @if (task.claimTime || task.dueDate) {\n <dl class=\"timeline__life\">\n @if (task.claimTime) {\n <div>\n <dt>{{ 'yuv.app.bpm-management.task.details.claimTime' | translate }}</dt>\n <dd>{{ task.claimTime | formatDateTime }}</dd>\n </div>\n }\n @if (task.dueDate) {\n <div>\n <dt>{{ 'yuv.app.bpm-management.task.details.dueDate' | translate }}</dt>\n <dd>{{ task.dueDate | formatDateTime }}</dd>\n </div>\n }\n </dl>\n }\n @if (task.assignee || task.owner) {\n <div class=\"timeline__people\">\n @if (task.assignee) {\n <yuv-organization-renderer propertyName=\"user\" [value]=\"task.assignee ?? null\"></yuv-organization-renderer>\n }\n @if (task.owner) {\n <span class=\"timeline__label\">{{ 'yuv.app.bpm-management.task.details.owner' | translate }}</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"task.owner ?? null\"></yuv-organization-renderer>\n }\n </div>\n }\n <!-- a suspended task has no meaningful running time: the suspension is not part of the data -->\n @if (task.endTime || !task.suspended) {\n <div class=\"timeline__foot\">\n {{ (task.endTime ? 'yuv.app.bpm-management.process.details.took' : 'yuv.app.bpm-management.process.details.openFor') | translate: { duration: duration(task.createTime, task.endTime) } }}\n </div>\n }\n </div>\n </li>\n }\n @if (process().endTime) {\n <li class=\"timeline__item\">\n <div class=\"timeline__when\">{{ process().endTime | formatDateTime }}</div>\n <div class=\"timeline__rail\"><span class=\"timeline__dot\" [class.timeline__dot--done]=\"!process().deleteReason\" [class.timeline__dot--canceled]=\"process().deleteReason\">\n <mat-icon aria-hidden=\"true\">{{ process().deleteReason ? 'close' : 'check' }}</mat-icon>\n </span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\">\n <strong>{{ (process().deleteReason ? 'yuv.app.bpm-management.process.details.canceled' : 'yuv.app.bpm-management.process.details.completed') | translate }}</strong>\n </div>\n @if (process().deleteReason) {\n <p class=\"timeline__description\">{{ process().deleteReason }}</p>\n }\n <div class=\"timeline__foot\">{{ 'yuv.app.bpm-management.process.details.took' | translate: { duration: duration(process().startTime, process().endTime) } }}</div>\n </div>\n </li>\n } @else {\n <li class=\"timeline__item\">\n <div class=\"timeline__when\"></div>\n @if (process().suspended) {\n <!-- the time of the suspension is not part of the data, so no running time is shown -->\n <div class=\"timeline__rail\"><span class=\"timeline__dot timeline__dot--suspended\"><mat-icon aria-hidden=\"true\">pause</mat-icon></span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\">\n <strong>{{ 'yuv.app.bpm-management.status.suspended' | translate }}</strong>\n </div>\n </div>\n } @else {\n <div class=\"timeline__rail\"><span class=\"timeline__dot timeline__dot--now\"></span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\">\n <strong>{{ 'yuv.app.bpm-management.process.details.running' | translate }}</strong>\n <ymt-badge severity=\"primary\">{{ duration(process().startTime) }}</ymt-badge>\n </div>\n </div>\n }\n </li>\n }\n </ol>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab [label]=\"'yuv.app.bpm-management.details.variables' | translate\">\n <ng-template matTabContent>\n <div class=\"tab-content\">\n @if (!process().variables?.length) {\n <p class=\"empty\">{{ 'yuv.app.bpm-management.emptyResult' | translate }}</p>\n } @else {\n <input class=\"variables__filter\" type=\"search\"\n [attr.aria-label]=\"'yuv.app.bpm-management.details.variableFilter' | translate\"\n [placeholder]=\"'yuv.app.bpm-management.details.variableFilter' | translate\"\n (input)=\"variableFilter.set($any($event.target).value)\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'yuv.app.bpm-management.details.variableName' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.details.variableType' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.details.variableValue' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n @for (variable of variables(); track variable.name) {\n <tr>\n <td class=\"mono\">{{ variable.name }}</td>\n <td>{{ variable.type }}</td>\n <td class=\"mono\">{{ variable.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </ng-template>\n </mat-tab>\n</mat-tab-group>\n","import { Component, input, signal, inject } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { APP_ICONS, TaskInstance, formatDateTime, TaskAssignmentHistoryEntry } from '../../bpm-management.schema';\nimport { CommonModule } from '@angular/common';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\n\n@Component({\n selector: 'ymbpm-editor-history',\n standalone: true,\n imports: [\n CommonModule,\n MatCardModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n TranslatePipe,\n OrganizationRendererComponent\n ],\n templateUrl: './editor-history.component.html',\n styleUrl: './editor-history.component.scss'\n})\nexport class EditorHistoryComponent {\n readonly translateService = inject(TranslateService);\n\n task = input<TaskInstance | undefined>();\n loading = signal<boolean>(false);\n error = signal<string | undefined>(undefined);\n\n formatDateTime = formatDateTime;\n\n icons = {\n ...APP_ICONS\n };\n\n get candidateUsers(): string[] {\n return this.task()?.identityLinks?.candidates?.users || [];\n }\n\n get candidateRoles(): string[] {\n return this.task()?.identityLinks?.candidates?.roles || [];\n }\n\n get assignmentHistory(): TaskAssignmentHistoryEntry[] {\n return this.task()?.identityLinks?.assignmentHistory || [];\n }\n\n getActionIcon(type: string, assignee?: string): string {\n switch (type) {\n case 'ASSIGNMENT':\n return assignee !== null ? 'person_add' : 'person_off';\n case 'DELEGATION':\n return this.icons.delegated;\n case 'RESOLVE':\n return this.icons.resolved;\n default:\n return 'info';\n }\n }\n\n getActionLabel(type: string, assignee?: string): string {\n if (type === 'ASSIGNMENT') {\n return assignee !== null ?\n 'yuv.app.bpm-management.task.details.actionType.assignment'\n : 'yuv.app.bpm-management.task.details.actionType.assignmentRemoved';\n }\n return `yuv.app.bpm-management.task.details.actionType.${type.toLowerCase()}`;\n }\n}\n","<div class=\"editor-history-container\">\n <!-- Candidate Users Section -->\n <div class=\"candidates-section\">\n <h3 class=\"section-title\">\n <mat-icon>person</mat-icon>\n {{ 'yuv.app.bpm-management.task.details.candidateUsers' | translate }}\n </h3>\n @if (candidateUsers.length > 0) {\n <div class=\"candidates-list\">\n @for (user of candidateUsers; track user) {\n <span class=\"candidate-chip\">\n <yuv-organization-renderer propertyName=\"user\" [value]=\"user ?? null\"></yuv-organization-renderer>\n </span>\n }\n </div>\n } @else {\n <p class=\"no-data\">{{ 'yuv.app.bpm-management.task.details.noCandidateUsers' | translate }}</p>\n }\n </div>\n\n <!-- Candidate Roles Section -->\n <div class=\"candidates-section\">\n <h3 class=\"section-title\">\n <mat-icon>group</mat-icon>\n {{ 'yuv.app.bpm-management.task.details.candidateRoles' | translate }}\n </h3>\n @if (candidateRoles.length > 0) {\n <div class=\"candidates-list\">\n @for (role of candidateRoles; track role) {\n <span class=\"candidate-chip\">\n <mat-icon>group</mat-icon>\n {{ role }}\n </span>\n }\n </div>\n } @else {\n <p class=\"no-data\">{{ 'yuv.app.bpm-management.task.details.noCandidateRoles' | translate }}</p>\n }\n </div>\n\n <!-- Assignment History Section -->\n <div class=\"history-section\">\n <h3 class=\"section-title\">\n <mat-icon>history</mat-icon>\n {{ 'yuv.app.bpm-management.task.details.assignmentHistory' | translate }}\n </h3>\n \n @if (assignmentHistory.length === 0) {\n <p class=\"no-data\">{{ 'yuv.app.bpm-management.task.details.noAssignmentHistory' | translate }}</p>\n } @else {\n <div class=\"timeline-container\" [ngClass]=\"{singleEntry: assignmentHistory.length === 1}\">\n @for (entry of assignmentHistory; track entry.timestamp) {\n <div class=\"timeline-item\">\n <div class=\"timeline-datetime\">\n <div class=\"date\">{{ formatDateTime(entry.timestamp, translateService.currentLang, 'date') }}</div>\n <div class=\"time\">{{ formatDateTime(entry.timestamp, translateService.currentLang, 'time') }}</div>\n </div>\n \n <div class=\"timeline-line\"></div>\n \n <div class=\"timeline-content\">\n <div class=\"history-card\">\n <div class=\"action-header\">\n <mat-icon class=\"action-icon\">{{ getActionIcon(entry.type, entry.assignee) }}</mat-icon>\n <span class=\"action-label\">{{ getActionLabel(entry.type, entry.assignee) | translate }}</span>\n </div>\n @if (entry.assignee) {\n <div class=\"assignee-info\">\n <span class=\"label\">{{ 'yuv.app.bpm-management.task.details.assignee' | translate }}:</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"entry.assignee ?? null\"></yuv-organization-renderer>\n </div>\n }\n @if (entry.owner && entry.type !== 'RESOLVE') {\n <div class=\"assignee-info\">\n <span class=\"label\">{{ 'yuv.app.bpm-management.task.details.owner' | translate }}:</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"entry.owner ?? null\"></yuv-organization-renderer>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { TaskInstance } from '../../../bpm-management.schema';\nimport { FormatDateTimePipe } from '../../../pipes/format-date-time.pipe';\nimport { EditorHistoryComponent } from '../../editor-history/editor-history.component';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\n\n/**\n * Task details: all properties once in the facts block, then tabs for the assignment (candidates +\n * history) and the variables (if the task has any).\n * Actions (assign, unassign, candidates) live in the pane header of the page.\n */\n@Component({\n selector: 'ymbpm-task-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatTabsModule, MatTooltipModule, TranslatePipe, FormatDateTimePipe, OrganizationRendererComponent, EditorHistoryComponent],\n templateUrl: './task-details.component.html',\n styleUrl: './task-details.component.scss'\n})\nexport class TaskDetailsComponent {\n task = input.required<TaskInstance>();\n openProcess = output<string>();\n}\n","<section class=\"facts\">\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.processInstanceId' | translate }}</span>\n @if (task().processInstanceId; as processId) {\n <a class=\"link mono\" tabindex=\"0\" role=\"link\" [matTooltip]=\"task().processInstanceName || ''\" (click)=\"openProcess.emit(processId)\" (keydown.enter)=\"openProcess.emit(processId)\">\n {{ processId }}<mat-icon>arrow_forward</mat-icon>\n </a>\n } @else {\n <span [matTooltip]=\"'yuv.app.bpm-management.task.details.standaloneTask.tooltip' | translate\">- <mat-icon class=\"inline\">info</mat-icon></span>\n }\n </div>\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.taskDefinitionKey' | translate }}</span>\n <span class=\"mono\">{{ task().taskDefinitionKey }}</span>\n </div>\n <div class=\"fact-row\">\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.createTime' | translate }}</span>\n <span>{{ task().createTime | formatDateTime }}</span>\n </div>\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.dueDate' | translate }}</span>\n <span>{{ (task().dueDate | formatDateTime) || '-' }}</span>\n </div>\n @if (task().endTime) {\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.endTime' | translate }}</span>\n <span>{{ task().endTime | formatDateTime }}</span>\n </div>\n }\n </div>\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.assignee' | translate }}</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"task().assignee ?? null\"></yuv-organization-renderer>\n </div>\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.owner' | translate }}</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"task().owner ?? null\"></yuv-organization-renderer>\n </div>\n @if (task().claimTime) {\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.claimTime' | translate }}</span>\n <span>{{ task().claimTime | formatDateTime }}</span>\n </div>\n }\n @if (task().description) {\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.description' | translate }}</span>\n <span>{{ task().description }}</span>\n </div>\n }\n</section>\n\n<mat-tab-group class=\"tabs\" animationDuration=\"0ms\">\n <mat-tab [label]=\"'yuv.app.bpm-management.task.assignment' | translate\">\n <ng-template matTabContent>\n <div class=\"tab-content\">\n <ymbpm-editor-history [task]=\"task()\"></ymbpm-editor-history>\n </div>\n </ng-template>\n </mat-tab>\n @if (task().variables?.length) {\n <mat-tab [label]=\"'yuv.app.bpm-management.details.variables' | translate\">\n <ng-template matTabContent>\n <div class=\"tab-content\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'yuv.app.bpm-management.details.variableName' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.details.variableType' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.details.variableValue' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n @for (variable of task().variables; track variable.name) {\n <tr>\n <td class=\"mono\">{{ variable.name }}</td>\n <td>{{ variable.type }}</td>\n <td class=\"mono\">{{ variable.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </ng-template>\n </mat-tab>\n }\n</mat-tab-group>\n","import { Component, inject, ViewChild } from '@angular/core';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { MatLabel } from '@angular/material/input';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'ymbpm-checkbox-overlay',\n standalone: true,\n imports: [\n YmtButtonDirective,\n DialogComponent,\n TranslatePipe,\n MatSlideToggle,\n MatLabel\n],\n templateUrl: './checkbox-overlay.component.html',\n styleUrl: './checkbox-overlay.component.scss'\n})\nexport class CheckboxOverlayComponent {\n readonly #dialogRef = inject(MatDialogRef<CheckboxOverlayComponent>);\n readonly inputData = inject(MAT_DIALOG_DATA);\n\n @ViewChild('toggle') toggle!: MatSlideToggle;\n\n confirm() {\n this.#dialogRef.close(this.toggle.checked);\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitle]=\"this.inputData.title ?? ''\" []>\n <main class=\"yuv-dialog-content\">\n <mat-label>{{ this.inputData.message !== undefined ? this.inputData.message : '' }}</mat-label>\n </main>\n <footer>\n <mat-slide-toggle #toggle class=\"footer-toggle\" [checked]=\"false\">{{ this.inputData.checkboxMessage !== undefined ? this.inputData.checkboxMessage : '' }}</mat-slide-toggle>\n <button ymtButton=\"secondary\" (click)=\"close()\">\n {{ \"yuv.app.bpm-management.action.cancel.label\" | translate }}\n </button>\n <button ymtButton=\"primary\" (click)=\"confirm()\">\n {{ this.inputData.confirmBtnLabel !== undefined ? this.inputData.confirmBtnLabel : ('yuv.app.bpm-management.action.confirm.label' | translate) }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { OrganizationComponent } from '@yuuvis/client-framework/forms'\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'ymbpm-task-assign-overlay',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n TranslatePipe,\n OrganizationComponent,\n DialogComponent,\n YmtButtonDirective\n ],\n standalone: true,\n templateUrl: './task-assign-overlay.component.html',\n styleUrl: './task-assign-overlay.component.scss'\n})\nexport class TaskAssignOverlayComponent {\n readonly #dialogRef = inject(MatDialogRef<TaskAssignOverlayComponent>);\n readonly data = inject(MAT_DIALOG_DATA);\n\n userControl = new FormControl('');\n\n close(): void {\n this.#dialogRef.close();\n }\n\n confirm(): void {\n const assignee = this.userControl.value;\n if (assignee && assignee.trim()) {\n this.#dialogRef.close(assignee.trim());\n }\n }\n}\n","<yuv-dialog [headertitle]=\"'yuv.app.bpm-management.task.actions.assign.label' | translate\">\n <main >\n <mat-label>{{ 'yuv.app.bpm-management.task.actions.assign.assignee.label' | translate }}</mat-label>\n <yuv-organization [formControl]=\"userControl\" [excludeMe]='false' />\n </main>\n <footer>\n <button ymtButton=\"secondary\" (click)=\"close()\" type=\"button\">\n {{ \"yuv.app.bpm-management.action.cancel.label\" | translate }}\n </button>\n <button ymtButton=\"primary\" (click)=\"confirm()\" type=\"button\" [disabled]=\"this.userControl.touched && this.userControl.dirty\">\n {{ 'yuv.app.bpm-management.task.actions.assign.confirm' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { OrganizationComponent } from '@yuuvis/client-framework/forms';\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { MatLabel } from '@angular/material/select';\n\nexport interface TaskCandidatesOverlayData {\n currentUsers: string[];\n currentRoles: string[];\n}\n\nexport interface TaskCandidatesOverlayResult {\n users: string[];\n roles: string[];\n}\n\n@Component({\n selector: 'ymbpm-task-candidates-overlay',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatDialogModule,\n MatButtonModule,\n TranslatePipe,\n OrganizationComponent,\n DialogComponent,\n YmtButtonDirective,\n MatLabel\n],\n templateUrl: './task-candidates-overlay.component.html',\n styleUrl: './task-candidates-overlay.component.scss'\n})\nexport class TaskCandidatesOverlayComponent {\n readonly #dialogRef = inject(MatDialogRef<TaskCandidatesOverlayComponent>);\n readonly data: TaskCandidatesOverlayData = inject(MAT_DIALOG_DATA);\n\n readonly usersControl = new FormControl<string | string[] | null>(\n this.data.currentUsers?.length ? this.data.currentUsers : null\n );\n\n readonly rolesControl = new FormControl<string | string[] | null>(\n this.data.currentRoles?.length ? this.data.currentRoles : null\n );\n\n close(): void {\n this.#dialogRef.close();\n }\n\n confirm(): void {\n const usersValue = this.usersControl.value;\n const rolesValue = this.rolesControl.value;\n\n const result: TaskCandidatesOverlayResult = {\n users: Array.isArray(usersValue) ? usersValue.filter(Boolean) : usersValue ? [usersValue] : [],\n roles: Array.isArray(rolesValue) ? rolesValue.filter(Boolean) : rolesValue ? [rolesValue] : []\n };\n this.#dialogRef.close(result);\n }\n}\n","<yuv-dialog [headertitle]=\"'yuv.app.bpm-management.task.actions.editCandidates.label' | translate\">\n <main>\n <div class=\"field-group\">\n <mat-label>{{ 'yuv.app.bpm-management.task.details.candidateUsers' | translate }}</mat-label>\n <yuv-organization [formControl]=\"usersControl\" [multiselect]=\"true\" [excludeMe]=\"false\" [classifications]=\"['id:organization:set[user]']\" />\n </div>\n <div class=\"field-group\">\n <mat-label>{{ 'yuv.app.bpm-management.task.details.candidateRoles' | translate }}</mat-label>\n <yuv-organization [formControl]=\"rolesControl\" [multiselect]=\"true\" [excludeMe]=\"false\" [classifications]=\"['id:organization:set[role]']\" />\n </div>\n </main>\n <footer>\n <button ymtButton=\"secondary\" (click)=\"close()\" type=\"button\">\n {{ 'yuv.app.bpm-management.action.cancel.label' | translate }}\n </button>\n <button ymtButton=\"primary\" (click)=\"confirm()\" type=\"button\">\n {{ 'yuv.app.bpm-management.action.confirm.label' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, TemplateRef } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { ConfirmComponent } from '@yuuvis/client-components/common';\nimport { Logger, NotificationService, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\nimport {\n APP_ICONS,\n BPM_ENTITY_META,\n BpmEntity,\n BpmItem,\n definitionSeverity,\n definitionStatusLabel,\n DeploymentInstance,\n ProcessDefinitionInstance,\n ProcessDefinitionScope,\n ProcessInstance,\n processSeverity,\n processStatusIcon,\n processStatusLabel,\n TaskInstance,\n taskSeverity,\n taskStatusIcon,\n taskStatusLabel\n} from '../../../bpm-management.schema';\nimport { YuvBpmManagementService } from '../../../bpm-management.service';\nimport { DeploymentDetailsComponent } from '../../../components/details/deployment-details/deployment-details.component';\nimport { ProcessDefinitionDetailsComponent, ShowProcessesRequest } from '../../../components/details/process-definition-details/process-definition-details.component';\nimport { ProcessDetailsComponent } from '../../../components/details/process-details/process-details.component';\nimport { TaskDetailsComponent } from '../../../components/details/task-details/task-details.component';\nimport { CheckboxOverlayComponent } from '../../../overlays/checkbox-overlay/checkbox-overlay.component';\nimport { TaskAssignOverlayComponent } from '../../../overlays/task-assign-overlay/task-assign-overlay.component';\nimport {\n TaskCandidatesOverlayComponent,\n TaskCandidatesOverlayResult\n} from '../../../overlays/task-candidates-overlay/task-candidates-overlay.component';\n\n/**\n * The details pane of the selected deployment, process definition, process or task. Owns the\n * header (title, status badges) and the actions of the item, the content is rendered by the\n * component of the entity.\n */\n@Component({\n selector: 'ymbpm-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatIconModule,\n TranslatePipe,\n YmtPanesModule,\n YmtBadge,\n YmtIconButtonDirective,\n MatTooltipModule,\n DeploymentDetailsComponent,\n ProcessDefinitionDetailsComponent,\n ProcessDetailsComponent,\n TaskDetailsComponent\n ],\n templateUrl: './details.component.html',\n styleUrl: './details.component.scss'\n})\nexport class DetailsComponent {\n readonly #dialog = inject(MatDialog);\n readonly #service = inject(YuvBpmManagementService);\n readonly #translate = inject(TranslateService);\n readonly #notifications = inject(NotificationService);\n readonly #logger = inject(Logger);\n\n readonly icons = { ...APP_ICONS };\n readonly ProcessDefinitionScope = ProcessDefinitionScope;\n readonly processSeverity = processSeverity;\n readonly processStatusIcon = processStatusIcon;\n readonly processStatusLabel = processStatusLabel;\n readonly taskSeverity = taskSeverity;\n readonly taskStatusIcon = taskStatusIcon;\n readonly taskStatusLabel = taskStatusLabel;\n readonly definitionSeverity = definitionSeverity;\n readonly definitionStatusLabel = definitionStatusLabel;\n\n entity = input.required<BpmEntity>();\n detail = input<BpmItem | undefined>();\n /** The row of the item in the list, which has the status long before the details (with statistics) are loaded. */\n listItem = input<BpmItem | undefined>();\n /** Tasks of the selected process. */\n processTasks = input<TaskInstance[]>([]);\n busy = input(false);\n error = input(false);\n selectedId = input<string | null>(null);\n /** Whether the process definitions / deployments are enabled, so they can be linked. */\n canOpenDefinition = input(false);\n canOpenDeployment = input(false);\n topBarActions = input<TemplateRef<unknown>>();\n\n /** An action changed the item, the owner has to reload (the list too, if it shows what changed). */\n changed = output<'details' | 'both'>();\n openItem = output<{ entity: BpmEntity; id: string }>();\n showProcesses = output<ShowProcessesRequest>();\n\n readonly deployment = computed(() => (this.entity() === 'deployments' ? (this.detail() as DeploymentInstance | undefined) : undefined));\n readonly definition = computed(() => (this.entity() === 'definitions' ? (this.detail() as ProcessDefinitionInstance | undefined) : undefined));\n /** The definition the actions are for: the list row is there at once and is reloaded first after an action. */\n readonly actionDefinition = computed(() => {\n if (this.entity() !== 'definitions') return undefined;\n return (this.listItem() ?? this.detail()) as ProcessDefinitionInstance | undefined;\n });\n readonly process = computed(() => (this.entity() === 'processes' ? (this.detail() as ProcessInstance | undefined) : undefined));\n readonly task = computed(() => (this.entity() === 'tasks' ? (this.detail() as TaskInstance | undefined) : undefined));\n\n readonly headerIcon = computed(() => BPM_ENTITY_META[this.entity()].itemIcon);\n readonly headerTitle = computed(() => {\n const item = this.detail();\n return item ? item.name || '<unnamed>' : '';\n });\n readonly headerSubtitle = computed(() => this.detail()?.id ?? '');\n\n // ---- process definition actions ------------------------------------------------------------\n /** Activates or suspends the definition, optionally together with its processes. */\n executeDefinitionAction(action: 'activate' | 'suspend'): void {\n const definition = this.actionDefinition();\n if (!definition) return;\n const key = `yuv.app.bpm-management.definitions.actions.${action}`;\n this.#dialog\n .open(CheckboxOverlayComponent, {\n width: '600px',\n maxWidth: '90vw',\n data: {\n title: this.#translate.instant(`${key}.label`),\n message: this.#translate.instant(`${key}.confirm.message`),\n checkboxMessage: this.#translate.instant(`${key}.confirm.includeProcesses.label`),\n confirmBtnLabel: this.#translate.instant(`${key}.confirm.button.label`)\n }\n })\n .afterClosed()\n .subscribe((includeProcesses: boolean | undefined) => {\n if (includeProcesses === undefined) return;\n this.#service.executeProcessDefinitionAction(definition.id, action, includeProcesses).subscribe({\n next: () => {\n this.#notifications.success(this.#translate.instant(`${key}.success`));\n // the status is shown in the list too, and the process counts change\n this.changed.emit('both');\n },\n error: (e: Error) => {\n this.#logger.error(`Failed to ${action} the process definition`, e);\n this.#notifications.error(this.#translate.instant(`${key}.error`));\n }\n });\n });\n }\n\n // ---- process actions -----------------------------------------------------------------------\n /** Suspends or resumes a running process. */\n executeProcessAction(action: 'activate' | 'suspend'): void {\n const process = this.process();\n if (!process) return;\n const key = `yuv.app.bpm-management.process.actions.${action}`;\n this.#dialog\n .open(ConfirmComponent, {\n width: '600px',\n maxWidth: '90vw',\n data: {\n title: this.#translate.instant(`${key}.label`),\n message: this.#translate.instant(`${key}.confirm.message`),\n confirmBtnLabel: this.#translate.instant(`${key}.confirm.button.label`)\n }\n })\n .afterClosed()\n .subscribe((confirm: boolean) => {\n if (!confirm) return;\n this.#service.executeProcessAction(process.id, action).subscribe({\n next: () => {\n this.#notifications.success(this.#translate.instant(`${key}.success`));\n // the status is shown in the list too\n this.changed.emit('both');\n },\n error: (e: Error) => {\n this.#logger.error(`Failed to ${action} the process`, e);\n this.#notifications.error(this.#translate.instant(`${key}.error`));\n }\n });\n });\n }\n\n // ---- task actions --------------------------------------------------------------------------\n assign(): void {\n const task = this.task();\n if (!task) return;\n this.#dialog\n .open(TaskAssignOverlayComponent, { width: '400px', maxWidth: '90vw', data: { taskId: task.id, taskName: task.name } })\n .afterClosed()\n .subscribe((assignee: string) => {\n if (assignee) {\n this.#updateAssignee(task.id, assignee, 'yuv.app.bpm-management.task.actions.assign.success');\n }\n });\n }\n\n unassign(): void {\n const task = this.task();\n if (!task) return;\n this.#dialog\n .open(ConfirmComponent, {\n width: '400px',\n maxWidth: '90vw',\n data: {\n title: this.#translate.instant('yuv.app.bpm-management.task.actions.unassign.label'),\n message: this.#translate.instant('yuv.app.bpm-management.task.actions.unassign.confirm.message')\n }\n })\n .afterClosed()\n .subscribe((confirm: boolean) => {\n if (confirm) {\n this.#updateAssignee(task.id, null, 'yuv.app.bpm-management.task.actions.unassign.success');\n }\n });\n }\n\n editCandidates(): void {\n const task = this.task();\n if (!task) return;\n this.#dialog\n .open(TaskCandidatesOverlayComponent, {\n width: '600px',\n maxWidth: '95vw',\n data: {\n currentUsers: [...(task.identityLinks?.candidates?.users ?? [])],\n currentRoles: [...(task.identityLinks?.candidates?.roles ?? [])]\n }\n })\n .afterClosed()\n .subscribe((result: TaskCandidatesOverlayResult | undefined) => {\n if (result === undefined) return;\n this.#service.setTaskCandidates(task.id, result).subscribe({\n next: () => {\n this.#notifications.success(this.#translate.instant('yuv.app.bpm-management.task.candidates.update.success'));\n // candidates are not shown in the list\n this.changed.emit('details');\n },\n error: () => this.#notifications.error(this.#translate.instant('yuv.app.bpm-management.task.candidates.update.error'))\n });\n });\n }\n\n #updateAssignee(taskId: string, assignee: string | null, successKey: string): void {\n this.#service.assignTask(taskId, assignee).subscribe({\n next: () => {\n this.#notifications.success(this.#translate.instant(successKey));\n this.changed.emit('both');\n },\n error: (e: Error) => {\n this.#logger.error('Failed to change the assignee of the task', e);\n this.#notifications.error(this.#translate.instant('yuv.app.bpm-management.task.actions.assign.error'));\n }\n });\n }\n}\n","<ymt-pane\n [busy]=\"busy()\"\n [topBarActions]=\"topBarActions()\"\n role=\"region\"\n [attr.aria-label]=\"'yuv.app.bpm-management.details.aria' | translate\"\n>\n <ymt-pane-header\n [icon]=\"headerTitle() ? headerIcon() : undefined\"\n [title]=\"headerTitle()\"\n [subtitle]=\"headerSubtitle()\"\n [badges]=\"detail() ? headerBadges : undefined\"\n [actions]=\"task() ? taskActions : actionDefinition() ? definitionActions : process() ? processActions : undefined\"\n ></ymt-pane-header>\n\n <ymt-pane-body>\n @if (error()) {\n <div class=\"empty-state\">\n <span class=\"empty-state-icon\"><mat-icon aria-hidden=\"true\">error_outline</mat-icon></span>\n <p class=\"empty-state-description\">{{ 'yuv.app.bpm-management.details.error' | translate }}</p>\n </div>\n } @else if (deployment(); as deployment) {\n <ymbpm-deployment-details\n [deployment]=\"deployment\"\n [canOpenDefinition]=\"canOpenDefinition()\"\n (openDefinition)=\"openItem.emit({ entity: 'definitions', id: $event })\"\n ></ymbpm-deployment-details>\n } @else if (definition(); as definition) {\n <ymbpm-process-definition-details\n [definition]=\"definition\"\n [canOpenDeployment]=\"canOpenDeployment()\"\n (openDeployment)=\"openItem.emit({ entity: 'deployments', id: $event })\"\n (showProcesses)=\"showProcesses.emit($event)\"\n ></ymbpm-process-definition-details>\n } @else if (process(); as process) {\n <ymbpm-process-details\n [process]=\"process\"\n [tasks]=\"processTasks()\"\n [canOpenDefinition]=\"canOpenDefinition()\"\n (openTask)=\"openItem.emit({ entity: 'tasks', id: $event })\"\n (openDefinition)=\"openItem.emit({ entity: 'definitions', id: $event })\"\n ></ymbpm-process-details>\n } @else if (task(); as task) {\n <ymbpm-task-details\n [task]=\"task\"\n (openProcess)=\"openItem.emit({ entity: 'processes', id: $event })\"\n ></ymbpm-task-details>\n } @else if (!busy() && !selectedId()) {\n <div class=\"empty-state\">\n <span class=\"empty-state-icon\"><mat-icon aria-hidden=\"true\">{{ icons.info }}</mat-icon></span>\n <p class=\"empty-state-description\">{{ 'yuv.app.bpm-management.details.noSelection.label' | translate }}</p>\n </div>\n }\n </ymt-pane-body>\n</ymt-pane>\n\n<!-- header: status badges -->\n<ng-template #headerBadges>\n @if (process(); as p) {\n <ymt-badge [severity]=\"processSeverity(p)\"><mat-icon>{{ processStatusIcon(p) }}</mat-icon>{{ processStatusLabel(p) | translate }}</ymt-badge>\n } @else if (task(); as t) {\n <ymt-badge [severity]=\"taskSeverity(t)\"><mat-icon>{{ taskStatusIcon(t) }}</mat-icon>{{ taskStatusLabel(t) | translate }}</ymt-badge>\n @if (t.delegationState) {\n <ymt-badge [outline]=\"true\" [severity]=\"t.delegationState === 'pending' ? 'warning' : 'success'\">\n {{ (t.delegationState === 'pending' ? 'yuv.app.bpm-management.task.delegationState.pending' : 'yuv.app.bpm-management.task.delegationState.resolved') | translate }}\n </ymt-badge>\n }\n } @else if (definition(); as d) {\n <!-- only global definitions are marked, tenant specific ones are the normal case -->\n @if (d.global) {\n <ymt-badge [outline]=\"true\">\n <mat-icon>{{ icons.globe }}</mat-icon>{{ ProcessDefinitionScope.GLOBAL.label | translate }}\n </ymt-badge>\n }\n <ymt-badge [severity]=\"definitionSeverity(d)\">{{ definitionStatusLabel(d) | translate }}</ymt-badge>\n }\n</ng-template>\n\n<!-- header: one button switches the status of a definition (it offers what is not the case yet); global definitions are shared and cannot be changed, so they get no button -->\n<ng-template #definitionActions>\n @let d = actionDefinition();\n @if (d && !d.global) {\n @let action = d.suspended ? 'activate' : 'suspend';\n @let label = ('yuv.app.bpm-management.definitions.actions.' + action + '.label') | translate;\n <button ymt-icon-button [matTooltip]=\"label\" [attr.aria-label]=\"label\" (click)=\"executeDefinitionAction(action)\">\n <mat-icon>{{ icons[action] }}</mat-icon>\n </button>\n }\n</ng-template>\n\n<!-- header: one button switches a running process between suspended and active; ended processes have no actions -->\n<ng-template #processActions>\n @let p = process();\n @if (p && !p.endTime) {\n @let action = p.suspended ? 'activate' : 'suspend';\n @let label = ('yuv.app.bpm-management.process.actions.' + action + '.label') | translate;\n <button ymt-icon-button [matTooltip]=\"label\" [attr.aria-label]=\"label\" (click)=\"executeProcessAction(action)\">\n <mat-icon>{{ icons[action] }}</mat-icon>\n </button>\n }\n</ng-template>\n\n<!-- header: actions are visible buttons instead of an overflow menu -->\n<ng-template #taskActions>\n @let t = task();\n <!-- completed tasks have no actions -->\n @if (t && !t.endTime) {\n @let assignLabel = 'yuv.app.bpm-management.task.actions.assign.label' | translate;\n @let unassignLabel = 'yuv.app.bpm-management.task.actions.unassign.label' | translate;\n @let candidatesLabel = 'yuv.app.bpm-management.task.actions.editCandidates.label' | translate;\n <button ymt-icon-button [matTooltip]=\"assignLabel\" [attr.aria-label]=\"assignLabel\" (click)=\"assign()\">\n <mat-icon>{{ icons.assign }}</mat-icon>\n </button>\n <button ymt-icon-button [disabled]=\"!t.assignee\" [matTooltip]=\"unassignLabel\" [attr.aria-label]=\"unassignLabel\" (click)=\"unassign()\">\n <mat-icon>{{ icons.unassign }}</mat-icon>\n </button>\n <button ymt-icon-button [matTooltip]=\"candidatesLabel\" [attr.aria-label]=\"candidatesLabel\" (click)=\"editCandidates()\">\n <mat-icon>manage_accounts</mat-icon>\n </button>\n }\n</ng-template>\n","import { afterRenderEffect, Component, computed, effect, ElementRef, inject, OnInit, signal, untracked, viewChild } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { YuvListModule } from '@yuuvis/client-components/list';\nimport { YuvSplitViewModule } from '@yuuvis/client-components/split-view';\nimport { Logger, SearchQuery, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { SimpleSearchComponent } from '@yuuvis/client-framework/simple-search';\nimport { YuvClientShellModule } from '@yuuvis/client-shell';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective, YmtIconButtonDirective } from '@yuuvis/material';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\nimport { catchError, forkJoin, map, Observable, of, Subscription } from 'rxjs';\nimport { DeploymentFilter, ProcessDefinitionFilter, ProcessFilter, TaskFilter } from '../bpm-filter';\nimport { enabledEntities, isDeploymentsEnabled, isProcessDefinitionsEnabled, resolveAppConfig } from '../bpm-management.config';\nimport {\n APP_ICONS,\n APP_ID,\n BPM_ENTITY_META,\n BpmEntity,\n BpmItem,\n Column,\n ColumnFilter,\n definitionSeverity,\n definitionStatusLabel,\n DeploymentInstance,\n FILTER_OPERATORS,\n FILTER_TYPES,\n FilterValue,\n ProcessDefinitionInstance,\n ProcessDefinitionScope,\n ProcessDefinitionStatus,\n ProcessInstance,\n processSeverity,\n processStatusLabel,\n ProcessStatus,\n TableFilters,\n TaskInstance,\n taskSeverity,\n taskStatusLabel,\n TaskStatus\n} from '../bpm-management.schema';\nimport { YuvBpmManagementService } from '../bpm-management.service';\nimport { ShowProcessesRequest } from '../components/details/process-definition-details/process-definition-details.component';\nimport { BpmManagementStateService, initialView, PAGE_SIZE_OPTIONS, QuickFilter, SortBy, SortOrder, ViewState } from '../bpm-management.state';\nimport { EntitySwitchComponent } from '../components/entity-switch/entity-switch.component';\nimport { FilterBarComponent } from '../components/filters/filter-bar/filter-bar.component';\nimport { PaneGutterComponent } from '../components/pane-gutter/pane-gutter.component';\nimport { PaneToggleButtonComponent } from '../components/pane-toggle-button/pane-toggle-button.component';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\nimport { FormatDateTimePipe } from '../pipes/format-date-time.pipe';\nimport { DetailsComponent } from './areas/details/details.component';\n\n/**\n * Deployments, process definitions, processes and tasks in one master/details page. The entity\n * is selected by the route (the same paths the former tabs used), the selected item and the way\n * the user got there by the query param `id`, so every state is a deep link.\n */\n@Component({\n selector: 'ymbpm-root',\n standalone: true,\n imports: [\n MatButtonToggleModule,\n MatDividerModule,\n MatIconModule,\n MatMenuModule,\n MatPaginatorModule,\n MatTooltipModule,\n TranslatePipe,\n YuvClientShellModule,\n SimpleSearchComponent,\n YuvListModule,\n YuvSplitViewModule,\n YmtPanesModule,\n YmtBadge,\n YmtButtonDirective,\n YmtIconButtonDirective,\n FormatDateTimePipe,\n OrganizationRendererComponent,\n PaneGutterComponent,\n PaneToggleButtonComponent,\n EntitySwitchComponent,\n FilterBarComponent,\n DetailsComponent\n ],\n templateUrl: './bpm-management.component.html',\n styleUrl: './bpm-management.component.scss'\n})\nexport class YuvBpmManagementComponent implements OnInit {\n readonly layoutSettingsID = APP_ID + '#root.layout.settings';\n readonly pageSizeOptions = PAGE_SIZE_OPTIONS;\n /** The fields the backend can sort each entity by (entities without an entry are not sortable). */\n readonly #sortFieldsByEntity: Partial<Record<BpmEntity, { value: SortBy; label: string }[]>> = {\n deployments: [sortField('name'), sortField('deployTime')],\n definitions: [sortField('name'), sortField('key')],\n processes: [sortField('name'), sortField('startTime'), sortField('endTime'), sortField('definitionKey'), sortField('businessKey')],\n tasks: [sortField('name'), sortField('createTime'), sortField('dueDate')]\n };\n readonly sortFields = computed(() => this.#sortFieldsByEntity[this.entity()] ?? []);\n readonly sortOrders: { value: SortOrder; label: string }[] = [\n { value: 'asc', label: 'yuv.sort.ascending' },\n { value: 'desc', label: 'yuv.sort.descending' }\n ];\n /** `yuv-split-view` area indices, so the top bar buttons can hide/show the panes. */\n readonly Area = { MASTER: 0, DETAILS: 1 } as const;\n readonly icons = { ...APP_ICONS };\n readonly ENTITY_META = BPM_ENTITY_META;\n readonly ProcessDefinitionScope = ProcessDefinitionScope;\n readonly processSeverity = processSeverity;\n readonly processStatusLabel = processStatusLabel;\n readonly taskSeverity = taskSeverity;\n readonly taskStatusLabel = taskStatusLabel;\n readonly definitionSeverity = definitionSeverity;\n readonly definitionStatusLabel = definitionStatusLabel;\n\n readonly #shell = inject(ShellService);\n readonly #titleService = inject(Title);\n readonly #route = inject(ActivatedRoute);\n readonly #router = inject(Router);\n readonly #service = inject(YuvBpmManagementService);\n readonly #translate = inject(TranslateService);\n readonly #logger = inject(Logger);\n readonly #state = inject(BpmManagementStateService);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n\n // the same app may be registered several times, so use the entry this route was loaded through\n readonly #appConfig = resolveAppConfig(this.#route.snapshot);\n readonly #app = this.#shell.getApp(this.#appConfig.appId ?? APP_ID);\n readonly appName = this.#app?.title as string;\n\n /** The chips of the active filters; the \"add filter\" menu of the pane header adds to them. */\n readonly filterBar = viewChild(FilterBarComponent);\n\n /** Deployments and process definitions are optional, the host shell client enables them. */\n readonly deploymentsEnabled = isDeploymentsEnabled(this.#route.snapshot);\n readonly definitionsEnabled = isProcessDefinitionsEnabled(this.#route.snapshot);\n readonly availableEntities = enabledEntities(this.#route.snapshot);\n\n // ---- routing state -------------------------------------------------------------------------\n readonly entity = toSignal(this.#route.data.pipe(map(d => d['entity'] as BpmEntity)), { initialValue: 'processes' as BpmEntity });\n readonly selectedId = toSignal(this.#route.queryParamMap.pipe(map(p => p.get('id'))), { initialValue: null });\n /** The search term lives in the URL (`?search=`), so links and browser back/forward restore it. */\n readonly searchTerm = toSignal(this.#route.queryParamMap.pipe(map(p => p.get('search') ?? '')), { initialValue: '' });\n\n // ---- list state (kept per entity, so switching back restores the filters) --------------------\n readonly views = this.#state.views;\n readonly view = computed(() => this.views()[this.entity()]);\n readonly items = signal<BpmItem[]>([]);\n /** The list row of the selected item: it is there before the details are, and a reload of the list is quick. */\n readonly selectedItem = computed(() => this.items().find(i => i.id === this.selectedId()));\n readonly total = signal(0);\n readonly busy = signal(false);\n\n readonly searchQuery = computed<SearchQuery>(() => ({ term: this.searchTerm() }));\n readonly quickFilters = computed(() => QUICK_FILTERS[this.entity()]);\n readonly filterColumns = computed(() => this.#columns[this.entity()]);\n /**\n * \"Latest versions only\" is a checkable option of the filter menu, not a filter criterion: it has\n * no chip, and clearing the filters never changes it.\n */\n readonly showLatestOnly = computed(() => this.entity() === 'definitions');\n readonly hasActiveFilters = computed(() => {\n const v = this.view();\n const initial = initialView(this.entity());\n return !!this.searchTerm() || Object.keys(v.advanced).length > 0 || v.quick !== initial.quick;\n });\n\n // ---- details state -------------------------------------------------------------------------\n readonly detail = signal<BpmItem | undefined>(undefined);\n readonly processTasks = signal<TaskInstance[]>([]);\n readonly detailsBusy = signal(false);\n readonly detailsError = signal(false);\n\n #listSub?: Subscription;\n #detailSub?: Subscription;\n #detailKey: string | null = null;\n /** Whether the list was loaded once (the component shows one entity, every entity has its own route). */\n #landed = false;\n\n constructor() {\n effect(() => {\n const entity = this.entity();\n const view = this.view();\n const search = this.searchTerm();\n // a changed view of the already shown entity (not landing on it) may drop the selected item\n untracked(() => this.#loadList(entity, view, search, this.#landed ? 'change' : 'landing'));\n });\n effect(() => {\n const entity = this.entity();\n const id = this.selectedId();\n untracked(() => this.#loadDetails(entity, id));\n });\n // bring the selected row into view once it is rendered (a link or a reload can select a row\n // below the fold); `nearest` leaves a row that is already visible where it is\n afterRenderEffect(() => {\n const id = this.selectedId();\n if (!this.items().length || !id) return;\n this.#host.nativeElement.querySelector<HTMLElement>(`yuv-list [data-item-id=\"${CSS.escape(id)}\"]`)?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n ngOnInit() {\n // set the browser tab title localized\n const translatedTitle = this.appName.startsWith('yuv.') ? this.#translate.instant(this.appName) : this.appName;\n this.#titleService.setTitle(translatedTitle);\n }\n\n // ---- list ----------------------------------------------------------------------------------\n patchView(patch: Partial<ViewState>, resetPage = true): void {\n const entity = this.entity();\n this.views.update(v => ({ ...v, [entity]: { ...v[entity], ...patch, ...(resetPage ? { page: 0 } : {}) } }));\n }\n\n /** Search term submitted in the app header (Enter / search button / clear). */\n onQueryChange(query: SearchQuery): void {\n const term = (query.term ?? '').trim();\n if (term !== this.searchTerm()) {\n this.#router.navigate([], { relativeTo: this.#route, queryParams: { search: term || null }, queryParamsHandling: 'merge' });\n }\n }\n\n onQuick(value: QuickFilter | undefined): void {\n this.patchView({ quick: value ?? 'all' });\n }\n\n onAdvancedFilters(filters: TableFilters): void {\n this.patchView({ advanced: filters });\n }\n\n toggleLatestOnly(): void {\n this.patchView({ latestOnly: !this.view().latestOnly });\n }\n\n onChangePage(event: PageEvent): void {\n if (event.pageSize !== this.view().pageSize) {\n // a different page size shifts what \"page N\" means - restart from the first page\n this.#state.savePageSize(event.pageSize);\n } else {\n this.patchView({ page: event.pageIndex }, false);\n }\n }\n\n clearFilters(): void {\n // the checkable options of the filter menu stay as they are\n const { quick } = initialView(this.entity());\n this.patchView({ advanced: {}, quick });\n // the search term is applied from the URL, so it is cleared there\n this.onQueryChange({ term: '' });\n }\n\n /** Reloads after an action of the details pane; the list only if it shows what changed. */\n onDetailsChanged(scope: 'details' | 'both'): void {\n if (scope === 'both') {\n this.#loadList(this.entity(), this.view(), this.searchTerm());\n }\n this.#loadDetails(this.entity(), this.selectedId());\n }\n\n /** Selection follows the active item (arrow keys and clicks). */\n onItemFocus(index: number): void {\n const item = this.items()[index];\n if (item && item.id !== this.selectedId()) {\n this.#navigate(this.entity(), item.id, true);\n }\n }\n\n switchEntity(entity: BpmEntity): void {\n if (entity !== this.entity()) {\n this.#navigate(entity, null);\n }\n }\n\n // ---- cross navigation ----------------------------------------------------------------------\n /** Opens an item of another entity. */\n openItem(entity: BpmEntity, id: string | null): void {\n this.#navigate(entity, id);\n }\n\n showProcessesOfDefinition({ definitionId, quick }: ShowProcessesRequest): void {\n const filter: FilterValue = { type: FILTER_TYPES.TEXT, operator: FILTER_OPERATORS.EQUALS.value, value: definitionId };\n this.views.update(v => ({ ...v, processes: { ...initialView('processes'), quick, pageSize: v.processes.pageSize, advanced: { processDefinitionId: filter } } }));\n this.openItem('processes', null);\n }\n\n // ---- row presentation (the list is typed loosely, the entity decides which type an item is) -\n /** Process definitions, processes and tasks can be suspended. */\n isSuspended(item: BpmItem): boolean {\n return 'suspended' in item && item.suspended === true;\n }\n\n asDeployment(item: BpmItem): DeploymentInstance {\n return item as DeploymentInstance;\n }\n\n asDefinition(item: BpmItem): ProcessDefinitionInstance {\n return item as ProcessDefinitionInstance;\n }\n\n asProcess(item: BpmItem): ProcessInstance {\n return item as ProcessInstance;\n }\n\n asTask(item: BpmItem): TaskInstance {\n return item as TaskInstance;\n }\n\n // ---- loading -------------------------------------------------------------------------------\n #navigate(entity: BpmEntity, id: string | null, replaceUrl = false): void {\n // the search term belongs to the entity it was entered for: another entity starts without one\n const search = entity === this.entity() ? undefined : null;\n this.#router.navigate(entity === this.entity() ? [] : ['../', entity], {\n relativeTo: this.#route,\n queryParams: { id, ...(search === undefined ? {} : { search }) },\n queryParamsHandling: 'merge',\n replaceUrl\n });\n }\n\n #effectiveFilters(entity: BpmEntity, view: ViewState, search: string): TableFilters {\n const filters: TableFilters = { ...view.advanced };\n if (search) {\n filters['name'] = { type: FILTER_TYPES.TEXT, operator: FILTER_OPERATORS.CONTAINS.value, value: search };\n }\n const status = this.#statusFilter(entity, view.quick);\n if (status) {\n filters['status'] = { type: FILTER_TYPES.SELECT, value: status };\n }\n return filters;\n }\n\n /** The value of the status filter the quick filter stands for (if any). */\n #statusFilter(entity: BpmEntity, quick: QuickFilter): string | undefined {\n switch (entity) {\n case 'processes':\n return quick === 'completed' ? ProcessStatus.COMPLETED.value : quick === 'active' ? ProcessStatus.RUNNING_SUSPENDED.value : undefined;\n case 'tasks':\n return quick === 'completed' ? TaskStatus.COMPLETED.value : quick === 'open' ? TaskStatus.RUNNING.value : undefined;\n case 'definitions':\n return quick === 'active' ? ProcessDefinitionStatus.ACTIVE.value : quick === 'suspended' ? ProcessDefinitionStatus.SUSPENDED.value : undefined;\n default:\n return undefined;\n }\n }\n\n #listRequest(entity: BpmEntity, view: ViewState, search: string): Observable<{ objects: BpmItem[]; totalNumItems: number }> {\n const filters = this.#effectiveFilters(entity, view, search);\n switch (entity) {\n case 'deployments':\n return this.#service.getDeployments(view.page, view.pageSize, DeploymentFilter.fromAgFilterModel(filters), { by: view.sortBy, order: view.sortOrder });\n case 'definitions': {\n const filter = ProcessDefinitionFilter.fromAgFilterModel(filters);\n filter.latest = { value: view.latestOnly, type: FILTER_TYPES.CHECKBOX };\n return this.#service.getProcessDefinitions(view.page, view.pageSize, filter, { by: view.sortBy, order: view.sortOrder });\n }\n case 'processes':\n return this.#service.getProcesses(view.page, view.pageSize, ProcessFilter.fromAgFilterModel(filters, this.#translate), {\n by: view.sortBy === 'definitionKey' ? 'processDefinitionKey' : view.sortBy,\n order: view.sortOrder\n });\n case 'tasks':\n return this.#service.getTasks(view.page, view.pageSize, TaskFilter.fromAgFilterModel(filters, this.#translate), { by: view.sortBy, order: view.sortOrder });\n }\n }\n\n /**\n * @param mode `landing`: the entity was just opened. A linked item (`id`) that is not in the list\n * gets an id filter, so it shows up in the list. `change`: the view of the shown entity changed, a\n * selected item that is not part of the result any more gives way to the first one. `reload`: after\n * an action, nothing about the selection changes.\n */\n #loadList(entity: BpmEntity, view: ViewState, search: string, mode: 'landing' | 'change' | 'reload' = 'reload'): void {\n this.#listSub?.unsubscribe();\n this.busy.set(true);\n this.#listSub = this.#listRequest(entity, view, search).subscribe({\n next: response => {\n this.items.set(response.objects);\n this.total.set(response.totalNumItems);\n this.busy.set(false);\n this.#landed = true;\n const selectedId = this.selectedId();\n const listed = !!selectedId && response.objects.some(o => o.id === selectedId);\n if (selectedId && !listed && mode === 'landing' && !view.advanced['id']) {\n // the linked item is not in the list (e.g. beyond the first page): filter by its id. An older\n // version of a definition is hidden by \"latest only\", so that is switched off for the link.\n const id: FilterValue = { type: FILTER_TYPES.TEXT, operator: FILTER_OPERATORS.EQUALS.value, value: selectedId };\n this.patchView({ advanced: { ...view.advanced, id }, ...(entity === 'definitions' ? { latestOnly: false } : {}) });\n return;\n }\n // landing without a requested item selects the first one (replacing the history entry, so back still leaves the view)\n const first = response.objects[0];\n if (first && (!selectedId || (mode === 'change' && !listed))) {\n this.#navigate(entity, first.id, true);\n }\n },\n error: (e: unknown) => {\n this.#logger.error(`Failed to fetch ${entity}`, e);\n this.busy.set(false);\n }\n });\n }\n\n #detailRequest(entity: BpmEntity, id: string): Observable<{ item?: BpmItem | null; tasks?: TaskInstance[] }> {\n switch (entity) {\n case 'deployments': {\n const definitionsFilter = new ProcessDefinitionFilter();\n definitionsFilter.deploymentId = { value: id, type: FILTER_TYPES.TEXT };\n definitionsFilter.latest = { value: false, type: FILTER_TYPES.CHECKBOX };\n return forkJoin({\n deployment: this.#service.getDeployment(id),\n resources: this.#service.getDeploymentResources(id).pipe(catchError(() => of([]))),\n definitions: this.#service.getProcessDefinitions(0, 0, definitionsFilter).pipe(catchError(() => of({ objects: [] })))\n }).pipe(\n map(({ deployment, resources, definitions }) => ({\n item: deployment && { ...deployment, resources: resources || [], definitions: definitions?.objects || [] }\n }))\n );\n }\n case 'definitions':\n return this.#service.getProcessDefinition(id).pipe(map(item => ({ item })));\n case 'processes':\n return forkJoin({ process: this.#service.getProcess(id), history: this.#service.getProcessHistory(id) }).pipe(\n map(({ process, history }) => ({ item: process && this.#withSuspended(process, id), tasks: history?.tasks ?? [] }))\n );\n case 'tasks':\n return this.#service.getTask(id).pipe(map(task => ({ item: task && this.#withSuspended(task, id) })));\n }\n }\n\n /** The detail endpoint may omit the suspended flag - then the list row (which has it) decides. */\n #withSuspended<T extends ProcessInstance | TaskInstance>(item: T, id: string): T {\n if (typeof item.suspended === 'boolean') {\n return item;\n }\n const row = this.items().find(i => i.id === id) as T | undefined;\n return { ...item, suspended: !!row?.suspended };\n }\n\n #loadDetails(entity: BpmEntity, id: string | null): void {\n this.#detailSub?.unsubscribe();\n this.detailsError.set(false);\n const key = id && `${entity}:${id}`;\n if (key !== this.#detailKey) {\n // another item: don't show the previous one while loading (a reload of the same item keeps it)\n this.#detailKey = key;\n this.detail.set(undefined);\n this.processTasks.set([]);\n }\n if (!id) {\n this.detailsBusy.set(false);\n return;\n }\n this.detailsBusy.set(true);\n this.#detailSub = this.#detailRequest(entity, id).subscribe({\n next: ({ item, tasks }) => {\n this.detail.set(item ?? undefined);\n this.processTasks.set(tasks ?? []);\n this.detailsBusy.set(false);\n },\n error: (e: unknown) => {\n this.#logger.error(`Failed to load ${entity} details`, e);\n this.detailsError.set(true);\n this.detailsBusy.set(false);\n }\n });\n }\n\n // ---- filter panel columns (status is covered by the quick filters, the name by the search) --\n readonly #textOperators = [FILTER_OPERATORS.EQUALS, FILTER_OPERATORS.STARTS_WITH, FILTER_OPERATORS.ENDS_WITH, FILTER_OPERATORS.CONTAINS];\n readonly #dateOperators = [FILTER_OPERATORS.BEFORE, FILTER_OPERATORS.AFTER, FILTER_OPERATORS.BETWEEN];\n readonly #h = (key: string) => `yuv.app.bpm-management.column.${key}`;\n readonly #equals: ColumnFilter = { type: FILTER_TYPES.TEXT, operators: [FILTER_OPERATORS.EQUALS] };\n\n readonly #columns: Record<BpmEntity, Column[]> = {\n deployments: [\n { name: 'id', displayName: this.#h('id'), filter: this.#equals },\n { name: 'category', displayName: this.#h('category'), filter: this.#equals }\n ],\n definitions: [\n { name: 'id', displayName: this.#h('id'), filter: this.#equals },\n { name: 'key', displayName: this.#h('key'), filter: { type: FILTER_TYPES.TEXT, operators: this.#textOperators } },\n { name: 'version', displayName: this.#h('version'), filter: { type: FILTER_TYPES.NUMBER, operators: [FILTER_OPERATORS.EQUALS], minValue: 1 } },\n { name: 'category', displayName: this.#h('category'), filter: { type: FILTER_TYPES.TEXT, operators: this.#textOperators } },\n {\n name: 'global',\n displayName: 'yuv.app.bpm-management.definitions.scope.label',\n filter: {\n type: FILTER_TYPES.SELECT,\n enableMultiselect: false,\n // no text while nothing is selected\n placeholder: '',\n options: [ProcessDefinitionScope.GLOBAL, ProcessDefinitionScope.TENANT]\n }\n }\n ],\n processes: [\n { name: 'id', displayName: this.#h('id'), filter: this.#equals },\n { name: 'processDefinitionId', displayName: this.#h('processDefinitionId'), filter: this.#equals },\n { name: 'businessKey', displayName: this.#h('businessKey'), filter: { type: FILTER_TYPES.TEXT, operators: this.#textOperators } },\n { name: 'startUserId', displayName: this.#h('startedBy'), filter: { type: FILTER_TYPES.USER } },\n { name: 'startTime', displayName: this.#h('startTime'), filter: { type: FILTER_TYPES.DATE, operators: this.#dateOperators } },\n { name: 'endTime', displayName: this.#h('endTime'), filter: { type: FILTER_TYPES.DATE, operators: this.#dateOperators } }\n ],\n tasks: [\n { name: 'id', displayName: this.#h('id'), filter: this.#equals },\n { name: 'processDefinitionId', displayName: this.#h('processDefinitionId'), filter: this.#equals },\n { name: 'processInstanceId', displayName: this.#h('processInstanceId'), filter: this.#equals },\n { name: 'assignee', displayName: this.#h('assignee'), filter: { type: FILTER_TYPES.USER } },\n { name: 'owner', displayName: this.#h('owner'), filter: { type: FILTER_TYPES.USER } },\n { name: 'createTime', displayName: this.#h('createTime'), filter: { type: FILTER_TYPES.DATE, operators: this.#dateOperators } },\n { name: 'endTime', displayName: this.#h('endTime'), filter: { type: FILTER_TYPES.DATE, operators: this.#dateOperators } }\n ]\n };\n}\n\nconst sortField = (value: SortBy): { value: SortBy; label: string } => ({ value, label: `yuv.app.bpm-management.sort.${value}` });\n\nconst quickFilters = (entity: BpmEntity, ...values: QuickFilter[]): { value: QuickFilter; label: string }[] =>\n values.map(value => ({ value, label: `yuv.app.bpm-management.statusFilter.${entity}.${value}` }));\n\nconst QUICK_FILTERS: Record<BpmEntity, { value: QuickFilter; label: string }[]> = {\n deployments: [],\n definitions: quickFilters('definitions', 'active', 'suspended', 'all'),\n processes: quickFilters('processes', 'active', 'completed', 'all'),\n tasks: quickFilters('tasks', 'open', 'completed', 'all')\n};\n","<!-- the entity switch lives in the shell's app header -->\n<ng-template yuvAppHeaderSlot=\"actions\">\n <ymbpm-entity-switch [entities]=\"availableEntities\" [value]=\"entity()\" (valueChange)=\"switchEntity($event)\" />\n</ng-template>\n\n<!-- search lives in the shell's app header -->\n<ng-template yuvAppHeaderSlot=\"search\">\n <yuv-simple-search [query]=\"searchQuery()\" (querySubmit)=\"onQueryChange($event)\" (clearInput)=\"onQueryChange({ term: '' })\"></yuv-simple-search>\n</ng-template>\n\n<!-- A named region, not <main>: the shell already wraps the routed app in its own main landmark. -->\n<div role=\"region\" class=\"bpmmgmt-main__content\" [attr.aria-label]=\"'yuv.app.bpm-management.content.aria.label' | translate\">\n @if (!split.isAreaVisible(Area.MASTER)) {\n <ymbpm-pane-gutter\n icon=\"left_panel_open\"\n [flipLabel]=\"true\"\n [label]=\"ENTITY_META[entity()].label | translate\"\n [tooltip]=\"'yuv.app.bpm-management.pane.showList.tooltip' | translate\"\n (expand)=\"split.showArea(Area.MASTER)\" />\n }\n\n <yuv-split-view #split [layoutSettingsID]=\"layoutSettingsID\" class=\"content-split\">\n\n <!-- ===================================== MASTER ===================================== -->\n <ng-template yuvSplitArea [size]=\"61.8\">\n <ymt-pane [busy]=\"busy()\" [topBarActions]=\"masterActions\" role=\"region\" [attr.aria-label]=\"ENTITY_META[entity()].label | translate\">\n <ymt-pane-header\n [icon]=\"ENTITY_META[entity()].icon\"\n [title]=\"ENTITY_META[entity()].label | translate\"\n [actions]=\"listActions\"\n ></ymt-pane-header>\n\n <ymt-pane-body class=\"list-body\">\n <ymbpm-filter-bar\n [columns]=\"filterColumns()\"\n [filters]=\"view().advanced\"\n [search]=\"searchTerm()\"\n (filtersChange)=\"onAdvancedFilters($event)\"\n (searchClear)=\"onQueryChange({ term: '' })\" />\n @if (items().length === 0 && !busy()) {\n <div class=\"empty-state\">\n <span class=\"empty-state-icon\"><mat-icon aria-hidden=\"true\">search_off</mat-icon></span>\n <p class=\"empty-state-description\">{{ 'yuv.app.bpm-management.list.empty' | translate }}</p>\n @if (hasActiveFilters()) {\n <button ymtButton=\"secondary\" (click)=\"clearFilters()\">{{ 'yuv.app.bpm-management.filters.clearAll' | translate }}</button>\n }\n </div>\n } @else {\n <yuv-list class=\"items\" [attr.aria-label]=\"ENTITY_META[entity()].label | translate\" [externalSelectionVisuals]=\"true\" (itemFocus)=\"onItemFocus($event)\">\n @for (item of items(); track item.id) {\n <div yuvListItem role=\"option\" class=\"item\" [attr.data-item-id]=\"item.id\" [class.item--suspended]=\"isSuspended(item)\" [selected]=\"item.id === selectedId()\">\n @switch (entity()) {\n @case ('deployments') {\n @let d = asDeployment(item);\n <mat-icon class=\"item__icon\" aria-hidden=\"true\">{{ ENTITY_META.deployments.itemIcon }}</mat-icon>\n <div class=\"item__main\">\n <span class=\"item__title\">{{ d.name || '<unnamed>' }}</span>\n </div>\n <span class=\"item__time\">{{ d.deploymentTime | formatDateTime }}</span>\n }\n @case ('definitions') {\n @let pd = asDefinition(item);\n @let definitionStatus = definitionStatusLabel(pd) | translate;\n <span class=\"item__marker\" role=\"img\" [attr.data-severity]=\"definitionSeverity(pd)\" [matTooltip]=\"definitionStatus\" matTooltipPosition=\"right\" [attr.aria-label]=\"definitionStatus\"></span>\n <div class=\"item__main\">\n <span class=\"item__heading item__heading--split\">\n <span class=\"item__title\">{{ pd.name || '<unnamed>' }}</span>\n <!-- only global definitions are marked, tenant specific ones are the normal case -->\n @if (pd.global) {\n <ymt-badge class=\"item__scope\" [outline]=\"true\">\n <mat-icon>{{ icons.globe }}</mat-icon>{{ ProcessDefinitionScope.GLOBAL.label | translate }}\n </ymt-badge>\n }\n </span>\n <span class=\"item__meta\">\n <span class=\"item__key\"><mat-icon>key</mat-icon><span class=\"item__key-text\" [title]=\"pd.key\">{{ pd.key }}</span></span>\n <span class=\"item__version\"><mat-icon>layers</mat-icon>v{{ pd.version }}</span>\n <!-- always rendered, so key and category keep their equal columns -->\n <span class=\"item__category\">\n @if (pd.category) {\n <mat-icon>category</mat-icon><span class=\"item__key-text\" [title]=\"pd.category\">{{ pd.category }}</span>\n }\n </span>\n </span>\n </div>\n }\n @case ('processes') {\n @let p = asProcess(item);\n @let statusLabel = processStatusLabel(p) | translate;\n <span class=\"item__marker\" role=\"img\" [attr.data-severity]=\"processSeverity(p)\" [matTooltip]=\"statusLabel\" matTooltipPosition=\"right\" [attr.aria-label]=\"statusLabel\"></span>\n <div class=\"item__main\">\n <span class=\"item__heading item__heading--split\">\n <span class=\"item__title\">{{ p.name || '<unnamed>' }}</span>\n <ymt-badge class=\"item__definition\" [outline]=\"true\" [title]=\"p.processDefinitionName || ''\">\n <mat-icon>{{ ENTITY_META.definitions.itemIcon }}</mat-icon><span class=\"item__key-text\">{{ p.processDefinitionName || '-' }}</span>\n </ymt-badge>\n </span>\n <span class=\"item__meta item__meta--process\">\n <span class=\"item__started\">\n <mat-icon>schedule</mat-icon>{{ p.startTime | formatDateTime }}\n <span class=\"item__started-by\">{{ 'yuv.app.bpm-management.process.startedByShort' | translate }}</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"p.startUserId ?? null\"></yuv-organization-renderer>\n </span>\n @if (p.businessKey) {\n <span class=\"item__business-key\">\n <mat-icon>tag</mat-icon><span class=\"item__key-text\" [title]=\"p.businessKey\">{{ p.businessKey }}</span>\n </span>\n }\n @if (p.endTime) {\n <span class=\"item__ended\"><mat-icon>flag</mat-icon>{{ p.endTime | formatDateTime }}</span>\n }\n </span>\n </div>\n }\n @case ('tasks') {\n @let t = asTask(item);\n @let taskStatus = taskStatusLabel(t) | translate;\n <span class=\"item__marker\" role=\"img\" [attr.data-severity]=\"taskSeverity(t)\" [matTooltip]=\"taskStatus\" matTooltipPosition=\"right\" [attr.aria-label]=\"taskStatus\"></span>\n <div class=\"item__main\">\n <span class=\"item__title\">{{ t.name || '<unnamed>' }}</span>\n <span class=\"item__meta item__meta--slots item__meta--task\">\n <span class=\"item__started\">\n <mat-icon>schedule</mat-icon>{{ t.createTime | formatDateTime }}\n <yuv-organization-renderer propertyName=\"user\" [value]=\"t.assignee ?? null\"></yuv-organization-renderer>\n </span>\n <span>\n <mat-icon>{{ ENTITY_META.processes.itemIcon }}</mat-icon><span class=\"item__key-text\" [title]=\"t.processInstanceName || ''\">{{ t.processInstanceName || '-' }}</span>\n </span>\n <span>\n @if (t.endTime) {\n <mat-icon>flag</mat-icon>{{ t.endTime | formatDateTime }}\n }\n </span>\n </span>\n </div>\n }\n }\n </div>\n }\n </yuv-list>\n }\n </ymt-pane-body>\n\n <ymt-pane-footer>\n <mat-paginator class=\"paginator\"\n [length]=\"total()\"\n [pageIndex]=\"view().page\"\n [pageSize]=\"view().pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [attr.aria-label]=\"'yuv.app.bpm-management.pagination.aria' | translate\"\n (page)=\"onChangePage($event)\">\n </mat-paginator>\n </ymt-pane-footer>\n\n </ymt-pane>\n </ng-template>\n\n <!-- ===================================== DETAILS ==================================== -->\n <ng-template yuvSplitArea [size]=\"38.2\">\n <ymbpm-details\n [entity]=\"entity()\"\n [detail]=\"detail()\"\n [listItem]=\"selectedItem()\"\n [processTasks]=\"processTasks()\"\n [busy]=\"detailsBusy()\"\n [error]=\"detailsError()\"\n [selectedId]=\"selectedId()\"\n [canOpenDefinition]=\"definitionsEnabled\"\n [canOpenDeployment]=\"deploymentsEnabled\"\n [topBarActions]=\"detailsTopBarActions\"\n (changed)=\"onDetailsChanged($event)\"\n (openItem)=\"openItem($event.entity, $event.id)\"\n (showProcesses)=\"showProcessesOfDefinition($event)\" ></ymbpm-details>\n </ng-template>\n </yuv-split-view>\n\n @if (!split.isAreaVisible(Area.DETAILS)) {\n <ymbpm-pane-gutter\n icon=\"right_panel_open\"\n [label]=\"'yuv.app.bpm-management.details.aria' | translate\"\n [tooltip]=\"'yuv.app.bpm-management.pane.showDetails.tooltip' | translate\"\n (expand)=\"split.showArea(Area.DETAILS)\" />\n }\n</div>\n\n<!-- master header: filter panel toggle -->\n<ng-template #listActions>\n @if (quickFilters().length) {\n <mat-button-toggle-group class=\"quick-toggle\" [value]=\"view().quick\" (change)=\"onQuick($event.value)\"\n [attr.aria-label]=\"'yuv.app.bpm-management.statusFilter.aria' | translate\">\n @for (quick of quickFilters(); track quick.value) {\n <mat-button-toggle [value]=\"quick.value\">{{ quick.label | translate }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n }\n @let bar = filterBar();\n @let addable = bar?.addableColumns() ?? [];\n <button ymt-icon-button #addFilter\n [matMenuTriggerFor]=\"addFilterMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [disabled]=\"!addable.length && !showLatestOnly()\"\n [matTooltip]=\"'yuv.app.bpm-management.filters.add' | translate\"\n [attr.aria-label]=\"'yuv.app.bpm-management.filters.add' | translate\">\n <mat-icon>filter_list</mat-icon>\n </button>\n <mat-menu #addFilterMenu=\"matMenu\">\n @for (column of addable; track column.name) {\n <button mat-menu-item (click)=\"bar?.edit(column, addFilter)\">{{ column.displayName | translate }}</button>\n }\n @if (showLatestOnly()) {\n @if (addable.length) {\n <mat-divider></mat-divider>\n }\n <button mat-menu-item role=\"menuitemcheckbox\" [attr.aria-checked]=\"view().latestOnly\" (click)=\"toggleLatestOnly()\">\n <mat-icon>{{ view().latestOnly ? 'check' : '' }}</mat-icon>{{ 'yuv.app.bpm-management.definitions.filter.onlyLatest' | translate }}\n </button>\n }\n </mat-menu>\n @if (sortFields().length) {\n <button ymt-icon-button\n [matMenuTriggerFor]=\"sortMenu\"\n [matTooltip]=\"'yuv.sort.tooltip' | translate\"\n [attr.aria-label]=\"'yuv.sort.tooltip' | translate\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n <mat-menu #sortMenu=\"matMenu\">\n @for (field of sortFields(); track field.value) {\n <button mat-menu-item class=\"radio-item\" role=\"menuitemradio\" [attr.aria-checked]=\"view().sortBy === field.value\" (click)=\"patchView({ sortBy: field.value })\">\n <mat-icon>{{ view().sortBy === field.value ? icons.radioButtonChecked : '' }}</mat-icon>{{ field.label | translate }}\n </button>\n }\n <mat-divider></mat-divider>\n @for (order of sortOrders; track order.value) {\n <button mat-menu-item class=\"radio-item\" role=\"menuitemradio\" [attr.aria-checked]=\"view().sortOrder === order.value\" (click)=\"patchView({ sortOrder: order.value })\">\n <mat-icon>{{ view().sortOrder === order.value ? icons.radioButtonChecked : '' }}</mat-icon>{{ order.label | translate }}\n </button>\n }\n </mat-menu>\n }\n</ng-template>\n\n<!-- list pane top bar: hides the list (right aligned, next to the gutter it collapses into) -->\n<ng-template #masterActions>\n <ymbpm-pane-toggle-button\n icon=\"left_panel_close\"\n [tooltip]=\"'yuv.app.bpm-management.pane.hideList.tooltip' | translate\"\n (toggled)=\"split.hideArea(Area.MASTER)\" />\n</ng-template>\n\n<!-- details pane top bar: hides the details (left aligned, next to the gutter it collapses into) -->\n<ng-template #detailsTopBarActions>\n <ymbpm-pane-toggle-button\n align=\"start\"\n icon=\"right_panel_close\"\n [tooltip]=\"'yuv.app.bpm-management.pane.hideDetails.tooltip' | translate\"\n (toggled)=\"split.hideArea(Area.DETAILS)\" />\n</ng-template>\n","import { Route } from '@angular/router';\nimport { defaultEntityGuard, deploymentsGuard, processDefinitionsGuard } from './bpm-management.config';\nimport { YuvBpmManagementComponent } from './container/bpm-management.component';\n\n/**\n * Deployments, process definitions, processes and tasks are rendered by the same master/details\n * container, the entity comes from the route data. Deployments and process definitions are optional. The empty path opens the first enabled entity.\n */\nexport const YuvBpmManagementRoutes: Route[] = [\n { path: 'deployments', component: YuvBpmManagementComponent, data: { entity: 'deployments' }, canActivate: [deploymentsGuard] },\n { path: 'definitions', component: YuvBpmManagementComponent, data: { entity: 'definitions' }, canActivate: [processDefinitionsGuard] },\n { path: 'processes', component: YuvBpmManagementComponent, data: { entity: 'processes' } },\n { path: 'tasks', component: YuvBpmManagementComponent, data: { entity: 'tasks' } },\n { path: '', pathMatch: 'full', children: [], canActivate: [defaultEntityGuard] }\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i2","i4","i1","nextId","i3","MatLabel"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-bpm-management-app.mjs","sources":["../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-management.schema.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-management.config.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-filter.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-management.service.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/checkbox-overlay/checkbox-overlay.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/checkbox-overlay/checkbox-overlay.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/task-assign-overlay/task-assign-overlay.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/task-assign-overlay/task-assign-overlay.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/task-candidates-overlay/task-candidates-overlay.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/overlays/task-candidates-overlay/task-candidates-overlay.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-management-actions.service.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/bpm-management.state.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/entity-switch/entity-switch.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/entity-switch/entity-switch.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/filter-clear/filter-clear.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/date-time-field/date-time-field.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/date-time-range-field/date-time-range-field.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/filter-operator/filter-operator.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/date-filter/date-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/date-filter/date-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/number-filter/number-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/number-filter/number-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/select-filter/select-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/select-filter/select-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/text-filter/text-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/text-filter/text-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/user-filter/user-filter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/user-filter/user-filter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/filter-bar/filter-bar.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/filters/filter-bar/filter-bar.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/pane-gutter/pane-gutter.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/pane-gutter/pane-gutter.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/pane-toggle-button/pane-toggle-button.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/pane-toggle-button/pane-toggle-button.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/pipes/format-date-time.pipe.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/deployment-details/deployment-details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/deployment-details/deployment-details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/process-definition-details/process-definition-details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/process-definition-details/process-definition-details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/process-details/process-details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/process-details/process-details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/editor-history/editor-history.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/editor-history/editor-history.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/task-details/task-details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/components/details/task-details/task-details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/container/areas/details/details.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/container/areas/details/details.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/container/bpm-management.component.ts","../../../../../projects/yuuvis/bpm-management-app/src/lib/container/bpm-management.component.html","../../../../../projects/yuuvis/bpm-management-app/src/lib/lib.routes.ts","../../../../../projects/yuuvis/bpm-management-app/src/yuuvis-bpm-management-app.ts"],"sourcesContent":["export const APP_ID = 'io.yuuvis.app.bpm-management';\n\n/**\n * Custom data a shell client can set on the app's route (`App.data`) to configure the app.\n */\nexport interface BpmManagementAppData {\n /** Show the deployments tab. Shown unless set to `false`. */\n showDeployments?: boolean;\n /** Show the process definitions tab. Shown unless set to `false`. */\n showProcessDefinitions?: boolean;\n}\n\nexport interface DeploymentInstance {\n id: string,\n name: string;\n category: string;\n deploymentTime: string;\n resources?: DeploymentResourceData[];\n definitions?: ProcessDefinitionInstance[];\n}\n\nexport interface DeploymentResourceData {\n id: string;\n mediaType: string;\n type: string;\n}\n\nexport interface ProcessDefinitionInstance {\n id: string,\n name: string;\n description: string;\n category: string;\n version: string;\n key: string;\n global: boolean;\n suspended: boolean;\n deploymentId: string;\n statistics: ProcessdefinitionStatisticsData;\n}\n\nexport interface ProcessdefinitionStatisticsData {\n processInstanceCount: ProcessinstanceCountData;\n}\n\nexport interface ProcessinstanceCountData {\n active: number;\n suspended: number;\n completed: number\n}\n\nexport interface ProcessVariable {\n name: string;\n type: string;\n /** Any JSON value, as the engine stores it. */\n value: unknown;\n scope: string;\n}\n\nexport interface ProcessInstance {\n id: string;\n name: string;\n businessKey: string;\n processDefinitionId: string;\n processDefinitionName: string;\n processDefinitionDescription: string | null;\n startUserId: string;\n startTime: string;\n deleteReason: string | null;\n endActivityId: string | null;\n startActivityId: string;\n durationInMillis: number | null;\n endTime: string | null;\n suspended: boolean;\n variables?: ProcessVariable[];\n}\n\nexport interface ProcessHistory {\n tasks: TaskInstance[];\n}\n\nexport interface TaskInstance {\n id: string;\n name: string;\n description: string | null;\n assignee: string;\n owner: string;\n createTime: string;\n endTime: string | null;\n claimTime: string | null;\n dueDate: string | null;\n processDefinitionId: string;\n processInstanceId: string | null;\n processInstanceName: string | null;\n parentTaskId: string | null;\n taskDefinitionKey: string;\n delegationState: string | null;\n suspended: boolean;\n hasForm: boolean;\n formKey: string | null;\n variables?: TaskVariable[];\n identityLinks?: TaskIdentityLinks;\n}\n\nexport interface TaskVariable {\n name: string;\n type: string;\n /** Any JSON value, as the engine stores it. */\n value: unknown;\n valueUrl?: string;\n scope: string;\n}\n\nexport interface TaskIdentityLinks {\n candidates: {\n users: string[];\n roles: string[];\n };\n assignmentHistory: TaskAssignmentHistoryEntry[];\n}\n\nexport interface TaskAssignmentHistoryEntry {\n type: 'ASSIGNMENT' | 'DELEGATION' | 'RESOLVE';\n assignee: string;\n owner?: string;\n timestamp: string;\n}\n\nexport const ProcessDefinitionScope = {\n GLOBAL: { value: 'GLOBAL', label: 'yuv.app.bpm-management.definitions.scope.global', icon: 'globe' },\n TENANT: { value: 'TENANT', label: 'yuv.app.bpm-management.definitions.scope.tenant', icon: 'tenant' }\n} as const;\n\nexport const ProcessDefinitionStatus = {\n ACTIVE: { value: 'ACTIVE', label: 'yuv.app.bpm-management.status.active' },\n SUSPENDED: { value: 'SUSPENDED', label: 'yuv.app.bpm-management.status.suspended' }\n} as const;\n\nexport const ProcessStatus = {\n RUNNING: { value: 'RUNNING', label: 'yuv.app.bpm-management.status.running' },\n SUSPENDED: { value: 'SUSPENDED', label: 'yuv.app.bpm-management.status.suspended' },\n RUNNING_SUSPENDED: { value: 'RUNNING_SUSPENDED', label: 'yuv.app.bpm-management.status.runningORsuspended' },\n COMPLETED: { value: 'COMPLETED', label: 'yuv.app.bpm-management.status.completed' },\n /** Display only, not a filter value: an ended process with a delete reason was cancelled. */\n CANCELED: { value: 'CANCELED', label: 'yuv.app.bpm-management.status.canceled' }\n} as const;\n\nexport const TaskStatus = {\n RUNNING: { value: 'RUNNING', label: 'yuv.app.bpm-management.status.running' },\n /** Display only, not a filter value: the task (or its process) is suspended. */\n SUSPENDED: { value: 'SUSPENDED', label: 'yuv.app.bpm-management.status.suspended' },\n COMPLETED: { value: 'COMPLETED', label: 'yuv.app.bpm-management.status.completed' }\n} as const;\n\nexport interface DeploymentsSearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: DeploymentInstance[];\n}\n\nexport interface ProcessDefinitionSearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: ProcessDefinitionInstance[];\n}\n\nexport interface ProcessesSearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: ProcessInstance[];\n}\n\nexport interface TasksSearchResponse {\n hasMoreItems: boolean;\n numItems: number;\n totalNumItems: number;\n objects: TaskInstance[];\n}\n\nexport const APP_ICONS = {\n assign: 'person_add',\n cancel: 'cancel',\n unassign: 'person_remove',\n editCandidates: 'manage_accounts',\n clearFilter: 'filter_alt_off',\n dockToLeft: 'dock_to_left',\n filterActive: 'filter_alt',\n filterEquals: 'equal',\n filterContains: 'match_word',\n filterStartsWith: 'text_select_jump_to_beginning',\n filterEndsWith: 'text_select_jump_to_end',\n filterGreaterThan: 'arrow_upward',\n filterLessThan: 'arrow_downward',\n filterAfter: 'east',\n filterBefore: 'west',\n filterBetween: 'compare_arrows',\n globe: 'public',\n info: 'info',\n refresh: 'refresh',\n radioButtonChecked: 'radio_button_checked',\n radioButtonUnchecked: 'radio_button_unchecked',\n tenant: 'lock',\n delegated: 'assignment',\n resolved: 'order_approve',\n activate: 'not_started',\n suspend: 'hourglass_pause'\n}\n\nexport interface Pagination {\n total: number;\n pageSize: number;\n page: number;\n}\n\nexport interface Column {\n name: string;\n displayName: string;\n filter?: ColumnFilter;\n}\n\nexport type ColumnFilter =\n | TextColumnFilter\n | NumberColumnFilter\n | DateColumnFilter\n | SelectColumnFilter\n | UserColumnFilter;\n\nexport interface TextColumnFilter {\n type: typeof FILTER_TYPES.TEXT;\n placeholder?: string;\n operators?: FilterOption[];\n}\n\nexport interface NumberColumnFilter {\n type: typeof FILTER_TYPES.NUMBER;\n placeholder?: string;\n operators?: FilterOption[];\n minValue?: number;\n maxValue?: number;\n step?: number;\n}\n\nexport interface DateColumnFilter {\n type: typeof FILTER_TYPES.DATE;\n placeholder?: string;\n operators?: FilterOption[];\n}\n\nexport interface SelectColumnFilter {\n type: typeof FILTER_TYPES.SELECT;\n placeholder?: string;\n options: FilterOption[];\n enableMultiselect?: boolean;\n}\n\nexport interface UserColumnFilter {\n type: typeof FILTER_TYPES.USER;\n}\n\nexport interface FilterOption {\n value: string;\n label: string;\n icon?: string;\n}\n\nexport const FILTER_OPERATORS = {\n // Text operators\n CONTAINS: { value: 'contains', label: 'yuv.app.bpm-management.filters.operators.contains', icon: 'filterContains' },\n EQUALS: { value: 'equals', label: 'yuv.app.bpm-management.filters.operators.equals', icon: 'filterEquals' },\n STARTS_WITH: { value: 'startsWith', label: 'yuv.app.bpm-management.filters.operators.startsWith', icon: 'filterStartsWith' },\n ENDS_WITH: { value: 'endsWith', label: 'yuv.app.bpm-management.filters.operators.endsWith', icon: 'filterEndsWith' },\n\n // Number operators\n GREATER_THAN: { value: 'greaterThan', label: 'yuv.app.bpm-management.filters.operators.greaterThan', icon: 'filterGreaterThan' },\n LESS_THAN: { value: 'lessThan', label: 'yuv.app.bpm-management.filters.operators.lessThan', icon: 'filterLessThan' },\n \n // Date operators\n BEFORE: { value: 'before', label: 'yuv.app.bpm-management.filters.operators.before', icon: 'filterBefore' },\n AFTER: { value: 'after', label: 'yuv.app.bpm-management.filters.operators.after', icon: 'filterAfter' },\n BETWEEN: { value: 'between', label: 'yuv.app.bpm-management.filters.operators.between', icon: 'filterBetween' }\n} as const;\n\nexport const FILTER_TYPES = {\n TEXT: 'text',\n NUMBER: 'number',\n DATE: 'date',\n SELECT: 'select',\n CHECKBOX: 'checkbox',\n USER: 'user'\n} as const;\n\nexport interface TableFilters {\n [columnName: string]: FilterValue;\n}\n\nexport interface FilterValue {\n type: typeof FILTER_TYPES.TEXT | typeof FILTER_TYPES.NUMBER | typeof FILTER_TYPES.DATE | typeof FILTER_TYPES.SELECT | typeof FILTER_TYPES.CHECKBOX;\n /** text and user id, number, date, select (one or several options), checkbox; null when cleared */\n value: string | number | Date | string[] | boolean | null;\n operator?: string;\n endDate?: Date | null; // Für date between\n}\n\nexport type DateFormatType = 'datetime' | 'date' | 'time';\n\nexport function formatDateTime(\n utcDateString: string,\n locale: string,\n type: DateFormatType = 'datetime'\n): string {\n if (!utcDateString) return '';\n\n try {\n const date = new Date(utcDateString);\n\n const formatOptions: Record<DateFormatType, Intl.DateTimeFormatOptions> = {\n datetime: {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit',\n hour: '2-digit',\n minute: '2-digit'\n },\n date: {\n year: 'numeric',\n month: '2-digit',\n day: '2-digit'\n },\n time: {\n hour: '2-digit',\n minute: '2-digit'\n }\n };\n\n return type === 'datetime'\n ? date.toLocaleString(locale, formatOptions[type])\n : type === 'date'\n ? date.toLocaleDateString(locale, formatOptions[type])\n : date.toLocaleTimeString(locale, formatOptions[type]);\n\n } catch (error) {\n console.error('Error formatting date:', error);\n return utcDateString;\n }\n}\n\n/** The entities of the app. The value is also the route path. */\nexport type BpmEntity = 'deployments' | 'definitions' | 'processes' | 'tasks';\n\nexport const BPM_ENTITIES: BpmEntity[] = ['deployments', 'definitions', 'processes', 'tasks'];\n\n/** `icon` stands for the entity as a whole (navigation, list header), `itemIcon` for one item of it (details header, list row, references from other lists). */\nexport const BPM_ENTITY_META: Record<BpmEntity, { icon: string; itemIcon: string; label: string }> = {\n deployments: { icon: 'inventory_2', itemIcon: 'deployed_code', label: 'yuv.app.bpm-management.entity.deployments' },\n definitions: { icon: 'stacks', itemIcon: 'flowchart', label: 'yuv.app.bpm-management.entity.definitions' },\n processes: { icon: 'view_timeline', itemIcon: 'route', label: 'yuv.app.bpm-management.entity.processes' },\n tasks: { icon: 'inbox', itemIcon: 'assignment_ind', label: 'yuv.app.bpm-management.entity.tasks' }\n};\n\n/** An item of any entity of the app. */\nexport type BpmItem = DeploymentInstance | ProcessDefinitionInstance | ProcessInstance | TaskInstance;\n\n/** Severity of a status badge (see `ymt-badge`). */\nexport type BadgeSeverity = 'primary' | 'success' | 'warning' | 'neutral';\n\nexport function processSeverity(p: ProcessInstance): BadgeSeverity {\n return p.endTime ? (p.deleteReason ? 'warning' : 'success') : p.suspended ? 'neutral' : 'primary';\n}\n\n/** Material icon for the status badge of a process. */\nexport function processStatusIcon(p: ProcessInstance): string {\n return p.endTime ? (p.deleteReason ? 'cancel' : 'task_alt') : p.suspended ? 'pause_circle' : 'autorenew';\n}\n\nexport function processStatusLabel(p: ProcessInstance): string {\n return (p.endTime ? (p.deleteReason ? ProcessStatus.CANCELED : ProcessStatus.COMPLETED) : p.suspended ? ProcessStatus.SUSPENDED : ProcessStatus.RUNNING).label;\n}\n\nexport function taskSeverity(t: TaskInstance): BadgeSeverity {\n return t.endTime ? 'success' : t.suspended ? 'neutral' : 'primary';\n}\n\n/** Material icon for the status badge of a task. */\nexport function taskStatusIcon(t: TaskInstance): string {\n return t.endTime ? 'task_alt' : t.suspended ? 'pause_circle' : 'autorenew';\n}\n\nexport function taskStatusLabel(t: TaskInstance): string {\n return (t.endTime ? TaskStatus.COMPLETED : t.suspended ? TaskStatus.SUSPENDED : TaskStatus.RUNNING).label;\n}\n\nexport function definitionSeverity(d: ProcessDefinitionInstance): BadgeSeverity {\n return d.suspended ? 'neutral' : 'primary';\n}\n\n/** The icon of a process definition. Always the default for now, definitions will get custom icons. */\n// eslint-disable-next-line @typescript-eslint/no-unused-vars -- the definition will choose its icon\nexport function definitionIcon(_d: ProcessDefinitionInstance): string {\n return BPM_ENTITY_META.definitions.itemIcon;\n}\n\n/** Global definitions are shared by all tenants, the others belong to the tenant. */\nexport function definitionScope(d: ProcessDefinitionInstance) {\n return d.global ? ProcessDefinitionScope.GLOBAL : ProcessDefinitionScope.TENANT;\n}\n\nexport function definitionStatusLabel(d: ProcessDefinitionInstance): string {\n return (d.suspended ? ProcessDefinitionStatus.SUSPENDED : ProcessDefinitionStatus.ACTIVE).label;\n}\n","import { inject } from '@angular/core';\nimport { ActivatedRouteSnapshot, CanActivateFn, Router } from '@angular/router';\nimport { App } from '@yuuvis/client-shell-core';\nimport { BPM_ENTITIES, BpmEntity, BpmManagementAppData } from './bpm-management.schema';\n\n/**\n * Resolves the configuration of the app entry a route was loaded through. The same app can be\n * registered multiple times by a shell client (with different `data`), so the configuration is\n * taken from the route and not from a fixed app id.\n *\n * @returns The id of the app entry (if any) and the merged `data` of the route's ancestors.\n */\nexport function resolveAppConfig(route: ActivatedRouteSnapshot): { appId?: string; data: BpmManagementAppData } {\n let appId: string | undefined;\n let data: BpmManagementAppData = {};\n for (const r of route.pathFromRoot) {\n const cfg = r.routeConfig as Partial<App> | null;\n if (cfg?.id) appId = cfg.id;\n if (cfg?.data) data = { ...data, ...cfg.data };\n }\n return { appId, data };\n}\n\n/**\n * Whether the host shell client enabled the deployments tab unless `data: { showDeployments: false }` hides it (shown by default).\n */\nexport function isDeploymentsEnabled(route: ActivatedRouteSnapshot): boolean {\n return resolveAppConfig(route).data.showDeployments !== false;\n}\n\n/**\n * Whether the host shell client enabled the process definitions tab unless `data: { showProcessDefinitions: false }` hides it (shown by default).\n */\nexport function isProcessDefinitionsEnabled(route: ActivatedRouteSnapshot): boolean {\n return resolveAppConfig(route).data.showProcessDefinitions !== false;\n}\n\n/**\n * The entities the host shell client enabled (deployments and process definitions are optional, both on by default).\n */\nexport function enabledEntities(route: ActivatedRouteSnapshot): BpmEntity[] {\n const { showDeployments, showProcessDefinitions } = resolveAppConfig(route).data;\n return BPM_ENTITIES.filter(e => (e !== 'deployments' || showDeployments !== false) && (e !== 'definitions' || showProcessDefinitions !== false));\n}\n\n/**\n * Guard for an optional tab's route. If the tab is not enabled, redirects to the processes page.\n */\nfunction optionalTabGuard(path: string, isEnabled: (route: ActivatedRouteSnapshot) => boolean): CanActivateFn {\n const pathRegex = new RegExp(`/${path}(?=[/?#]|$)`);\n return (route, state) =>\n isEnabled(route) || inject(Router).parseUrl(state.url.replace(pathRegex, '/processes').split(/[?#]/)[0]);\n}\n\n/**\n * Guard for the empty path of the app: redirects to the first enabled entity (deployments, process\n * definitions, processes, tasks), keeping the query string.\n */\nexport const defaultEntityGuard: CanActivateFn = (route, state) => {\n const [path, query] = state.url.split('#')[0].split('?');\n const base = path.replace(/\\/+$/, '');\n return inject(Router).parseUrl(`${base}/${enabledEntities(route)[0]}${query ? '?' + query : ''}`);\n};\n\nexport const deploymentsGuard = optionalTabGuard('deployments', isDeploymentsEnabled);\nexport const processDefinitionsGuard = optionalTabGuard('definitions', isProcessDefinitionsEnabled);\n","import { TranslateService } from \"@yuuvis/client-core\";\nimport { FILTER_OPERATORS, FILTER_TYPES, FilterValue, ProcessDefinitionScope, ProcessDefinitionStatus, ProcessStatus, TableFilters, TaskStatus } from \"./bpm-management.schema\";\nimport { formatDate } from \"@angular/common\";\nimport { HttpParams } from \"@angular/common/http\";\n\n/**\n * Appends the set criteria of a filter to the REST parameters.\n * Skips unset (undefined/null) criteria and keys without a REST name, but keeps falsy values such as `false`.\n */\nexport function applyBpmFilterParams(params: HttpParams, filter: Record<string, FilterValue | undefined> | undefined, restNames: Record<string, string>): HttpParams {\n for (const [key, criterion] of Object.entries(filter ?? {})) {\n const value = criterion?.value;\n if (value === undefined || value === null || !restNames[key]) continue;\n params = params.set(restNames[key], value as string | number | boolean);\n }\n return params;\n}\n\n/**\n * Base class for BPM filter conversion with shared logic\n */\nabstract class BaseBpmFilter {\n /** The criteria, by filter name (a column or a derived name such as `startTimeAfter`). Type only, no runtime field. */\n [criterion: string]: FilterValue | undefined;\n\n /**\n * Converts AG Grid filter model to BPM filter format\n * @param tableFilters - The AG Grid table filters\n * @param ts - Optional TranslateService for date formatting\n * @returns The converted BPM filter instance\n */\n protected static convertFromAgFilterModel<T extends BaseBpmFilter>(\n filterInstance: T,\n tableFilters: TableFilters,\n ts?: TranslateService\n ): T {\n // a generic type can only be read by index, its base can be written\n const target: BaseBpmFilter = filterInstance;\n for (const columnFilter in tableFilters) {\n const columnFilterData = tableFilters[columnFilter];\n\n switch (columnFilterData['type']) {\n case FILTER_TYPES.TEXT:\n target[columnFilter] = this.handleTextFilter(columnFilterData);\n break;\n case FILTER_TYPES.NUMBER:\n target[columnFilter] = { value: columnFilterData.value, type: FILTER_TYPES.NUMBER };\n break;\n case FILTER_TYPES.DATE:\n this.handleDateFilter(filterInstance, columnFilter, columnFilterData, ts);\n break;\n case FILTER_TYPES.SELECT:\n this.handleSelectFilter(filterInstance, columnFilter, columnFilterData);\n break;\n }\n }\n\n return filterInstance;\n }\n\n private static handleTextFilter(columnFilterData: FilterValue): FilterValue {\n if (columnFilterData.operator === FILTER_OPERATORS.CONTAINS.value) {\n return { value: '%' + columnFilterData.value + '%', type: FILTER_TYPES.TEXT };\n } else if (columnFilterData.operator === FILTER_OPERATORS.STARTS_WITH.value) {\n return { value: columnFilterData.value + '%', type: FILTER_TYPES.TEXT };\n } else if (columnFilterData.operator === FILTER_OPERATORS.ENDS_WITH.value) {\n return { value: '%' + columnFilterData.value, type: FILTER_TYPES.TEXT };\n } else {\n return { value: columnFilterData.value, type: FILTER_TYPES.TEXT };\n }\n }\n\n /** A date criterion becomes `<column>After` and/or `<column>Before`. */\n private static handleDateFilter(\n filterInstance: BaseBpmFilter,\n columnFilter: string,\n columnFilterData: FilterValue,\n ts?: TranslateService\n ): void {\n if (!ts) return;\n\n const set = (suffix: 'After' | 'Before', date: unknown) => {\n if (date instanceof Date) {\n filterInstance[columnFilter + suffix] = { value: formatDate(date, 'yyyy-MM-ddTHH:mm:ss', ts.currentLang, 'UTC'), type: FILTER_TYPES.DATE };\n }\n };\n switch (columnFilterData.operator) {\n case FILTER_OPERATORS.BETWEEN.value:\n set('After', columnFilterData.value);\n set('Before', columnFilterData.endDate);\n break;\n case FILTER_OPERATORS.AFTER.value:\n set('After', columnFilterData.value);\n break;\n case FILTER_OPERATORS.BEFORE.value:\n set('Before', columnFilterData.value);\n break;\n }\n }\n\n /** The REST value (`'true'`/`'false'`) of each select option; select filters mean something else per entity. */\n protected static selectValues: Record<string, 'true' | 'false'> = {};\n\n /** Several options at once are not supported. */\n private static handleSelectFilter(filterInstance: BaseBpmFilter, columnFilter: string, columnFilterData: FilterValue): void {\n const value = typeof columnFilterData.value === 'string' ? this.selectValues[columnFilterData.value] : undefined;\n if (value) filterInstance[columnFilter] = { value, type: FILTER_TYPES.SELECT };\n }\n}\n\nexport class DeploymentFilter extends BaseBpmFilter {\n static bpmFilterToRestApiName = {\n id: 'id',\n name: 'nameLike',\n category: 'category'\n };\n declare id: FilterValue | undefined;\n declare name: FilterValue | undefined;\n declare category: FilterValue | undefined;\n \n static fromAgFilterModel(tableFilters: TableFilters) {\n return this.convertFromAgFilterModel(new DeploymentFilter(), tableFilters);\n }\n}\n\nexport class ProcessDefinitionFilter extends BaseBpmFilter {\n static bpmFilterToRestApiName = {\n id: 'id',\n deploymentId: 'deploymentId',\n name: 'nameLikeIgnoreCase',\n category: 'categoryLike',\n version: 'version',\n key: 'keyLike',\n status: 'suspended',\n global: 'global',\n latest: 'latest'\n };\n declare id: FilterValue | undefined;\n declare deploymentId: FilterValue | undefined;\n declare name: FilterValue | undefined;\n declare category: FilterValue | undefined;\n declare version: FilterValue | undefined;\n declare key: FilterValue | undefined;\n declare status: FilterValue | undefined;\n declare global: FilterValue | undefined;\n declare latest: FilterValue | undefined;\n \n /** status -> `suspended`, scope -> `global` */\n protected static override selectValues: Record<string, 'true' | 'false'> = {\n [ProcessDefinitionStatus.ACTIVE.value]: 'false',\n [ProcessDefinitionStatus.SUSPENDED.value]: 'true',\n [ProcessDefinitionScope.TENANT.value]: 'false',\n [ProcessDefinitionScope.GLOBAL.value]: 'true'\n };\n\n static fromAgFilterModel(tableFilters: TableFilters) {\n return this.convertFromAgFilterModel(new ProcessDefinitionFilter(), tableFilters);\n }\n}\n\nexport class ProcessFilter extends BaseBpmFilter {\n static bpmFilterToRestApiName = {\n id: 'processInstanceId',\n processDefinitionId: 'processDefinitionId',\n name: 'nameLikeIgnoreCase',\n startUserId: 'startedBy',\n businessKey: 'businessKeyLike',\n startTimeBefore: 'startedBefore',\n startTimeAfter: 'startedAfter',\n endTimeBefore: 'finishedBefore',\n endTimeAfter: 'finishedAfter',\n status: 'isCompleted'\n };\n declare id: FilterValue | undefined;\n declare processDefinitionId: FilterValue | undefined;\n declare name: FilterValue | undefined;\n declare startUserId: FilterValue | undefined;\n declare startTimeBefore: FilterValue | undefined;\n declare startTimeAfter: FilterValue | undefined;\n declare endTimeBefore: FilterValue | undefined;\n declare endTimeAfter: FilterValue | undefined;\n declare businessKey: FilterValue | undefined;\n declare status: FilterValue | undefined;\n\n /** status -> `isCompleted` */\n protected static override selectValues: Record<string, 'true' | 'false'> = {\n [ProcessStatus.RUNNING_SUSPENDED.value]: 'false',\n [ProcessStatus.COMPLETED.value]: 'true'\n };\n\n /** `ts` formats the dates; without it date criteria are left out. */\n static fromAgFilterModel(tableFilters: TableFilters, ts?: TranslateService) {\n return this.convertFromAgFilterModel(new ProcessFilter(), tableFilters, ts);\n }\n}\n\nexport class TaskFilter extends BaseBpmFilter {\n static bpmFilterToRestApiName = {\n id: 'id',\n name: 'nameLikeIgnoreCase',\n status: 'isCompleted',\n processDefinitionId: 'processDefinitionId',\n processInstanceId: 'processInstanceId',\n assignee: 'visibleTo',\n owner: 'owner',\n createTimeBefore: 'createdBefore',\n createTimeAfter: 'createdAfter',\n endTimeBefore: 'completedBefore',\n endTimeAfter: 'completedAfter'\n };\n declare id: FilterValue | undefined;\n declare name: FilterValue | undefined;\n declare status: FilterValue | undefined;\n declare processDefinitionId: FilterValue | undefined;\n declare processInstanceId: FilterValue | undefined;\n declare assignee: FilterValue | undefined;\n declare owner: FilterValue | undefined;\n declare createTimeBefore: FilterValue | undefined;\n declare createTimeAfter: FilterValue | undefined;\n declare endTimeBefore: FilterValue | undefined;\n declare endTimeAfter: FilterValue | undefined;\n\n /** status -> `isCompleted` */\n protected static override selectValues: Record<string, 'true' | 'false'> = {\n [TaskStatus.RUNNING.value]: 'false',\n [TaskStatus.COMPLETED.value]: 'true'\n };\n\n /** `ts` formats the dates; without it date criteria are left out. */\n static fromAgFilterModel(tableFilters: TableFilters, ts?: TranslateService) {\n return this.convertFromAgFilterModel(new TaskFilter(), tableFilters, ts);\n }\n}","import { HttpParams } from '@angular/common/http';\nimport { inject, Injectable } from '@angular/core';\nimport { ApiBase, BackendService, Utils } from '@yuuvis/client-core';\nimport { map, Observable } from 'rxjs';\nimport {\n DeploymentInstance,\n DeploymentResourceData,\n DeploymentsSearchResponse,\n ProcessDefinitionInstance,\n ProcessDefinitionSearchResponse,\n ProcessesSearchResponse,\n ProcessHistory,\n ProcessInstance,\n TasksSearchResponse,\n TaskInstance\n} from './bpm-management.schema';\nimport { applyBpmFilterParams, DeploymentFilter, ProcessDefinitionFilter, ProcessFilter, TaskFilter } from './bpm-filter';\n\n@Injectable({\n providedIn: 'root',\n})\nexport class YuvBpmManagementService {\n \n static DEFAULT_PAGE_SIZE = 15;\n private readonly bpmApiBase = '/bpm-engine/api';\n readonly #backendService = inject(BackendService);\n\n getDeployments(page: number, size: number, filter?: DeploymentFilter, sort?: { by: string; order: 'asc' | 'desc' }): Observable<DeploymentsSearchResponse> {\n let filterParams = new HttpParams().set('page', page).set('size', size);\n if (sort) {\n filterParams = filterParams.set('sort', `${sort.by},${sort.order}`);\n }\n filterParams = applyBpmFilterParams(filterParams, filter, DeploymentFilter.bpmFilterToRestApiName);\n \n return this.#backendService\n .get(`${this.bpmApiBase}/deployments`, ApiBase.none, { params:filterParams } );\n }\n\n getDeployment(deploymentId: string): Observable<DeploymentInstance | null> {\n return this.#backendService\n .get(`${this.bpmApiBase}/deployments/${deploymentId}`, ApiBase.none );\n }\n\n getDeploymentResources(deploymentId: string): Observable<DeploymentResourceData[]> {\n return this.#backendService\n .get(`${this.bpmApiBase}/deployments/${deploymentId}/resources`, ApiBase.none );\n }\n\n getProcessDefinitions(page: number, size: number, filter?: ProcessDefinitionFilter, sort?: { by: string; order: 'asc' | 'desc' }): Observable<ProcessDefinitionSearchResponse> {\n let filterParams = new HttpParams().set('page', page).set('size', size);\n if (sort) {\n // Spring Pageable format: one parameter, \"field,direction\"\n filterParams = filterParams.set('sort', `${sort.by},${sort.order}`);\n }\n filterParams = applyBpmFilterParams(filterParams, filter, ProcessDefinitionFilter.bpmFilterToRestApiName);\n\n return this.#backendService\n .get(`${this.bpmApiBase}/process-definitions`, ApiBase.none, { params:filterParams } );\n }\n\n getProcessDefinition(processDefinitionInstanceId: string): Observable<ProcessDefinitionInstance | null> {\n const params = new HttpParams().set('includeStatistics', true);\n\n return this.#backendService.get(\n `${this.bpmApiBase}/process-definitions/${processDefinitionInstanceId}`,\n ApiBase.none,\n { params: params }\n );\n }\n\n executeProcessDefinitionAction(processDefinitionInstanceId: string, action: 'suspend' | 'activate', includeProcesses: boolean): Observable<unknown> {\n const body = {\n 'action': action,\n 'includeProcessInstances': includeProcesses\n };\n\n return this.#backendService.patch(`${this.bpmApiBase}/process-definitions/${processDefinitionInstanceId}`, body, ApiBase.none);\n }\n\n executeProcessAction(processInstanceId: string, action: 'suspend' | 'activate'): Observable<unknown> {\n return this.#backendService.patch(`${this.bpmApiBase}/processes/${processInstanceId}`, { action }, ApiBase.none);\n }\n\n getProcesses(page: number, size: number, filter?: ProcessFilter, sort?: { by: string; order: 'asc' | 'desc' }): Observable<ProcessesSearchResponse> {\n let filterParams = new HttpParams().set('page', page).set('size', size);\n if (sort) {\n filterParams = filterParams.set('sort', `${sort.by},${sort.order}`);\n }\n filterParams = applyBpmFilterParams(filterParams, filter, ProcessFilter.bpmFilterToRestApiName);\n\n return this.#backendService.get(\n `${this.bpmApiBase}/processes`,\n ApiBase.none,\n { params: filterParams }\n );\n }\n\n getProcess(processInstanceId: string): Observable<ProcessInstance | null> {\n const params = new HttpParams().set('includeProcessVariables', true);\n\n return this.#backendService.get(\n `${this.bpmApiBase}/processes/${processInstanceId}`,\n ApiBase.none,\n { params: params }\n );\n }\n\n getProcessHistory(processInstanceId: string): Observable<ProcessHistory | null> {\n return this.#backendService.get(\n `${this.bpmApiBase}/processes/${processInstanceId}/history`,\n ApiBase.none\n ).pipe(\n map((result: ProcessHistory | null) => {\n if (!result || !result.tasks) return result;\n \n return {\n ...result,\n tasks: result.tasks\n .sort(Utils.sortValues('createTime'))\n .reverse()\n };\n })\n );\n }\n\n getTasks(page: number, size: number, filter?: TaskFilter, sort?: { by: string; order: 'asc' | 'desc' }): Observable<TasksSearchResponse> {\n let filterParams = new HttpParams().set('page', page).set('size', size);\n if (sort) {\n filterParams = filterParams.set('sort', `${sort.by},${sort.order}`);\n }\n filterParams = applyBpmFilterParams(filterParams, filter, TaskFilter.bpmFilterToRestApiName);\n if (filter?.assignee?.value != null) {\n filterParams = filterParams.set('isAssigned', 'true');\n }\n\n return this.#backendService\n .get(`${this.bpmApiBase}/tasks`, ApiBase.none, { params:filterParams } ); \n }\n\n getTask(taskId: string): Observable<TaskInstance | null> {\n const params = new HttpParams().set('includeIdentityLinks', true);\n\n return this.#backendService.get(\n `${this.bpmApiBase}/tasks/${taskId}`,\n ApiBase.none,\n { params: params }\n );\n }\n\n assignTask(taskId: string, assignee: string | null): Observable<unknown> {\n const body = {\n action: 'claim',\n assignee: assignee\n };\n\n return this.#backendService.patch(\n `${this.bpmApiBase}/tasks/${taskId}`,\n body,\n ApiBase.none\n );\n }\n\n setTaskCandidates(taskId: string, body: { users?: string[], roles?: string[] }): Observable<unknown> {\n return this.#backendService.post(\n `${this.bpmApiBase}/tasks/${taskId}/candidates`,\n body,\n ApiBase.none\n );\n }\n}\n","import { Component, inject, ViewChild } from '@angular/core';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { MatSlideToggle } from '@angular/material/slide-toggle';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { MatLabel } from '@angular/material/input';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'ymbpm-checkbox-overlay',\n standalone: true,\n imports: [\n YmtButtonDirective,\n DialogComponent,\n TranslatePipe,\n MatSlideToggle,\n MatLabel\n],\n templateUrl: './checkbox-overlay.component.html',\n styleUrl: './checkbox-overlay.component.scss'\n})\nexport class CheckboxOverlayComponent {\n readonly #dialogRef = inject(MatDialogRef<CheckboxOverlayComponent>);\n readonly inputData = inject(MAT_DIALOG_DATA);\n\n @ViewChild('toggle') toggle!: MatSlideToggle;\n\n confirm() {\n this.#dialogRef.close(this.toggle.checked);\n }\n\n close() {\n this.#dialogRef.close();\n }\n}\n","<yuv-dialog [headertitle]=\"this.inputData.title ?? ''\" []>\n <main class=\"yuv-dialog-content\">\n <mat-label>{{ this.inputData.message !== undefined ? this.inputData.message : '' }}</mat-label>\n </main>\n <footer>\n <mat-slide-toggle #toggle class=\"footer-toggle\" [checked]=\"false\">{{ this.inputData.checkboxMessage !== undefined ? this.inputData.checkboxMessage : '' }}</mat-slide-toggle>\n <button ymtButton=\"secondary\" (click)=\"close()\">\n {{ \"yuv.app.bpm-management.action.cancel.label\" | translate }}\n </button>\n <button ymtButton=\"primary\" (click)=\"confirm()\">\n {{ this.inputData.confirmBtnLabel !== undefined ? this.inputData.confirmBtnLabel : ('yuv.app.bpm-management.action.confirm.label' | translate) }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { OrganizationComponent } from '@yuuvis/client-framework/forms'\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\n\n@Component({\n selector: 'ymbpm-task-assign-overlay',\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatDialogModule,\n MatFormFieldModule,\n MatInputModule,\n MatButtonModule,\n TranslatePipe,\n OrganizationComponent,\n DialogComponent,\n YmtButtonDirective\n ],\n standalone: true,\n templateUrl: './task-assign-overlay.component.html',\n styleUrl: './task-assign-overlay.component.scss'\n})\nexport class TaskAssignOverlayComponent {\n readonly #dialogRef = inject(MatDialogRef<TaskAssignOverlayComponent>);\n readonly data = inject(MAT_DIALOG_DATA);\n\n userControl = new FormControl('');\n\n close(): void {\n this.#dialogRef.close();\n }\n\n confirm(): void {\n const assignee = this.userControl.value;\n if (assignee && assignee.trim()) {\n this.#dialogRef.close(assignee.trim());\n }\n }\n}\n","<yuv-dialog [headertitle]=\"'yuv.app.bpm-management.task.actions.assign.label' | translate\">\n <main >\n <mat-label>{{ 'yuv.app.bpm-management.task.actions.assign.assignee.label' | translate }}</mat-label>\n <yuv-organization [formControl]=\"userControl\" [excludeMe]='false' />\n </main>\n <footer>\n <button ymtButton=\"secondary\" (click)=\"close()\" type=\"button\">\n {{ \"yuv.app.bpm-management.action.cancel.label\" | translate }}\n </button>\n <button ymtButton=\"primary\" (click)=\"confirm()\" type=\"button\" [disabled]=\"this.userControl.touched && this.userControl.dirty\">\n {{ 'yuv.app.bpm-management.task.actions.assign.confirm' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { Component, inject } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ReactiveFormsModule, FormControl } from '@angular/forms';\nimport { MatDialogModule, MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { OrganizationComponent } from '@yuuvis/client-framework/forms';\nimport { DialogComponent } from '@yuuvis/client-components/common';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { MatLabel } from '@angular/material/select';\n\nexport interface TaskCandidatesOverlayData {\n currentUsers: string[];\n currentRoles: string[];\n}\n\nexport interface TaskCandidatesOverlayResult {\n users: string[];\n roles: string[];\n}\n\n@Component({\n selector: 'ymbpm-task-candidates-overlay',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatDialogModule,\n MatButtonModule,\n TranslatePipe,\n OrganizationComponent,\n DialogComponent,\n YmtButtonDirective,\n MatLabel\n],\n templateUrl: './task-candidates-overlay.component.html',\n styleUrl: './task-candidates-overlay.component.scss'\n})\nexport class TaskCandidatesOverlayComponent {\n readonly #dialogRef = inject(MatDialogRef<TaskCandidatesOverlayComponent>);\n readonly data: TaskCandidatesOverlayData = inject(MAT_DIALOG_DATA);\n\n readonly usersControl = new FormControl<string | string[] | null>(\n this.data.currentUsers?.length ? this.data.currentUsers : null\n );\n\n readonly rolesControl = new FormControl<string | string[] | null>(\n this.data.currentRoles?.length ? this.data.currentRoles : null\n );\n\n close(): void {\n this.#dialogRef.close();\n }\n\n confirm(): void {\n const usersValue = this.usersControl.value;\n const rolesValue = this.rolesControl.value;\n\n const result: TaskCandidatesOverlayResult = {\n users: Array.isArray(usersValue) ? usersValue.filter(Boolean) : usersValue ? [usersValue] : [],\n roles: Array.isArray(rolesValue) ? rolesValue.filter(Boolean) : rolesValue ? [rolesValue] : []\n };\n this.#dialogRef.close(result);\n }\n}\n","<yuv-dialog [headertitle]=\"'yuv.app.bpm-management.task.actions.editCandidates.label' | translate\">\n <main>\n <div class=\"field-group\">\n <mat-label>{{ 'yuv.app.bpm-management.task.details.candidateUsers' | translate }}</mat-label>\n <yuv-organization [formControl]=\"usersControl\" [multiselect]=\"true\" [excludeMe]=\"false\" [classifications]=\"['id:organization:set[user]']\" />\n </div>\n <div class=\"field-group\">\n <mat-label>{{ 'yuv.app.bpm-management.task.details.candidateRoles' | translate }}</mat-label>\n <yuv-organization [formControl]=\"rolesControl\" [multiselect]=\"true\" [excludeMe]=\"false\" [classifications]=\"['id:organization:set[role]']\" />\n </div>\n </main>\n <footer>\n <button ymtButton=\"secondary\" (click)=\"close()\" type=\"button\">\n {{ 'yuv.app.bpm-management.action.cancel.label' | translate }}\n </button>\n <button ymtButton=\"primary\" (click)=\"confirm()\" type=\"button\">\n {{ 'yuv.app.bpm-management.action.confirm.label' | translate }}\n </button>\n </footer>\n</yuv-dialog>\n","import { inject, Injectable } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { ConfirmComponent } from '@yuuvis/client-components/common';\nimport { Logger, NotificationService, TranslateService } from '@yuuvis/client-core';\nimport { catchError, EMPTY, filter, map, Observable, of, switchMap } from 'rxjs';\nimport { ProcessDefinitionInstance, ProcessInstance, TaskInstance } from './bpm-management.schema';\nimport { YuvBpmManagementService } from './bpm-management.service';\nimport { CheckboxOverlayComponent } from './overlays/checkbox-overlay/checkbox-overlay.component';\nimport { TaskAssignOverlayComponent } from './overlays/task-assign-overlay/task-assign-overlay.component';\nimport { TaskCandidatesOverlayComponent, TaskCandidatesOverlayResult } from './overlays/task-candidates-overlay/task-candidates-overlay.component';\n\n/** What an action changed: only the details, or what the list shows as well. */\nexport type BpmReloadScope = 'details' | 'both';\n\nexport type BpmStatusAction = 'activate' | 'suspend';\n\n/**\n * The actions on a single item (the details header and the row menu of the list). Every action\n * asks first; the returned observable emits once what has to be reloaded when it succeeded and\n * completes without a value when it was cancelled or failed (failures are notified here).\n */\n@Injectable({ providedIn: 'root' })\nexport class BpmManagementActionsService {\n readonly #dialog = inject(MatDialog);\n readonly #service = inject(YuvBpmManagementService);\n readonly #translate = inject(TranslateService);\n readonly #notifications = inject(NotificationService);\n readonly #logger = inject(Logger);\n\n /** The status action a definition offers (what is not the case yet); global definitions are shared and cannot be changed. */\n definitionAction(definition: ProcessDefinitionInstance): BpmStatusAction | undefined {\n return definition.global ? undefined : definition.suspended ? 'activate' : 'suspend';\n }\n\n /** The status action of a process; ended processes have none. */\n processAction(process: ProcessInstance): BpmStatusAction | undefined {\n return process.endTime ? undefined : process.suspended ? 'activate' : 'suspend';\n }\n\n /** Completed tasks have no actions. */\n hasTaskActions(task: TaskInstance): boolean {\n return !task.endTime;\n }\n\n /** Only an assigned task can lose its assignee. */\n canUnassign(task: TaskInstance): boolean {\n return !!task.assignee;\n }\n\n /** Activates or suspends the definition, optionally together with its processes. */\n changeDefinitionStatus(definition: ProcessDefinitionInstance, action: BpmStatusAction): Observable<BpmReloadScope> {\n const key = `yuv.app.bpm-management.definitions.actions.${action}`;\n return this.#dialog\n .open(CheckboxOverlayComponent, {\n width: '600px',\n maxWidth: '90vw',\n data: {\n title: this.#translate.instant(`${key}.label`),\n message: this.#translate.instant(`${key}.confirm.message`),\n checkboxMessage: this.#translate.instant(`${key}.confirm.includeProcesses.label`),\n confirmBtnLabel: this.#translate.instant(`${key}.confirm.button.label`)\n }\n })\n .afterClosed()\n .pipe(\n filter((includeProcesses: boolean | undefined): includeProcesses is boolean => includeProcesses !== undefined),\n switchMap(includeProcesses => this.#service.executeProcessDefinitionAction(definition.id, action, includeProcesses)),\n // the status is shown in the list too, and the process counts change\n this.#result('both', `${key}.success`, `${key}.error`, `Failed to ${action} the process definition`)\n );\n }\n\n /** Suspends or resumes a running process. */\n changeProcessStatus(process: ProcessInstance, action: BpmStatusAction): Observable<BpmReloadScope> {\n const key = `yuv.app.bpm-management.process.actions.${action}`;\n return this.#confirm('600px', {\n title: this.#translate.instant(`${key}.label`),\n message: this.#translate.instant(`${key}.confirm.message`),\n confirmBtnLabel: this.#translate.instant(`${key}.confirm.button.label`)\n }).pipe(\n switchMap(() => this.#service.executeProcessAction(process.id, action)),\n // the status is shown in the list too\n this.#result('both', `${key}.success`, `${key}.error`, `Failed to ${action} the process`)\n );\n }\n\n assignTask(task: TaskInstance): Observable<BpmReloadScope> {\n return this.#dialog\n .open(TaskAssignOverlayComponent, { width: '400px', maxWidth: '90vw', data: { taskId: task.id, taskName: task.name } })\n .afterClosed()\n .pipe(\n filter((assignee: string | undefined): assignee is string => !!assignee),\n switchMap(assignee => this.#updateAssignee(task.id, assignee, 'yuv.app.bpm-management.task.actions.assign.success'))\n );\n }\n\n unassignTask(task: TaskInstance): Observable<BpmReloadScope> {\n return this.#confirm('400px', {\n title: this.#translate.instant('yuv.app.bpm-management.task.actions.unassign.label'),\n message: this.#translate.instant('yuv.app.bpm-management.task.actions.unassign.confirm.message')\n }).pipe(switchMap(() => this.#updateAssignee(task.id, null, 'yuv.app.bpm-management.task.actions.unassign.success')));\n }\n\n /** The candidates are only part of the details of a task, a list row loads them first. */\n editTaskCandidates(task: TaskInstance): Observable<BpmReloadScope> {\n const withCandidates = task.identityLinks ? of(task) : this.#service.getTask(task.id);\n return withCandidates.pipe(\n switchMap(t =>\n this.#dialog\n .open(TaskCandidatesOverlayComponent, {\n width: '600px',\n maxWidth: '95vw',\n data: {\n currentUsers: [...(t?.identityLinks?.candidates?.users ?? [])],\n currentRoles: [...(t?.identityLinks?.candidates?.roles ?? [])]\n }\n })\n .afterClosed()\n ),\n filter((result: TaskCandidatesOverlayResult | undefined): result is TaskCandidatesOverlayResult => result !== undefined),\n switchMap(result => this.#service.setTaskCandidates(task.id, result)),\n // candidates are not shown in the list\n this.#result(\n 'details',\n 'yuv.app.bpm-management.task.candidates.update.success',\n 'yuv.app.bpm-management.task.candidates.update.error',\n 'Failed to update the candidates of the task'\n )\n );\n }\n\n /** Asks with the shared confirm dialog; emits only when confirmed. */\n #confirm(width: string, data: { title: string; message: string; confirmBtnLabel?: string }): Observable<true> {\n return this.#dialog\n .open(ConfirmComponent, { width, maxWidth: '90vw', data })\n .afterClosed()\n .pipe(filter((confirm: boolean | undefined): confirm is true => !!confirm));\n }\n\n #updateAssignee(taskId: string, assignee: string | null, successKey: string): Observable<BpmReloadScope> {\n return this.#service\n .assignTask(taskId, assignee)\n .pipe(this.#result('both', successKey, 'yuv.app.bpm-management.task.actions.assign.error', 'Failed to change the assignee of the task'));\n }\n\n /** Notifies the outcome of the backend call and maps a success to the reload scope. */\n #result(scope: BpmReloadScope, successKey: string, errorKey: string, logMessage: string) {\n return (source: Observable<unknown>): Observable<BpmReloadScope> =>\n source.pipe(\n map(() => {\n this.#notifications.success(this.#translate.instant(successKey));\n return scope;\n }),\n catchError((e: unknown) => {\n this.#logger.error(logMessage, e);\n this.#notifications.error(this.#translate.instant(errorKey));\n return EMPTY;\n })\n );\n }\n}\n","import { inject, Injectable, signal } from '@angular/core';\nimport { LayoutSettingsService } from '@yuuvis/client-components/common';\nimport { APP_ID, BPM_ENTITIES, BpmEntity, TableFilters } from './bpm-management.schema';\n\nexport type QuickFilter = 'active' | 'open' | 'suspended' | 'completed' | 'all';\n\n/** What the lists can be sorted by (which of these an entity offers is up to the backend). */\nexport type SortBy = 'name' | 'key' | 'definitionKey' | 'businessKey' | 'startTime' | 'createTime' | 'dueDate' | 'endTime' | 'deployTime';\nexport type SortOrder = 'asc' | 'desc';\n\nexport const PAGE_SIZE_OPTIONS: number[] = [10, 25, 50, 100];\nexport const DEFAULT_PAGE_SIZE = 50;\n\nexport interface ViewState {\n quick: QuickFilter;\n advanced: TableFilters;\n /** Process definitions only: hide older versions. */\n latestOnly: boolean;\n sortBy: SortBy;\n sortOrder: SortOrder;\n page: number;\n pageSize: number;\n}\n\nexport const initialView = (entity: BpmEntity): ViewState => ({\n quick: 'all',\n advanced: {},\n latestOnly: true,\n // processes and tasks: newest first\n sortBy: entity === 'processes' ? 'startTime' : entity === 'tasks' ? 'createTime' : 'name',\n sortOrder: entity === 'processes' || entity === 'tasks' ? 'desc' : 'asc',\n page: 0,\n pageSize: DEFAULT_PAGE_SIZE\n});\n\n/**\n * Holds the list state (filters, paging) of all entities; the search term is in the URL. Every entity is a separate\n * route, so the page component is recreated when switching — this keeps the state.\n */\n@Injectable({ providedIn: 'root' })\nexport class BpmManagementStateService {\n readonly #layoutSettings = inject(LayoutSettingsService);\n readonly #pageSizeSettingsKey = APP_ID + '#work.pageSize';\n\n /** The page size is one setting for all entities and remembered across sessions. */\n readonly pageSize = this.#loadStoredPageSize();\n\n readonly views = signal<Record<BpmEntity, ViewState>>(\n Object.fromEntries(BPM_ENTITIES.map(e => [e, { ...initialView(e), pageSize: this.pageSize }])) as Record<BpmEntity, ViewState>\n );\n\n /** Remembers the page size and applies it to all entities. */\n savePageSize(pageSize: number): void {\n this.#layoutSettings.saveSettings(this.#pageSizeSettingsKey, { pageSize });\n this.views.update(v => Object.fromEntries(BPM_ENTITIES.map(e => [e, { ...v[e], pageSize, page: 0 }])) as Record<BpmEntity, ViewState>);\n }\n\n /** Falls back to the default for anything unexpected (nothing stored, or a size no longer offered). */\n #loadStoredPageSize(): number {\n const stored = this.#layoutSettings.getSettings(this.#pageSizeSettingsKey) as { pageSize?: number } | undefined;\n const pageSize = Number(stored?.pageSize);\n return PAGE_SIZE_OPTIONS.includes(pageSize) ? pageSize : DEFAULT_PAGE_SIZE;\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { BPM_ENTITY_META, BpmEntity } from '../../bpm-management.schema';\n\n/**\n * Switch between the entities of the app (deployments, process definitions, processes, tasks).\n * Meant to be rendered in the shell's app header, so it is as high as the header's buttons. The header\n * is shared with the search, so the switch shrinks with the window: labels first, then one menu button.\n */\n@Component({\n selector: 'ymbpm-entity-switch',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatButtonToggleModule, MatIconModule, MatMenuModule, MatTooltipModule, TranslatePipe],\n templateUrl: './entity-switch.component.html',\n styleUrl: './entity-switch.component.scss'\n})\nexport class EntitySwitchComponent {\n readonly ENTITY_META = BPM_ENTITY_META;\n\n /** The entities to offer, in the order they are shown. */\n entities = input.required<BpmEntity[]>();\n value = input.required<BpmEntity>();\n valueChange = output<BpmEntity>();\n}\n","<div class=\"bar\">\n<mat-button-toggle-group\n class=\"toggles\"\n hideSingleSelectionIndicator\n [value]=\"value()\"\n (change)=\"valueChange.emit($event.value)\"\n [attr.aria-label]=\"'yuv.app.bpm-management.entity.switch.aria' | translate\"\n>\n @for (entity of entities(); track entity) {\n <mat-button-toggle [value]=\"entity\" [matTooltip]=\"ENTITY_META[entity].label | translate\">\n <mat-icon aria-hidden=\"true\">{{ ENTITY_META[entity].icon }}</mat-icon>\n <span class=\"label\">{{ ENTITY_META[entity].label | translate }}</span>\n </mat-button-toggle>\n }\n</mat-button-toggle-group>\n\n<!-- little space: the toggles collapse into one toggle with the current entity, which opens the menu -->\n<mat-button-toggle-group class=\"compact\" hideSingleSelectionIndicator [value]=\"value()\">\n <mat-button-toggle\n [value]=\"value()\"\n [matMenuTriggerFor]=\"entityMenu\"\n [matTooltip]=\"ENTITY_META[value()].label | translate\"\n [aria-label]=\"('yuv.app.bpm-management.entity.switch.aria' | translate) + ': ' + (ENTITY_META[value()].label | translate)\"\n >\n <mat-icon aria-hidden=\"true\">{{ ENTITY_META[value()].icon }}</mat-icon>\n <mat-icon aria-hidden=\"true\">arrow_drop_down</mat-icon>\n </mat-button-toggle>\n</mat-button-toggle-group>\n<mat-menu #entityMenu=\"matMenu\">\n @for (entity of entities(); track entity) {\n <button mat-menu-item role=\"menuitemradio\" [attr.aria-checked]=\"entity === value()\" (click)=\"valueChange.emit(entity)\">\n <mat-icon aria-hidden=\"true\">{{ ENTITY_META[entity].icon }}</mat-icon>\n {{ ENTITY_META[entity].label | translate }}\n </button>\n }\n</mat-menu>\n</div>\n","import { ChangeDetectionStrategy, Component, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n/**\n * Button to remove the value of a single filter. Meant to be used as suffix of a filter field\n * (`<ymbpm-filter-clear matSuffix>`), shown while the filter has a value.\n */\n@Component({\n selector: 'ymbpm-filter-clear',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [YmtIconButtonDirective, MatIconModule, MatTooltipModule, TranslatePipe],\n template: `\n <button\n ymtIconButton\n icon-button-size=\"small\"\n type=\"button\"\n [attr.aria-label]=\"'yuv.app.bpm-management.filters.clear' | translate\"\n [matTooltip]=\"'yuv.app.bpm-management.filters.clear' | translate\"\n (click)=\"cleared.emit(); $event.stopPropagation()\"\n >\n <mat-icon>close</mat-icon>\n </button>\n `,\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n /* keeps the button off the border of the field, like the operator on the other side */\n padding-inline: var(--ymt-spacing-2xs);\n }\n `\n})\nexport class FilterClearComponent {\n cleared = output<void>();\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, forwardRef, inject, OnDestroy } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { ControlValueAccessor, FormControl, NgControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { YuvDatepickerModule } from '@yuuvis/client-framework/datepicker';\nimport { Subject } from 'rxjs';\n\nlet nextId = 0;\n\n/**\n * A date and time input that can be used in a `mat-form-field` (label, border and states like any\n * other form field). It wraps the shell's `yuv-datepicker`, which only is a bare input.\n */\n@Component({\n selector: 'ymbpm-date-time-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, YuvDatepickerModule],\n providers: [{ provide: MatFormFieldControl, useExisting: forwardRef(() => DateTimeFieldComponent) }],\n host: {\n '[id]': 'id',\n '[attr.aria-describedby]': 'describedBy',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut()'\n },\n template: `<yuv-datepicker [formControl]=\"inner\" [withTime]=\"true\" [calendar]=\"true\" [locale]=\"locale\" />`,\n styles: `\n :host {\n display: flex;\n align-items: center;\n min-width: 0;\n padding-inline-end: var(--ymt-spacing-2xs);\n }\n yuv-datepicker {\n flex: 1;\n min-width: 0;\n }\n `\n})\nexport class DateTimeFieldComponent implements MatFormFieldControl<Date | null>, ControlValueAccessor, OnDestroy {\n readonly #translate = inject(TranslateService);\n\n readonly inner = new FormControl<Date | null>(null);\n\n // ---- MatFormFieldControl ---------------------------------------------------------------------\n // the control and the value accessor are the same, so the form control is not asked for one\n readonly ngControl: NgControl | null = (ngControl => (ngControl ? ((ngControl.valueAccessor = this), ngControl) : null))(\n inject(NgControl, { self: true, optional: true })\n );\n readonly stateChanges = new Subject<void>();\n readonly id = `ymbpm-date-time-field-${nextId++}`;\n readonly controlType = 'ymbpm-date-time-field';\n readonly placeholder = '';\n readonly required = false;\n readonly autofilled = false;\n focused = false;\n disabled = false;\n describedBy = '';\n value: Date | null = null;\n\n get empty(): boolean {\n return !this.value;\n }\n\n /** The inputs of the date show a mask, so the label must not sit on top of them. */\n get shouldLabelFloat(): boolean {\n return true;\n }\n\n get errorState(): boolean {\n return !!this.ngControl?.invalid && !!this.ngControl?.touched;\n }\n\n get locale(): string {\n return this.#translate.currentLang;\n }\n\n constructor() {\n this.inner.valueChanges.pipe(takeUntilDestroyed(inject(DestroyRef))).subscribe(value => {\n this.value = value;\n this.#onChange(value);\n this.stateChanges.next();\n });\n }\n\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(): void {\n // the inputs of the date picker take the focus themselves\n }\n\n onFocusIn(): void {\n this.focused = true;\n this.stateChanges.next();\n }\n\n onFocusOut(): void {\n this.focused = false;\n this.#onTouched();\n this.stateChanges.next();\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n\n // ---- ControlValueAccessor --------------------------------------------------------------------\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onChange: (value: Date | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n #onTouched: () => void = () => {};\n\n writeValue(value: Date | null): void {\n this.value = value instanceof Date ? value : null;\n this.inner.setValue(this.value, { emitEvent: false });\n this.stateChanges.next();\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.#onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.#onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n if (isDisabled) {\n this.inner.disable({ emitEvent: false });\n } else {\n this.inner.enable({ emitEvent: false });\n }\n this.stateChanges.next();\n }\n}\n","import { ChangeDetectionStrategy, Component, DestroyRef, forwardRef, inject, input, OnDestroy, OnInit } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldControl } from '@angular/material/form-field';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { YuvDatepickerModule } from '@yuuvis/client-framework/datepicker';\nimport { merge, Subject } from 'rxjs';\n\nlet nextId = 0;\n\n/**\n * Start and end of a period as one form field control: one border and one label around both date\n * and time inputs. The values live in the two controls handed in, so it is no value accessor.\n */\n@Component({\n selector: 'ymbpm-date-time-range-field',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [ReactiveFormsModule, YuvDatepickerModule],\n providers: [{ provide: MatFormFieldControl, useExisting: forwardRef(() => DateTimeRangeFieldComponent) }],\n host: {\n '[id]': 'id',\n '[attr.aria-describedby]': 'describedBy',\n '(focusin)': 'onFocusIn()',\n '(focusout)': 'onFocusOut()'\n },\n template: `\n <yuv-datepicker [formControl]=\"start()\" [withTime]=\"true\" [calendar]=\"true\" [locale]=\"locale\" />\n <span class=\"separator\" aria-hidden=\"true\">–</span>\n <yuv-datepicker [formControl]=\"end()\" [withTime]=\"true\" [calendar]=\"true\" [locale]=\"locale\" />\n `,\n styles: `\n :host {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: var(--ymt-spacing-2xs) var(--ymt-spacing-xs);\n min-width: 0;\n padding-inline-end: var(--ymt-spacing-2xs);\n }\n yuv-datepicker {\n flex: 1 1 0;\n min-width: 0;\n }\n .separator {\n color: var(--ymt-text-color-subtle);\n }\n `\n})\nexport class DateTimeRangeFieldComponent implements MatFormFieldControl<null>, OnInit, OnDestroy {\n readonly #translate = inject(TranslateService);\n readonly #destroyRef = inject(DestroyRef);\n\n readonly start = input.required<FormControl>();\n readonly end = input.required<FormControl>();\n\n // ---- MatFormFieldControl ---------------------------------------------------------------------\n readonly ngControl = null;\n readonly stateChanges = new Subject<void>();\n readonly id = `ymbpm-date-time-range-field-${nextId++}`;\n readonly controlType = 'ymbpm-date-time-range-field';\n readonly placeholder = '';\n readonly required = false;\n readonly errorState = false;\n readonly autofilled = false;\n readonly value = null;\n focused = false;\n describedBy = '';\n\n get disabled(): boolean {\n return this.start().disabled && this.end().disabled;\n }\n\n get empty(): boolean {\n return !this.start().value && !this.end().value;\n }\n\n /** The inputs of the dates show a mask, so the label must not sit on top of them. */\n get shouldLabelFloat(): boolean {\n return true;\n }\n\n get locale(): string {\n return this.#translate.currentLang;\n }\n\n ngOnInit(): void {\n merge(this.start().valueChanges, this.end().valueChanges)\n .pipe(takeUntilDestroyed(this.#destroyRef))\n .subscribe(() => this.stateChanges.next());\n }\n\n setDescribedByIds(ids: string[]): void {\n this.describedBy = ids.join(' ');\n }\n\n onContainerClick(): void {\n // the inputs of the date pickers take the focus themselves\n }\n\n onFocusIn(): void {\n this.focused = true;\n this.stateChanges.next();\n }\n\n onFocusOut(): void {\n this.focused = false;\n this.stateChanges.next();\n }\n\n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { APP_ICONS, FilterOption } from '../../../bpm-management.schema';\n\n/**\n * The comparison of a filter field (equals, contains, ...). With several operators the user picks\n * one from a menu, with a single one it is only shown. Both take the same space, so the fields of\n * all filters line up.\n */\n@Component({\n selector: 'ymbpm-filter-operator',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [YmtIconButtonDirective, MatIconModule, MatMenuModule, MatTooltipModule, TranslatePipe],\n template: `\n @if (current(); as current) {\n @if (operators().length > 1) {\n <button ymtIconButton icon-button-size=\"small\" type=\"button\" [matMenuTriggerFor]=\"menu\" [attr.aria-label]=\"current.label | translate\" [matTooltip]=\"current.label | translate\">\n <mat-icon>{{ icons[current.icon || ''] }}</mat-icon>\n </button>\n <mat-menu #menu=\"matMenu\">\n @for (operator of operators(); track operator.value) {\n <button mat-menu-item (click)=\"valueChange.emit(operator.value)\">\n <mat-icon>{{ icons[operator.icon || ''] }}</mat-icon>\n {{ operator.label | translate }}\n </button>\n }\n </mat-menu>\n } @else {\n <!-- not interactive, but the same button as the menu trigger so both take the same space -->\n <button ymtIconButton icon-button-size=\"small\" type=\"button\" class=\"fixed\" aria-disabled=\"true\" tabindex=\"-1\" [attr.aria-label]=\"current.label | translate\" [matTooltip]=\"current.label | translate\">\n <mat-icon>{{ icons[current.icon || ''] }}</mat-icon>\n </button>\n }\n }\n `,\n styles: `\n :host {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n /* like the buttons of the date control: a little air between the button and the value */\n padding-inline: var(--ymt-spacing-2xs);\n }\n .fixed {\n color: var(--ymt-text-color-subtle);\n cursor: default;\n }\n `\n})\nexport class FilterOperatorComponent {\n readonly icons: Record<string, string> = { ...APP_ICONS };\n\n operators = input.required<FilterOption[]>();\n value = input<string | null>(null);\n valueChange = output<string>();\n\n readonly current = computed(() => this.operators().find(o => o.value === this.value()) ?? this.operators()[0]);\n}\n","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { DateTimeFieldComponent } from '../date-time-field/date-time-field.component';\nimport { DateTimeRangeFieldComponent } from '../date-time-range-field/date-time-range-field.component';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\nimport { Component, forwardRef, inject, input, OnInit, ViewChild, ChangeDetectorRef } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { CommonModule } from '@angular/common';\nimport { APP_ICONS, FILTER_OPERATORS, FILTER_TYPES, FilterValue, FilterOption } from '../../../bpm-management.schema';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\nimport { pairwise, startWith } from 'rxjs';\n\n@Component({\n selector: 'ymbpm-date-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatDividerModule,\n TranslatePipe,\n FilterClearComponent,\n FilterOperatorComponent,\n DateTimeFieldComponent,\n DateTimeRangeFieldComponent,\n MatTooltipModule\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DateFilterComponent),\n multi: true\n }\n ],\n host: { '[class.between]': 'isBetweenMode()' },\n templateUrl: './date-filter.component.html',\n styleUrl: './date-filter.component.scss'\n})\nexport class DateFilterComponent implements ControlValueAccessor, OnInit {\n readonly translateService = inject(TranslateService);\n\n @ViewChild(MatTooltip) tooltip?: MatTooltip;\n \n /** Translation key of the field label. */\n label = input<string>('');\n placeholder = input<string>();\n operators = input<FilterOption[]>([FILTER_OPERATORS.BEFORE]);\n \n filterForm = new FormGroup({\n value: new FormControl<Date | null>(null),\n endDate: new FormControl<Date | null>(null),\n operator: new FormControl<string>(FILTER_OPERATORS.BEFORE.value)\n });\n \n icons = {\n ...APP_ICONS,\n };\n\n get valueControl() { return this.filterForm.get('value') as FormControl; }\n get operatorControl() { return this.filterForm.get('operator') as FormControl; }\n get endDateControl() { return this.filterForm.get('endDate') as FormControl; }\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n this.operatorControl.setValue(this.operators()[0]);\n \n this.valueControl.valueChanges\n .pipe(\n startWith(null),\n pairwise()\n )\n .subscribe(([prev, next]: [Date | null, Date | null]) => {\n if (this.isActiveFilter() || prev !== null && next === null) {\n this.fireOnChangeEvent();\n }\n });\n\n this.endDateControl.valueChanges\n .pipe(\n startWith(null),\n pairwise()\n )\n .subscribe(([prev, next]: [Date | null, Date | null]) => {\n if (this.isActiveFilter() || prev !== null && next === null) {\n this.fireOnChangeEvent();\n }\n });\n\n this.operatorControl.valueChanges\n .pipe(\n startWith(this.operators()[0]),\n pairwise()\n )\n .subscribe(([prev, next]: [string, string]) => {\n if (prev !== next) {\n this.fireOnChangeEvent();\n }\n });\n }\n\n isActiveFilter(): boolean {\n const operator = this.operatorControl.value;\n \n if (operator === FILTER_OPERATORS.BETWEEN.value) {\n const startDate = this.valueControl.value;\n const endDate = this.endDateControl.value;\n return startDate !== null || endDate !== null;\n } else {\n const value = this.valueControl.value;\n return value !== null;\n }\n }\n\n isBetweenMode(): boolean {\n return this.operatorControl.value === FILTER_OPERATORS.BETWEEN.value;\n }\n\n getCurrentOperatorOption(): FilterOption | null {\n const operator = this.operatorControl.value;\n return this.operators().find(op => op.value === operator) || null;\n }\n\n setOperator(operator: string): void {\n this.operatorControl.setValue(operator);\n }\n\n clearFilter(fireEvent = false): void {\n this.filterForm.reset({\n value: null,\n operator: this.operators()[0].value,\n endDate: null\n }, { emitEvent: false });\n\n if (fireEvent) {\n this.fireOnChangeEvent();\n }\n }\n\n toggleOperator(): void {\n const currentOperator = this.operatorControl.value;\n const currentIndex = this.operators().findIndex(op => op.value === currentOperator);\n const nextIndex = (currentIndex + 1) % this.operators().length;\n this.operatorControl.setValue(this.operators()[nextIndex].value);\n\n if (this.tooltip) {\n this.tooltip.hide();\n setTimeout(() => {\n this.tooltip?.show();\n }, 0);\n }\n }\n \n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.DATE) {\n if (value.operator && value.operator === FILTER_OPERATORS.BETWEEN.value) {\n this.filterForm.setValue({\n value: value.value instanceof Date ? value.value : null,\n operator: FILTER_OPERATORS.BETWEEN.value,\n endDate: value.endDate instanceof Date ? value.endDate : null\n }, { emitEvent: false });\n } else {\n const operator = value.operator && this.operators().find(op => op.value === value.operator)\n ? value.operator\n : this.operators()[0].value;\n\n this.filterForm.setValue({\n value: value.value instanceof Date ? value.value : null,\n operator: operator,\n endDate: null\n }, { emitEvent: false });\n }\n } else {\n this.clearFilter();\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(): void {\n const operator = this.operatorControl.value;\n if (operator === FILTER_OPERATORS.BETWEEN.value) {\n const startDate = this.valueControl.value;\n const endDate: Date | null = this.endDateControl.value;\n\n this.onChange({\n value: startDate,\n endDate: endDate,\n operator: operator,\n type: FILTER_TYPES.DATE\n });\n } else {\n const value = this.valueControl.value;\n\n this.onChange({\n value: value,\n operator: operator,\n type: FILTER_TYPES.DATE\n });\n }\n }\n}","<div class=\"filter-input-group\" [class.active]=\"isActiveFilter()\">\n <mat-form-field class=\"filter-field\">\n <mat-label>{{ label() | translate }}</mat-label>\n <ymbpm-filter-operator matPrefix [operators]=\"operators()\" [value]=\"operatorControl.value\" (valueChange)=\"setOperator($event)\" />\n @if (isBetweenMode()) {\n <ymbpm-date-time-range-field [start]=\"valueControl\" [end]=\"endDateControl\" />\n } @else {\n <ymbpm-date-time-field [formControl]=\"valueControl\" />\n }\n @if (isActiveFilter()) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n </mat-form-field>\n</div>\n","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\nimport { Component, input, OnInit, forwardRef, ViewChild, ChangeDetectorRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { CommonModule } from '@angular/common';\nimport { debounceTime, distinctUntilChanged, pairwise, startWith, Subscription } from 'rxjs';\nimport { APP_ICONS, FILTER_OPERATORS, FILTER_TYPES, FilterValue, FilterOption } from '../../../bpm-management.schema';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'ymbpm-number-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatDividerModule,\n MatTooltipModule,\n TranslatePipe,\n FilterClearComponent,\n FilterOperatorComponent\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => NumberFilterComponent),\n multi: true\n }\n ],\n templateUrl: './number-filter.component.html',\n styleUrl: './number-filter.component.scss'\n})\nexport class NumberFilterComponent implements ControlValueAccessor, OnInit {\n /** Translation key of the field label. */\n label = input<string>('');\n operators = input<FilterOption[]>([FILTER_OPERATORS.EQUALS]);\n /** The smallest value that is accepted, lower values are raised to it. */\n min = input<number | null>(null);\n \n @ViewChild(MatTooltip) tooltip?: MatTooltip;\n \n filterForm = new FormGroup({\n value: new FormControl<number | null>(null),\n operator: new FormControl<string>(FILTER_OPERATORS.EQUALS.value)\n });\n \n icons = {\n ...APP_ICONS,\n };\n\n get numberControl() { return this.filterForm.get('value') as FormControl; }\n get operatorControl() { return this.filterForm.get('operator') as FormControl; }\n \n private numberInputSub: Subscription | null = null;\n private lastNumberValue: number | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n this.operatorControl.setValue(this.operators()[0]);\n \n this.createNumberInputSubscription();\n \n this.operatorControl.valueChanges\n .pipe(\n startWith(this.operators()[0]),\n pairwise()\n )\n .subscribe(([prev, next]: [string, string]) => {\n if (prev !== next) {\n if (this.isActiveFilter()) {\n this.fireOnChangeEvent();\n }\n }\n });\n }\n\n onEnter(): void {\n if (this.numberControl.value === this.lastNumberValue) {\n return;\n }\n\n if (this.numberInputSub) {\n this.numberInputSub.unsubscribe();\n }\n\n this.clampToMin();\n this.fireOnChangeEvent();\n this.createNumberInputSubscription();\n }\n\n createNumberInputSubscription(): void {\n this.numberInputSub = this.numberControl.valueChanges\n .pipe(\n debounceTime(300),\n distinctUntilChanged()\n )\n .subscribe(() => {\n this.clampToMin();\n this.fireOnChangeEvent();\n });\n }\n\n private clampToMin(): void {\n const min = this.min();\n const value = this.numberControl.value;\n if (min !== null && value !== null && value !== '' && Number(value) < min) {\n this.numberControl.setValue(min, { emitEvent: false });\n }\n }\n \n isActiveFilter(): boolean {\n const value = this.numberControl.value;\n return value !== null && value !== undefined && !isNaN(Number(value))\n }\n\n getCurrentOperatorOption(): FilterOption | null {\n const operator = this.operatorControl.value;\n return this.operators().find(op => op.value === operator) || null;\n }\n\n setOperator(operator: string): void {\n this.operatorControl.setValue(operator);\n }\n\n clearFilter(fireEvent = false): void {\n this.filterForm.reset({\n value: null,\n operator: this.operators()[0].value\n }, { emitEvent: false });\n\n if (fireEvent) {\n this.fireOnChangeEvent();\n }\n }\n\n toggleOperator(): void {\n const currentOperator = this.operatorControl.value;\n const currentIndex = this.operators().findIndex(op => op.value === currentOperator);\n const nextIndex = (currentIndex + 1) % this.operators().length;\n this.operatorControl.setValue(this.operators()[nextIndex].value);\n\n if (this.tooltip) {\n this.tooltip.hide();\n setTimeout(() => {\n this.tooltip?.show();\n }, 0);\n }\n }\n \n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.NUMBER) {\n const operator = value.operator && this.operators().find(op => op.value === value.operator)\n ? value.operator\n : this.operators()[0].value;\n \n this.filterForm.setValue({\n value: typeof value.value === 'number' ? value.value : null,\n operator: operator\n }, { emitEvent: false });\n } else {\n this.clearFilter();\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(): void {\n this.lastNumberValue = this.numberControl.value;\n this.onChange({\n value: this.numberControl.value,\n operator: this.operatorControl.value,\n type: FILTER_TYPES.NUMBER\n });\n }\n}","<div class=\"filter-input-group\" [class.active]=\"isActiveFilter()\">\n <mat-form-field class=\"filter-field\">\n <mat-label>{{ label() | translate }}</mat-label>\n <ymbpm-filter-operator matPrefix [operators]=\"operators()\" [value]=\"operatorControl.value\" (valueChange)=\"setOperator($event)\" />\n <input matInput type=\"number\" [attr.min]=\"min()\"\n [formControl]=\"numberControl\"\n (keydown.enter)=\"onEnter()\">\n @if (isActiveFilter()) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n </mat-form-field>\n</div>","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\nimport { Component, input, OnInit, forwardRef, ChangeDetectorRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { CommonModule } from '@angular/common';\nimport { APP_ICONS, FILTER_OPERATORS, FILTER_TYPES, FilterValue, FilterOption } from '../../../bpm-management.schema';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'ymbpm-select-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatSelectModule,\n MatIconModule,\n MatButtonModule,\n TranslatePipe,\n MatTooltipModule,\n FilterClearComponent,\n FilterOperatorComponent,\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => SelectFilterComponent),\n multi: true\n }\n ],\n templateUrl: './select-filter.component.html',\n styleUrl: './select-filter.component.scss'\n})\nexport class SelectFilterComponent implements ControlValueAccessor, OnInit {\n /** Translation key of the field label. */\n label = input<string>('');\n options = input<FilterOption[]>([]);\n enableMultiselect = input<boolean>(false);\n /** Translation key of what the field shows while nothing is selected. */\n placeholder = input<string>('yuv.app.bpm-management.filters.select');\n \n /** A single choice is compared for equality, shown like the fixed operator of the other filters. */\n readonly equals = [FILTER_OPERATORS.EQUALS];\n\n selectControl = new FormControl();\n \n icons = {\n ...APP_ICONS,\n };\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n if (this.enableMultiselect()) {\n this.selectControl.setValue([]);\n } else {\n this.selectControl.setValue('');\n }\n \n this.selectControl.valueChanges.subscribe(() => {\n this.fireOnChangeEvent();\n });\n }\n\n isActiveFilter(): boolean {\n const value = this.selectControl.value;\n if (this.enableMultiselect()) {\n return value && Array.isArray(value) && value.length > 0;\n } else {\n return value && value !== '';\n }\n }\n\n /** The chosen option of a single select (shown with its icon). */\n selectedOption(): FilterOption | undefined {\n return this.options().find(o => o.value === this.selectControl.value);\n }\n\n getSelectedCount(): number {\n if (!this.enableMultiselect()) return 0;\n \n const values = this.selectControl.value || [];\n return Array.isArray(values) ? values.length : 0;\n }\n\n clearFilter(fireEvent = false): void {\n this.selectControl.setValue(null, { emitEvent: false });\n\n if (fireEvent) {\n this.fireOnChangeEvent();\n }\n }\n\n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.SELECT ) {\n if (this.enableMultiselect()) {\n this.selectControl.setValue(Array.isArray(value.value) ? value.value : [], { emitEvent: false });\n } else {\n this.selectControl.setValue(value.value || '', { emitEvent: false });\n }\n } else {\n this.clearFilter();\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(): void {\n const value = this.selectControl.value;\n const isEmpty = value == null || value === '' || (Array.isArray(value) && value.length === 0);\n // no selection is no filter (the filter bar drops filters without a value)\n this.onChange(isEmpty ? null : { value, type: FILTER_TYPES.SELECT });\n }\n}","<div class=\"filter-input-group\" [class.active]=\"isActiveFilter()\">\n <mat-form-field class=\"filter-field\" floatLabel=\"always\">\n <mat-label>{{ label() | translate }}</mat-label>\n @if (!enableMultiselect()) {\n <ymbpm-filter-operator matPrefix [operators]=\"equals\" value=\"equals\" />\n }\n <mat-select [formControl]=\"selectControl\"\n [placeholder]=\"placeholder() ? (placeholder() | translate) : ''\"\n [multiple]=\"enableMultiselect()\">\n @if (!enableMultiselect()) {\n <mat-select-trigger>\n @if (selectedOption(); as selected) {\n @if (selected.icon) {\n <mat-icon class=\"option-icon\">{{ icons[selected.icon] }}</mat-icon>\n }\n {{ selected.label | translate }}\n }\n </mat-select-trigger>\n }\n @for (option of options(); track option.value) {\n <mat-option [value]=\"option.value\">\n @if (option.icon) {\n <mat-icon class=\"option-icon\">{{ icons[option.icon] }}</mat-icon>\n }\n {{option.label | translate}}\n </mat-option>\n }\n </mat-select>\n @if (isActiveFilter()) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n @if (enableMultiselect()) {\n <div matSuffix class=\"multi-select-suffix\">\n @if (getSelectedCount() > 0) {\n <mat-icon>check_circle</mat-icon>\n <span class=\"count\">{{getSelectedCount()}}</span>\n }\n </div>\n }\n </mat-form-field>\n</div>\n","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\nimport { Component, input, OnInit, forwardRef, ViewChild, ChangeDetectorRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, FormGroup, ReactiveFormsModule, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { CommonModule } from '@angular/common';\nimport { debounceTime, distinctUntilChanged, pairwise, startWith, Subscription } from 'rxjs';\nimport { FilterValue, APP_ICONS, FILTER_OPERATORS, FILTER_TYPES, FilterOption } from '../../../bpm-management.schema';\nimport { MatTooltip, MatTooltipModule } from '@angular/material/tooltip';\n\n@Component({\n selector: 'ymbpm-text-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatInputModule,\n MatIconModule,\n MatButtonModule,\n MatMenuModule,\n MatDividerModule,\n MatTooltipModule,\n TranslatePipe,\n FilterClearComponent,\n FilterOperatorComponent\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => TextFilterComponent),\n multi: true\n }\n ],\n templateUrl: './text-filter.component.html',\n styleUrl: './text-filter.component.scss'\n})\nexport class TextFilterComponent implements ControlValueAccessor, OnInit {\n /** Translation key of the field label. */\n label = input<string>('');\n operators = input<FilterOption[]>([FILTER_OPERATORS.EQUALS]);\n \n @ViewChild(MatTooltip) tooltip?: MatTooltip;\n \n filterForm = new FormGroup({\n value: new FormControl(''),\n operator: new FormControl<string>(FILTER_OPERATORS.EQUALS.value)\n });\n\n icons = {\n ...APP_ICONS,\n };\n\n /** The operator a filter starts with: contains if it is offered, otherwise the first one. */\n defaultOperator(): string {\n return (this.operators().find(op => op.value === FILTER_OPERATORS.CONTAINS.value) ?? this.operators()[0]).value;\n }\n\n get textControl() { return this.filterForm.get('value') as FormControl; }\n get operatorControl() { return this.filterForm.get('operator') as FormControl; }\n\n private textInputSub: Subscription | null = null;\n private lastTextValue: string | null = null;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n this.operatorControl.setValue(this.defaultOperator());\n \n this.createTextInputSubscription();\n \n this.operatorControl.valueChanges\n .pipe(\n startWith(this.defaultOperator()),\n pairwise()\n )\n .subscribe(([prev, next]: [string, string]) => {\n if (prev !== next) {\n if (this.isActiveFilter()) {\n this.fireOnChangeEvent();\n }\n }\n });\n }\n\n onEnter(): void {\n if (this.textControl.value === this.lastTextValue) {\n return;\n }\n\n if (this.textInputSub) {\n this.textInputSub.unsubscribe();\n }\n\n if (this.isActiveFilter()) {\n this.fireOnChangeEvent();\n } else {\n if (this.isActiveFilter(this.lastTextValue) && (this.textControl.value.toString().trim().length === 0)) {\n this.clearFilter(true);\n }\n }\n this.createTextInputSubscription();\n }\n\n createTextInputSubscription(): void {\n this.textInputSub = this.textControl.valueChanges\n .pipe(\n debounceTime(550),\n distinctUntilChanged(),\n startWith(null),\n pairwise()\n )\n .subscribe(([prev, next]: [string | null, string | null]) => {\n if (this.isActiveFilter()) {\n this.fireOnChangeEvent();\n } else if (next !== null && next !== undefined) {\n if (this.isActiveFilter(prev) && (next.toString().trim().length === 0)) {\n this.clearFilter(true);\n }\n }\n });\n }\n\n isActiveFilter(value = this.textControl.value): boolean {\n return value && value.toString().trim().length > 0;\n }\n\n getCurrentOperatorOption(): FilterOption | null {\n const operator = this.operatorControl.value;\n return this.operators().find(op => op.value === operator) || null;\n }\n\n setOperator(operator: string): void {\n this.operatorControl.setValue(operator);\n }\n\n clearFilter(fireEvent = false): void {\n this.filterForm.reset({\n value: null,\n operator: this.defaultOperator()\n }, { emitEvent: false });\n\n if (fireEvent) {\n this.fireOnChangeEvent();\n }\n }\n\n toggleOperator(): void {\n const currentOperator = this.operatorControl.value;\n const currentIndex = this.operators().findIndex(op => op.value === currentOperator);\n const nextIndex = (currentIndex + 1) % this.operators().length;\n this.operatorControl.setValue(this.operators()[nextIndex].value);\n \n if (this.tooltip) {\n this.tooltip.hide();\n setTimeout(() => {\n this.tooltip?.show();\n }, 0);\n }\n }\n\n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.TEXT) {\n const operator = value.operator && this.operators().find(op => op.value === value.operator)\n ? value.operator\n : this.defaultOperator();\n \n this.filterForm.setValue({\n value: value.value ? String(value.value) : '',\n operator: operator\n }, { emitEvent: false });\n } else {\n this.clearFilter();\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(): void {\n this.lastTextValue = this.textControl.value;\n this.onChange({\n value: this.textControl.value,\n operator: this.operatorControl.value,\n type: FILTER_TYPES.TEXT\n });\n }\n}","<div class=\"filter-input-group\" [class.active]=\"isActiveFilter()\">\n <mat-form-field class=\"filter-field\">\n <mat-label>{{ label() | translate }}</mat-label>\n <ymbpm-filter-operator matPrefix [operators]=\"operators()\" [value]=\"operatorControl.value\" (valueChange)=\"setOperator($event)\" />\n <input matInput \n [formControl]=\"textControl\"\n (keydown.enter)=\"onEnter()\">\n @if (isActiveFilter()) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n </mat-form-field>\n</div>","import { FilterClearComponent } from '../filter-clear/filter-clear.component';\nimport { Component, forwardRef, input, OnInit, signal, ChangeDetectorRef, inject } from '@angular/core';\nimport { ControlValueAccessor, FormControl, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';\nimport { CommonModule } from '@angular/common';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { OrganizationComponent } from '@yuuvis/client-framework/forms';\nimport { FilterValue, FILTER_OPERATORS, FILTER_TYPES } from '../../../bpm-management.schema';\nimport { FilterOperatorComponent } from '../filter-operator/filter-operator.component';\n\n@Component({\n selector: 'ymbpm-user-filter',\n standalone: true,\n imports: [\n CommonModule,\n ReactiveFormsModule,\n MatFormFieldModule,\n MatIconModule,\n TranslatePipe,\n OrganizationComponent,\n FilterClearComponent,\n FilterOperatorComponent\n ],\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => UserFilterComponent),\n multi: true\n }\n ],\n templateUrl: './user-filter.component.html',\n styleUrl: './user-filter.component.scss'\n})\nexport class UserFilterComponent implements ControlValueAccessor, OnInit {\n /** Translation key of the field label. */\n label = input<string>('');\n /** A user is compared for equality, shown like the fixed operator of the other filters. */\n readonly equals = [FILTER_OPERATORS.EQUALS];\n orgControl = new FormControl<string | null>(null);\n\n showOrganization = signal(true);\n\n private hasWrittenValue = false;\n\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onChange: (value: FilterValue | null) => void = () => {};\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n private onTouched: () => void = () => {};\n\n ngOnInit(): void {\n this.orgControl.valueChanges.subscribe(value => this.fireOnChangeEvent(value));\n }\n\n private cdr = inject(ChangeDetectorRef);\n\n writeValue(value: FilterValue | null): void {\n // the filter bar is OnPush, so a value that is set from outside needs a check to update the clear button\n this.cdr.markForCheck();\n if (value && value.type === FILTER_TYPES.TEXT) {\n this.orgControl.setValue(value.value ? String(value.value) : null, { emitEvent: false });\n } else {\n this.orgControl.setValue(null, { emitEvent: false });\n if (this.hasWrittenValue) {\n this.showOrganization.set(false);\n setTimeout(() => this.showOrganization.set(true));\n }\n }\n this.hasWrittenValue = true;\n }\n\n clearFilter(fireEvent = false): void {\n this.orgControl.setValue(null, { emitEvent: false });\n // the organization field keeps its own state, so it is recreated\n this.showOrganization.set(false);\n setTimeout(() => this.showOrganization.set(true));\n if (fireEvent) {\n this.fireOnChangeEvent(null);\n }\n }\n\n registerOnChange(fn: (value: FilterValue | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n private fireOnChangeEvent(value: string | null): void {\n this.onTouched();\n this.onChange({\n value: value || null,\n operator: FILTER_OPERATORS.EQUALS.value,\n type: FILTER_TYPES.TEXT\n });\n }\n}\n","<div class=\"filter-input-group\" [class.active]=\"!!orgControl.value\">\n <mat-form-field class=\"filter-field\">\n <mat-label>{{ label() | translate }}</mat-label>\n <ymbpm-filter-operator matPrefix [operators]=\"equals\" value=\"equals\" />\n @if (showOrganization()) {\n <yuv-organization [formControl]=\"orgControl\" [excludeMe]=\"false\" situation=\"SEARCH\"></yuv-organization>\n }\n @if (orgControl.value) {\n <ymbpm-filter-clear matSuffix (cleared)=\"clearFilter(true)\" />\n }\n </mat-form-field>\n</div>\n","import { CdkConnectedOverlay, ConnectedPosition, OverlayModule } from '@angular/cdk/overlay';\nimport {\n afterNextRender,\n ChangeDetectionStrategy,\n Component,\n computed,\n ElementRef,\n inject,\n Injector,\n input,\n OnDestroy,\n output,\n signal,\n viewChild\n} from '@angular/core';\nimport { FormControl, ReactiveFormsModule } from '@angular/forms';\nimport { MatIconModule } from '@angular/material/icon';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { Subscription } from 'rxjs';\nimport { Column, FILTER_OPERATORS, FILTER_TYPES, FilterOption, FilterValue, formatDateTime, TableFilters } from '../../../bpm-management.schema';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\nimport { DateFilterComponent } from '../date-filter/date-filter.component';\nimport { NumberFilterComponent } from '../number-filter/number-filter.component';\nimport { SelectFilterComponent } from '../select-filter/select-filter.component';\nimport { TextFilterComponent } from '../text-filter/text-filter.component';\nimport { UserFilterComponent } from '../user-filter/user-filter.component';\n\nconst OPERATORS = new Map<string, FilterOption>(Object.values(FILTER_OPERATORS).map(o => [o.value, o]));\n\n/** Operators shown as a sign before the value; the text operators are wildcards around it instead. */\nconst OPERATOR_SIGNS: Record<string, string> = {\n [FILTER_OPERATORS.EQUALS.value]: '=',\n [FILTER_OPERATORS.GREATER_THAN.value]: '>',\n [FILTER_OPERATORS.LESS_THAN.value]: '<',\n [FILTER_OPERATORS.BEFORE.value]: '<',\n [FILTER_OPERATORS.AFTER.value]: '>'\n};\n\n/** What a chip shows: the criterion with operator signs, and in words for its tooltip. */\ninterface Chip {\n column: Column;\n /** Set for user criteria, which show the user instead of `text`. */\n userId: string | null;\n text: string;\n title: string;\n}\n\n/**\n * Strip of the list pane with one chip for every active criterion (and the search); empty it takes\n * no space. New criteria are added with `edit()` from outside (the \"add filter\" menu of the pane\n * header). A chip opens the editor of its criterion, which is the filter control of the column in a\n * popover; changes apply while typing, so there is nothing to confirm.\n */\n@Component({\n selector: 'ymbpm-filter-bar',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: { '[class.empty]': '!hasChips()' },\n imports: [\n OverlayModule,\n ReactiveFormsModule,\n MatIconModule,\n TranslatePipe,\n OrganizationRendererComponent,\n TextFilterComponent,\n NumberFilterComponent,\n SelectFilterComponent,\n DateFilterComponent,\n UserFilterComponent\n ],\n templateUrl: './filter-bar.component.html',\n styleUrl: './filter-bar.component.scss'\n})\nexport class FilterBarComponent implements OnDestroy {\n readonly #translate = inject(TranslateService);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #injector = inject(Injector);\n\n /** The columns that can be filtered (the ones without a filter are ignored). */\n columns = input.required<Column[]>();\n filters = input<TableFilters>({});\n /** The search term of the list (it is entered in the app header and shown as a chip here). */\n search = input('');\n filtersChange = output<TableFilters>();\n searchClear = output<void>();\n\n readonly FILTER_TYPES = FILTER_TYPES;\n readonly positions: ConnectedPosition[] = [\n { originX: 'start', originY: 'bottom', overlayX: 'start', overlayY: 'top', offsetY: 4 },\n { originX: 'start', originY: 'top', overlayX: 'start', overlayY: 'bottom', offsetY: -4 }\n ];\n\n private readonly overlay = viewChild(CdkConnectedOverlay);\n\n readonly editing = signal<{ column: Column; origin: HTMLElement } | null>(null);\n readonly overlayOrigin = computed(() => this.editing()?.origin ?? this.#host.nativeElement);\n control = new FormControl<FilterValue | null>(null);\n #sub?: Subscription;\n\n readonly #filterable = computed(() => this.columns().filter(c => c.filter));\n readonly addableColumns = computed(() => this.#filterable().filter(c => !this.filters()[c.name]));\n /** Built once per change of the filters, not on every check of the template. */\n readonly chips = computed<Chip[]>(() =>\n this.#filterable()\n .filter(c => this.filters()[c.name])\n .map(column => {\n const filter = this.filters()[column.name];\n const label = this.#translate.instant(column.displayName);\n return {\n column,\n userId: column.filter?.type === FILTER_TYPES.USER && typeof filter.value === 'string' ? filter.value : null,\n text: this.#describe(column, filter, true),\n title: `${label}: ${this.#describe(column, filter, false)}`\n };\n })\n );\n readonly hasChips = computed(() => !!this.search() || this.chips().length > 0);\n\n ngOnDestroy(): void {\n this.#sub?.unsubscribe();\n }\n\n edit(column: Column, origin: HTMLElement): void {\n this.#sub?.unsubscribe();\n this.control = new FormControl<FilterValue | null>(this.filters()[column.name] ?? null);\n this.#sub = this.control.valueChanges.subscribe(value => {\n this.#update(column.name, value);\n // a user is picked from a list in one go, there is nothing left to type\n if (column.filter?.type === FILTER_TYPES.USER && value?.value) {\n this.close(true);\n }\n });\n this.editing.set({ column, origin });\n }\n\n /** `restoreFocus` puts the focus back on what opened the editor (the add-filter button or the chip). */\n close(restoreFocus = false): void {\n const origin = this.editing()?.origin;\n this.#sub?.unsubscribe();\n this.editing.set(null);\n if (restoreFocus) {\n afterNextRender(() => origin?.isConnected && origin.focus(), { injector: this.#injector });\n }\n }\n\n /** Escape cancels the popover, Enter in a text field confirms the value (it is applied already while typing). */\n onKeydown(event: KeyboardEvent): void {\n if (event.key === 'Escape' || (event.key === 'Enter' && !event.defaultPrevented && event.target instanceof HTMLInputElement)) {\n this.close(true);\n }\n }\n\n /** The editor takes the focus once it is rendered (the menu that opens it does not restore its own). */\n focusEditor(): void {\n afterNextRender(() => this.overlay()?.overlayRef?.overlayElement.querySelector<HTMLElement>('input')?.focus(), {\n injector: this.#injector\n });\n }\n\n remove(column: Column): void {\n if (this.editing()?.column === column) {\n this.close();\n }\n const filters = { ...this.filters() };\n delete filters[column.name];\n this.filtersChange.emit(filters);\n }\n\n /** Operator and value of a criterion: with signs (`= x`, `*x*`, `> x`) or in words. */\n #describe(column: Column, filter: FilterValue, signs: boolean): string {\n const operator = filter.operator ? OPERATORS.get(filter.operator) : undefined;\n const word = operator ? this.#translate.instant(operator.label) : '';\n switch (column.filter?.type) {\n case FILTER_TYPES.SELECT:\n return this.#selectText(column, filter.value);\n case FILTER_TYPES.DATE:\n return filter.operator === FILTER_OPERATORS.BETWEEN.value\n ? `${signs ? '' : word + ' '}${this.#date(filter.value)} – ${this.#date(filter.endDate)}`\n : `${signs ? OPERATOR_SIGNS[filter.operator ?? ''] ?? '' : word} ${this.#date(filter.value)}`.trim();\n default:\n return signs ? this.#withSign(filter.operator, String(filter.value)) : `${word} ${filter.value}`.trim();\n }\n }\n\n /** Wildcards for the text operators, a leading sign for the others. */\n #withSign(operator: string | undefined, value: string): string {\n switch (operator) {\n case FILTER_OPERATORS.CONTAINS.value:\n return `*${value}*`;\n case FILTER_OPERATORS.STARTS_WITH.value:\n return `${value}*`;\n case FILTER_OPERATORS.ENDS_WITH.value:\n return `*${value}`;\n default:\n return `${OPERATOR_SIGNS[operator ?? ''] ?? ''} ${value}`.trim();\n }\n }\n\n #selectText(column: Column, value: unknown): string {\n const options = column.filter?.type === FILTER_TYPES.SELECT ? (column.filter.options ?? []) : [];\n const values = Array.isArray(value) ? value : [value];\n return values.map(v => this.#translate.instant(options.find(o => o.value === v)?.label ?? String(v))).join(', ');\n }\n\n /** Same format as the dates of the lists and details. */\n #date(value: FilterValue['value'] | undefined): string {\n return value instanceof Date || (typeof value === 'string' && value)\n ? formatDateTime(new Date(value).toISOString(), this.#translate.currentLang)\n : '';\n }\n\n #update(name: string, value: FilterValue | null): void {\n const filters = { ...this.filters() };\n const isBetween = value?.type === FILTER_TYPES.DATE && value.operator === FILTER_OPERATORS.BETWEEN.value;\n const isEmpty = !value || (isBetween ? value.value == null && value.endDate == null : value.value == null);\n if (isEmpty) {\n delete filters[name];\n } else {\n filters[name] = value;\n }\n this.filtersChange.emit(filters);\n }\n}\n","<div class=\"chips\" role=\"group\" [attr.aria-label]=\"'yuv.app.bpm-management.filters.title' | translate\">\n @if (search()) {\n <span class=\"chip\">\n <span class=\"chip__main chip__main--static\">\n <span class=\"chip__name\">{{ 'yuv.app.bpm-management.filters.search' | translate }}</span>\n <span class=\"chip__value\">{{ search() }}</span>\n </span>\n <button type=\"button\" class=\"chip__remove\" [attr.aria-label]=\"('yuv.app.bpm-management.filters.remove' | translate) + ': ' + ('yuv.app.bpm-management.filters.search' | translate)\" (click)=\"searchClear.emit()\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n }\n @for (chip of chips(); track chip.column.name) {\n <span class=\"chip\" [class.chip--editing]=\"editing()?.column === chip.column\">\n <button type=\"button\" class=\"chip__main\" #chipButton [attr.title]=\"chip.userId ? null : chip.title\" (click)=\"edit(chip.column, chipButton)\">\n <span class=\"chip__name\">{{ chip.column.displayName | translate }}</span>\n @if (chip.userId) {\n <yuv-organization-renderer propertyName=\"user\" [value]=\"chip.userId ?? null\"></yuv-organization-renderer>\n } @else {\n <span class=\"chip__value\">{{ chip.text }}</span>\n }\n </button>\n <button type=\"button\" class=\"chip__remove\" [attr.aria-label]=\"('yuv.app.bpm-management.filters.remove' | translate) + ': ' + (chip.column.displayName | translate)\" (click)=\"remove(chip.column)\">\n <mat-icon>close</mat-icon>\n </button>\n </span>\n }\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOpen]=\"!!editing()\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin()\"\n [cdkConnectedOverlayPositions]=\"positions\"\n [cdkConnectedOverlayHasBackdrop]=\"true\"\n (backdropClick)=\"close()\"\n (overlayKeydown)=\"onKeydown($event)\"\n (attach)=\"focusEditor()\"\n>\n @if (editing(); as current) {\n <div class=\"popover\" role=\"dialog\" [attr.aria-label]=\"current.column.displayName | translate\">\n @let column = current.column;\n @switch (column.filter?.type) {\n @case (FILTER_TYPES.TEXT) {\n <ymbpm-text-filter [label]=\"column.displayName\" [formControl]=\"control\" [operators]=\"$any(column.filter).operators || []\"></ymbpm-text-filter>\n }\n @case (FILTER_TYPES.NUMBER) {\n <ymbpm-number-filter [label]=\"column.displayName\" [formControl]=\"control\" [min]=\"$any(column.filter).minValue ?? null\" [operators]=\"$any(column.filter).operators || []\"></ymbpm-number-filter>\n }\n @case (FILTER_TYPES.SELECT) {\n <ymbpm-select-filter [label]=\"column.displayName\" [placeholder]=\"$any(column.filter).placeholder ?? 'yuv.app.bpm-management.filters.select'\" [formControl]=\"control\" [options]=\"$any(column.filter).options || []\" [enableMultiselect]=\"!!$any(column.filter).enableMultiselect\"></ymbpm-select-filter>\n }\n @case (FILTER_TYPES.DATE) {\n <ymbpm-date-filter [label]=\"column.displayName\" [formControl]=\"control\" [operators]=\"$any(column.filter).operators || []\"></ymbpm-date-filter>\n }\n @case (FILTER_TYPES.USER) {\n <ymbpm-user-filter [label]=\"column.displayName\" [formControl]=\"control\"></ymbpm-user-filter>\n }\n }\n </div>\n }\n</ng-template>\n","import { Component, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\n\n/**\n * The narrow icon+label strip a `yuv-split-view` area collapses to instead of disappearing\n * entirely (`hideArea()`/`showArea()` still drive the actual split-view visibility - this is\n * just the \"way back in\" rendered as a sibling of the split-view while an area is hidden).\n *\n * The gutter div is the whole interactive target (click, Enter, Space all expand it) - the inner\n * icon is `aria-hidden` and has no click handler of its own, so it's purely decorative rather\n * than a second, independently-focusable interactive control.\n */\n@Component({\n selector: 'ymbpm-pane-gutter',\n standalone: true,\n imports: [MatIconModule, MatTooltipModule, YmtPanesModule],\n templateUrl: './pane-gutter.component.html',\n styleUrl: './pane-gutter.component.scss',\n})\nexport class PaneGutterComponent {\n icon = input.required<string>();\n label = input.required<string>();\n tooltip = input.required<string>();\n /** Flips the label to read bottom-to-top (`vertical-rl` reads top-to-bottom by default) - for a\n * gutter whose collapsed pane sits to the left, so the label flows outward toward that edge. */\n flipLabel = input<boolean>(false);\n expand = output<void>();\n}\n","<ymt-pane>\n <ymt-pane-body>\n <div\n class=\"pane-gutter\"\n role=\"button\"\n tabindex=\"0\"\n [matTooltip]=\"tooltip()\"\n [attr.aria-label]=\"tooltip()\"\n (click)=\"expand.emit()\"\n (keydown.enter)=\"expand.emit()\"\n (keydown.space)=\"$event.preventDefault(); expand.emit()\"\n >\n <mat-icon class=\"icon\" aria-hidden=\"true\">{{ icon() }}</mat-icon>\n <span class=\"label\" [class.label--btt]=\"flipLabel()\">{{ label() }}</span>\n </div>\n </ymt-pane-body>\n</ymt-pane>\n","import { Component, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\n\n/**\n * A small icon button for a `ymt-pane`'s top bar that hides or toggles a sibling area (e.g. in a\n * `yuv-split-view`).\n */\n@Component({\n selector: 'ymbpm-pane-toggle-button',\n standalone: true,\n imports: [MatIconModule, MatTooltipModule, YmtIconButtonDirective],\n templateUrl: './pane-toggle-button.component.html',\n styleUrl: './pane-toggle-button.component.scss',\n})\nexport class PaneToggleButtonComponent {\n icon = input.required<string>();\n tooltip = input.required<string>();\n toggled = output<void>();\n}\n","<button\n ymtIconButton\n icon-button-size=\"small\"\n [matTooltip]=\"tooltip()\"\n [attr.aria-label]=\"tooltip()\"\n (click)=\"toggled.emit()\"\n>\n <mat-icon>{{ icon() }}</mat-icon>\n</button>\n","import { inject, Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@yuuvis/client-core';\nimport { formatDateTime } from '../bpm-management.schema';\n\n@Pipe({\n name: 'formatDateTime',\n standalone: true\n})\nexport class FormatDateTimePipe implements PipeTransform {\n readonly #translateService = inject(TranslateService);\n\n transform(value: string | null): string {\n if (!value) return '';\n return formatDateTime(value, this.#translateService.currentLang);\n }\n}\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { definitionSeverity, definitionStatusLabel, DeploymentInstance } from '../../../bpm-management.schema';\nimport { FormatDateTimePipe } from '../../../pipes/format-date-time.pipe';\n\n/** Deployment details: facts on top, then tabs for the contained process definitions and resources. */\n@Component({\n selector: 'ymbpm-deployment-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatTabsModule, TranslatePipe, YmtBadge, FormatDateTimePipe],\n templateUrl: './deployment-details.component.html',\n styleUrl: './deployment-details.component.scss'\n})\nexport class DeploymentDetailsComponent {\n deployment = input.required<DeploymentInstance>();\n /** Whether the process definitions page is enabled, so definitions can be linked. */\n canOpenDefinition = input(false);\n openDefinition = output<string>();\n\n readonly definitionSeverity = definitionSeverity;\n readonly definitionStatusLabel = definitionStatusLabel;\n}\n","<section class=\"facts\">\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.deploymentTime' | translate }}</span>\n <span>{{ (deployment().deploymentTime | formatDateTime) || '-' }}</span>\n </div>\n @if (deployment().category; as category) {\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.category' | translate }}</span>\n <ymt-badge class=\"category\" [outline]=\"true\">{{ category }}</ymt-badge>\n </div>\n }\n</section>\n\n<mat-tab-group class=\"tabs\" animationDuration=\"0ms\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'yuv.app.bpm-management.entity.definitions' | translate }}\n <ymt-badge class=\"count\">{{ deployment().definitions?.length ?? 0 }}</ymt-badge>\n </ng-template>\n <ng-template matTabContent>\n <div class=\"tab-content\">\n @if (!deployment().definitions?.length) {\n <p class=\"empty\">{{ 'yuv.app.bpm-management.emptyResult' | translate }}</p>\n } @else {\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'yuv.app.bpm-management.column.name' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.column.key' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.column.version' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.column.status' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n @for (definition of deployment().definitions; track definition.id) {\n <tr>\n <td>\n @if (canOpenDefinition()) {\n <a class=\"link\" tabindex=\"0\" role=\"link\" (click)=\"openDefinition.emit(definition.id)\" (keydown.enter)=\"openDefinition.emit(definition.id)\">\n {{ definition.name || definition.id }}<mat-icon>arrow_forward</mat-icon>\n </a>\n } @else {\n {{ definition.name || definition.id }}\n }\n </td>\n <td class=\"mono\">{{ definition.key }}</td>\n <td>{{ definition.version }}</td>\n <td>\n <ymt-badge [aura]=\"true\" [severity]=\"definitionSeverity(definition)\">\n {{ definitionStatusLabel(definition) | translate }}\n </ymt-badge>\n </td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'yuv.app.bpm-management.deployment.details.resources' | translate }}\n <ymt-badge class=\"count\">{{ deployment().resources?.length ?? 0 }}</ymt-badge>\n </ng-template>\n <ng-template matTabContent>\n <div class=\"tab-content\">\n @if (!deployment().resources?.length) {\n <p class=\"empty\">{{ 'yuv.app.bpm-management.emptyResult' | translate }}</p>\n } @else {\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'yuv.app.bpm-management.column.id' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.deployment.details.resourceMediaType' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n @for (resource of deployment().resources; track resource.id) {\n <tr>\n <td class=\"mono\">{{ resource.id }}</td>\n <td>{{ resource.mediaType }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </ng-template>\n </mat-tab>\n</mat-tab-group>\n","import { ChangeDetectionStrategy, Component, computed, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { YmtButtonDirective } from '@yuuvis/material';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { ProcessDefinitionInstance } from '../../../bpm-management.schema';\nimport { QuickFilter } from '../../../bpm-management.state';\n\n/** The processes of a definition to show in the processes list; no status shows all of them. */\nexport interface ShowProcessesRequest {\n definitionId: string;\n quick: QuickFilter;\n}\n\n/** Process definition details: facts on top, then a tab with the process statistics. */\n@Component({\n selector: 'ymbpm-process-definition-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatTabsModule, TranslatePipe, YmtBadge, YmtButtonDirective],\n templateUrl: './process-definition-details.component.html',\n styleUrl: './process-definition-details.component.scss'\n})\nexport class ProcessDefinitionDetailsComponent {\n definition = input.required<ProcessDefinitionInstance>();\n /** Whether the deployments page is enabled, so the deployment can be linked. */\n canOpenDeployment = input(false);\n openDeployment = output<string>();\n /** Show the processes of this definition, optionally of one status, in the processes list. */\n showProcesses = output<ShowProcessesRequest>();\n\n /** The list can only tell ended from not ended, so running and suspended are one \"active\" status. */\n cards = computed(() => {\n const c = this.definition().statistics?.processInstanceCount;\n const running = c?.active ?? 0;\n const suspended = c?.suspended ?? 0;\n return [\n {\n quick: 'active' as const,\n icon: 'hourglass_top',\n label: 'yuv.app.bpm-management.statusFilter.processes.active',\n count: running + suspended,\n hint: 'yuv.app.bpm-management.definitions.details.activeBreakdown',\n hintParams: { running, suspended }\n },\n {\n quick: 'completed' as const,\n icon: 'flag',\n label: 'yuv.app.bpm-management.statusFilter.processes.completed',\n count: c?.completed ?? 0,\n hint: 'yuv.app.bpm-management.definitions.details.completedHint',\n hintParams: {}\n }\n ];\n });\n\n /** The tab badge: all processes of the definition. */\n total = computed(() => this.cards().reduce((sum, card) => sum + card.count, 0));\n\n show(quick: QuickFilter): void {\n this.showProcesses.emit({ definitionId: this.definition().id, quick });\n }\n}\n","<section class=\"facts\">\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.deploymentId' | translate }}</span>\n @if (canOpenDeployment() && !definition().global && definition().deploymentId; as deploymentId) {\n <a class=\"link mono\" tabindex=\"0\" role=\"link\" (click)=\"openDeployment.emit(deploymentId)\" (keydown.enter)=\"openDeployment.emit(deploymentId)\">\n {{ deploymentId }}<mat-icon>arrow_forward</mat-icon>\n </a>\n } @else {\n <span class=\"mono\">{{ definition().deploymentId || '-' }}</span>\n }\n </div>\n <!-- the order of the list row: category, then version and key -->\n <div class=\"fact fact--column\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.category' | translate }}</span>\n <span>{{ definition().category || '-' }}</span>\n </div>\n <div class=\"fact fact--column\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.version' | translate }}</span>\n <span>{{ definition().version || '-' }}</span>\n </div>\n <div class=\"fact fact--column\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.key' | translate }}</span>\n <span class=\"mono\">{{ definition().key || '-' }}</span>\n </div>\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.description' | translate }}</span>\n <span>{{ definition().description || '-' }}</span>\n </div>\n</section>\n\n<mat-tab-group class=\"tabs\" animationDuration=\"0ms\">\n <mat-tab>\n <ng-template mat-tab-label>\n {{ 'yuv.app.bpm-management.entity.processes' | translate }}\n <ymt-badge class=\"count\">{{ total() }}</ymt-badge>\n </ng-template>\n <ng-template matTabContent>\n <div class=\"tab-content\">\n <div class=\"cards\">\n @for (card of cards(); track card.quick) {\n <button type=\"button\" class=\"card\" (click)=\"show(card.quick)\">\n <span class=\"card__status\"><mat-icon aria-hidden=\"true\">{{ card.icon }}</mat-icon>{{ card.label | translate }}</span>\n <span class=\"card__count\">{{ card.count }}</span>\n <span class=\"card__hint\">{{ card.hint | translate: card.hintParams }}</span>\n <span class=\"card__link\">{{ 'yuv.app.bpm-management.definitions.showProcesses' | translate }}<mat-icon aria-hidden=\"true\">arrow_forward</mat-icon></span>\n </button>\n }\n </div>\n <button type=\"button\" ymtButton=\"secondary\" class=\"all-link\" (click)=\"show('all')\">\n {{ 'yuv.app.bpm-management.definitions.details.showAll' | translate }}<mat-icon aria-hidden=\"true\">arrow_forward</mat-icon>\n </button>\n </div>\n </ng-template>\n </mat-tab>\n</mat-tab-group>\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, signal } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { ProcessInstance, processStatusIcon, TaskInstance, taskSeverity, taskStatusLabel } from '../../../bpm-management.schema';\nimport { FormatDateTimePipe } from '../../../pipes/format-date-time.pipe';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\n\n/**\n * Process details: facts on top, then tabs for the progress timeline and the variables.\n */\n@Component({\n selector: 'ymbpm-process-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatTabsModule, MatTooltipModule, TranslatePipe, YmtBadge, FormatDateTimePipe, OrganizationRendererComponent],\n templateUrl: './process-details.component.html',\n styleUrl: './process-details.component.scss'\n})\nexport class ProcessDetailsComponent {\n readonly #translate = inject(TranslateService);\n\n readonly processStatusIcon = processStatusIcon;\n readonly taskSeverity = taskSeverity;\n readonly taskStatusLabel = taskStatusLabel;\n\n process = input.required<ProcessInstance>();\n tasks = input<TaskInstance[]>([]);\n /** Whether the process definitions page is enabled, so the definition can be linked. */\n canOpenDefinition = input(false);\n openTask = output<string>();\n openDefinition = output<string>();\n\n /** The open tasks of a suspended process are suspended too (the history does not say so). */\n shownTasks = computed(() => (this.process().suspended ? this.tasks().map(t => (t.endTime ? t : { ...t, suspended: true })) : this.tasks()));\n\n variableFilter = signal('');\n variables = computed(() => {\n const q = this.variableFilter().trim().toLowerCase();\n const vars = this.process().variables ?? [];\n return q ? vars.filter(v => `${v.name} ${v.value}`.toLowerCase().includes(q)) : vars;\n });\n\n /** Elapsed time between two timestamps (until now without `to`) as its two largest units, e.g. `2 d 1 h`. */\n duration(from: string | null, to?: string | null): string {\n const ms = (to ? Date.parse(to) : Date.now()) - Date.parse(from ?? '');\n if (!Number.isFinite(ms) || ms < 0) return '';\n const minutes = Math.floor(ms / 60000);\n const units: [string, number][] = [\n ['days', Math.floor(minutes / 1440)],\n ['hours', Math.floor((minutes % 1440) / 60)],\n ['minutes', minutes % 60]\n ];\n const first = Math.max(\n units.findIndex(([, n]) => n > 0),\n 0\n );\n return units\n .slice(first, first + 2)\n .filter(([, n], i) => i === 0 || n > 0)\n .map(([unit, n]) => this.#translate.instant(`yuv.app.bpm-management.duration.${unit}`, { n }))\n .join(' ');\n }\n}\n","<section class=\"facts\">\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.processDefinitionId' | translate }}</span>\n @if (canOpenDefinition()) {\n <a class=\"link mono\" tabindex=\"0\" role=\"link\" [matTooltip]=\"process().processDefinitionName || ''\" (click)=\"openDefinition.emit(process().processDefinitionId)\" (keydown.enter)=\"openDefinition.emit(process().processDefinitionId)\">\n {{ process().processDefinitionId }}<mat-icon>arrow_forward</mat-icon>\n </a>\n } @else {\n <span class=\"mono\" [matTooltip]=\"process().processDefinitionName || ''\">{{ process().processDefinitionId }}</span>\n }\n </div>\n @if (process().processDefinitionDescription) {\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.process.details.processDefinitionDescription' | translate }}</span>\n <span>{{ process().processDefinitionDescription }}</span>\n </div>\n }\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.businessKey' | translate }}</span>\n <span>{{ process().businessKey || '-' }}</span>\n </div>\n</section>\n\n<mat-tab-group class=\"tabs\" animationDuration=\"0ms\">\n <mat-tab [label]=\"'yuv.app.bpm-management.process.details.history' | translate\">\n <ng-template matTabContent>\n <div class=\"tab-content timeline-tab\">\n <ol class=\"timeline\">\n <li class=\"timeline__item\">\n <div class=\"timeline__when\">{{ process().startTime | formatDateTime }}</div>\n <div class=\"timeline__rail\"><span class=\"timeline__dot timeline__dot--start\"><mat-icon aria-hidden=\"true\">play_arrow</mat-icon></span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\"><strong>{{ 'yuv.app.bpm-management.process.details.started' | translate }}</strong></div>\n <div class=\"timeline__people\">\n <yuv-organization-renderer propertyName=\"user\" [value]=\"process().startUserId ?? null\"></yuv-organization-renderer>\n </div>\n </div>\n </li>\n @for (task of shownTasks(); track task.id) {\n <li class=\"timeline__item\">\n <div class=\"timeline__when\">{{ (task.endTime ?? task.createTime) | formatDateTime }}</div>\n <div class=\"timeline__rail\"><span class=\"timeline__dot\" [class.timeline__dot--done]=\"task.endTime\" [class.timeline__dot--suspended]=\"!task.endTime && task.suspended\">\n @if (task.endTime) {\n <mat-icon aria-hidden=\"true\">check</mat-icon>\n } @else if (task.suspended) {\n <mat-icon aria-hidden=\"true\">pause</mat-icon>\n }\n </span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\">\n <a class=\"link timeline__task\" tabindex=\"0\" role=\"link\"\n [attr.aria-label]=\"('yuv.app.bpm-management.task.open' | translate) + ': ' + (task.name || '')\"\n (click)=\"openTask.emit(task.id)\" (keydown.enter)=\"openTask.emit(task.id)\">\n <strong>{{ task.name || '<unnamed>' }}</strong>\n </a>\n <ymt-badge class=\"timeline__state\" [aura]=\"true\" [severity]=\"taskSeverity(task)\">\n {{ taskStatusLabel(task) | translate }}\n </ymt-badge>\n </div>\n @if (task.description) {\n <p class=\"timeline__description\">{{ task.description }}</p>\n }\n @if (task.claimTime || task.dueDate) {\n <dl class=\"timeline__life\">\n @if (task.claimTime) {\n <div>\n <dt>{{ 'yuv.app.bpm-management.task.details.claimTime' | translate }}</dt>\n <dd>{{ task.claimTime | formatDateTime }}</dd>\n </div>\n }\n @if (task.dueDate) {\n <div>\n <dt>{{ 'yuv.app.bpm-management.task.details.dueDate' | translate }}</dt>\n <dd>{{ task.dueDate | formatDateTime }}</dd>\n </div>\n }\n </dl>\n }\n @if (task.assignee || task.owner) {\n <div class=\"timeline__people\">\n @if (task.assignee) {\n <yuv-organization-renderer propertyName=\"user\" [value]=\"task.assignee ?? null\"></yuv-organization-renderer>\n }\n @if (task.owner) {\n <span class=\"timeline__label\">{{ 'yuv.app.bpm-management.task.details.owner' | translate }}</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"task.owner ?? null\"></yuv-organization-renderer>\n }\n </div>\n }\n <!-- a suspended task has no meaningful running time: the suspension is not part of the data -->\n @if (task.endTime || !task.suspended) {\n <div class=\"timeline__foot\">\n {{ (task.endTime ? 'yuv.app.bpm-management.process.details.took' : 'yuv.app.bpm-management.process.details.openFor') | translate: { duration: duration(task.createTime, task.endTime) } }}\n </div>\n }\n </div>\n </li>\n }\n @if (process().endTime) {\n <li class=\"timeline__item\">\n <div class=\"timeline__when\">{{ process().endTime | formatDateTime }}</div>\n <div class=\"timeline__rail\"><span class=\"timeline__dot\" [class.timeline__dot--done]=\"!process().deleteReason\" [class.timeline__dot--canceled]=\"process().deleteReason\">\n <mat-icon aria-hidden=\"true\">{{ process().deleteReason ? 'close' : 'check' }}</mat-icon>\n </span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\">\n <strong>{{ (process().deleteReason ? 'yuv.app.bpm-management.process.details.canceled' : 'yuv.app.bpm-management.process.details.completed') | translate }}</strong>\n </div>\n @if (process().deleteReason) {\n <p class=\"timeline__description\">{{ process().deleteReason }}</p>\n }\n <div class=\"timeline__foot\">{{ 'yuv.app.bpm-management.process.details.took' | translate: { duration: duration(process().startTime, process().endTime) } }}</div>\n </div>\n </li>\n } @else {\n <li class=\"timeline__item\">\n <div class=\"timeline__when\"></div>\n @if (process().suspended) {\n <!-- the time of the suspension is not part of the data, so no running time is shown -->\n <div class=\"timeline__rail\"><span class=\"timeline__dot timeline__dot--suspended\"><mat-icon aria-hidden=\"true\">pause</mat-icon></span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\">\n <strong>{{ 'yuv.app.bpm-management.status.suspended' | translate }}</strong>\n </div>\n </div>\n } @else {\n <div class=\"timeline__rail\"><span class=\"timeline__dot timeline__dot--now\"><mat-icon aria-hidden=\"true\">{{ processStatusIcon(process()) }}</mat-icon></span></div>\n <div class=\"timeline__card\">\n <div class=\"timeline__head\">\n <strong>{{ 'yuv.app.bpm-management.process.details.running' | translate }}</strong>\n <ymt-badge severity=\"primary\">{{ duration(process().startTime) }}</ymt-badge>\n </div>\n </div>\n }\n </li>\n }\n </ol>\n </div>\n </ng-template>\n </mat-tab>\n <mat-tab [label]=\"'yuv.app.bpm-management.details.variables' | translate\">\n <ng-template matTabContent>\n <div class=\"tab-content\">\n @if (!process().variables?.length) {\n <p class=\"empty\">{{ 'yuv.app.bpm-management.emptyResult' | translate }}</p>\n } @else {\n <input class=\"variables__filter\" type=\"search\"\n [attr.aria-label]=\"'yuv.app.bpm-management.details.variableFilter' | translate\"\n [placeholder]=\"'yuv.app.bpm-management.details.variableFilter' | translate\"\n (input)=\"variableFilter.set($any($event.target).value)\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'yuv.app.bpm-management.details.variableName' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.details.variableType' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.details.variableValue' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n @for (variable of variables(); track variable.name) {\n <tr>\n <td class=\"mono\">{{ variable.name }}</td>\n <td>{{ variable.type }}</td>\n <td class=\"mono\">{{ variable.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n }\n </div>\n </ng-template>\n </mat-tab>\n</mat-tab-group>\n","import { Component, input, signal, inject } from '@angular/core';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { APP_ICONS, TaskInstance, formatDateTime, TaskAssignmentHistoryEntry } from '../../bpm-management.schema';\nimport { CommonModule } from '@angular/common';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\n\n@Component({\n selector: 'ymbpm-editor-history',\n standalone: true,\n imports: [\n CommonModule,\n MatCardModule,\n MatProgressSpinnerModule,\n MatButtonModule,\n MatIconModule,\n MatTooltipModule,\n TranslatePipe,\n OrganizationRendererComponent\n ],\n templateUrl: './editor-history.component.html',\n styleUrl: './editor-history.component.scss'\n})\nexport class EditorHistoryComponent {\n readonly translateService = inject(TranslateService);\n\n task = input<TaskInstance | undefined>();\n loading = signal<boolean>(false);\n error = signal<string | undefined>(undefined);\n\n formatDateTime = formatDateTime;\n\n icons = {\n ...APP_ICONS\n };\n\n get candidateUsers(): string[] {\n return this.task()?.identityLinks?.candidates?.users || [];\n }\n\n get candidateRoles(): string[] {\n return this.task()?.identityLinks?.candidates?.roles || [];\n }\n\n get assignmentHistory(): TaskAssignmentHistoryEntry[] {\n return this.task()?.identityLinks?.assignmentHistory || [];\n }\n\n getActionIcon(type: string, assignee?: string): string {\n switch (type) {\n case 'ASSIGNMENT':\n return assignee !== null ? 'person_add' : 'person_off';\n case 'DELEGATION':\n return this.icons.delegated;\n case 'RESOLVE':\n return this.icons.resolved;\n default:\n return 'info';\n }\n }\n\n getActionLabel(type: string, assignee?: string): string {\n if (type === 'ASSIGNMENT') {\n return assignee !== null ?\n 'yuv.app.bpm-management.task.details.actionType.assignment'\n : 'yuv.app.bpm-management.task.details.actionType.assignmentRemoved';\n }\n return `yuv.app.bpm-management.task.details.actionType.${type.toLowerCase()}`;\n }\n}\n","<div class=\"editor-history-container\">\n <!-- Candidate Users Section -->\n <div class=\"candidates-section\">\n <h3 class=\"section-title\">\n <mat-icon>person</mat-icon>\n {{ 'yuv.app.bpm-management.task.details.candidateUsers' | translate }}\n </h3>\n @if (candidateUsers.length > 0) {\n <div class=\"candidates-list\">\n @for (user of candidateUsers; track user) {\n <span class=\"candidate-chip\">\n <yuv-organization-renderer propertyName=\"user\" [value]=\"user ?? null\"></yuv-organization-renderer>\n </span>\n }\n </div>\n } @else {\n <p class=\"no-data\">{{ 'yuv.app.bpm-management.task.details.noCandidateUsers' | translate }}</p>\n }\n </div>\n\n <!-- Candidate Roles Section -->\n <div class=\"candidates-section\">\n <h3 class=\"section-title\">\n <mat-icon>group</mat-icon>\n {{ 'yuv.app.bpm-management.task.details.candidateRoles' | translate }}\n </h3>\n @if (candidateRoles.length > 0) {\n <div class=\"candidates-list\">\n @for (role of candidateRoles; track role) {\n <span class=\"candidate-chip\">\n <mat-icon>group</mat-icon>\n {{ role }}\n </span>\n }\n </div>\n } @else {\n <p class=\"no-data\">{{ 'yuv.app.bpm-management.task.details.noCandidateRoles' | translate }}</p>\n }\n </div>\n\n <!-- Assignment History Section -->\n <div class=\"history-section\">\n <h3 class=\"section-title\">\n <mat-icon>history</mat-icon>\n {{ 'yuv.app.bpm-management.task.details.assignmentHistory' | translate }}\n </h3>\n \n @if (assignmentHistory.length === 0) {\n <p class=\"no-data\">{{ 'yuv.app.bpm-management.task.details.noAssignmentHistory' | translate }}</p>\n } @else {\n <div class=\"timeline-container\" [ngClass]=\"{singleEntry: assignmentHistory.length === 1}\">\n @for (entry of assignmentHistory; track entry.timestamp) {\n <div class=\"timeline-item\">\n <div class=\"timeline-datetime\">\n <div class=\"date\">{{ formatDateTime(entry.timestamp, translateService.currentLang, 'date') }}</div>\n <div class=\"time\">{{ formatDateTime(entry.timestamp, translateService.currentLang, 'time') }}</div>\n </div>\n \n <div class=\"timeline-line\"></div>\n \n <div class=\"timeline-content\">\n <div class=\"history-card\">\n <div class=\"action-header\">\n <mat-icon class=\"action-icon\">{{ getActionIcon(entry.type, entry.assignee) }}</mat-icon>\n <span class=\"action-label\">{{ getActionLabel(entry.type, entry.assignee) | translate }}</span>\n </div>\n @if (entry.assignee) {\n <div class=\"assignee-info\">\n <span class=\"label\">{{ 'yuv.app.bpm-management.task.details.assignee' | translate }}:</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"entry.assignee ?? null\"></yuv-organization-renderer>\n </div>\n }\n @if (entry.owner && entry.type !== 'RESOLVE') {\n <div class=\"assignee-info\">\n <span class=\"label\">{{ 'yuv.app.bpm-management.task.details.owner' | translate }}:</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"entry.owner ?? null\"></yuv-organization-renderer>\n </div>\n }\n </div>\n </div>\n </div>\n }\n </div>\n }\n </div>\n</div>\n","import { ChangeDetectionStrategy, Component, input, output } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { TaskInstance } from '../../../bpm-management.schema';\nimport { FormatDateTimePipe } from '../../../pipes/format-date-time.pipe';\nimport { EditorHistoryComponent } from '../../editor-history/editor-history.component';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\n\n/**\n * Task details: all properties once in the facts block, then tabs for the assignment (candidates +\n * history) and the variables (if the task has any).\n * Actions (assign, unassign, candidates) live in the pane header of the page.\n */\n@Component({\n selector: 'ymbpm-task-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconModule, MatTabsModule, MatTooltipModule, TranslatePipe, FormatDateTimePipe, OrganizationRendererComponent, EditorHistoryComponent],\n templateUrl: './task-details.component.html',\n styleUrl: './task-details.component.scss'\n})\nexport class TaskDetailsComponent {\n task = input.required<TaskInstance>();\n openProcess = output<string>();\n}\n","<section class=\"facts\">\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.processInstanceId' | translate }}</span>\n @if (task().processInstanceId; as processId) {\n <a class=\"link mono\" tabindex=\"0\" role=\"link\" [matTooltip]=\"task().processInstanceName || ''\" (click)=\"openProcess.emit(processId)\" (keydown.enter)=\"openProcess.emit(processId)\">\n {{ processId }}<mat-icon>arrow_forward</mat-icon>\n </a>\n } @else {\n <span [matTooltip]=\"'yuv.app.bpm-management.task.details.standaloneTask.tooltip' | translate\">- <mat-icon class=\"inline\">info</mat-icon></span>\n }\n </div>\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.taskDefinitionKey' | translate }}</span>\n <span class=\"mono\">{{ task().taskDefinitionKey }}</span>\n </div>\n <div class=\"fact-row\">\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.createTime' | translate }}</span>\n <span>{{ task().createTime | formatDateTime }}</span>\n </div>\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.dueDate' | translate }}</span>\n <span>{{ (task().dueDate | formatDateTime) || '-' }}</span>\n </div>\n @if (task().endTime) {\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.column.endTime' | translate }}</span>\n <span>{{ task().endTime | formatDateTime }}</span>\n </div>\n }\n </div>\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.assignee' | translate }}</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"task().assignee ?? null\"></yuv-organization-renderer>\n </div>\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.owner' | translate }}</span>\n <yuv-organization-renderer propertyName=\"user\" [value]=\"task().owner ?? null\"></yuv-organization-renderer>\n </div>\n @if (task().claimTime) {\n <div class=\"fact\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.claimTime' | translate }}</span>\n <span>{{ task().claimTime | formatDateTime }}</span>\n </div>\n }\n @if (task().description) {\n <div class=\"fact fact--wide\">\n <span class=\"fact__label\">{{ 'yuv.app.bpm-management.task.details.description' | translate }}</span>\n <span>{{ task().description }}</span>\n </div>\n }\n</section>\n\n<mat-tab-group class=\"tabs\" animationDuration=\"0ms\">\n <mat-tab [label]=\"'yuv.app.bpm-management.task.assignment' | translate\">\n <ng-template matTabContent>\n <div class=\"tab-content\">\n <ymbpm-editor-history [task]=\"task()\"></ymbpm-editor-history>\n </div>\n </ng-template>\n </mat-tab>\n @if (task().variables?.length) {\n <mat-tab [label]=\"'yuv.app.bpm-management.details.variables' | translate\">\n <ng-template matTabContent>\n <div class=\"tab-content\">\n <table class=\"table\">\n <thead>\n <tr>\n <th>{{ 'yuv.app.bpm-management.details.variableName' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.details.variableType' | translate }}</th>\n <th>{{ 'yuv.app.bpm-management.details.variableValue' | translate }}</th>\n </tr>\n </thead>\n <tbody>\n @for (variable of task().variables; track variable.name) {\n <tr>\n <td class=\"mono\">{{ variable.name }}</td>\n <td>{{ variable.type }}</td>\n <td class=\"mono\">{{ variable.value }}</td>\n </tr>\n }\n </tbody>\n </table>\n </div>\n </ng-template>\n </mat-tab>\n }\n</mat-tab-group>\n","import { ChangeDetectionStrategy, Component, computed, inject, input, output, TemplateRef } from '@angular/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { TranslatePipe } from '@yuuvis/client-core';\nimport { YmtIconButtonDirective } from '@yuuvis/material';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\nimport { Observable } from 'rxjs';\nimport { BpmManagementActionsService, BpmReloadScope } from '../../../bpm-management-actions.service';\nimport {\n APP_ICONS,\n BPM_ENTITY_META,\n BpmEntity,\n BpmItem,\n definitionScope,\n definitionSeverity,\n definitionStatusLabel,\n DeploymentInstance,\n ProcessDefinitionInstance,\n ProcessInstance,\n processSeverity,\n processStatusIcon,\n processStatusLabel,\n TaskInstance,\n taskSeverity,\n taskStatusIcon,\n taskStatusLabel\n} from '../../../bpm-management.schema';\nimport { DeploymentDetailsComponent } from '../../../components/details/deployment-details/deployment-details.component';\nimport { ProcessDefinitionDetailsComponent, ShowProcessesRequest } from '../../../components/details/process-definition-details/process-definition-details.component';\nimport { ProcessDetailsComponent } from '../../../components/details/process-details/process-details.component';\nimport { TaskDetailsComponent } from '../../../components/details/task-details/task-details.component';\n\n/**\n * The details pane of the selected deployment, process definition, process or task. Owns the\n * header (title, status badges) and the actions of the item, the content is rendered by the\n * component of the entity.\n */\n@Component({\n selector: 'ymbpm-details',\n standalone: true,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [\n MatIconModule,\n TranslatePipe,\n YmtPanesModule,\n YmtBadge,\n YmtIconButtonDirective,\n MatTooltipModule,\n DeploymentDetailsComponent,\n ProcessDefinitionDetailsComponent,\n ProcessDetailsComponent,\n TaskDetailsComponent\n ],\n templateUrl: './details.component.html',\n styleUrl: './details.component.scss'\n})\nexport class DetailsComponent {\n readonly actions = inject(BpmManagementActionsService);\n\n readonly icons = { ...APP_ICONS };\n readonly definitionScope = definitionScope;\n readonly processSeverity = processSeverity;\n readonly processStatusIcon = processStatusIcon;\n readonly processStatusLabel = processStatusLabel;\n readonly taskSeverity = taskSeverity;\n readonly taskStatusIcon = taskStatusIcon;\n readonly taskStatusLabel = taskStatusLabel;\n readonly definitionSeverity = definitionSeverity;\n readonly definitionStatusLabel = definitionStatusLabel;\n\n entity = input.required<BpmEntity>();\n detail = input<BpmItem | undefined>();\n /** The row of the item in the list, which has the status long before the details (with statistics) are loaded. */\n listItem = input<BpmItem | undefined>();\n /** Tasks of the selected process. */\n processTasks = input<TaskInstance[]>([]);\n busy = input(false);\n error = input(false);\n selectedId = input<string | null>(null);\n /** Whether the process definitions / deployments are enabled, so they can be linked. */\n canOpenDefinition = input(false);\n canOpenDeployment = input(false);\n topBarActions = input<TemplateRef<unknown>>();\n\n /** An action changed the item, the owner has to reload (the list too, if it shows what changed). */\n changed = output<BpmReloadScope>();\n openItem = output<{ entity: BpmEntity; id: string }>();\n showProcesses = output<ShowProcessesRequest>();\n\n readonly deployment = computed(() => (this.entity() === 'deployments' ? (this.detail() as DeploymentInstance | undefined) : undefined));\n readonly definition = computed(() => (this.entity() === 'definitions' ? (this.detail() as ProcessDefinitionInstance | undefined) : undefined));\n /** The definition the actions are for: the list row is there at once and is reloaded first after an action. */\n readonly actionDefinition = computed(() => {\n if (this.entity() !== 'definitions') return undefined;\n return (this.listItem() ?? this.detail()) as ProcessDefinitionInstance | undefined;\n });\n readonly process = computed(() => (this.entity() === 'processes' ? (this.detail() as ProcessInstance | undefined) : undefined));\n readonly task = computed(() => (this.entity() === 'tasks' ? (this.detail() as TaskInstance | undefined) : undefined));\n\n readonly headerIcon = computed(() => BPM_ENTITY_META[this.entity()].itemIcon);\n readonly headerTitle = computed(() => {\n const item = this.detail();\n return item ? item.name || '<unnamed>' : '';\n });\n readonly headerSubtitle = computed(() => this.detail()?.id ?? '');\n\n /** Runs an action of the header (it asks and notifies itself), the owner reloads what changed. */\n run(action: Observable<BpmReloadScope>): void {\n action.subscribe(scope => this.changed.emit(scope));\n }\n}\n","<ymt-pane\n [busy]=\"busy()\"\n [topBarActions]=\"topBarActions()\"\n role=\"region\"\n [attr.aria-label]=\"'yuv.app.bpm-management.details.aria' | translate\"\n>\n <ymt-pane-header\n [icon]=\"headerTitle() ? headerIcon() : undefined\"\n [title]=\"headerTitle()\"\n [subtitle]=\"headerSubtitle()\"\n [badges]=\"detail() ? headerBadges : undefined\"\n [actions]=\"task() ? taskActions : actionDefinition() ? definitionActions : process() ? processActions : undefined\"\n ></ymt-pane-header>\n\n <ymt-pane-body>\n @if (error()) {\n <div class=\"empty-state\">\n <span class=\"empty-state-icon\"><mat-icon aria-hidden=\"true\">error_outline</mat-icon></span>\n <p class=\"empty-state-description\">{{ 'yuv.app.bpm-management.details.error' | translate }}</p>\n </div>\n } @else if (deployment(); as deployment) {\n <ymbpm-deployment-details\n [deployment]=\"deployment\"\n [canOpenDefinition]=\"canOpenDefinition()\"\n (openDefinition)=\"openItem.emit({ entity: 'definitions', id: $event })\"\n ></ymbpm-deployment-details>\n } @else if (definition(); as definition) {\n <ymbpm-process-definition-details\n [definition]=\"definition\"\n [canOpenDeployment]=\"canOpenDeployment()\"\n (openDeployment)=\"openItem.emit({ entity: 'deployments', id: $event })\"\n (showProcesses)=\"showProcesses.emit($event)\"\n ></ymbpm-process-definition-details>\n } @else if (process(); as process) {\n <ymbpm-process-details\n [process]=\"process\"\n [tasks]=\"processTasks()\"\n [canOpenDefinition]=\"canOpenDefinition()\"\n (openTask)=\"openItem.emit({ entity: 'tasks', id: $event })\"\n (openDefinition)=\"openItem.emit({ entity: 'definitions', id: $event })\"\n ></ymbpm-process-details>\n } @else if (task(); as task) {\n <ymbpm-task-details\n [task]=\"task\"\n (openProcess)=\"openItem.emit({ entity: 'processes', id: $event })\"\n ></ymbpm-task-details>\n } @else if (!busy() && !selectedId()) {\n <div class=\"empty-state\">\n <span class=\"empty-state-icon\"><mat-icon aria-hidden=\"true\">{{ icons.info }}</mat-icon></span>\n <p class=\"empty-state-description\">{{ 'yuv.app.bpm-management.details.noSelection.label' | translate }}</p>\n </div>\n }\n </ymt-pane-body>\n</ymt-pane>\n\n<!-- header: status badges -->\n<ng-template #headerBadges>\n @if (process(); as p) {\n <ymt-badge [aura]=\"true\" [severity]=\"processSeverity(p)\"><mat-icon>{{ processStatusIcon(p) }}</mat-icon>{{ processStatusLabel(p) | translate }}</ymt-badge>\n } @else if (task(); as t) {\n <ymt-badge [aura]=\"true\" [severity]=\"taskSeverity(t)\"><mat-icon>{{ taskStatusIcon(t) }}</mat-icon>{{ taskStatusLabel(t) | translate }}</ymt-badge>\n @if (t.delegationState) {\n <ymt-badge [aura]=\"true\" [outline]=\"true\" [severity]=\"t.delegationState === 'pending' ? 'warning' : 'success'\">\n {{ (t.delegationState === 'pending' ? 'yuv.app.bpm-management.task.delegationState.pending' : 'yuv.app.bpm-management.task.delegationState.resolved') | translate }}\n </ymt-badge>\n }\n } @else if (definition(); as d) {\n <!-- the scope, global or private, with the symbol the list row shows -->\n @let scope = definitionScope(d);\n <ymt-badge [outline]=\"true\">\n <mat-icon>{{ icons[scope.icon] }}</mat-icon>{{ scope.label | translate }}\n </ymt-badge>\n <ymt-badge [aura]=\"true\" [severity]=\"definitionSeverity(d)\">{{ definitionStatusLabel(d) | translate }}</ymt-badge>\n }\n</ng-template>\n\n<!-- header: one button switches the status of a definition (it offers what is not the case yet); global definitions are shared and cannot be changed, so they get no button -->\n<ng-template #definitionActions>\n @let d = actionDefinition();\n @let action = d ? actions.definitionAction(d) : undefined;\n @if (d && action) {\n @let label = ('yuv.app.bpm-management.definitions.actions.' + action + '.label') | translate;\n <button ymt-icon-button [matTooltip]=\"label\" [attr.aria-label]=\"label\" (click)=\"run(actions.changeDefinitionStatus(d, action))\">\n <mat-icon>{{ icons[action] }}</mat-icon>\n </button>\n }\n</ng-template>\n\n<!-- header: one button switches a running process between suspended and active; ended processes have no actions -->\n<ng-template #processActions>\n @let p = process();\n @let action = p ? actions.processAction(p) : undefined;\n @if (p && action) {\n @let label = ('yuv.app.bpm-management.process.actions.' + action + '.label') | translate;\n <button ymt-icon-button [matTooltip]=\"label\" [attr.aria-label]=\"label\" (click)=\"run(actions.changeProcessStatus(p, action))\">\n <mat-icon>{{ icons[action] }}</mat-icon>\n </button>\n }\n</ng-template>\n\n<!-- header: actions are visible buttons instead of an overflow menu -->\n<ng-template #taskActions>\n @let t = task();\n @if (t && actions.hasTaskActions(t)) {\n @let assignLabel = 'yuv.app.bpm-management.task.actions.assign.label' | translate;\n @let unassignLabel = 'yuv.app.bpm-management.task.actions.unassign.label' | translate;\n @let candidatesLabel = 'yuv.app.bpm-management.task.actions.editCandidates.label' | translate;\n <button ymt-icon-button [matTooltip]=\"assignLabel\" [attr.aria-label]=\"assignLabel\" (click)=\"run(actions.assignTask(t))\">\n <mat-icon>{{ icons.assign }}</mat-icon>\n </button>\n <button ymt-icon-button [disabled]=\"!actions.canUnassign(t)\" [matTooltip]=\"unassignLabel\" [attr.aria-label]=\"unassignLabel\" (click)=\"run(actions.unassignTask(t))\">\n <mat-icon>{{ icons.unassign }}</mat-icon>\n </button>\n <button ymt-icon-button [matTooltip]=\"candidatesLabel\" [attr.aria-label]=\"candidatesLabel\" (click)=\"run(actions.editTaskCandidates(t))\">\n <mat-icon>{{ icons.editCandidates }}</mat-icon>\n </button>\n }\n</ng-template>\n","import { Clipboard } from '@angular/cdk/clipboard';\nimport { afterRenderEffect, Component, computed, effect, ElementRef, inject, OnInit, signal, untracked, viewChild, viewChildren } from '@angular/core';\nimport { toSignal } from '@angular/core/rxjs-interop';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule, MatMenuTrigger } from '@angular/material/menu';\nimport { MatPaginatorModule, PageEvent } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { Title } from '@angular/platform-browser';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ListComponent, YuvListModule } from '@yuuvis/client-components/list';\nimport { YuvSplitViewModule } from '@yuuvis/client-components/split-view';\nimport { Logger, NotificationService, SearchQuery, TranslatePipe, TranslateService } from '@yuuvis/client-core';\nimport { SimpleSearchComponent } from '@yuuvis/client-framework/simple-search';\nimport { YuvClientShellModule } from '@yuuvis/client-shell';\nimport { ShellService } from '@yuuvis/client-shell-core';\nimport { YmtButtonDirective, YmtIconButtonDirective } from '@yuuvis/material';\nimport { YmtBadge } from '@yuuvis/material/badge';\nimport { YmtPanesModule } from '@yuuvis/material/panes';\nimport { catchError, finalize, forkJoin, map, Observable, of, Subscription } from 'rxjs';\nimport { BpmManagementActionsService, BpmReloadScope } from '../bpm-management-actions.service';\nimport { DeploymentFilter, ProcessDefinitionFilter, ProcessFilter, TaskFilter } from '../bpm-filter';\nimport { enabledEntities, isDeploymentsEnabled, isProcessDefinitionsEnabled, resolveAppConfig } from '../bpm-management.config';\nimport {\n APP_ICONS,\n APP_ID,\n BPM_ENTITY_META,\n BpmEntity,\n BpmItem,\n Column,\n ColumnFilter,\n definitionScope,\n definitionSeverity,\n definitionStatusLabel,\n DeploymentInstance,\n FILTER_OPERATORS,\n FILTER_TYPES,\n FilterValue,\n ProcessDefinitionInstance,\n ProcessDefinitionScope,\n ProcessDefinitionStatus,\n ProcessInstance,\n processSeverity,\n processStatusLabel,\n ProcessStatus,\n TableFilters,\n TaskInstance,\n taskSeverity,\n taskStatusLabel,\n TaskStatus\n} from '../bpm-management.schema';\nimport { YuvBpmManagementService } from '../bpm-management.service';\nimport { ShowProcessesRequest } from '../components/details/process-definition-details/process-definition-details.component';\nimport { BpmManagementStateService, initialView, PAGE_SIZE_OPTIONS, QuickFilter, SortBy, SortOrder, ViewState } from '../bpm-management.state';\nimport { EntitySwitchComponent } from '../components/entity-switch/entity-switch.component';\nimport { FilterBarComponent } from '../components/filters/filter-bar/filter-bar.component';\nimport { PaneGutterComponent } from '../components/pane-gutter/pane-gutter.component';\nimport { PaneToggleButtonComponent } from '../components/pane-toggle-button/pane-toggle-button.component';\nimport { OrganizationRendererComponent } from '@yuuvis/client-framework/renderer';\nimport { FormatDateTimePipe } from '../pipes/format-date-time.pipe';\nimport { DetailsComponent } from './areas/details/details.component';\n\n/**\n * Deployments, process definitions, processes and tasks in one master/details page. The entity\n * is selected by the route (the same paths the former tabs used), the selected item and the way\n * the user got there by the query param `id`, so every state is a deep link.\n */\n@Component({\n selector: 'ymbpm-root',\n standalone: true,\n imports: [\n MatButtonToggleModule,\n MatDividerModule,\n MatIconModule,\n MatMenuModule,\n MatPaginatorModule,\n MatTooltipModule,\n TranslatePipe,\n YuvClientShellModule,\n SimpleSearchComponent,\n YuvListModule,\n YuvSplitViewModule,\n YmtPanesModule,\n YmtBadge,\n YmtButtonDirective,\n YmtIconButtonDirective,\n FormatDateTimePipe,\n OrganizationRendererComponent,\n PaneGutterComponent,\n PaneToggleButtonComponent,\n EntitySwitchComponent,\n FilterBarComponent,\n DetailsComponent\n ],\n templateUrl: './bpm-management.component.html',\n styleUrl: './bpm-management.component.scss'\n})\nexport class YuvBpmManagementComponent implements OnInit {\n readonly layoutSettingsID = APP_ID + '#root.layout.settings';\n readonly pageSizeOptions = PAGE_SIZE_OPTIONS;\n /** The fields the backend can sort each entity by (entities without an entry are not sortable). */\n readonly #sortFieldsByEntity: Partial<Record<BpmEntity, { value: SortBy; label: string }[]>> = {\n deployments: [sortField('name'), sortField('deployTime')],\n definitions: [sortField('name'), sortField('key')],\n processes: [sortField('name'), sortField('startTime'), sortField('endTime'), sortField('definitionKey'), sortField('businessKey')],\n tasks: [sortField('name'), sortField('createTime'), sortField('dueDate')]\n };\n readonly sortFields = computed(() => this.#sortFieldsByEntity[this.entity()] ?? []);\n readonly sortOrders: { value: SortOrder; label: string }[] = [\n { value: 'asc', label: 'yuv.sort.ascending' },\n { value: 'desc', label: 'yuv.sort.descending' }\n ];\n /** `yuv-split-view` area indices, so the top bar buttons can hide/show the panes. */\n readonly Area = { MASTER: 0, DETAILS: 1 } as const;\n readonly icons = { ...APP_ICONS };\n readonly ENTITY_META = BPM_ENTITY_META;\n readonly definitionScope = definitionScope;\n readonly processSeverity = processSeverity;\n readonly processStatusLabel = processStatusLabel;\n readonly taskSeverity = taskSeverity;\n readonly taskStatusLabel = taskStatusLabel;\n readonly definitionSeverity = definitionSeverity;\n readonly definitionStatusLabel = definitionStatusLabel;\n\n readonly #shell = inject(ShellService);\n readonly #titleService = inject(Title);\n readonly #route = inject(ActivatedRoute);\n readonly #router = inject(Router);\n readonly #service = inject(YuvBpmManagementService);\n readonly #translate = inject(TranslateService);\n readonly #logger = inject(Logger);\n readonly #state = inject(BpmManagementStateService);\n readonly #host = inject<ElementRef<HTMLElement>>(ElementRef);\n readonly #clipboard = inject(Clipboard);\n readonly #notifications = inject(NotificationService);\n /** The actions of the row menu (the same the details header offers). */\n readonly actions = inject(BpmManagementActionsService);\n\n // the same app may be registered several times, so use the entry this route was loaded through\n readonly #appConfig = resolveAppConfig(this.#route.snapshot);\n readonly #app = this.#shell.getApp(this.#appConfig.appId ?? APP_ID);\n readonly appName = this.#app?.title as string;\n\n /** The chips of the active filters; the \"add filter\" menu of the pane header adds to them. */\n readonly filterBar = viewChild(FilterBarComponent);\n private readonly list = viewChild(ListComponent);\n /** The ⋮ of every row, in the order of `items`. */\n private readonly rowMenuTriggers = viewChildren('rowMenuTrigger', { read: MatMenuTrigger });\n\n /** Deployments and process definitions are optional, the host shell client enables them. */\n readonly deploymentsEnabled = isDeploymentsEnabled(this.#route.snapshot);\n readonly definitionsEnabled = isProcessDefinitionsEnabled(this.#route.snapshot);\n readonly availableEntities = enabledEntities(this.#route.snapshot);\n\n // ---- routing state -------------------------------------------------------------------------\n readonly entity = toSignal(this.#route.data.pipe(map(d => d['entity'] as BpmEntity)), { initialValue: 'processes' as BpmEntity });\n readonly selectedId = toSignal(this.#route.queryParamMap.pipe(map(p => p.get('id'))), { initialValue: null });\n /** The search term lives in the URL (`?search=`), so links and browser back/forward restore it. */\n readonly searchTerm = toSignal(this.#route.queryParamMap.pipe(map(p => p.get('search') ?? '')), { initialValue: '' });\n\n // ---- list state (kept per entity, so switching back restores the filters) --------------------\n readonly views = this.#state.views;\n readonly view = computed(() => this.views()[this.entity()]);\n readonly items = signal<BpmItem[]>([]);\n /** The list row of the selected item: it is there before the details are, and a reload of the list is quick. */\n readonly selectedItem = computed(() => this.items().find(i => i.id === this.selectedId()));\n readonly total = signal(0);\n readonly busy = signal(false);\n\n readonly searchQuery = computed<SearchQuery>(() => ({ term: this.searchTerm() }));\n readonly quickFilters = computed(() => QUICK_FILTERS[this.entity()]);\n readonly filterColumns = computed(() => this.#columns[this.entity()]);\n /**\n * \"Latest versions only\" is a checkable option of the filter menu, not a filter criterion: it has\n * no chip, and clearing the filters never changes it.\n */\n readonly showLatestOnly = computed(() => this.entity() === 'definitions');\n readonly hasActiveFilters = computed(() => {\n const v = this.view();\n const initial = initialView(this.entity());\n return !!this.searchTerm() || Object.keys(v.advanced).length > 0 || v.quick !== initial.quick;\n });\n\n // ---- details state -------------------------------------------------------------------------\n readonly detail = signal<BpmItem | undefined>(undefined);\n readonly processTasks = signal<TaskInstance[]>([]);\n readonly detailsBusy = signal(false);\n readonly detailsError = signal(false);\n\n #listSub?: Subscription;\n #detailSub?: Subscription;\n #detailKey: string | null = null;\n /** Whether the list was loaded once (the component shows one entity, every entity has its own route). */\n #landed = false;\n\n constructor() {\n effect(() => {\n const entity = this.entity();\n const view = this.view();\n const search = this.searchTerm();\n // a changed view of the already shown entity (not landing on it) may drop the selected item\n untracked(() => this.#loadList(entity, view, search, this.#landed ? 'change' : 'landing'));\n });\n effect(() => {\n const entity = this.entity();\n const id = this.selectedId();\n untracked(() => this.#loadDetails(entity, id));\n });\n // bring the selected row into view once it is rendered (a link or a reload can select a row\n // below the fold); `nearest` leaves a row that is already visible where it is\n afterRenderEffect(() => {\n const id = this.selectedId();\n if (!this.items().length || !id) return;\n this.#host.nativeElement.querySelector<HTMLElement>(`yuv-list [data-item-id=\"${CSS.escape(id)}\"]`)?.scrollIntoView({ block: 'nearest' });\n });\n }\n\n ngOnInit() {\n // set the browser tab title localized\n const translatedTitle = this.appName.startsWith('yuv.') ? this.#translate.instant(this.appName) : this.appName;\n this.#titleService.setTitle(translatedTitle);\n }\n\n // ---- list ----------------------------------------------------------------------------------\n patchView(patch: Partial<ViewState>, resetPage = true): void {\n const entity = this.entity();\n this.views.update(v => ({ ...v, [entity]: { ...v[entity], ...patch, ...(resetPage ? { page: 0 } : {}) } }));\n }\n\n /** Search term submitted in the app header (Enter / search button / clear). */\n onQueryChange(query: SearchQuery): void {\n const term = (query.term ?? '').trim();\n if (term !== this.searchTerm()) {\n this.#router.navigate([], { relativeTo: this.#route, queryParams: { search: term || null }, queryParamsHandling: 'merge' });\n }\n }\n\n onQuick(value: QuickFilter | undefined): void {\n this.patchView({ quick: value ?? 'all' });\n }\n\n onAdvancedFilters(filters: TableFilters): void {\n this.patchView({ advanced: filters });\n }\n\n toggleLatestOnly(): void {\n this.patchView({ latestOnly: !this.view().latestOnly });\n }\n\n onChangePage(event: PageEvent): void {\n if (event.pageSize !== this.view().pageSize) {\n // a different page size shifts what \"page N\" means - restart from the first page\n this.#state.savePageSize(event.pageSize);\n } else {\n this.patchView({ page: event.pageIndex }, false);\n }\n }\n\n clearFilters(): void {\n // the checkable options of the filter menu stay as they are\n const { quick } = initialView(this.entity());\n this.patchView({ advanced: {}, quick });\n // the search term is applied from the URL, so it is cleared there\n this.onQueryChange({ term: '' });\n }\n\n /** Reloads after an action of the details pane; the list only if it shows what changed. */\n onDetailsChanged(scope: BpmReloadScope): void {\n if (scope === 'both') {\n this.#loadList(this.entity(), this.view(), this.searchTerm());\n }\n this.#loadDetails(this.entity(), this.selectedId());\n }\n\n /** Selection follows the active item (arrow keys and clicks). */\n onItemFocus(index: number): void {\n const item = this.items()[index];\n if (item && item.id !== this.selectedId()) {\n this.#navigate(this.entity(), item.id, true);\n }\n }\n\n // ---- row menu ------------------------------------------------------------------------------\n /**\n * The context menu key or Shift+F10 on the list opens the menu of the active row. They fire on the\n * list itself (it has the focus, the rows are its active descendants); a right click on a row keeps\n * the menu of the browser.\n */\n onListContextMenu(event: MouseEvent): void {\n if (event.target !== event.currentTarget) return;\n // the selection follows the active row (onItemFocus), so the selected row is the active one\n const index = this.items().findIndex(i => i.id === this.selectedId());\n if (index < 0) return;\n event.preventDefault();\n this.rowMenuTriggers()[index]?.openMenu();\n }\n\n /** The ⋮ cannot take the focus back (it is not focusable), so it goes back to the list. */\n onRowMenuClosed(): void {\n if (!this.#host.nativeElement.contains(document.activeElement)) this.list()?.focus();\n }\n\n /** Runs an action of the row menu: reloads what it changed, then the focus returns to the list. */\n runAction(action: Observable<BpmReloadScope>): void {\n action.pipe(finalize(() => setTimeout(() => this.list()?.focus()))).subscribe(scope => this.onDetailsChanged(scope));\n }\n\n copyId(id: string): void {\n if (this.#clipboard.copy(id)) {\n this.#notifications.success(this.#translate.instant('yuv.app.bpm-management.list.actions.copyId.success'));\n }\n }\n\n switchEntity(entity: BpmEntity): void {\n if (entity !== this.entity()) {\n this.#navigate(entity, null);\n }\n }\n\n // ---- cross navigation ----------------------------------------------------------------------\n /** Opens an item of another entity. */\n openItem(entity: BpmEntity, id: string | null): void {\n this.#navigate(entity, id);\n }\n\n showProcessesOfDefinition({ definitionId, quick }: ShowProcessesRequest): void {\n const filter: FilterValue = { type: FILTER_TYPES.TEXT, operator: FILTER_OPERATORS.EQUALS.value, value: definitionId };\n this.views.update(v => ({ ...v, processes: { ...initialView('processes'), quick, pageSize: v.processes.pageSize, advanced: { processDefinitionId: filter } } }));\n this.openItem('processes', null);\n }\n\n // ---- row presentation (the list is typed loosely, the entity decides which type an item is) -\n /** Process definitions, processes and tasks can be suspended. */\n isSuspended(item: BpmItem): boolean {\n return 'suspended' in item && item.suspended === true;\n }\n\n asDeployment(item: BpmItem): DeploymentInstance {\n return item as DeploymentInstance;\n }\n\n asDefinition(item: BpmItem): ProcessDefinitionInstance {\n return item as ProcessDefinitionInstance;\n }\n\n asProcess(item: BpmItem): ProcessInstance {\n return item as ProcessInstance;\n }\n\n asTask(item: BpmItem): TaskInstance {\n return item as TaskInstance;\n }\n\n // ---- loading -------------------------------------------------------------------------------\n #navigate(entity: BpmEntity, id: string | null, replaceUrl = false): void {\n // the search term belongs to the entity it was entered for: another entity starts without one\n const search = entity === this.entity() ? undefined : null;\n this.#router.navigate(entity === this.entity() ? [] : ['../', entity], {\n relativeTo: this.#route,\n queryParams: { id, ...(search === undefined ? {} : { search }) },\n queryParamsHandling: 'merge',\n replaceUrl\n });\n }\n\n #effectiveFilters(entity: BpmEntity, view: ViewState, search: string): TableFilters {\n const filters: TableFilters = { ...view.advanced };\n if (search) {\n filters['name'] = { type: FILTER_TYPES.TEXT, operator: FILTER_OPERATORS.CONTAINS.value, value: search };\n }\n const status = this.#statusFilter(entity, view.quick);\n if (status) {\n filters['status'] = { type: FILTER_TYPES.SELECT, value: status };\n }\n return filters;\n }\n\n /** The value of the status filter the quick filter stands for (if any). */\n #statusFilter(entity: BpmEntity, quick: QuickFilter): string | undefined {\n switch (entity) {\n case 'processes':\n return quick === 'completed' ? ProcessStatus.COMPLETED.value : quick === 'active' ? ProcessStatus.RUNNING_SUSPENDED.value : undefined;\n case 'tasks':\n return quick === 'completed' ? TaskStatus.COMPLETED.value : quick === 'open' ? TaskStatus.RUNNING.value : undefined;\n case 'definitions':\n return quick === 'active' ? ProcessDefinitionStatus.ACTIVE.value : quick === 'suspended' ? ProcessDefinitionStatus.SUSPENDED.value : undefined;\n default:\n return undefined;\n }\n }\n\n #listRequest(entity: BpmEntity, view: ViewState, search: string): Observable<{ objects: BpmItem[]; totalNumItems: number }> {\n const filters = this.#effectiveFilters(entity, view, search);\n switch (entity) {\n case 'deployments':\n return this.#service.getDeployments(view.page, view.pageSize, DeploymentFilter.fromAgFilterModel(filters), { by: view.sortBy, order: view.sortOrder });\n case 'definitions': {\n const filter = ProcessDefinitionFilter.fromAgFilterModel(filters);\n filter.latest = { value: view.latestOnly, type: FILTER_TYPES.CHECKBOX };\n return this.#service.getProcessDefinitions(view.page, view.pageSize, filter, { by: view.sortBy, order: view.sortOrder });\n }\n case 'processes':\n return this.#service.getProcesses(view.page, view.pageSize, ProcessFilter.fromAgFilterModel(filters, this.#translate), {\n by: view.sortBy === 'definitionKey' ? 'processDefinitionKey' : view.sortBy,\n order: view.sortOrder\n });\n case 'tasks':\n return this.#service.getTasks(view.page, view.pageSize, TaskFilter.fromAgFilterModel(filters, this.#translate), { by: view.sortBy, order: view.sortOrder });\n }\n }\n\n /**\n * @param mode `landing`: the entity was just opened. A linked item (`id`) that is not in the list\n * gets an id filter, so it shows up in the list. `change`: the view of the shown entity changed, a\n * selected item that is not part of the result any more gives way to the first one. `reload`: after\n * an action, nothing about the selection changes.\n */\n #loadList(entity: BpmEntity, view: ViewState, search: string, mode: 'landing' | 'change' | 'reload' = 'reload'): void {\n this.#listSub?.unsubscribe();\n this.busy.set(true);\n this.#listSub = this.#listRequest(entity, view, search).subscribe({\n next: response => {\n this.items.set(response.objects);\n this.total.set(response.totalNumItems);\n this.busy.set(false);\n this.#landed = true;\n const selectedId = this.selectedId();\n const listed = !!selectedId && response.objects.some(o => o.id === selectedId);\n if (selectedId && !listed && mode === 'landing' && !view.advanced['id']) {\n // the linked item is not in the list (e.g. beyond the first page): filter by its id. An older\n // version of a definition is hidden by \"latest only\", so that is switched off for the link.\n const id: FilterValue = { type: FILTER_TYPES.TEXT, operator: FILTER_OPERATORS.EQUALS.value, value: selectedId };\n this.patchView({ advanced: { ...view.advanced, id }, ...(entity === 'definitions' ? { latestOnly: false } : {}) });\n return;\n }\n // landing without a requested item selects the first one (replacing the history entry, so back still leaves the view)\n const first = response.objects[0];\n if (first && (!selectedId || (mode === 'change' && !listed))) {\n this.#navigate(entity, first.id, true);\n }\n },\n error: (e: unknown) => {\n this.#logger.error(`Failed to fetch ${entity}`, e);\n this.busy.set(false);\n }\n });\n }\n\n #detailRequest(entity: BpmEntity, id: string): Observable<{ item?: BpmItem | null; tasks?: TaskInstance[] }> {\n switch (entity) {\n case 'deployments': {\n const definitionsFilter = new ProcessDefinitionFilter();\n definitionsFilter.deploymentId = { value: id, type: FILTER_TYPES.TEXT };\n definitionsFilter.latest = { value: false, type: FILTER_TYPES.CHECKBOX };\n return forkJoin({\n deployment: this.#service.getDeployment(id),\n resources: this.#service.getDeploymentResources(id).pipe(catchError(() => of([]))),\n definitions: this.#service.getProcessDefinitions(0, 0, definitionsFilter).pipe(catchError(() => of({ objects: [] })))\n }).pipe(\n map(({ deployment, resources, definitions }) => ({\n item: deployment && { ...deployment, resources: resources || [], definitions: definitions?.objects || [] }\n }))\n );\n }\n case 'definitions':\n return this.#service.getProcessDefinition(id).pipe(map(item => ({ item })));\n case 'processes':\n return forkJoin({ process: this.#service.getProcess(id), history: this.#service.getProcessHistory(id) }).pipe(\n map(({ process, history }) => ({ item: process && this.#withSuspended(process, id), tasks: history?.tasks ?? [] }))\n );\n case 'tasks':\n return this.#service.getTask(id).pipe(map(task => ({ item: task && this.#withSuspended(task, id) })));\n }\n }\n\n /** The detail endpoint may omit the suspended flag - then the list row (which has it) decides. */\n #withSuspended<T extends ProcessInstance | TaskInstance>(item: T, id: string): T {\n if (typeof item.suspended === 'boolean') {\n return item;\n }\n const row = this.items().find(i => i.id === id) as T | undefined;\n return { ...item, suspended: !!row?.suspended };\n }\n\n #loadDetails(entity: BpmEntity, id: string | null): void {\n this.#detailSub?.unsubscribe();\n this.detailsError.set(false);\n const key = id && `${entity}:${id}`;\n if (key !== this.#detailKey) {\n // another item: don't show the previous one while loading (a reload of the same item keeps it)\n this.#detailKey = key;\n this.detail.set(undefined);\n this.processTasks.set([]);\n }\n if (!id) {\n this.detailsBusy.set(false);\n return;\n }\n this.detailsBusy.set(true);\n this.#detailSub = this.#detailRequest(entity, id).subscribe({\n next: ({ item, tasks }) => {\n this.detail.set(item ?? undefined);\n this.processTasks.set(tasks ?? []);\n this.detailsBusy.set(false);\n },\n error: (e: unknown) => {\n this.#logger.error(`Failed to load ${entity} details`, e);\n this.detailsError.set(true);\n this.detailsBusy.set(false);\n }\n });\n }\n\n // ---- filter panel columns (status is covered by the quick filters, the name by the search) --\n readonly #textOperators = [FILTER_OPERATORS.EQUALS, FILTER_OPERATORS.STARTS_WITH, FILTER_OPERATORS.ENDS_WITH, FILTER_OPERATORS.CONTAINS];\n readonly #dateOperators = [FILTER_OPERATORS.BEFORE, FILTER_OPERATORS.AFTER, FILTER_OPERATORS.BETWEEN];\n readonly #h = (key: string) => `yuv.app.bpm-management.column.${key}`;\n readonly #equals: ColumnFilter = { type: FILTER_TYPES.TEXT, operators: [FILTER_OPERATORS.EQUALS] };\n\n readonly #columns: Record<BpmEntity, Column[]> = {\n deployments: [\n { name: 'id', displayName: this.#h('id'), filter: this.#equals },\n { name: 'category', displayName: this.#h('category'), filter: this.#equals }\n ],\n definitions: [\n { name: 'id', displayName: this.#h('id'), filter: this.#equals },\n { name: 'key', displayName: this.#h('key'), filter: { type: FILTER_TYPES.TEXT, operators: this.#textOperators } },\n { name: 'version', displayName: this.#h('version'), filter: { type: FILTER_TYPES.NUMBER, operators: [FILTER_OPERATORS.EQUALS], minValue: 1 } },\n { name: 'category', displayName: this.#h('category'), filter: { type: FILTER_TYPES.TEXT, operators: this.#textOperators } },\n {\n name: 'global',\n displayName: 'yuv.app.bpm-management.definitions.scope.label',\n filter: {\n type: FILTER_TYPES.SELECT,\n enableMultiselect: false,\n // no text while nothing is selected\n placeholder: '',\n options: [ProcessDefinitionScope.GLOBAL, ProcessDefinitionScope.TENANT]\n }\n }\n ],\n processes: [\n { name: 'id', displayName: this.#h('id'), filter: this.#equals },\n { name: 'processDefinitionId', displayName: this.#h('processDefinitionId'), filter: this.#equals },\n { name: 'businessKey', displayName: this.#h('businessKey'), filter: { type: FILTER_TYPES.TEXT, operators: this.#textOperators } },\n { name: 'startUserId', displayName: this.#h('startedBy'), filter: { type: FILTER_TYPES.USER } },\n { name: 'startTime', displayName: this.#h('startTime'), filter: { type: FILTER_TYPES.DATE, operators: this.#dateOperators } },\n { name: 'endTime', displayName: this.#h('endTime'), filter: { type: FILTER_TYPES.DATE, operators: this.#dateOperators } }\n ],\n tasks: [\n { name: 'id', displayName: this.#h('id'), filter: this.#equals },\n { name: 'processDefinitionId', displayName: this.#h('processDefinitionId'), filter: this.#equals },\n { name: 'processInstanceId', displayName: this.#h('processInstanceId'), filter: this.#equals },\n { name: 'assignee', displayName: this.#h('assignee'), filter: { type: FILTER_TYPES.USER } },\n { name: 'owner', displayName: this.#h('owner'), filter: { type: FILTER_TYPES.USER } },\n { name: 'createTime', displayName: this.#h('createTime'), filter: { type: FILTER_TYPES.DATE, operators: this.#dateOperators } },\n { name: 'endTime', displayName: this.#h('endTime'), filter: { type: FILTER_TYPES.DATE, operators: this.#dateOperators } }\n ]\n };\n}\n\nconst sortField = (value: SortBy): { value: SortBy; label: string } => ({ value, label: `yuv.app.bpm-management.sort.${value}` });\n\nconst quickFilters = (entity: BpmEntity, ...values: QuickFilter[]): { value: QuickFilter; label: string }[] =>\n values.map(value => ({ value, label: `yuv.app.bpm-management.statusFilter.${entity}.${value}` }));\n\nconst QUICK_FILTERS: Record<BpmEntity, { value: QuickFilter; label: string }[]> = {\n deployments: [],\n definitions: quickFilters('definitions', 'active', 'suspended', 'all'),\n processes: quickFilters('processes', 'active', 'completed', 'all'),\n tasks: quickFilters('tasks', 'open', 'completed', 'all')\n};\n","<!-- the entity switch lives in the shell's app header -->\n<ng-template yuvAppHeaderSlot=\"actions\">\n <ymbpm-entity-switch [entities]=\"availableEntities\" [value]=\"entity()\" (valueChange)=\"switchEntity($event)\" />\n</ng-template>\n\n<!-- search lives in the shell's app header -->\n<ng-template yuvAppHeaderSlot=\"search\">\n <yuv-simple-search [query]=\"searchQuery()\" (querySubmit)=\"onQueryChange($event)\" (clearInput)=\"onQueryChange({ term: '' })\"></yuv-simple-search>\n</ng-template>\n\n<!-- A named region, not <main>: the shell already wraps the routed app in its own main landmark. -->\n<div role=\"region\" class=\"bpmmgmt-main__content\" [attr.aria-label]=\"'yuv.app.bpm-management.content.aria.label' | translate\">\n @if (!split.isAreaVisible(Area.MASTER)) {\n <ymbpm-pane-gutter\n icon=\"left_panel_open\"\n [flipLabel]=\"true\"\n [label]=\"ENTITY_META[entity()].label | translate\"\n [tooltip]=\"'yuv.app.bpm-management.pane.showList.tooltip' | translate\"\n (expand)=\"split.showArea(Area.MASTER)\" />\n }\n\n <yuv-split-view #split [layoutSettingsID]=\"layoutSettingsID\" class=\"content-split\">\n\n <!-- ===================================== MASTER ===================================== -->\n <ng-template yuvSplitArea [size]=\"61.8\">\n <ymt-pane [busy]=\"busy()\" [topBarActions]=\"masterActions\" role=\"region\" [attr.aria-label]=\"ENTITY_META[entity()].label | translate\">\n <ymt-pane-header\n [icon]=\"ENTITY_META[entity()].icon\"\n [title]=\"ENTITY_META[entity()].label | translate\"\n [actions]=\"listActions\"\n ></ymt-pane-header>\n\n <ymt-pane-body class=\"list-body\">\n <ymbpm-filter-bar\n [columns]=\"filterColumns()\"\n [filters]=\"view().advanced\"\n [search]=\"searchTerm()\"\n (filtersChange)=\"onAdvancedFilters($event)\"\n (searchClear)=\"onQueryChange({ term: '' })\" />\n @if (items().length === 0 && !busy()) {\n <div class=\"empty-state\">\n <span class=\"empty-state-icon\"><mat-icon aria-hidden=\"true\">search_off</mat-icon></span>\n <p class=\"empty-state-description\">{{ 'yuv.app.bpm-management.list.empty' | translate }}</p>\n @if (hasActiveFilters()) {\n <button ymtButton=\"secondary\" (click)=\"clearFilters()\">{{ 'yuv.app.bpm-management.filters.clearAll' | translate }}</button>\n }\n </div>\n } @else {\n <!-- Shift+F10 / the context menu key open the actions of the active row (its ⋮ is for the pointer only, see .item__menu) -->\n <yuv-list class=\"items\" [attr.aria-label]=\"ENTITY_META[entity()].label | translate\" aria-keyshortcuts=\"Shift+F10\" [externalSelectionVisuals]=\"true\"\n (itemFocus)=\"onItemFocus($event)\" (contextmenu)=\"onListContextMenu($event)\">\n @for (item of items(); track item.id) {\n <!-- [title] / meta · meta | state badge | ⋮ -->\n <!-- aria-selected comes from the yuvListItem host binding (from [selected]), which the rule cannot see -->\n <!-- eslint-disable-next-line @angular-eslint/template/role-has-required-aria -->\n <div yuvListItem role=\"option\" class=\"item\" [attr.data-item-id]=\"item.id\" [class.item--suspended]=\"isSuspended(item)\" [selected]=\"item.id === selectedId()\">\n @switch (entity()) {\n @case ('deployments') {\n @let d = asDeployment(item);\n <div class=\"item__body\">\n <div class=\"item__title\"><span>{{ d.name || '<unnamed>' }}</span></div>\n <div class=\"item__meta\">\n <span>{{ d.deploymentTime | formatDateTime }}</span>\n </div>\n <div class=\"item__meta\">\n @if (d.category) {\n <span [title]=\"d.category\">{{ d.category }}</span>\n }\n </div>\n </div>\n }\n @case ('definitions') {\n @let pd = asDefinition(item);\n <div class=\"item__body\">\n <div class=\"item__title\"><span>{{ pd.name || '<unnamed>' }}</span></div>\n <div class=\"item__meta\">\n @if (pd.category) {\n <span [title]=\"pd.category\">{{ pd.category }}</span>\n }\n </div>\n <div class=\"item__meta\">\n <!-- the scope is only a symbol; it carries information, so it is an image with a name, not decoration -->\n @let scope = definitionScope(pd);\n @let scopeLabel = scope.label | translate;\n <span class=\"item__iconed\">\n <mat-icon role=\"img\" aria-hidden=\"false\" [attr.aria-label]=\"scopeLabel\" [matTooltip]=\"scopeLabel\">{{ icons[scope.icon] }}</mat-icon>v{{ pd.version }}\n </span>\n <span [title]=\"pd.key\">{{ pd.key }}</span>\n </div>\n </div>\n <div class=\"item__chips\">\n <ymt-badge class=\"item__state\" [aura]=\"true\" [severity]=\"definitionSeverity(pd)\">{{ definitionStatusLabel(pd) | translate }}</ymt-badge>\n </div>\n }\n @case ('processes') {\n @let p = asProcess(item);\n <div class=\"item__body\">\n <div class=\"item__title\"><span>{{ p.name || '<unnamed>' }}</span></div>\n <div class=\"item__meta\">\n <span [title]=\"p.processDefinitionName || ''\">{{ p.processDefinitionName || '-' }}</span>\n </div>\n <div class=\"item__meta\">\n <span class=\"item__iconed\"><mat-icon>schedule</mat-icon>{{ p.startTime | formatDateTime }}</span>\n <span class=\"item__user\"><yuv-organization-renderer propertyName=\"user\" [value]=\"p.startUserId ?? null\"></yuv-organization-renderer></span>\n @if (p.endTime) {\n <span class=\"item__iconed item__ended\"><mat-icon>flag</mat-icon>{{ p.endTime | formatDateTime }}</span>\n }\n </div>\n </div>\n <div class=\"item__chips\">\n <ymt-badge class=\"item__state\" [aura]=\"true\" [severity]=\"processSeverity(p)\">{{ processStatusLabel(p) | translate }}</ymt-badge>\n </div>\n }\n @case ('tasks') {\n @let t = asTask(item);\n <div class=\"item__body\">\n <div class=\"item__title\"><span>{{ t.name || '<unnamed>' }}</span></div>\n <div class=\"item__meta\">\n <span [title]=\"t.processInstanceName || ''\">{{ t.processInstanceName || '-' }}</span>\n </div>\n <div class=\"item__meta\">\n <span class=\"item__iconed\"><mat-icon>schedule</mat-icon>{{ t.createTime | formatDateTime }}</span>\n @if (t.assignee) {\n <span class=\"item__user\"><yuv-organization-renderer propertyName=\"user\" [value]=\"t.assignee\"></yuv-organization-renderer></span>\n }\n @if (t.endTime) {\n <span class=\"item__iconed item__ended\"><mat-icon>flag</mat-icon>{{ t.endTime | formatDateTime }}</span>\n }\n </div>\n </div>\n <div class=\"item__chips\">\n <ymt-badge class=\"item__state\" [aura]=\"true\" [severity]=\"taskSeverity(t)\">{{ taskStatusLabel(t) | translate }}</ymt-badge>\n </div>\n }\n }\n <!-- Not a button: a focusable element inside role=\"option\" is a nested-interactive violation (yuv-list\n even sets tabindex=\"-1\" on it). Pointer users click it, the keyboard opens the same menu with\n Shift+F10 on the list; the click also selects the row, so the menu visibly applies to it. -->\n <span class=\"item__menu\" aria-hidden=\"true\" #rowMenuTrigger=\"matMenuTrigger\"\n [matMenuTriggerFor]=\"rowMenu\" [matMenuTriggerData]=\"{ item }\" (menuClosed)=\"onRowMenuClosed()\"\n [matTooltip]=\"'yuv.app.bpm-management.list.actions.label' | translate\">\n <mat-icon>more_vert</mat-icon>\n </span>\n </div>\n }\n </yuv-list>\n }\n </ymt-pane-body>\n\n <ymt-pane-footer>\n <mat-paginator class=\"paginator\"\n [length]=\"total()\"\n [pageIndex]=\"view().page\"\n [pageSize]=\"view().pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n [attr.aria-label]=\"'yuv.app.bpm-management.pagination.aria' | translate\"\n (page)=\"onChangePage($event)\">\n </mat-paginator>\n </ymt-pane-footer>\n\n </ymt-pane>\n </ng-template>\n\n <!-- ===================================== DETAILS ==================================== -->\n <ng-template yuvSplitArea [size]=\"38.2\">\n <ymbpm-details\n [entity]=\"entity()\"\n [detail]=\"detail()\"\n [listItem]=\"selectedItem()\"\n [processTasks]=\"processTasks()\"\n [busy]=\"detailsBusy()\"\n [error]=\"detailsError()\"\n [selectedId]=\"selectedId()\"\n [canOpenDefinition]=\"definitionsEnabled\"\n [canOpenDeployment]=\"deploymentsEnabled\"\n [topBarActions]=\"detailsTopBarActions\"\n (changed)=\"onDetailsChanged($event)\"\n (openItem)=\"openItem($event.entity, $event.id)\"\n (showProcesses)=\"showProcessesOfDefinition($event)\" ></ymbpm-details>\n </ng-template>\n </yuv-split-view>\n\n @if (!split.isAreaVisible(Area.DETAILS)) {\n <ymbpm-pane-gutter\n icon=\"right_panel_open\"\n [label]=\"'yuv.app.bpm-management.details.aria' | translate\"\n [tooltip]=\"'yuv.app.bpm-management.pane.showDetails.tooltip' | translate\"\n (expand)=\"split.showArea(Area.DETAILS)\" />\n }\n</div>\n\n<!-- master header: filter panel toggle -->\n<ng-template #listActions>\n @if (quickFilters().length) {\n <mat-button-toggle-group class=\"quick-toggle\" [value]=\"view().quick\" (change)=\"onQuick($event.value)\"\n [attr.aria-label]=\"'yuv.app.bpm-management.statusFilter.aria' | translate\">\n @for (quick of quickFilters(); track quick.value) {\n <mat-button-toggle [value]=\"quick.value\">{{ quick.label | translate }}</mat-button-toggle>\n }\n </mat-button-toggle-group>\n }\n @let bar = filterBar();\n @let addable = bar?.addableColumns() ?? [];\n <button ymt-icon-button #addFilter\n [matMenuTriggerFor]=\"addFilterMenu\"\n [matMenuTriggerRestoreFocus]=\"false\"\n [disabled]=\"!addable.length && !showLatestOnly()\"\n [matTooltip]=\"'yuv.app.bpm-management.filters.add' | translate\"\n [attr.aria-label]=\"'yuv.app.bpm-management.filters.add' | translate\">\n <mat-icon>filter_list</mat-icon>\n </button>\n <mat-menu #addFilterMenu=\"matMenu\">\n @for (column of addable; track column.name) {\n <button mat-menu-item (click)=\"bar?.edit(column, addFilter)\">{{ column.displayName | translate }}</button>\n }\n @if (showLatestOnly()) {\n @if (addable.length) {\n <mat-divider></mat-divider>\n }\n <button mat-menu-item role=\"menuitemcheckbox\" [attr.aria-checked]=\"view().latestOnly\" (click)=\"toggleLatestOnly()\">\n <mat-icon>{{ view().latestOnly ? 'check' : '' }}</mat-icon>{{ 'yuv.app.bpm-management.definitions.filter.onlyLatest' | translate }}\n </button>\n }\n </mat-menu>\n @if (sortFields().length) {\n <button ymt-icon-button\n [matMenuTriggerFor]=\"sortMenu\"\n [matTooltip]=\"'yuv.sort.tooltip' | translate\"\n [attr.aria-label]=\"'yuv.sort.tooltip' | translate\">\n <mat-icon>swap_vert</mat-icon>\n </button>\n <mat-menu #sortMenu=\"matMenu\">\n @for (field of sortFields(); track field.value) {\n <button mat-menu-item class=\"radio-item\" role=\"menuitemradio\" [attr.aria-checked]=\"view().sortBy === field.value\" (click)=\"patchView({ sortBy: field.value })\">\n <mat-icon>{{ view().sortBy === field.value ? icons.radioButtonChecked : '' }}</mat-icon>{{ field.label | translate }}\n </button>\n }\n <mat-divider></mat-divider>\n @for (order of sortOrders; track order.value) {\n <button mat-menu-item class=\"radio-item\" role=\"menuitemradio\" [attr.aria-checked]=\"view().sortOrder === order.value\" (click)=\"patchView({ sortOrder: order.value })\">\n <mat-icon>{{ view().sortOrder === order.value ? icons.radioButtonChecked : '' }}</mat-icon>{{ order.label | translate }}\n </button>\n }\n </mat-menu>\n }\n</ng-template>\n\n<!-- the ⋮ menu of a list row: the actions of the details header, then what every item has -->\n<mat-menu #rowMenu=\"matMenu\" [ariaLabel]=\"'yuv.app.bpm-management.list.actions.label' | translate\">\n <ng-template matMenuContent let-item=\"item\">\n @switch (entity()) {\n @case ('definitions') {\n @let pd = asDefinition(item);\n @let pdAction = actions.definitionAction(pd);\n @if (pdAction) {\n <button mat-menu-item (click)=\"runAction(actions.changeDefinitionStatus(pd, pdAction))\">\n <mat-icon>{{ icons[pdAction] }}</mat-icon>{{ ('yuv.app.bpm-management.definitions.actions.' + pdAction + '.label') | translate }}\n </button>\n }\n <button mat-menu-item (click)=\"showProcessesOfDefinition({ definitionId: pd.id, quick: 'all' })\">\n <mat-icon>{{ ENTITY_META.processes.icon }}</mat-icon>{{ 'yuv.app.bpm-management.definitions.showProcesses' | translate }}\n </button>\n <mat-divider></mat-divider>\n }\n @case ('processes') {\n @let p = asProcess(item);\n @let pAction = actions.processAction(p);\n @if (pAction) {\n <button mat-menu-item (click)=\"runAction(actions.changeProcessStatus(p, pAction))\">\n <mat-icon>{{ icons[pAction] }}</mat-icon>{{ ('yuv.app.bpm-management.process.actions.' + pAction + '.label') | translate }}\n </button>\n <mat-divider></mat-divider>\n }\n }\n @case ('tasks') {\n @let t = asTask(item);\n @if (actions.hasTaskActions(t)) {\n <button mat-menu-item (click)=\"runAction(actions.assignTask(t))\">\n <mat-icon>{{ icons.assign }}</mat-icon>{{ 'yuv.app.bpm-management.task.actions.assign.label' | translate }}\n </button>\n <button mat-menu-item [disabled]=\"!actions.canUnassign(t)\" (click)=\"runAction(actions.unassignTask(t))\">\n <mat-icon>{{ icons.unassign }}</mat-icon>{{ 'yuv.app.bpm-management.task.actions.unassign.label' | translate }}\n </button>\n <!-- the row was selected when the menu opened, so its details (with the candidates) are usually loaded -->\n <button mat-menu-item (click)=\"runAction(actions.editTaskCandidates(detail()?.id === t.id ? asTask(detail()!) : t))\">\n <mat-icon>{{ icons.editCandidates }}</mat-icon>{{ 'yuv.app.bpm-management.task.actions.editCandidates.label' | translate }}\n </button>\n <mat-divider></mat-divider>\n }\n }\n }\n <button mat-menu-item (click)=\"copyId(item.id)\">\n <mat-icon>content_copy</mat-icon>{{ 'yuv.app.bpm-management.list.actions.copyId' | translate }}\n </button>\n </ng-template>\n</mat-menu>\n\n<!-- list pane top bar: hides the list (right aligned, next to the gutter it collapses into) -->\n<ng-template #masterActions>\n <ymbpm-pane-toggle-button\n icon=\"left_panel_close\"\n [tooltip]=\"'yuv.app.bpm-management.pane.hideList.tooltip' | translate\"\n (toggled)=\"split.hideArea(Area.MASTER)\" />\n</ng-template>\n\n<!-- details pane top bar: hides the details (left aligned, next to the gutter it collapses into) -->\n<ng-template #detailsTopBarActions>\n <ymbpm-pane-toggle-button\n align=\"start\"\n icon=\"right_panel_close\"\n [tooltip]=\"'yuv.app.bpm-management.pane.hideDetails.tooltip' | translate\"\n (toggled)=\"split.hideArea(Area.DETAILS)\" />\n</ng-template>\n","import { Route } from '@angular/router';\nimport { defaultEntityGuard, deploymentsGuard, processDefinitionsGuard } from './bpm-management.config';\nimport { YuvBpmManagementComponent } from './container/bpm-management.component';\n\n/**\n * Deployments, process definitions, processes and tasks are rendered by the same master/details\n * container, the entity comes from the route data. Deployments and process definitions are optional. The empty path opens the first enabled entity.\n */\nexport const YuvBpmManagementRoutes: Route[] = [\n { path: 'deployments', component: YuvBpmManagementComponent, data: { entity: 'deployments' }, canActivate: [deploymentsGuard] },\n { path: 'definitions', component: YuvBpmManagementComponent, data: { entity: 'definitions' }, canActivate: [processDefinitionsGuard] },\n { path: 'processes', component: YuvBpmManagementComponent, data: { entity: 'processes' } },\n { path: 'tasks', component: YuvBpmManagementComponent, data: { entity: 'tasks' } },\n { path: '', pathMatch: 'full', children: [], canActivate: [defaultEntityGuard] }\n];\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["MatLabel","i1","i2","i3","i4","nextId","i6"],"mappings":"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"}
|