@fundamental-ngx/platform 0.61.2-rc.9 → 0.61.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/fundamental-ngx-platform-approval-flow.mjs +17 -17
- package/fesm2022/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs +3 -3
- package/fesm2022/fundamental-ngx-platform-dynamic-page.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-feed-input.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-form.mjs +29 -33
- package/fesm2022/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs +9 -9
- package/fesm2022/fundamental-ngx-platform-icon-tab-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-link.mjs +2 -2
- package/fesm2022/fundamental-ngx-platform-link.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-list.mjs +23 -17
- package/fesm2022/fundamental-ngx-platform-list.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-message-popover.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-search-field.mjs +6 -6
- package/fesm2022/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-settings-generator.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs +25 -22
- package/fesm2022/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs +2 -3
- package/fesm2022/fundamental-ngx-platform-split-menu-button.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-table.mjs +40 -42
- package/fesm2022/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs +6 -6
- package/fesm2022/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs +6 -6
- package/fesm2022/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs +4 -4
- package/fesm2022/fundamental-ngx-platform-wizard-generator.mjs.map +1 -1
- package/package.json +5 -5
- package/schematics/ng-add/index.js +1 -1
- package/types/fundamental-ngx-platform-form.d.ts +1 -3
- package/types/fundamental-ngx-platform-icon-tab-bar.d.ts +1 -3
- package/types/fundamental-ngx-platform-list.d.ts +6 -2
- package/types/fundamental-ngx-platform-smart-filter-bar.d.ts +3 -4
- package/types/fundamental-ngx-platform-table.d.ts +1 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-platform-approval-flow.mjs","sources":["../../../../libs/platform/approval-flow/helpers/index.ts","../../../../libs/platform/approval-flow/approval-flow-graph.ts","../../../../libs/platform/approval-flow/approval-flow-team-list/approval-flow-team-list.component.ts","../../../../libs/platform/approval-flow/approval-flow-team-list/approval-flow-team-list.component.html","../../../../libs/platform/approval-flow/approval-flow-user-details/approval-flow-user-details.component.ts","../../../../libs/platform/approval-flow/approval-flow-user-details/approval-flow-user-details.component.html","../../../../libs/platform/approval-flow/approval-flow-user-list/approval-flow-user-list.component.ts","../../../../libs/platform/approval-flow/approval-flow-user-list/approval-flow-user-list.component.html","../../../../libs/platform/approval-flow/services/approval-flow-add-node-view.service.ts","../../../../libs/platform/approval-flow/approval-flow-add-node/approval-flow-add-node.component.ts","../../../../libs/platform/approval-flow/approval-flow-add-node/approval-flow-add-node.component.html","../../../../libs/platform/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.ts","../../../../libs/platform/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.html","../../../../libs/platform/approval-flow/approval-flow-messages/approval-flow-messages.component.ts","../../../../libs/platform/approval-flow/approval-flow-messages/approval-flow-messages.component.html","../../../../libs/platform/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.ts","../../../../libs/platform/approval-flow/approval-flow-node/approval-flow-node.component.ts","../../../../libs/platform/approval-flow/approval-flow-node/approval-flow-node.component.html","../../../../libs/platform/approval-flow/approval-flow-select-type/approval-flow-select-type.component.ts","../../../../libs/platform/approval-flow/approval-flow-select-type/approval-flow-select-type.component.html","../../../../libs/platform/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.ts","../../../../libs/platform/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.html","../../../../libs/platform/approval-flow/approval-flow.component.ts","../../../../libs/platform/approval-flow/approval-flow.component.html","../../../../libs/platform/approval-flow/approval-flow.module.ts","../../../../libs/platform/approval-flow/fundamental-ngx-platform-approval-flow.ts"],"sourcesContent":["import { ApprovalFlowGraph } from '../approval-flow-graph';\nimport { ApprovalGraphNode, ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\n\n/** @hidden */\nexport function isNodeApproved(node: ApprovalNode): boolean {\n return node.status === 'approved';\n}\n\n/** @hidden */\nexport function isNodeStarted(node: ApprovalNode): boolean {\n return node.status !== 'not started';\n}\n\n/** @hidden */\nexport function displayTeamFn(team: ApprovalTeam): string {\n return team?.name;\n}\n\n/** @hidden */\nexport function displayUserFn(user: ApprovalUser): string {\n return user?.name;\n}\n\n/** @hidden */\nexport function userValueFn(user: ApprovalUser): string {\n return user?.id;\n}\n\n/** @hidden */\nexport function filterByName(obj: { name: string }, searchString: string): boolean {\n return obj.name.toLowerCase().indexOf(searchString.toLowerCase()) > -1;\n}\n\n/** @hidden */\nexport function trackByFn(index: number, item: { id: string }): number | string {\n return item?.id ?? index;\n}\n\n/** @hidden */\nexport function getGraphNodes(graph: ApprovalFlowGraph): ApprovalGraphNode[] {\n return graph.columns.reduce((acc, column) => acc.concat(column.nodes), <ApprovalGraphNode[]>[]);\n}\n\n/** @hidden */\nexport function getParentNodes(node: ApprovalNode, nodes: ApprovalNode[]): ApprovalNode[] {\n return nodes.filter((_node) => isNodeTargetsIncludeId(_node, node.id));\n}\n\n/** @hidden */\nexport function getBlankApprovalGraphNode(): ApprovalGraphNode {\n return {\n id: `blankId${(Math.random() * 1000).toFixed()}`,\n name: '',\n targets: [],\n approvers: [],\n status: 'not started',\n blank: true\n };\n}\n\n/** @hidden */\nexport function getSpaceApprovalGraphNode(): ApprovalGraphNode {\n return {\n id: `spaceId${(Math.random() * 1000).toFixed()}`,\n name: '',\n targets: [],\n approvers: [],\n status: 'not started',\n space: true\n };\n}\n\n/** @hidden */\nexport function isNodeTargetsIncludeId(node: ApprovalNode, id: string): boolean {\n return node.targets.includes(id);\n}\n","import { ApprovalGraphNode, ApprovalGraphNodeMetadata, ApprovalNode, ApprovalStatus } from './interfaces';\n\nimport {\n getBlankApprovalGraphNode,\n getGraphNodes,\n getParentNodes,\n getSpaceApprovalGraphNode,\n isNodeApproved,\n isNodeStarted,\n isNodeTargetsIncludeId\n} from './helpers';\n\nexport interface ApprovalFlowGraph {\n columns: ApprovalGraphColumn[];\n errors?: boolean;\n}\n\nexport interface ApprovalGraphColumn {\n nodes: ApprovalGraphNode[];\n index?: number;\n allNodesApproved?: boolean;\n}\n\nexport interface ApprovalGraphMetadata {\n [key: string]: ApprovalGraphNodeMetadata;\n}\n\n/** Algorithm in short:\n * 1. Find all possible paths (longest path length = amount of the columns in the graph)\n * 2. Trim paths (remove blank nodes at the end of the paths)\n * 3. Make all paths the same length (= longest path length) to make every unique node be present at the same index across all paths\n * 4. Sort paths by their likeness between each other to avoid paths crossing\n * 5. Remove \"duplicate\" nodes in paths (make every unique node be present only once across all paths)\n * 6. Remove empty paths\n * 7. Transform paths into the columns\n * 8. Trim columns (remove space nodes at the end of columns)\n * 9. Remove columns which contain only blank and empty nodes\n * 10. Transform columns into the graph columns\n */\nexport function generateApprovalFlowGraph(nodes: ApprovalGraphNode[]): ApprovalFlowGraph {\n const graph: ApprovalFlowGraph = { columns: [], errors: false };\n\n if (!nodes.length) {\n return graph;\n }\n\n const rootNodes = findRootNodes(nodes);\n const finalNodes = findFinalNodes(nodes);\n\n if (!rootNodes.length || !finalNodes.length) {\n console.warn(`Err: Not possible to build graph because root or final nodes aren't present!`);\n graph.errors = true;\n return graph;\n }\n\n const paths = getPaths(rootNodes, nodes);\n\n if (!paths.length) {\n console.warn('Err: Not possible to build graph!');\n graph.errors = true;\n return graph;\n }\n\n const trimmedPaths = trimPaths(paths);\n const sameLengthPaths = makePathsSameLength(trimmedPaths);\n const pathsBySimilarity = sortPaths(sameLengthPaths);\n const pathsWithUniqueNodes = removeDuplicateNodes(pathsBySimilarity);\n const notEmptyPaths = removeEmptyPaths(pathsWithUniqueNodes);\n const columns = getColumnsFromPaths(notEmptyPaths);\n const trimmedColumns = trimColumns(columns);\n const notEmptyColumns = removeEmptyColumns(trimmedColumns);\n graph.columns = getGraphColumnsFromPaths(notEmptyColumns);\n\n return graph;\n}\n\n/** Generate graph metadata */\nexport function generateApprovalFlowGraphMetadata(graph: ApprovalFlowGraph): ApprovalGraphMetadata {\n const nodes = getGraphNodes(graph);\n const metadata: ApprovalGraphMetadata = {};\n\n graph.columns.forEach((column, columnIndex) => {\n column.nodes.forEach((node, nodeIndex) => {\n const parents = getParentNodes(node, nodes);\n const parentsApproved = parents.length ? parents.every((_node) => isNodeApproved(_node)) : false;\n const isRoot = !parents.length && !node.space;\n const isFinal = !node.targets.length && !node.space;\n const parallelEnd = parents.length > 1;\n const firstOfMultipleRootNodes = columnIndex === 0 && column.nodes.length > 1 && nodeIndex === 0;\n const firstOfMultipleFinalNodes =\n columnIndex === graph.columns.length - 1 && column.nodes.length > 1 && nodeIndex === 0;\n\n metadata[node.id] = {\n parents,\n isRoot,\n isFinal,\n parallelStart: node.targets.length > 1,\n parallelEnd,\n columnIndex,\n nodeIndex,\n canAddNodeBefore: !isNodeStarted(node) && !parentsApproved,\n canAddNodeBeforeAll: isRoot && firstOfMultipleRootNodes,\n canAddNodeAfter: !isNodeApproved(node),\n canAddNodeAfterAll:\n !isNodeApproved(node) && ((isFinal && firstOfMultipleFinalNodes) || (parallelEnd && node.blank)),\n canAddParallel: !isNodeApproved(node),\n isVerticalLineBeforeSolid: node.space && graph.columns[columnIndex - 1]?.allNodesApproved,\n isVerticalLineAfterSolid: node.space && column.allNodesApproved,\n firstOfMultipleRootNodes,\n firstOfMultipleFinalNodes,\n rootNodesApproved: columnIndex === 0 && column.allNodesApproved\n };\n });\n });\n\n /* Some flags can be calculated only on the second run, when all nodes already have base metadata */\n graph.columns.forEach((column) => {\n column.nodes.forEach((node, nodeIndex) => {\n const nodeMetadata = metadata[node.id];\n\n nodeMetadata.isLastInParallel = metadata[node.targets[0]]?.parallelEnd;\n nodeMetadata.isFirstInParallel = metadata[nodeMetadata.parents[0]?.id]?.parallelStart;\n\n const columnIndex = column.index;\n const graphPrevColumn = columnIndex ? graph.columns[columnIndex - 1] : undefined;\n const graphNextColumn = columnIndex ? graph.columns[columnIndex + 1] : undefined;\n\n const prevHNode = graphPrevColumn?.nodes[nodeIndex];\n const nextHNode = graphNextColumn?.nodes[nodeIndex];\n\n nodeMetadata.renderAddNodeAfterButton =\n nodeMetadata.canAddNodeAfter &&\n (nodeMetadata.isFinal ||\n nodeMetadata.parallelStart ||\n nodeMetadata.isLastInParallel ||\n nextHNode?.blank);\n\n const nextColumnNodes = graphNextColumn?.nodes;\n if (nodeMetadata.parallelStart && nextColumnNodes) {\n const children = nextColumnNodes.filter((_node) => node.targets.includes(_node.id));\n const firstChildIndex = nextColumnNodes.findIndex((_node) => _node.id === children[0].id);\n const lastChildIndex = nextColumnNodes.findIndex(\n (_node) => _node.id === children[children.length - 1].id\n );\n\n for (let i = firstChildIndex + 1; i <= lastChildIndex; i++) {\n metadata[nextColumnNodes[i].id].renderVerticalLineBefore = true;\n }\n }\n\n const prevColumnNodes = graphPrevColumn?.nodes;\n if (nodeMetadata.parallelEnd && prevColumnNodes) {\n const firstParentIndex = prevColumnNodes.findIndex((_node) => _node.id === nodeMetadata.parents[0].id);\n const lastParentIndex = prevColumnNodes.findIndex(\n (_node) => _node.id === nodeMetadata.parents[nodeMetadata.parents.length - 1].id\n );\n\n for (let i = firstParentIndex + 1; i <= lastParentIndex; i++) {\n metadata[prevColumnNodes[i].id].renderVerticalLineAfter = true;\n }\n }\n\n nodeMetadata.renderVerticalLineBefore = !nodeMetadata.renderVerticalLineBefore\n ? nodeIndex > 0 && !prevHNode\n : true;\n nodeMetadata.renderVerticalLineAfter = !nodeMetadata.renderVerticalLineAfter\n ? nodeIndex > 0 && !nextHNode\n : true;\n });\n });\n\n return metadata;\n}\n\nfunction findRootNodes(nodes: ApprovalNode[]): ApprovalNode[] {\n return nodes.filter((node) => nodes.every((n) => !isNodeTargetsIncludeId(n, node.id)));\n}\n\nfunction findFinalNodes(nodes: ApprovalNode[]): ApprovalNode[] {\n return nodes.filter((node) => !node.targets.length);\n}\n\n/** Find all possible paths (longest path length = amount of the columns in the graph) */\nfunction getPaths(rootNodes: ApprovalGraphNode[], nodes: ApprovalGraphNode[]): ApprovalGraphNode[][] {\n const paths: ApprovalGraphNode[][] = [];\n const queue: ApprovalGraphNode[][] = [];\n\n for (let i = 0; i < rootNodes.length; i++) {\n queue.push([rootNodes[i]]);\n\n while (queue.length) {\n const path = queue.pop();\n let lastNodeInPath: ApprovalGraphNode | undefined;\n if (path) {\n lastNodeInPath = path[path.length - 1];\n }\n\n /** Indicates about an error */\n if (!lastNodeInPath) {\n return [];\n }\n\n if (!lastNodeInPath.targets.length) {\n paths.push(path!);\n } else {\n lastNodeInPath.targets.forEach((targetId) => {\n const targetNode = nodes.find((node) => node.id === targetId);\n if (!targetNode) {\n return;\n }\n const newPath = [...path!, targetNode];\n\n queue.push(newPath);\n });\n }\n }\n }\n\n return paths;\n}\n\n/** Trim paths (remove blank nodes at the end of the paths) */\nfunction trimPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedPaths: ApprovalGraphNode[][] = [];\n\n paths.forEach((path) => {\n let indexToSlice = path.length - 1;\n\n for (let i = path.length - 1; i > 0; --i) {\n if (path[i].blank) {\n indexToSlice = i - 1;\n } else {\n break;\n }\n }\n\n path[indexToSlice].targets = [];\n processedPaths.push(path.slice(0, indexToSlice + 1));\n });\n\n return processedPaths;\n}\n\n/** Make all paths the same length (= longest path length) to make every unique node be present at the same index across all paths */\nfunction makePathsSameLength(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedPaths: ApprovalGraphNode[][] = [];\n const pathLengths = paths.map((path) => path.length);\n const longestPathLength = Math.max(...pathLengths);\n\n paths.forEach((path) => {\n if (path.length === longestPathLength) {\n processedPaths.push(path);\n return;\n }\n\n path.forEach((node, nodeIndex) => {\n /** Try to get blank nodes from already processed paths as paths may be the same within some part */\n let blankNodes = getBlankNodesAfterNode(node, processedPaths);\n if (blankNodes.length && blankNodes[0].id !== path[nodeIndex + 1]?.id) {\n path.splice(nodeIndex + 1, 0, ...blankNodes);\n return;\n }\n\n const nodeIndexInPaths = paths.map((_path) => _path.indexOf(node));\n const mostFarNodeIndexInPaths = Math.max(...nodeIndexInPaths);\n\n if (nodeIndex < mostFarNodeIndexInPaths) {\n blankNodes = getBlankNodes(mostFarNodeIndexInPaths - nodeIndex, path[nodeIndex - 1].status);\n\n blankNodes[blankNodes.length - 1].targets = [node.id];\n path[nodeIndex - 1].targets = [blankNodes[0].id];\n\n path.splice(nodeIndex, 0, ...blankNodes);\n return;\n }\n\n if (nodeIndex === mostFarNodeIndexInPaths && nodeIndex === path.length - 1) {\n blankNodes = getBlankNodes(longestPathLength - path.length, path[nodeIndex].status);\n\n path[nodeIndex].targets = [blankNodes[0].id];\n\n path.splice(nodeIndex + 1, 0, ...blankNodes);\n return;\n }\n });\n\n processedPaths.push(path);\n });\n\n return processedPaths;\n}\n\n/** Try to get blank nodes from already processed paths as paths may be the same within some part */\nfunction getBlankNodesAfterNode(node: ApprovalGraphNode, paths: ApprovalGraphNode[][]): ApprovalGraphNode[] {\n const blankNodes: ApprovalGraphNode[] = [];\n\n const pathWithBlankNodeAfter = paths.find((path) => {\n const nodeIndex = path.indexOf(node);\n return nodeIndex > -1 && path[nodeIndex + 1]?.blank;\n });\n\n if (pathWithBlankNodeAfter) {\n const nodeIndex = pathWithBlankNodeAfter.indexOf(node) + 1;\n const nextNotBlankNodeIndex = pathWithBlankNodeAfter.findIndex(\n (_node, _index) => _index > nodeIndex && !_node.blank\n );\n\n blankNodes.push(\n ...pathWithBlankNodeAfter.slice(nodeIndex, nextNotBlankNodeIndex > 0 ? nextNotBlankNodeIndex : undefined)\n );\n }\n\n return blankNodes;\n}\n\n/** Generate blank nodes sequential */\nfunction getBlankNodes(count: number, status: ApprovalStatus): ApprovalGraphNode[] {\n const nodes: ApprovalGraphNode[] = [];\n\n let node: ApprovalGraphNode;\n let nodeId: string | undefined;\n\n for (let i = count; i > 0; i--) {\n node = Object.assign({}, getBlankApprovalGraphNode(), { targets: nodeId ? [nodeId] : [], status });\n nodeId = node.id;\n\n nodes.unshift(node);\n }\n\n return nodes;\n}\n\n/** Sort paths by their likeness (= count of the same nodes relatively to the other paths) between each other to avoid paths crossing */\nfunction sortPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n if (paths.length === 1) {\n return paths;\n }\n\n /** [pathIndex, relativeToPathIndex, sameNodesCount][] */\n let similarities: number[][] = [];\n let pathSimilarity = 0;\n\n paths.forEach((path, index) => {\n for (let i = 0; i < paths.length; i++) {\n if (index !== i && !similarities.some((likely) => index === likely[1] && i === likely[0])) {\n pathSimilarity = 0;\n\n for (let j = 0; j < path.length; j++) {\n if (path[j].id === paths[i][j].id) {\n pathSimilarity++;\n }\n }\n\n similarities.push([index, i, pathSimilarity]);\n }\n }\n });\n\n similarities = similarities.sort((a, b) => (a[2] > b[2] ? -1 : 1));\n\n const usedPathIndexes: number[] = [];\n const processedPaths: ApprovalGraphNode[][] = [];\n\n similarities.forEach((similarity) => {\n if (!usedPathIndexes.some((i) => i === similarity[0])) {\n processedPaths.push(paths[similarity[0]]);\n usedPathIndexes.push(similarity[0]);\n }\n\n if (!usedPathIndexes.some((i) => i === similarity[1])) {\n processedPaths.push(paths[similarity[1]]);\n usedPathIndexes.push(similarity[1]);\n }\n });\n\n return processedPaths;\n}\n\n/** Remove \"duplicate\" nodes in paths (make every unique node be present only once across all paths) */\nfunction removeDuplicateNodes(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedPaths: ApprovalGraphNode[][] = [];\n\n paths.forEach((path, index) => {\n path.forEach((node) => {\n paths.forEach((_path, _index) => {\n const isNodeInPath = _index !== index && _path.indexOf(node) > -1;\n\n if (isNodeInPath) {\n /** Instead of node place space node */\n _path.splice(_path.indexOf(node), 1, getSpaceApprovalGraphNode());\n }\n });\n });\n\n processedPaths.push(path);\n });\n\n return processedPaths;\n}\n\n/** Remove empty paths (which contains only empty nodes) */\nfunction removeEmptyPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n return paths.reduce((acc, path) => {\n if (!path.every((node) => node.space)) {\n acc.push(path);\n }\n\n return acc;\n }, [] as ApprovalGraphNode[][]);\n}\n\n/** Transform paths into the columns (it's possible as they're all the same length) */\nfunction getColumnsFromPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const columns: ApprovalGraphNode[][] = [];\n let column: ApprovalGraphNode[] = [];\n\n for (let i = 0; i < paths[0].length; i++) {\n column = [];\n\n for (let v = 0; v < paths.length; v++) {\n column.push(paths[v][i]);\n }\n\n columns.push(column);\n }\n\n return columns;\n}\n\n/** Trim space nodes at the end of the columns. */\nfunction trimColumns(columns: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedColumns: ApprovalGraphNode[][] = [];\n\n columns.forEach((column) => {\n let lastNotSpaceNodeIndex;\n\n for (let i = column.length - 1; i >= 0; i--) {\n if (!column[i].space) {\n lastNotSpaceNodeIndex = i;\n break;\n }\n }\n\n if (lastNotSpaceNodeIndex < column.length) {\n processedColumns.push(column.slice(0, lastNotSpaceNodeIndex + 1));\n } else {\n processedColumns.push(column);\n }\n });\n\n return processedColumns;\n}\n\n/** Remove empty columns (where every node is a blank node) */\nfunction removeEmptyColumns(columns: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedColumns: ApprovalGraphNode[][] = [];\n\n columns.forEach((column) => {\n const areAllNodesEmpty = column.every((node) => node.blank || node.space);\n\n if (areAllNodesEmpty) {\n column.forEach((node) => {\n if (node.blank) {\n /** Connect previous column to the next column, omitting current column. */\n replaceTargets(node.id, node.targets, columns);\n }\n });\n } else {\n processedColumns.push(column);\n }\n });\n\n return processedColumns;\n}\n\nfunction replaceTargets(replaceId: string, replaceWithId: string[], columns: ApprovalGraphNode[][]): void {\n columns.forEach((column) => {\n column.forEach((n) => {\n if (isNodeTargetsIncludeId(n, replaceId)) {\n n.targets = n.targets.filter((_id) => _id !== replaceId);\n n.targets.push(...replaceWithId);\n }\n });\n });\n}\n\n/** Transform columns into the graph columns (with additional metadata). */\nfunction getGraphColumnsFromPaths(columns: ApprovalGraphNode[][]): ApprovalGraphColumn[] {\n const graphColumns: ApprovalGraphColumn[] = [];\n\n columns.forEach((column, index) => {\n column.forEach((node) => (node.colIndex = index));\n\n graphColumns.push({\n nodes: column,\n index,\n allNodesApproved: column.every((node) => isNodeApproved(node))\n });\n });\n\n return graphColumns;\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { FormGroupComponent, FormItemComponent } from '@fundamental-ngx/core/form';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { ListComponent, StandardListItemComponent } from '@fundamental-ngx/platform/list';\nimport { trackByFn } from '../helpers';\nimport { ApprovalTeam } from '../interfaces';\n\n/**\n * @deprecated\n * ApprovalFlowTeamList component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-team-list',\n templateUrl: './approval-flow-team-list.component.html',\n styleUrl: './approval-flow-team-list.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-approval-flow-team-list'\n },\n imports: [\n ListComponent,\n ContentDensityDirective,\n FormGroupComponent,\n FormItemComponent,\n RadioButtonComponent,\n FormsModule,\n StandardListItemComponent,\n IconComponent\n ]\n})\nexport class ApprovalFlowTeamListComponent {\n /** Approval flow teams */\n @Input()\n teams: ApprovalTeam[] = [];\n\n /** Whether in RTL mode */\n @Input()\n isRtl = false;\n\n /** Selected team ID */\n @Input()\n selectedTeamId: Nullable<string>;\n\n /** Event emitted on team click */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTeamClick = new EventEmitter<ApprovalTeam>();\n\n /** Event emitted on team selection change */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTeamRadioClick = new EventEmitter<ApprovalTeam>();\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n _showTeamDetails(team: ApprovalTeam): void {\n this.onTeamClick.emit(team);\n }\n}\n","<fdp-list [hasByLine]=\"true\" fdCompact>\n <fd-form-group>\n @for (team of teams; track _trackByFn(i, team); let i = $index) {\n <div fd-form-item>\n <fd-radio-button\n [value]=\"team.id\"\n [attr.id]=\"'team-radio' + i\"\n [name]=\"'team-radio' + i\"\n [(ngModel)]=\"selectedTeamId\"\n (click)=\"onTeamRadioClick.emit(team)\"\n >\n </fd-radio-button>\n <fdp-standard-list-item\n [attr.id]=\"'approval-team-' + team.id\"\n [avatar]=\"{ image: '', ariaLabel: team.name }\"\n [description]=\"team.description || team.members.length + ' members'\"\n [title]=\"team.name\"\n (click)=\"_showTeamDetails(team)\"\n >\n </fdp-standard-list-item>\n <fd-icon [glyph]=\"'navigation-' + (isRtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </div>\n }\n </fd-form-group>\n</fdp-list>\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { AvatarComponent } from '@fundamental-ngx/core/avatar';\nimport { ApprovalUser } from '../interfaces';\n\n/**\n * @deprecated\n * ApprovalFlowUserDetails component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-user-details',\n templateUrl: './approval-flow-user-details.component.html',\n styleUrl: './approval-flow-user-details.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-user-details'\n },\n imports: [AvatarComponent, NgTemplateOutlet, AsyncPipe]\n})\nexport class ApprovalFlowUserDetailsComponent {\n /** Approval Flow user */\n @Input()\n user: ApprovalUser;\n\n /** Approval Flow user details */\n @Input()\n details: Nullable<Observable<any>>;\n\n /** Approval Flow user details template */\n @Input()\n detailsTemplate: TemplateRef<any>;\n}\n","<div class=\"fdp-approval-flow-user-details__user-info\">\n <fd-avatar [image]=\"user.imgUrl\" size=\"s\"> </fd-avatar>\n <div>\n <div class=\"fdp-approval-flow-user-details__name\">{{ user.name }}</div>\n <div class=\"fdp-approval-flow-user-details__description\">{{ user.description }}</div>\n </div>\n</div>\n@if (detailsTemplate) {\n <ng-template [ngTemplateOutlet]=\"detailsTemplate\" [ngTemplateOutletContext]=\"{ data: details | async }\">\n </ng-template>\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n BaseListItem,\n ListComponent,\n SelectionChangeEvent,\n StandardListItemComponent\n} from '@fundamental-ngx/platform/list';\nimport { trackByFn } from '../helpers';\nimport { ApprovalUser } from '../interfaces';\n\nconst ITEMS_RENDERED_AT_ONCE = 100;\nconst INTERVAL_IN_MS = 10;\n\n/**\n * @deprecated\n * ApprovalFlowUserList component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-user-list',\n templateUrl: './approval-flow-user-list.component.html',\n styleUrl: './approval-flow-user-list.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-user-list'\n },\n imports: [ListComponent, FormsModule, StandardListItemComponent, FdTranslatePipe]\n})\nexport class ApprovalFlowUserListComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** Approval flow users */\n @Input()\n users: ApprovalUser[] = [];\n\n /** Approval flow selected users */\n @Input()\n selectedUsers: ApprovalUser[] = [];\n\n /** Whether the list is selectable */\n @Input()\n isSelectable = true;\n\n /** Event emitted on user click */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onUserClick = new EventEmitter<ApprovalUser>();\n\n /** Event emitted on selection change */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onSelectionChange = new EventEmitter<ApprovalUser[]>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n list: ListComponent<ApprovalUser>;\n\n /** @hidden */\n @ViewChildren(StandardListItemComponent)\n listItems: QueryList<StandardListItemComponent>;\n\n /** @hidden */\n _selectedItems: BaseListItem[] = [];\n\n /** @hidden */\n _idPrefix = 'approval-node-user-';\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n _displayUsers: ApprovalUser[] = [];\n\n /** @hidden */\n _allSelectedUsers: ApprovalUser[] = [];\n\n /** @hidden */\n private _intervalID?: number;\n\n /** @hidden */\n private _destroyed$ = inject(DestroyRef);\n\n /** @hidden */\n private _dontCallSelection = false;\n\n /** @hidden */\n constructor(private _cdr: ChangeDetectorRef) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.selectedUsers.length) {\n this._selectItems(this.selectedUsers);\n this._allSelectedUsers = [...this.selectedUsers];\n this._cdr.markForCheck();\n }\n\n if (this.isSelectable) {\n this._listenToListItemChange();\n }\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.users) {\n this._collectDataProgressive();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._killInterval();\n }\n\n /** @hidden */\n _onSelect(event: SelectionChangeEvent): void {\n if (!this._dontCallSelection) {\n this._selectedItems = event.selectedItems;\n\n if (event.removed) {\n const ids = event.removed.map((item: BaseListItem) => item.id);\n this._allSelectedUsers = this._allSelectedUsers.filter(\n (user: ApprovalUser) => !ids.includes(`${this._idPrefix + user.id}`)\n );\n }\n\n if (event.added) {\n this._allSelectedUsers.push(...this._getUsersFromSelectedItems(event.added));\n }\n\n this.onSelectionChange.emit(this._allSelectedUsers);\n this._cdr.detectChanges();\n }\n }\n\n /** @hidden */\n private _getUsersFromSelectedItems(items: BaseListItem[]): ApprovalUser[] {\n return items\n .map((item) => this.users.find((user) => `${this._idPrefix + user.id}` === item.id))\n .filter((u): u is ApprovalUser => !!u);\n }\n\n /** @hidden */\n private _collectDataProgressive(): void {\n this._killInterval();\n this._displayUsers = [];\n\n if (!this.users?.length) {\n return;\n }\n\n const collectionTracker = { currentIndex: 0 };\n\n this._userCollectorIntervalFn(collectionTracker);\n this._intervalID = window.setInterval(\n this._userCollectorIntervalFn.bind(this),\n INTERVAL_IN_MS,\n collectionTracker\n );\n }\n\n /** @hidden */\n private _userCollectorIntervalFn(tracker: { currentIndex: number }): void {\n const nextIndex = tracker.currentIndex + ITEMS_RENDERED_AT_ONCE;\n\n const collectedUsers: ApprovalUser[] = [];\n\n for (let i = tracker.currentIndex; i <= nextIndex; i++) {\n if (i >= this.users.length) {\n this._killInterval();\n break;\n }\n\n collectedUsers.push(this.users[i]);\n }\n\n tracker.currentIndex += ITEMS_RENDERED_AT_ONCE;\n\n this._displayUsers.push(...collectedUsers);\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private _killInterval(): void {\n if (this._intervalID) {\n clearInterval(this._intervalID);\n }\n }\n\n /** @hidden */\n private _listenToListItemChange(): void {\n this.listItems.changes.pipe(takeUntilDestroyed(this._destroyed$)).subscribe(() => {\n this._selectItems(this._allSelectedUsers);\n this._cdr.detectChanges();\n });\n }\n\n /** @hidden */\n private _selectItems(users: ApprovalUser[]): void {\n this._dontCallSelection = true;\n const allSelectedUserNames = users.map((user) => this._idPrefix + user.id);\n const currentSelectedList = this.listItems.filter((item) => allSelectedUserNames.includes(item.id));\n this.list._clearSelection();\n this._selectedItems = [...currentSelectedList];\n this._selectedItems.forEach((item) => {\n item._selected = true;\n this.list._selectItem(item);\n });\n this._dontCallSelection = false;\n }\n}\n","@if (_allSelectedUsers.length) {\n <div class=\"fdp-approval-flow-user-list__selected-count\">\n @if (_allSelectedUsers.length === 1) {\n {{ ('platformApprovalFlow.userListSelectedItemsCountSingular' | fdTranslate)() }}\n } @else {\n {{\n (\n 'platformApprovalFlow.userListSelectedItemsCountPlural'\n | fdTranslate: { count: _allSelectedUsers.length }\n )()\n }}\n }\n </div>\n}\n<fdp-list\n [selectionMode]=\"isSelectable ? 'multi' : 'none'\"\n [selection]=\"isSelectable\"\n [navigationIndicator]=\"true\"\n [hasByLine]=\"true\"\n [(ngModel)]=\"_selectedItems\"\n [selectedItems]=\"_selectedItems\"\n (selectedItemChange)=\"_onSelect($event)\"\n>\n @for (_user of _displayUsers; track _trackByFn($index, _user)) {\n <fdp-standard-list-item\n [attr.id]=\"_idPrefix + _user.id\"\n [id]=\"_idPrefix + _user.id\"\n [avatar]=\"{ image: _user.imgUrl, ariaLabel: _user.name }\"\n [description]=\"_user.description\"\n [ariaLabel]=\"_user.name\"\n [title]=\"_user.name\"\n (click)=\"$event.stopPropagation(); onUserClick.emit(_user)\"\n ></fdp-standard-list-item>\n }\n</fdp-list>\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { ApprovalTeam } from '../interfaces';\n\nexport enum VIEW_MODES {\n SELECT_TEAM = 'SELECT_TEAM',\n SELECT_USER = 'SELECT_USER',\n VIEW_TEAM_MEMBERS = 'VIEW_TEAM_MEMBERS',\n USER_DETAILS = 'USER_DETAILS'\n}\n\n@Injectable()\nexport class ApprovalFlowAddNodeViewService {\n /** @hidden */\n onViewChange = new EventEmitter();\n\n /** @hidden */\n private currentView?: VIEW_MODES;\n /** @hidden */\n private selectedTeam?: ApprovalTeam;\n\n /** @hidden */\n get isUserDetailsMode(): boolean {\n return this.currentView === VIEW_MODES.USER_DETAILS;\n }\n\n /** @hidden */\n get isTeamMembersMode(): boolean {\n return this.currentView === VIEW_MODES.VIEW_TEAM_MEMBERS;\n }\n\n /** @hidden */\n get isSelectUserMode(): boolean {\n return this.currentView === VIEW_MODES.SELECT_USER;\n }\n\n /** @hidden */\n get isSelectTeamMode(): boolean {\n return this.currentView === VIEW_MODES.SELECT_TEAM;\n }\n\n /** @hidden */\n get team(): ApprovalTeam | undefined {\n return this.selectedTeam;\n }\n\n /** @hidden */\n setCurrentView(view: VIEW_MODES): void {\n this.currentView = view;\n this.onViewChange.emit();\n }\n\n /** @hidden */\n resetView(): void {\n this.currentView = undefined;\n this.onViewChange.emit();\n }\n\n /** @hidden */\n selectTeam(team: ApprovalTeam): void {\n this.selectedTeam = team;\n }\n\n /** @hidden */\n resetTeam(): void {\n this.selectedTeam = undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { Observable, Subscription, combineLatest } from 'rxjs';\n\nimport { FdDate } from '@fundamental-ngx/core/datetime';\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { FormsModule } from '@angular/forms';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { DatePickerComponent } from '@fundamental-ngx/core/date-picker';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { FormItemComponent, FormLabelComponent } from '@fundamental-ngx/core/form';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { MultiInputComponent } from '@fundamental-ngx/core/multi-input';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent } from '@fundamental-ngx/platform/search-field';\nimport { ApprovalFlowTeamDataSource, ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\nimport { ApprovalFlowTeamListComponent } from '../approval-flow-team-list/approval-flow-team-list.component';\nimport { ApprovalFlowUserDetailsComponent } from '../approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowUserListComponent } from '../approval-flow-user-list/approval-flow-user-list.component';\nimport { displayTeamFn, displayUserFn, filterByName, trackByFn } from '../helpers';\nimport { ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\nimport { ApprovalFlowAddNodeViewService, VIEW_MODES } from '../services/approval-flow-add-node-view.service';\n\nexport interface AddNodeDialogRefData {\n isEdit?: boolean;\n showNodeTypeSelect?: boolean;\n node?: ApprovalNode;\n nodeTarget?: ApprovalFlowNodeTarget;\n teamDataSource: ApprovalFlowTeamDataSource<ApprovalTeam>;\n userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n userDetailsTemplate: TemplateRef<any>;\n checkDueDate?: boolean;\n rtl: boolean;\n}\n\nexport interface AddNodeDialogFormData {\n node: ApprovalNode;\n nodeType: APPROVAL_FLOW_NODE_TYPES;\n toNextSerial: boolean;\n}\n\nexport type ApprovalFlowNewNodePlacement = 'before' | 'after' | 'before-all' | 'after-all';\n\nexport type ApprovalFlowNodeTarget = ApprovalFlowNewNodePlacement | 'empty' | 'parallel';\n\nexport enum APPROVAL_FLOW_NODE_TYPES {\n SERIAL = 'SERIAL',\n PARALLEL = 'PARALLEL'\n}\n\nexport enum APPROVAL_FLOW_APPROVER_TYPES {\n SINGLE_USER = 'SINGLE_USER',\n ANYONE = 'ANYONE',\n EVERYONE = 'EVERYONE'\n}\n\n/**\n * @deprecated\n * ApprovalFlowAddNode component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-add-node',\n templateUrl: './approval-flow-add-node.component.html',\n styleUrls: ['../styles/approval-flow-dialog.scss', './approval-flow-add-node.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-dialog fdp-approval-flow-add-node'\n },\n imports: [\n DialogComponent,\n ContentDensityDirective,\n DialogHeaderComponent,\n TemplateDirective,\n IconComponent,\n SearchFieldComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n FormItemComponent,\n FormLabelComponent,\n SelectComponent,\n OptionComponent,\n MultiInputComponent,\n FormsModule,\n CheckboxComponent,\n DatePickerComponent,\n ApprovalFlowTeamListComponent,\n ApprovalFlowUserListComponent,\n ApprovalFlowUserDetailsComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n BusyIndicatorComponent,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowAddNodeComponent implements OnInit, OnDestroy {\n /** @hidden */\n _nodeType = APPROVAL_FLOW_NODE_TYPES.SERIAL;\n\n /** @hidden */\n _nodeTypes = APPROVAL_FLOW_NODE_TYPES;\n\n /** @hidden */\n _nodeTypesArray = Object.keys(APPROVAL_FLOW_NODE_TYPES);\n\n /** @hidden */\n _approverType = APPROVAL_FLOW_APPROVER_TYPES.SINGLE_USER;\n\n /** @hidden */\n _approverTypes = APPROVAL_FLOW_APPROVER_TYPES;\n\n /** @hidden */\n _approverTypesArray = Object.keys(APPROVAL_FLOW_APPROVER_TYPES);\n\n /** @hidden */\n _dueDate = FdDate.getNow();\n\n /** @hidden */\n _selectMode = false;\n\n /** @hidden */\n _approvers: ApprovalUser[] = [];\n\n /** @hidden */\n _teams: ApprovalTeam[] = [];\n\n /** @hidden */\n _selectedApprovers: ApprovalUser[] = [];\n\n /** @hidden */\n _selectedTeam: Nullable<ApprovalTeam>;\n\n /** @hidden */\n _selectedTeamArray: ApprovalTeam[] = [];\n\n /** @hidden */\n _selectedTeamMembers: ApprovalUser[] = [];\n\n /** @hidden */\n _filteredTeamMembers: ApprovalUser[] = [];\n\n /** @hidden */\n _userToShowDetails?: ApprovalUser;\n\n /** @hidden */\n _userToShowDetailsData$?: Observable<any>;\n\n /** @hidden */\n _checkDueDate = false;\n\n /** @hidden */\n _displayUserFn = displayUserFn;\n\n /** @hidden */\n _displayTeamFn = displayTeamFn;\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n _addToNextSerial = false;\n\n /** @hidden */\n _searchInput = '';\n\n /** @hidden */\n private _viewChangeSub: Subscription;\n\n /** @hidden */\n private _dataSourceSub: Subscription;\n\n /** @hidden */\n constructor(\n public dialogRef: DialogRef<AddNodeDialogRefData>,\n public viewService: ApprovalFlowAddNodeViewService,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n get _data(): AddNodeDialogRefData {\n return this.dialogRef.data;\n }\n\n /** @hidden */\n get _isSingleUserMode(): boolean {\n return this._approverType === this._approverTypes.SINGLE_USER;\n }\n\n /** @hidden */\n get _isMainSubmitButtonDisabled(): boolean {\n const approvers = this._isSingleUserMode ? this._selectedApprovers : this._selectedTeamArray;\n\n return !approvers.length || (this._checkDueDate && !this._dueDate);\n }\n\n /** @hidden */\n get _headerArrowGlyph(): string {\n return 'navigation-' + (this._data.rtl ? 'right' : 'left') + '-arrow';\n }\n\n /** @hidden */\n ngOnInit(): void {\n // triggering initial loading of data in data sources.\n this._data.teamDataSource.match();\n this._data.userDataSource.match();\n const teams$ = this._data.teamDataSource.open();\n const approvers$ = this._data.userDataSource.open();\n this._dataSourceSub = combineLatest([teams$, approvers$]).subscribe(([teams, approvers]) => {\n this._teams = teams;\n\n this._approvers = approvers;\n\n if (this._data.isEdit) {\n this._checkDueDate = !!this._data.checkDueDate;\n\n if (this._checkDueDate && this._data.node?.dueDate) {\n this._dueDate = FdDate.getFdDateByDate(new Date(this._data.node.dueDate));\n }\n\n this._selectedApprovers = [...(this._data.node?.approvers ?? [])];\n\n const team =\n this._data.node?.approvalTeamId &&\n this._teams.find((t) => t.id === this._data.node?.approvalTeamId);\n if (team) {\n this.viewService.selectTeam(team);\n\n this._selectedTeam = team;\n this._selectedTeamArray = [team];\n this._approverType = this._data.node?.isEveryoneApprovalNeeded\n ? this._approverTypes.EVERYONE\n : this._approverTypes.ANYONE;\n }\n }\n this._cdr.detectChanges();\n });\n\n this._viewChangeSub = this.viewService.onViewChange.subscribe(() => {\n this._cdr.detectChanges();\n });\n\n switch (this._data.nodeTarget) {\n case 'empty':\n case 'before':\n case 'after':\n this._nodeType = this._nodeTypes.SERIAL;\n break;\n case 'parallel':\n this._nodeType = this._nodeTypes.PARALLEL;\n break;\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._viewChangeSub.unsubscribe();\n this._dataSourceSub.unsubscribe();\n this._data.userDataSource.close();\n this._data.teamDataSource.close();\n }\n\n /** @hidden */\n _goToSelectMode(): void {\n this._selectMode = true;\n\n this.viewService.setCurrentView(this._isSingleUserMode ? VIEW_MODES.SELECT_USER : VIEW_MODES.SELECT_TEAM);\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _exitSelectMode(): void {\n this._searchInput = '';\n this._onSearchStringChange('');\n this._selectedApprovers = this._data.node?.approvers?.length ? [...this._data.node.approvers] : [];\n\n if (!this._data.isEdit && !this._data.node?.approvalTeamId) {\n this.viewService.resetTeam();\n }\n\n this._selectMode = false;\n this.viewService.resetView();\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _setSelectedApprovers(approvers: ApprovalUser[]): void {\n this._selectedApprovers = approvers;\n\n this._confirmSelectedApprovers();\n }\n\n /** @hidden */\n _confirmSelectedApprovers(): void {\n if (!this._data.node) {\n return;\n }\n this._data.node.approvers = this._selectedApprovers;\n this._data.node.variousTeams = this._data.node.approvers.some(\n (u) => u.teamId !== this._data.node!.approvers[0].teamId\n );\n this._data.node.description = this._data.node.variousTeams ? '' : this._selectedApprovers[0]?.description;\n\n delete this._data.node.approvalTeamId;\n delete this._data.node.isEveryoneApprovalNeeded;\n\n this._exitSelectMode();\n }\n\n /** @hidden */\n _setSelectedTeam(team: ApprovalTeam): void {\n this.viewService.selectTeam(team);\n }\n\n /** @hidden */\n _confirmSelectedTeam(): void {\n if (!this.viewService.team) {\n return;\n }\n this._selectedTeam = this.viewService.team;\n this._selectedTeamArray = [this.viewService.team];\n\n if (this._data.node) {\n this._data.node.variousTeams = false;\n this._data.node.approvalTeamId = this.viewService.team.id;\n this._data.node.description = this.viewService.team.name;\n this._data.node.isEveryoneApprovalNeeded = this._approverType === APPROVAL_FLOW_APPROVER_TYPES.EVERYONE;\n }\n\n this._exitSelectMode();\n }\n\n /** @hidden */\n _seeUserDetails(user: ApprovalUser): void {\n this.viewService.setCurrentView(VIEW_MODES.USER_DETAILS);\n\n this._userToShowDetails = user;\n this._userToShowDetailsData$ = this._data.userDataSource.dataProvider.getOne(new Map([['id', user.id]]));\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _exitUserDetailsMode(): void {\n this.viewService.setCurrentView(this.viewService.team ? VIEW_MODES.VIEW_TEAM_MEMBERS : VIEW_MODES.SELECT_USER);\n\n this._userToShowDetails = undefined;\n this._userToShowDetailsData$ = undefined;\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _viewTeamMembers(team: ApprovalTeam): void {\n this.viewService.selectTeam(team);\n this.viewService.setCurrentView(VIEW_MODES.VIEW_TEAM_MEMBERS);\n\n this._selectedTeamMembers = team.members;\n\n this._setFilteredTeamMembers(this._selectedTeamMembers); // applying local filtering\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _exitTeamMembersMode(): void {\n this.viewService.setCurrentView(VIEW_MODES.SELECT_TEAM);\n this.viewService.resetTeam();\n\n this._selectedTeamMembers = [];\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _submit(): void {\n if (this._data.node && !this._isSingleUserMode && this._selectedTeam) {\n this._data.node.approvers = [...this._selectedTeam.members];\n }\n\n if (this._data.node && this._checkDueDate) {\n this._data.node.dueDate = this._dueDate.toDate();\n }\n\n this.dialogRef.close({\n node: this._data.node,\n nodeType: this._nodeType,\n toNextSerial: this._addToNextSerial\n } as AddNodeDialogFormData);\n }\n\n /** @hidden */\n _onSearchStringChange(searchString = ''): void {\n this._searchInput = searchString;\n const params = new Map([['query', searchString]]);\n\n if (this.viewService.isSelectUserMode) {\n this._data.userDataSource.match(params);\n } else if (this.viewService.isSelectTeamMode) {\n this._data.teamDataSource.match(params);\n } else if (this.viewService.isTeamMembersMode) {\n this._setFilteredTeamMembers(this._selectedTeamMembers.filter((user) => filterByName(user, searchString)));\n }\n }\n\n /** @hidden */\n _setFilteredTeamMembers(users: ApprovalUser[]): void {\n this._filteredTeamMembers = [...users];\n this._cdr.detectChanges();\n }\n}\n","<fd-dialog fdCompact>\n <fd-dialog-header [class.show-search]=\"_selectMode && !_userToShowDetails\">\n <ng-template fdkTemplate=\"header\">\n <p>\n @if (!_selectMode && !_data.isEdit) {\n {{ ('platformApprovalFlow.addNodeDialogHeaderAddApprovers' | fdTranslate)() }}\n }\n @if (!_selectMode && _data.isEdit) {\n {{ ('platformApprovalFlow.addNodeDialogHeaderEditApprover' | fdTranslate)() }}\n }\n @if (viewService.isSelectUserMode || viewService.isSelectTeamMode) {\n {{ ('platformApprovalFlow.addNodeDialogHeaderAddApproverTeam' | fdTranslate)() }}\n }\n @if (viewService.isTeamMembersMode) {\n <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitTeamMembersMode()\"></fd-icon>\n {{ viewService.team?.name ?? '' }} ({{ viewService.team?.members?.length ?? 0 }})\n }\n @if (viewService.isUserDetailsMode) {\n <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitUserDetailsMode()\"></fd-icon>\n {{ ('platformApprovalFlow.addNodeDialogHeaderDetail' | fdTranslate)() }}\n }\n </p>\n @if (_selectMode && !_userToShowDetails) {\n <fdp-search-field\n [placeholder]=\"('platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate)()\"\n [suggestions]=\"[]\"\n [inputText]=\"_searchInput\"\n (inputChange)=\"_onSearchStringChange($event.text)\"\n ></fdp-search-field>\n }\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [class.fd-dialog__body--auto-height]=\"viewService.isUserDetailsMode\">\n @if (!_selectMode) {\n @if (_data.showNodeTypeSelect) {\n <div fd-form-item>\n <label fd-form-label>\n {{ ('platformApprovalFlow.addNodeDialogNodeType' | fdTranslate)() }}\n </label>\n <fd-select [(value)]=\"_nodeType\">\n @for (option of _nodeTypesArray; track option) {\n @switch (option) {\n @case (_nodeTypes.SERIAL) {\n <li fd-option [value]=\"option\">\n {{ ('platformApprovalFlow.addNodeDialogNodeTypeSerial' | fdTranslate)() }}\n </li>\n }\n @case (_nodeTypes.PARALLEL) {\n <li fd-option [value]=\"option\">\n {{ ('platformApprovalFlow.addNodeDialogNodeTypeParallel' | fdTranslate)() }}\n </li>\n }\n }\n }\n </fd-select>\n </div>\n }\n <div fd-form-item>\n <label fd-form-label>\n {{ ('platformApprovalFlow.addNodeDialogApproverType' | fdTranslate)() }}\n </label>\n <fd-select [(value)]=\"_approverType\">\n @for (option of _approverTypesArray; track option) {\n @switch (option) {\n @case (_approverTypes.SINGLE_USER) {\n <li fd-option [value]=\"option\">\n {{ ('platformApprovalFlow.addNodeDialogApproverTypeUser' | fdTranslate)() }}\n </li>\n }\n @case (_approverTypes.ANYONE) {\n <li fd-option [value]=\"option\">\n {{ ('platformApprovalFlow.addNodeDialogApproverTypeTeamAnyone' | fdTranslate)() }}\n </li>\n }\n @case (_approverTypes.EVERYONE) {\n <li fd-option [value]=\"option\">\n {{ ('platformApprovalFlow.addNodeDialogApproverTypeTeamEveryone' | fdTranslate)() }}\n </li>\n }\n }\n }\n </fd-select>\n </div>\n <div fd-form-item>\n <label fd-form-label>{{ ('platformApprovalFlow.addNodeDialogUserOrTeam' | fdTranslate)() }}</label>\n @if (_isSingleUserMode) {\n <fd-multi-input\n [showAllButton]=\"false\"\n [dropdownValues]=\"_selectedApprovers\"\n [(ngModel)]=\"_selectedApprovers\"\n [displayFn]=\"_displayUserFn\"\n (openChange)=\"_goToSelectMode()\"\n (selectedChange)=\"_setSelectedApprovers($event)\"\n ></fd-multi-input>\n }\n @if (!_isSingleUserMode) {\n <fd-multi-input\n [showAllButton]=\"false\"\n [dropdownValues]=\"_selectedTeamArray\"\n [(ngModel)]=\"_selectedTeamArray\"\n [displayFn]=\"_displayTeamFn\"\n (openChange)=\"_goToSelectMode()\"\n ></fd-multi-input>\n }\n </div>\n @if (_nodeType === _nodeTypes.PARALLEL) {\n <div fd-form-item>\n <fd-checkbox [(ngModel)]=\"_addToNextSerial\">\n {{ ('platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate)() }}\n </fd-checkbox>\n </div>\n }\n @if (_checkDueDate) {\n <div fd-form-item>\n <label fd-form-label>{{ ('platformApprovalFlow.addNodeDialogDueDate' | fdTranslate)() }}</label>\n <fd-date-picker type=\"single\" [state]=\"!this._dueDate ? 'error' : null\" [(ngModel)]=\"_dueDate\">\n </fd-date-picker>\n </div>\n }\n }\n @if (_selectMode) {\n @if (viewService.isSelectTeamMode) {\n @if (!_data.teamDataSource.isDataLoading) {\n <fdp-approval-flow-team-list\n [isRtl]=\"_data.rtl\"\n [teams]=\"_teams\"\n [selectedTeamId]=\"_selectedTeam?.id\"\n (onTeamClick)=\"_viewTeamMembers($event)\"\n (onTeamRadioClick)=\"_setSelectedTeam($event)\"\n ></fdp-approval-flow-team-list>\n } @else {\n <fd-busy-indicator [loading]=\"true\" [block]=\"true\"> </fd-busy-indicator>\n }\n }\n @if (viewService.isSelectUserMode || viewService.isTeamMembersMode) {\n @if (viewService.isSelectUserMode || !_data.userDataSource.isDataLoading) {\n <fdp-approval-flow-user-list\n [users]=\"viewService.isSelectUserMode ? _approvers : _filteredTeamMembers\"\n [isSelectable]=\"viewService.isSelectUserMode\"\n [selectedUsers]=\"_selectedApprovers\"\n (onUserClick)=\"_seeUserDetails($event)\"\n (onSelectionChange)=\"_selectedApprovers = $event\"\n ></fdp-approval-flow-user-list>\n } @else {\n <fd-busy-indicator [loading]=\"true\" [block]=\"true\"> </fd-busy-indicator>\n }\n }\n @if (viewService.isUserDetailsMode && _userToShowDetails) {\n <fdp-approval-flow-user-details\n [user]=\"_userToShowDetails\"\n [detailsTemplate]=\"_data.userDetailsTemplate\"\n [details]=\"_userToShowDetailsData$\"\n ></fdp-approval-flow-user-details>\n }\n }\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (!_selectMode) {\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformApprovalFlow.addNodeAddActionBtnLabel' | fdTranslate)()\"\n [disabled]=\"_isMainSubmitButtonDisabled\"\n (click)=\"_submit()\"\n >\n </fd-button-bar>\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"('platformApprovalFlow.addNodeCancelActionBtnLabel' | fdTranslate)()\"\n (click)=\"dialogRef.close()\"\n ></fd-button-bar>\n }\n @if (_selectMode) {\n @if (viewService.isSelectUserMode) {\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate)()\"\n [disabled]=\"!_selectedApprovers.length\"\n (click)=\"_confirmSelectedApprovers()\"\n ></fd-button-bar>\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"('platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate)()\"\n (click)=\"_exitSelectMode()\"\n ></fd-button-bar>\n }\n @if (viewService.isSelectTeamMode) {\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate)()\"\n [disabled]=\"!_selectedTeam && !viewService.team\"\n (click)=\"_confirmSelectedTeam()\"\n ></fd-button-bar>\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"('platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate)()\"\n (click)=\"_exitSelectMode()\"\n ></fd-button-bar>\n }\n @if (viewService.isTeamMembersMode) {\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"('platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate)()\"\n (click)=\"_exitTeamMembersMode()\"\n ></fd-button-bar>\n }\n @if (viewService.isUserDetailsMode) {\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"('platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate)()\"\n (click)=\"_exitUserDetailsMode()\"\n ></fd-button-bar>\n }\n }\n </fd-dialog-footer>\n</fd-dialog>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnInit,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent } from '@fundamental-ngx/platform/search-field';\nimport { ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\nimport { ApprovalFlowUserDetailsComponent } from '../approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowUserListComponent } from '../approval-flow-user-list/approval-flow-user-list.component';\nimport { filterByName } from '../helpers';\nimport { ApprovalNode, ApprovalUser } from '../interfaces';\n\nexport interface ApprovalFlowApproverDetailsDialogRefData {\n node?: ApprovalNode;\n watcher?: ApprovalUser;\n allowSendReminder?: boolean;\n userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n userDetailsTemplate: TemplateRef<any>;\n rtl?: boolean;\n}\n\n/**\n * @deprecated\n * ApprovalFlowApproverDetails component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-approver-details',\n templateUrl: './approval-flow-approver-details.component.html',\n styleUrl: '../styles/approval-flow-dialog.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-approval-flow-dialog fdp-approval-flow-approver-details'\n },\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n IconComponent,\n SearchFieldComponent,\n ContentDensityDirective,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n ApprovalFlowUserDetailsComponent,\n ApprovalFlowUserListComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowApproverDetailsComponent implements OnInit {\n /** @hidden */\n _isListMode = false;\n\n /** @hidden */\n _listItems: ApprovalUser[] = [];\n\n /** @hidden */\n _selectedUsers: ApprovalUser[] = [];\n\n /** @hidden */\n _userToShowDetails?: ApprovalUser;\n\n /** @hidden */\n _userToShowDetailsData$: Observable<any>;\n\n /** @hidden */\n constructor(\n public dialogRef: DialogRef<ApprovalFlowApproverDetailsDialogRefData>,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n get _data(): ApprovalFlowApproverDetailsDialogRefData {\n return this.dialogRef.data;\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._isListMode = (this._data.node?.approvers.length ?? 0) > 1;\n\n if (this._isListMode) {\n this._setListItems(this._data.node?.approvers ?? []);\n } else {\n const user = this._data.watcher || this._data.node?.approvers[0];\n if (user) {\n this._seeUserDetails(user);\n } else {\n this.dialogRef.close();\n }\n }\n }\n\n /** @hidden */\n _setListItems(items: ApprovalUser[] = []): void {\n this._listItems = [...items];\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _exitUserDetailsMode(): void {\n this._userToShowDetails = undefined;\n this._isListMode = true;\n }\n\n /** @hidden */\n _seeUserDetails(user: ApprovalUser): void {\n this._userToShowDetails = user;\n this._userToShowDetailsData$ = this._data.userDataSource.dataProvider.getOne(new Map([['id', user.id]]));\n this._isListMode = false;\n this._selectedUsers = [];\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _sendReminder(): void {\n const reminderTargets = this._isListMode ? this._selectedUsers : this._data.node?.approvers;\n this.dialogRef.close(reminderTargets);\n }\n\n /** @hidden */\n _onSearchStringChange(searchString: string): void {\n if (!searchString) {\n this._setListItems(this._data.node?.approvers);\n return;\n }\n\n this._setListItems(this._data.node?.approvers.filter((user) => filterByName(user, searchString)));\n }\n}\n","<fd-dialog>\n <fd-dialog-header [class.show-search]=\"!_userToShowDetails && _isListMode\">\n <ng-template fdkTemplate=\"header\">\n <p>\n @if (_userToShowDetails && _data.node?.approvers && _data.node!.approvers!.length > 1) {\n <fd-icon\n [glyph]=\"'navigation-' + (_data.rtl ? 'right' : 'left') + '-arrow'\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"_exitUserDetailsMode()\"\n (keyup.space)=\"_exitUserDetailsMode()\"\n (keyup.enter)=\"_exitUserDetailsMode()\"\n ></fd-icon>\n }\n @if (_isListMode && !_userToShowDetails) {\n {{ _data.node?.description }} ({{ _data.node?.approvers?.length ?? 0 }})\n } @else {\n {{ ('platformApprovalFlow.userDetailsHeader' | fdTranslate)() }}\n }\n </p>\n @if (!_userToShowDetails && _isListMode) {\n <fdp-search-field\n [placeholder]=\"('platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate)()\"\n fdCompact\n [suggestions]=\"[]\"\n (inputChange)=\"_onSearchStringChange($event.text)\"\n ></fdp-search-field>\n }\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n @if (_userToShowDetails) {\n <fdp-approval-flow-user-details\n [user]=\"_userToShowDetails\"\n [detailsTemplate]=\"_data.userDetailsTemplate\"\n [details]=\"_userToShowDetailsData$\"\n ></fdp-approval-flow-user-details>\n }\n @if (_isListMode) {\n <fdp-approval-flow-user-list\n [users]=\"_listItems\"\n (onUserClick)=\"_seeUserDetails($event)\"\n (onSelectionChange)=\"_selectedUsers = $event\"\n ></fdp-approval-flow-user-list>\n }\n </fd-dialog-body>\n <fd-dialog-footer fdCompact>\n @if (_isListMode || (_userToShowDetails && _data.node?.approvers?.length === 1)) {\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformApprovalFlow.userDetailsSendReminderBtnLabel' | fdTranslate)()\"\n [disabled]=\"!_data.allowSendReminder || (_isListMode && !_selectedUsers.length)\"\n (click)=\"_sendReminder()\"\n ></fd-button-bar>\n }\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"('platformApprovalFlow.userDetailsCancelBtnLabel' | fdTranslate)()\"\n (click)=\"dialogRef.close('Cancel')\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { MessageStripComponent } from '@fundamental-ngx/core/message-strip';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { trackByFn } from '../helpers';\n\nexport type ApprovalFlowMessageType =\n | 'watchersChangeSuccess'\n | 'approverAddSuccess'\n | 'teamAddSuccess'\n | 'nodeEdit'\n | 'nodeRemove'\n | 'nodesRemove'\n | 'teamRemove'\n | 'error';\n\nexport interface ApprovalFlowMessage {\n type: ApprovalFlowMessageType;\n}\n\n/**\n * @deprecated\n * ApprovalFlowMessages component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-messages',\n templateUrl: './approval-flow-messages.component.html',\n styleUrl: './approval-flow-messages.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-messages'\n },\n imports: [MessageStripComponent, FdTranslatePipe]\n})\nexport class ApprovalFlowMessagesComponent {\n /** Array of messages */\n @Input()\n messages: ApprovalFlowMessage[] = [];\n\n /** Whether undo action is available */\n @Input()\n undoLastActionAvailable = false;\n\n /** Event emitted when messages array change */\n @Output()\n messagesChange = new EventEmitter<ApprovalFlowMessage[]>();\n\n /** Event emitted when user click undo button */\n @Output()\n undoLastAction = new EventEmitter<void>();\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n _dismissMessage(messageIndex: number): void {\n this.messages.splice(messageIndex, 1);\n }\n\n /** @hidden */\n _undoLastAction(messageIndex: number, event: Event): void {\n event.preventDefault();\n\n this._dismissMessage(messageIndex);\n this.undoLastAction.emit();\n }\n}\n","@for (message of messages; track message; let i = $index) {\n <fd-message-strip\n class=\"fdp-approval-flow-messages__item\"\n [type]=\"message.type === 'error' ? 'error' : 'success'\"\n [dismissible]=\"message.type !== 'error'\"\n (onDismiss)=\"_dismissMessage(i)\"\n >\n <bdi>\n <span>\n @switch (message.type) {\n @case ('approverAddSuccess') {\n {{ ('platformApprovalFlow.messagesApproverAddedSuccess' | fdTranslate)() }}\n }\n @case ('teamAddSuccess') {\n {{ ('platformApprovalFlow.messagesTeamAddedSuccess' | fdTranslate)() }}\n }\n @case ('nodeEdit') {\n {{ ('platformApprovalFlow.messagesNodeEdited' | fdTranslate)() }}\n }\n @case ('nodeRemove') {\n {{ ('platformApprovalFlow.messagesNodeRemovedSingular' | fdTranslate)() }}\n }\n @case ('nodesRemove') {\n {{ ('platformApprovalFlow.messagesNodeRemovedPlural' | fdTranslate)() }}\n }\n @case ('teamRemove') {\n {{ ('platformApprovalFlow.messagesTeamRemoved' | fdTranslate)() }}\n }\n @case ('error') {\n {{ ('platformApprovalFlow.messagesErrorBuildGraph' | fdTranslate)() }}\n }\n }\n </span>\n @if (undoLastActionAvailable) {\n <a\n href=\"#\"\n (click)=\"_undoLastAction(i, $event)\"\n (keyup.enter)=\"_undoLastAction(i, $event)\"\n (keyup.space)=\"_undoLastAction(i, $event)\"\n >\n {{ ('platformApprovalFlow.messagesUndoAction' | fdTranslate)() }}\n </a>\n }\n </bdi>\n </fd-message-strip>\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\n\nimport { ApprovalFlowNewNodePlacement } from '../approval-flow-add-node/approval-flow-add-node.component';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fdp-approval-flow-drop-zone]',\n exportAs: 'fdp-approval-flow-drop-zone',\n standalone: true\n})\nexport class ApprovalFlowDropZoneDirective {\n /** Approval flow new node placement */\n @Input()\n placement: ApprovalFlowNewNodePlacement;\n\n /** Whether drop zone is active (pointer with dragged node over the drop zone) */\n active = false;\n\n /** @hidden */\n constructor(private readonly elRef: ElementRef) {}\n\n /** @hidden */\n _checkIfNodeDraggedInDropZone(nodeRect: DOMRect): void {\n this.active = false;\n\n const dropZoneRect = this.elRef.nativeElement.getBoundingClientRect();\n\n if (\n dropZoneRect.top + dropZoneRect.height > nodeRect.top &&\n dropZoneRect.left + dropZoneRect.width > nodeRect.left &&\n dropZoneRect.bottom - dropZoneRect.height < nodeRect.bottom &&\n dropZoneRect.right - dropZoneRect.width < nodeRect.right\n ) {\n this.active = true;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { GridListItemComponent } from '@fundamental-ngx/core/grid-list';\nimport { MenuComponent } from '@fundamental-ngx/core/menu';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n MenuInteractiveComponent,\n MenuItemComponent,\n MenuTitleDirective,\n MenuTriggerDirective\n} from '@fundamental-ngx/core/menu';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ObjectStatusComponent, PlatformObjectStatusTextDirective } from '@fundamental-ngx/platform/object-status';\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { isNodeApproved, isNodeStarted } from '../helpers';\nimport { ApprovalGraphNode, ApprovalGraphNodeMetadata, ApprovalStatus } from '../interfaces';\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-drop-zone.directive';\n\nconst NODE_STATUS_CLASS_MAP = {\n approved: 'positive',\n rejected: 'negative',\n 'in progress': 'informative',\n 'not started': ''\n};\n\nconst DAY_IN_MILLISECONDS = 1000 * 60 * 60 * 24;\n\nlet defaultId = 0;\n\n/**\n * @deprecated\n * ApprovalFlowNode component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-node',\n templateUrl: './approval-flow-node.component.html',\n styleUrl: './approval-flow-node.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-approval-flow-node',\n '[class.fdp-approval-flow-node--first-root]': 'meta?.firstOfMultipleRootNodes',\n '[class.fdp-approval-flow-node--first-final]': 'meta?.firstOfMultipleFinalNodes'\n },\n imports: [\n ButtonComponent,\n ContentDensityDirective,\n MenuTriggerDirective,\n ObjectStatusComponent,\n PlatformObjectStatusTextDirective,\n NgTemplateOutlet,\n ApprovalFlowDropZoneDirective,\n MenuComponent,\n MenuItemComponent,\n MenuInteractiveComponent,\n MenuTitleDirective,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowNodeComponent implements OnInit, OnChanges, OnDestroy {\n /** Approval flow graph node */\n @Input() node: ApprovalGraphNode;\n\n /** Node metadata */\n @Input() meta: ApprovalGraphNodeMetadata;\n\n /** Whether node element has arrow on the left side pointing to the node */\n @Input() renderArrow = false;\n\n /** Whether to display due date warning in status */\n @Input() checkDueDate = false;\n\n /** Number of days before due date when status changes to `warning` with text 'Due in X days'.\n * Not used if 'checkDueDate' equals false */\n @Input() dueDateThreshold = 7;\n\n /** Whether nodes in column in which current node placed are approved\n * Used to render appropriate vertical line after (dashed/solid)\n */\n @Input() allNodesInColumnApproved = false;\n\n /** A reference to the app custom statuses */\n @Input()\n approvalStatusTemplate: TemplateRef<any>;\n\n /** Custom status to color mapping */\n @Input()\n statusColorMapping: Record<ApprovalStatus, ObjectStatus>;\n\n /** Whether the node is in edit mode */\n @Input()\n @HostBinding('class.fdp-approval-flow-node--edit-mode')\n isEdit: boolean;\n\n /** Whether the node after is blank */\n @Input()\n @HostBinding('class.fdp-approval-flow-node--next-blank')\n isNextNodeBlank: boolean;\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--blank')\n get _blank(): boolean {\n return !!this.node?.blank;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--space')\n get _space(): boolean {\n return !!this.node?.space;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--root')\n get _isRoot(): boolean {\n return this.meta?.isRoot;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--final')\n get _isFinal(): boolean {\n return this.meta?.isFinal;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--line-before')\n get _renderLineBefore(): boolean {\n return !this.node?.blank;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--line-after')\n get _renderLineAfter(): boolean {\n return !this.node?.blank || this._isFinal;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--approved')\n get _isApproved(): boolean {\n return this.node && isNodeApproved(this.node);\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--parent-approved')\n get _isParentApproved(): boolean {\n if (!this.meta?.parents?.length) {\n return !!this.meta?.rootNodesApproved;\n }\n\n return this.meta.parents.every((node) => isNodeApproved(node));\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--selected')\n get _isNodeSelected(): boolean {\n return this.isEdit && this._isSelected;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--parallel-start')\n get _isParallelStart(): boolean {\n return Boolean(this.meta?.parallelStart);\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--parallel-end')\n get _isParallelEnd(): boolean {\n return Boolean(this.meta?.parallelEnd);\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--first-in-parallel')\n get _isFirstInParallel(): boolean {\n return Boolean(this.meta?.isFirstInParallel);\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--last-in-parallel')\n get _isLastInParallel(): boolean {\n return Boolean(this.meta?.isLastInParallel);\n }\n\n /** Whether the node is blank and the final */\n @HostBinding('class.fdp-approval-flow-node--last-blank')\n get _lastBlank(): boolean {\n return this._blank && this.node.targets.length === 0;\n }\n\n /** @hidden */\n get _isSelected(): boolean {\n return !!this.node.selected;\n }\n\n /** Event emitted on add node button clicked, value is the placement for the new node */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onAdd = new EventEmitter<ApprovalFlowNodeTarget>();\n\n /** Event emitted on edit node button clicked */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onEdit = new EventEmitter<void>();\n\n /** Event emitted on delete node button clicked */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onDelete = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(MenuComponent)\n _menu: MenuComponent;\n\n /** @hidden */\n @ViewChild('overflowMenuButton')\n _overflowMenuButton: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('nodeContent')\n _nodeContent: TemplateRef<any>;\n\n /** @hidden */\n @ViewChildren(ApprovalFlowDropZoneDirective)\n _dropZones: QueryList<ApprovalFlowDropZoneDirective>;\n\n /** @hidden */\n @ContentChild(GridListItemComponent)\n _gridListItem: GridListItemComponent<ApprovalGraphNode>;\n\n /** @hidden */\n _objectStatus: ObjectStatus;\n\n /** @hidden */\n _showDueDateWarning = false;\n\n /** @hidden */\n _dueIn = 0;\n\n /** @hidden */\n readonly approvalFlowNodeId = 'fdp-approval-flow-node-' + defaultId++;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(\n private readonly _elRef: ElementRef,\n private readonly _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n get _nativeElement(): HTMLElement {\n return this._elRef.nativeElement;\n }\n\n /** @hidden */\n get _isNotStarted(): boolean {\n return !isNodeStarted(this.node);\n }\n\n /** @hidden */\n get _isEditActionsAvailable(): boolean {\n return this.node.status === 'approved' || this.node.status === 'rejected';\n }\n\n /** @hidden */\n get _activeDropZones(): ApprovalFlowDropZoneDirective[] {\n return this._dropZones.filter((z) => z.active);\n }\n\n /** @hidden */\n get _isAnyDropZoneActive(): boolean {\n return this._activeDropZones.length > 0;\n }\n\n /** @hidden */\n get _isVerticalLineBeforeSolid(): boolean {\n if (!this.meta?.parents.length) {\n return !!this.meta?.isVerticalLineBeforeSolid;\n }\n\n return this.meta.parents.every((parentNode) => isNodeApproved(parentNode));\n }\n\n /** @hidden */\n get _isVerticalLineAfterSolid(): boolean {\n if (!this.node?.targets.length) {\n return !!this.meta?.isVerticalLineAfterSolid;\n }\n\n return this._isVerticalLineBeforeSolid && this.allNodesInColumnApproved;\n }\n\n /** @hidden */\n get _showAddButton(): boolean {\n return this.isEdit && !this._blank && !this._space && !this.node?.disableActions;\n }\n\n /** @hidden */\n get _showAfterAllAddButton(): boolean {\n return this.isEdit && !this._space && !this.node?.disableActions;\n }\n\n /** @hidden */\n _dropZonePartial(placement: ApprovalFlowNodeTarget): boolean {\n return (\n (!this._blank && (!this.isNextNodeBlank || placement === 'before')) ||\n (this._lastBlank && placement === 'after-all')\n );\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._checkNodeStatus();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this._checkNodeStatus();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n _onMenuOpen(): void {\n this._menu?.refreshPosition();\n }\n\n /** @hidden */\n _focus(options?: FocusOptions): void {\n this._gridListItem?.focus(options);\n }\n\n /** @hidden */\n _deactivateDropZones(): void {\n this._dropZones.forEach((dropZone) => (dropZone.active = false));\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _checkIfNodeDraggedInDropZone(nodeRect: DOMRect): void {\n this._dropZones.forEach((dropZone) => dropZone._checkIfNodeDraggedInDropZone(nodeRect));\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n private _checkNodeStatus(): void {\n if (!this.node) {\n return;\n }\n\n if (this.checkDueDate && this.node.dueDate) {\n const dueThreshold = Number(new Date(this.node.dueDate)) - this.dueDateThreshold * DAY_IN_MILLISECONDS;\n const nowAndDueDiff = Date.now() - dueThreshold;\n\n this._dueIn = Math.round(nowAndDueDiff / DAY_IN_MILLISECONDS);\n this._showDueDateWarning = !isNodeApproved(this.node) && dueThreshold < Date.now();\n this._objectStatus = this._showDueDateWarning ? 'critical' : this._getNodeStatusClass();\n\n this._cdr.detectChanges();\n\n return;\n }\n\n this._objectStatus = this._getNodeStatusClass();\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n private _getNodeStatusClass(): ObjectStatus {\n return (\n this.statusColorMapping\n ? this.statusColorMapping[this.node.status]\n : NODE_STATUS_CLASS_MAP[this.node.status]\n ) as ObjectStatus;\n }\n}\n","@if (meta?.renderVerticalLineBefore) {\n <div\n class=\"fdp-approval-flow-node__vertical-line-before\"\n [class.fdp-approval-flow-node__vertical-line-before-solid]=\"_isVerticalLineBeforeSolid\"\n ></div>\n}\n@if (meta?.renderVerticalLineAfter) {\n <div\n class=\"fdp-approval-flow-node__vertical-line-after\"\n [class.fdp-approval-flow-node__vertical-line-after-solid]=\"_isVerticalLineAfterSolid\"\n ></div>\n}\n@if (!_blank && !_space) {\n @if (renderArrow) {\n <div class=\"fdp-approval-flow-node__arrow\"></div>\n }\n @if (_isRoot && meta?.nodeIndex === 0) {\n <div class=\"fdp-approval-flow-node__carousel-start-marker\"></div>\n }\n @if (_isFinal && meta?.nodeIndex === 0) {\n <div class=\"fdp-approval-flow-node__carousel-end-marker\"></div>\n }\n <ng-content></ng-content>\n}\n<ng-template #overflowMenuButton>\n <!-- Actually just the fd-grid-item action button but with some hardcode to be used as menu trigger -->\n @if (!node?.disableActions) {\n <button\n class=\"fdp-approval-flow-node__menu-button\"\n fd-button\n fdType=\"transparent\"\n tabindex=\"0\"\n glyph=\"overflow\"\n [title]=\"('platformApprovalFlow.nodeMenuButtonTitle' | fdTranslate)()\"\n fdCompact\n [fdMenuTrigger]=\"menu\"\n [disabled]=\"_isEditActionsAvailable\"\n (click)=\"$event.stopPropagation()\"\n ></button>\n }\n</ng-template>\n<ng-template #nodeContent>\n <div class=\"fdp-approval-flow-node__info\">\n <div\n class=\"fdp-approval-flow-node__name\"\n [class.fdp-approval-flow-node__name--members-count]=\"node.approvers.length > 1\"\n [id]=\"approvalFlowNodeId\"\n >\n @if (node.approvers.length === 1) {\n {{ node.approvers[0].name }}\n } @else {\n {{ ('platformApprovalFlow.nodeMembersCount' | fdTranslate: { count: node.approvers.length })() }}\n }\n </div>\n <div class=\"fdp-approval-flow-node__description\">\n @if (!node.variousTeams) {\n {{\n node.approvers.length > 1\n ? node.description\n : node.approvers.length\n ? node.approvers[0].description\n : ''\n }}\n } @else {\n {{ ('platformApprovalFlow.nodeVariousTeams' | fdTranslate)() }}\n }\n <ng-template #variousTeams> {{ ('platformApprovalFlow.nodeVariousTeams' | fdTranslate)() }} </ng-template>\n </div>\n <fdp-object-status [status]=\"_objectStatus\" [inverted]=\"true\">\n <ng-template fdpObjectStatusText>\n @if (approvalStatusTemplate) {\n @if (!checkDueDate || !_showDueDateWarning) {\n @if (approvalStatusTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"approvalStatusTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\"\n >\n </ng-template>\n }\n }\n } @else {\n @if (!checkDueDate || !_showDueDateWarning) {\n @switch (node.status) {\n @case ('approved') {\n {{ ('platformApprovalFlow.statusApproved' | fdTranslate)() }}\n }\n @case ('rejected') {\n {{ ('platformApprovalFlow.statusRejected' | fdTranslate)() }}\n }\n @case ('in progress') {\n {{ ('platformApprovalFlow.statusInProgress' | fdTranslate)() }}\n }\n @case ('not started') {\n {{ ('platformApprovalFlow.statusNotStarted' | fdTranslate)() }}\n }\n }\n }\n }\n @if (checkDueDate && _showDueDateWarning) {\n @if (_dueIn === dueDateThreshold) {\n {{ ('platformApprovalFlow.nodeStatusDueToday' | fdTranslate)() }}\n }\n @if (_dueIn < dueDateThreshold) {\n {{\n (\n 'platformApprovalFlow.nodeStatusDueInXDays'\n | fdTranslate: { count: dueDateThreshold - _dueIn }\n )()\n }}\n }\n @if (_dueIn > dueDateThreshold) {\n {{\n (\n 'platformApprovalFlow.nodeStatusXDaysOverdue'\n | fdTranslate: { count: _dueIn - dueDateThreshold }\n )()\n }}\n }\n }\n </ng-template>\n </fdp-object-status>\n </div>\n</ng-template>\n@if (_showAddButton && meta?.canAddNodeBeforeAll && !node?.actionsConfig?.disableAddBefore) {\n <ng-template\n [ngTemplateOutlet]=\"addNodeButton\"\n [ngTemplateOutletContext]=\"{ placement: 'before-all' }\"\n ></ng-template>\n}\n@if (_showAddButton && meta?.canAddNodeBefore && !node?.actionsConfig?.disableAddBefore) {\n <ng-template [ngTemplateOutlet]=\"addNodeButton\" [ngTemplateOutletContext]=\"{ placement: 'before' }\"></ng-template>\n}\n@if (\n _showAddButton && meta?.canAddNodeAfter && meta?.renderAddNodeAfterButton && !node?.actionsConfig?.disableAddAfter\n) {\n <ng-template [ngTemplateOutlet]=\"addNodeButton\" [ngTemplateOutletContext]=\"{ placement: 'after' }\"></ng-template>\n}\n@if (\n _showAfterAllAddButton &&\n meta?.canAddNodeAfterAll &&\n meta?.renderAddNodeAfterButton &&\n !node?.actionsConfig?.disableAddAfter\n) {\n <ng-template\n [ngTemplateOutlet]=\"addNodeButton\"\n [ngTemplateOutletContext]=\"{ placement: 'after-all' }\"\n ></ng-template>\n}\n<ng-template #addNodeButton let-placement=\"placement\">\n @if (node.status !== 'approved') {\n <button\n fd-button\n glyph=\"add\"\n [title]=\"('platformApprovalFlow.addNodeButtonTitle' | fdTranslate)()\"\n fdCompact\n class=\"fdp-approval-flow-node__add\"\n [class.fdp-approval-flow-node__add--blank]=\"this._blank\"\n [class.fdp-approval-flow-node__add--before]=\"\n !this._blank && (placement === 'before' || placement === 'before-all')\n \"\n [class.fdp-approval-flow-node__add--before-all]=\"!this._blank && placement === 'before-all'\"\n [class.fdp-approval-flow-node__add--after]=\"\n !this._blank && (placement === 'after' || placement === 'after-all')\n \"\n [class.fdp-approval-flow-node__add--after-all]=\"placement === 'after-all'\"\n [style.visibility]=\"dropZone.active ? 'hidden' : ''\"\n (click)=\"onAdd.emit(placement)\"\n ></button>\n }\n <div\n #dropZone=\"fdp-approval-flow-drop-zone\"\n fdp-approval-flow-drop-zone\n [placement]=\"placement\"\n class=\"fdp-approval-flow-node__drop-zone\"\n [class.fdp-approval-flow-node__drop-zone--active]=\"dropZone.active\"\n [class.fdp-approval-flow-node__drop-zone--blank]=\"isNextNodeBlank\"\n [class.fdp-approval-flow-node__drop-zone--partial]=\"_dropZonePartial(placement)\"\n ></div>\n</ng-template>\n<fd-menu #menu fdContentDensity placement=\"bottom-end\" (isOpenChange)=\"_onMenuOpen()\">\n @if (meta?.canAddNodeBefore && !this.node?.actionsConfig?.disableAddBefore) {\n <li fd-menu-item (click)=\"menu.close(); onAdd.emit('before')\">\n <div fd-menu-interactive>\n <span fd-menu-title>{{ ('platformApprovalFlow.nodeActionAddApproversBefore' | fdTranslate)() }}</span>\n </div>\n </li>\n }\n @if (meta?.canAddNodeAfter && !this.node?.actionsConfig?.disableAddAfter) {\n <li fd-menu-item (click)=\"menu.close(); onAdd.emit('after')\">\n <div fd-menu-interactive>\n <span fd-menu-title>{{ ('platformApprovalFlow.nodeActionAddApproversAfter' | fdTranslate)() }}</span>\n </div>\n </li>\n }\n @if (meta?.canAddParallel && !this.node?.actionsConfig?.disableAddParallel) {\n <li fd-menu-item (click)=\"menu.close(); onAdd.emit('parallel')\">\n <div fd-menu-interactive>\n <span fd-menu-title>{{ ('platformApprovalFlow.nodeActionAddApproversParallel' | fdTranslate)() }}</span>\n </div>\n </li>\n }\n @if (_isNotStarted && !this.node?.actionsConfig?.disableEdit) {\n <li fd-menu-item (click)=\"menu.close(); onEdit.emit()\">\n <div fd-menu-interactive>\n <span fd-menu-title> {{ ('platformApprovalFlow.nodeActionEditApprover' | fdTranslate)() }}</span>\n </div>\n </li>\n }\n @if (!this.node?.actionsConfig?.disableRemove) {\n <li fd-menu-item (click)=\"menu.close(); onDelete.emit()\">\n <div fd-menu-interactive>\n <span fd-menu-title> {{ ('platformApprovalFlow.nodeActionRemove' | fdTranslate)() }}</span>\n </div>\n </li>\n }\n</fd-menu>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { FormsModule } from '@angular/forms';\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { FormGroupComponent, FormItemComponent } from '@fundamental-ngx/core/form';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { APPROVAL_FLOW_NODE_TYPES } from '../approval-flow-add-node/approval-flow-add-node.component';\n\nexport interface SelectTypeDialogFormData {\n type: APPROVAL_FLOW_NODE_TYPES;\n toNextSerial: boolean;\n}\n\n/**\n * @deprecated\n * ApprovalFlowSelectType component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-select-type',\n templateUrl: './approval-flow-select-type.component.html',\n styleUrls: ['../styles/approval-flow-dialog.scss', './approval-flow-select-type.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-approval-flow-dialog fdp-approval-flow-select-type'\n },\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n ContentDensityDirective,\n FormGroupComponent,\n FormItemComponent,\n RadioButtonComponent,\n FormsModule,\n CheckboxComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowSelectTypeComponent {\n /** @hidden */\n _nodeType = APPROVAL_FLOW_NODE_TYPES.SERIAL;\n\n /** @hidden */\n _nodeTypes = APPROVAL_FLOW_NODE_TYPES;\n\n /** @hidden */\n _toNextSerial = false;\n\n /** @hidden */\n constructor(public readonly _dialogRef: DialogRef) {}\n\n /** @hidden */\n _submit(): void {\n this._dialogRef.close({ type: this._nodeType, toNextSerial: this._toNextSerial } as SelectTypeDialogFormData);\n }\n}\n","<fd-dialog>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <p>{{ ('platformApprovalFlow.selectTypeDialogMoveApproverAs' | fdTranslate)() }}</p>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body fdCompact>\n <span class=\"fd-form-label\">\n {{ ('platformApprovalFlow.selectTypeDialogParallelOrSerial' | fdTranslate)() }}\n </span>\n <fd-form-group class=\"fdp-approval-flow-select-type__form\">\n <div fd-form-item>\n <fd-radio-button\n [value]=\"_nodeTypes.PARALLEL\"\n [(ngModel)]=\"_nodeType\"\n id=\"select-type-parallel\"\n name=\"select-type-parallel\"\n >\n {{ ('platformApprovalFlow.selectTypeDialogNodeTypeParallel' | fdTranslate)() }}\n </fd-radio-button>\n </div>\n <div fd-form-item>\n <fd-radio-button\n [value]=\"_nodeTypes.SERIAL\"\n [(ngModel)]=\"_nodeType\"\n id=\"select-type-serial\"\n name=\"select-type-serial\"\n >\n {{ ('platformApprovalFlow.selectTypeDialogNodeTypeSerial' | fdTranslate)() }}\n </fd-radio-button>\n </div>\n @if (_nodeType === _nodeTypes.PARALLEL) {\n <div fd-form-item>\n <fd-checkbox [(ngModel)]=\"_toNextSerial\">\n {{ ('platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate)() }}\n </fd-checkbox>\n </div>\n }\n </fd-form-group>\n </fd-dialog-body>\n <fd-dialog-footer fdCompact>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"('platformApprovalFlow.selectTypeDialogConfirmButton' | fdTranslate)()\"\n (click)=\"_submit()\"\n ></fd-button-bar>\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"('platformApprovalFlow.selectTypeDialogCancelButton' | fdTranslate)()\"\n (click)=\"_dialogRef.close()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowGraph, ApprovalGraphMetadata } from '../approval-flow-graph';\nimport { isNodeApproved } from '../helpers';\nimport { ApprovalGraphNode } from '../interfaces/approval-node';\n\n/**\n * @deprecated\n * ApprovalFlowToolbarActions component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-toolbar-actions',\n templateUrl: './approval-flow-toolbar-actions.component.html',\n styleUrl: './approval-flow-toolbar-actions.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-toolbar-actions'\n },\n imports: [ContentDensityDirective, ButtonComponent, FdTranslatePipe]\n})\nexport class ApprovalFlowToolbarActionsComponent {\n /** Approval flow graph */\n @Input()\n graph: ApprovalFlowGraph;\n\n /** Approval flow graph metadata */\n @Input()\n graphMetadata: ApprovalGraphMetadata;\n\n /** Array of selected approval flow graph nodes */\n @Input()\n set selectedNodes(value: ApprovalGraphNode[]) {\n this._selectedNodes = value;\n\n this._canRemoveSelectedNodes =\n !!this.selectedNodes.length &&\n this.selectedNodes.every((node) => !node.disableActions && !node.actionsConfig?.disableRemove);\n }\n get selectedNodes(): ApprovalGraphNode[] {\n return this._selectedNodes;\n }\n\n /** Whether approval flow in the edit mode */\n @Input()\n isEditMode = false;\n\n /** Event emitted when edit mode toggled */\n @Output()\n enterEditMode = new EventEmitter<void>();\n\n /** Event emitted when node added */\n @Output()\n addNode = new EventEmitter<{ node: ApprovalGraphNode; target: ApprovalFlowNodeTarget }>();\n\n /** Event emitted when selected node edited */\n @Output()\n editSelectedNode = new EventEmitter<ApprovalGraphNode>();\n\n /** Event emitted when selected nodes deleted (bulk) */\n @Output()\n deleteSelectedNodes = new EventEmitter<void>();\n\n /** @hidden */\n _canRemoveSelectedNodes = false;\n\n /** @hidden */\n private _selectedNodes: ApprovalGraphNode[] = [];\n\n /** @hidden */\n get _notApprovedSelectedNode(): ApprovalGraphNode | null {\n if (this.selectedNodes.length !== 1) {\n return null;\n }\n\n return !isNodeApproved(this.selectedNodes[0]) ? this.selectedNodes[0] : null;\n }\n\n /** @hidden */\n get _canAddBefore(): boolean {\n const node = this._notApprovedSelectedNode;\n\n return (\n !!node &&\n !node.disableActions &&\n !node.actionsConfig?.disableAddBefore &&\n !!this.graphMetadata[node.id].canAddNodeBefore\n );\n }\n\n /** @hidden */\n get _canAddAfter(): boolean {\n const node = this._notApprovedSelectedNode;\n\n return (\n !!node &&\n !node.disableActions &&\n !node.actionsConfig?.disableAddAfter &&\n !!this.graphMetadata[node.id].canAddNodeAfter\n );\n }\n\n /** @hidden */\n get _canAddParallel(): boolean {\n const node = this._notApprovedSelectedNode;\n\n return (\n !!this._notApprovedSelectedNode &&\n !node?.disableActions &&\n !node?.actionsConfig?.disableAddParallel &&\n !!this.graphMetadata[node!.id].canAddParallel\n );\n }\n\n /** @hidden */\n get _canEditNode(): boolean {\n const node = this._notApprovedSelectedNode;\n\n return !!node && !node.disableActions && !node.actionsConfig?.disableEdit;\n }\n\n /** @hidden */\n _addNode(target: ApprovalFlowNodeTarget): void {\n const node = this.selectedNodes[0];\n this.addNode.emit({ node, target });\n }\n\n /** @hidden */\n _editSelectedNode(): void {\n const node = this.selectedNodes[0];\n this.editSelectedNode.emit(node);\n }\n}\n","<ng-container fdCompact>\n @if (!graph?.columns?.length && !graph?.errors) {\n <button\n fd-button\n [label]=\"('platformApprovalFlow.toolbarAddStepButton' | fdTranslate)()\"\n (click)=\"_addNode('empty')\"\n ></button>\n }\n @if (!!graph?.columns?.length && !isEditMode) {\n <button\n fd-button\n [label]=\"('platformApprovalFlow.toolbarEditButton' | fdTranslate)()\"\n (click)=\"enterEditMode.emit()\"\n ></button>\n }\n @if (isEditMode) {\n @if (_canAddBefore) {\n <button\n fd-button\n [label]=\"('platformApprovalFlow.toolbarAddApproversBefore' | fdTranslate)()\"\n (click)=\"_addNode('before')\"\n ></button>\n }\n @if (_canAddAfter) {\n <button\n fd-button\n [label]=\"('platformApprovalFlow.toolbarAddApproversAfter' | fdTranslate)()\"\n (click)=\"_addNode('after')\"\n ></button>\n }\n @if (_canAddParallel) {\n <button\n fd-button\n [label]=\"('platformApprovalFlow.toolbarAddApproversParallel' | fdTranslate)()\"\n (click)=\"_addNode('parallel')\"\n ></button>\n }\n @if (_canRemoveSelectedNodes) {\n <button\n fd-button\n [label]=\"('platformApprovalFlow.toolbarRemove' | fdTranslate)()\"\n (click)=\"deleteSelectedNodes.emit()\"\n ></button>\n }\n @if (_canEditNode) {\n <button\n fd-button\n [label]=\"('platformApprovalFlow.toolbarEditApprover' | fdTranslate)()\"\n (click)=\"_editSelectedNode()\"\n ></button>\n }\n }\n</ng-container>\n","import { CdkDrag } from '@angular/cdk/drag-drop';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n computed,\n inject\n} from '@angular/core';\nimport { Subject, Subscription, combineLatest, fromEvent, merge } from 'rxjs';\nimport { distinctUntilChanged, map, mapTo, startWith, switchMap, throttleTime } from 'rxjs/operators';\n\nimport { KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { DialogService } from '@fundamental-ngx/core/dialog';\nimport { GridListComponent, GridListSelectionEvent } from '@fundamental-ngx/core/grid-list';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { uniqBy } from '@fundamental-ngx/cdk/utils';\nimport { AvatarComponent } from '@fundamental-ngx/core/avatar';\nimport { BarComponent, BarElementDirective, BarRightDirective } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n GridListItemBodyDirective,\n GridListItemComponent,\n GridListItemImageDirective,\n GridListItemToolbarComponent,\n GridListTitleBarComponent,\n GridListTitleBarSpacerComponent\n} from '@fundamental-ngx/core/grid-list';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport {\n IllustratedMessageComponent,\n IllustratedMessageFigcaptionComponent,\n IllustratedMessageTextDirective,\n IllustratedMessageTitleDirective\n} from '@fundamental-ngx/core/illustrated-message';\nimport { MultiInputComponent } from '@fundamental-ngx/core/multi-input';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n ApprovalFlowTeamDataSource,\n ApprovalFlowUserDataSource,\n DATA_PROVIDERS,\n DataProvider\n} from '@fundamental-ngx/platform/shared';\nimport {\n APPROVAL_FLOW_NODE_TYPES,\n AddNodeDialogFormData,\n AddNodeDialogRefData,\n ApprovalFlowAddNodeComponent,\n ApprovalFlowNodeTarget\n} from './approval-flow-add-node/approval-flow-add-node.component';\nimport {\n ApprovalFlowApproverDetailsComponent,\n ApprovalFlowApproverDetailsDialogRefData\n} from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport {\n ApprovalFlowGraph,\n ApprovalGraphColumn,\n ApprovalGraphMetadata,\n generateApprovalFlowGraph,\n generateApprovalFlowGraphMetadata\n} from './approval-flow-graph';\nimport {\n ApprovalFlowMessage,\n ApprovalFlowMessageType,\n ApprovalFlowMessagesComponent\n} from './approval-flow-messages/approval-flow-messages.component';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport {\n ApprovalFlowSelectTypeComponent,\n SelectTypeDialogFormData\n} from './approval-flow-select-type/approval-flow-select-type.component';\nimport { ApprovalFlowToolbarActionsComponent } from './approval-flow-toolbar-actions/approval-flow-toolbar-actions.component';\nimport {\n displayUserFn,\n getBlankApprovalGraphNode,\n getGraphNodes,\n isNodeTargetsIncludeId,\n trackByFn,\n userValueFn\n} from './helpers';\nimport {\n ApprovalGraphNode,\n ApprovalGraphNodeMetadata,\n ApprovalNode,\n ApprovalProcess,\n ApprovalStatus,\n ApprovalTeam,\n ApprovalUser,\n SendRemindersData\n} from './interfaces';\nimport { ApprovalFlowAddNodeViewService } from './services/approval-flow-add-node-view.service';\n\nlet defaultId = 0;\n/**\n * @deprecated\n * Approval Flow component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow',\n templateUrl: './approval-flow.component.html',\n styleUrl: './approval-flow.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [ApprovalFlowAddNodeViewService],\n imports: [\n ContentDensityDirective,\n ApprovalFlowMessagesComponent,\n GridListComponent,\n GridListTitleBarComponent,\n GridListTitleBarSpacerComponent,\n ApprovalFlowToolbarActionsComponent,\n AvatarComponent,\n MultiInputComponent,\n FormsModule,\n IconComponent,\n ApprovalFlowNodeComponent,\n CdkDrag,\n GridListItemComponent,\n GridListItemToolbarComponent,\n NgTemplateOutlet,\n GridListItemImageDirective,\n GridListItemBodyDirective,\n BarComponent,\n BarRightDirective,\n BarElementDirective,\n ButtonComponent,\n IllustratedMessageComponent,\n IllustratedMessageFigcaptionComponent,\n IllustratedMessageTitleDirective,\n IllustratedMessageTextDirective,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowComponent implements OnInit, OnChanges, OnDestroy {\n /** Title which is displayed in the header of the Approval Flow component. */\n @Input() title: string;\n\n /** Value of the approval flow component. */\n @Input() value: ApprovalProcess;\n\n /** Data source for the users of Approval Flow component. */\n @Input() userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n\n /** Data source for the watchers of Approval Flow component. */\n @Input() watcherDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n\n /** Data source for the teams of Approval Flow component. */\n @Input() teamDataSource: ApprovalFlowTeamDataSource<ApprovalTeam>;\n\n /** A reference to the user details template */\n @Input() userDetailsTemplate: TemplateRef<any>;\n\n /** A reference to the app custom statuses */\n @Input() approvalStatusTemplate: TemplateRef<any>;\n\n /** Custom status to color mapping */\n @Input()\n statusColorMapping: Record<ApprovalStatus, ObjectStatus>;\n\n /** Whether to display due date warning in status */\n @Input() checkDueDate = false;\n\n /** Number of days before due date when status changes to `warning` with text 'Due in X days'.\n * Not used if 'checkDueDate' equals false */\n @Input() dueDateThreshold = 7;\n\n /** A list of approval statuses that allow sending reminders to their approvers */\n @Input() allowSendRemindersForStatuses: ApprovalStatus[] = ['in progress', 'not started'];\n\n /** Whether the approval flow is editable */\n @Input() isEditAvailable = false;\n\n /** Text label for watchers list */\n @Input() watchersLabel: string;\n\n /** Enables or disables ability to add parallel nodes */\n @Input() allowAddParallelNodes = true;\n\n /** Disables save button, save button is enabled by default */\n @Input() disableSaveButton = false;\n\n /** Disables exit button, exit button is enabled by default */\n @Input() disableExitButton = false;\n\n /**\n * Name of the entity for which users DataProvider will be loaded.\n * Internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input() usersDataProviderEntityKey?: string;\n\n /**\n * Name of the entity for which teams DataProvider will be loaded.\n * Internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input() teamsDataProviderEntityKey?: string;\n\n /**\n * Name of the entity for which approval flow DataProvider will be loaded.\n * Internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input() watchersDataProviderEntityKey?: string;\n\n /**\n * Should remove the space node from the graph\n */\n @Input() removeSpaceNode?: boolean = false;\n\n /** Event emitted on approval flow node click. */\n @Output() nodeClick = new EventEmitter<ApprovalNode>();\n\n /** Event emitted on approval flow node add */\n @Output() afterNodeAdd = new EventEmitter<ApprovalNode>();\n\n /** Event emitted on approval flow node edit */\n @Output() afterNodeEdit = new EventEmitter<ApprovalNode>();\n\n /** Event emitted whenver save is clicked in edit mode */\n @Output() valueChange = new EventEmitter<ApprovalProcess>();\n\n /** Event emitted whenever reminders should be sent */\n @Output() sendReminders = new EventEmitter<SendRemindersData>();\n\n /** Event emitted when data loading is started. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataReceived = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild('graphContainerEl') _graphContainerEl: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n @ViewChild('graphEl') _graphEl: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n @ViewChild('gridList') _gridList: GridListComponent<ApprovalGraphNode>;\n\n /** @hidden */\n @ViewChildren(ApprovalFlowNodeComponent) _nodeComponents: QueryList<ApprovalFlowNodeComponent>;\n\n /** @hidden */\n _approvalProcess: ApprovalProcess;\n\n /** @hidden */\n _initialApprovalProcess?: ApprovalProcess;\n\n /** @hidden */\n _previousApprovalProcess?: ApprovalProcess;\n\n /** @hidden */\n _graph: ApprovalFlowGraph;\n\n /** @hidden */\n _isCarousel = false;\n\n /** @hidden */\n _graphMetadata: ApprovalGraphMetadata = {};\n\n /** @hidden */\n _isEditMode = false;\n\n /** @hidden */\n _usersForWatchersList: ApprovalUser[] = [];\n\n /** @hidden */\n _selectedWatcherIds: ApprovalUser['id'][] = [];\n\n /** @hidden */\n _messages: ApprovalFlowMessage[] = [];\n\n /** @hidden */\n _emptyApprovalFlowSpotConfig = {\n spot: { url: '', id: 'sapIllus-Spot-NoData' }\n };\n\n /** @hidden */\n _multipleRootNodes = false;\n\n /** @hidden */\n _multipleFinalNodes = false;\n\n /** @hidden */\n _dragDropInProgress = false;\n\n /** Returns snapshot of the current and initial states of approval process */\n get approvalProcess(): ApprovalProcess {\n return structuredClone(this._approvalProcess);\n }\n\n /** @hidden */\n _displayUserFn = displayUserFn;\n\n /** @hidden */\n _userValueFn = userValueFn;\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n readonly approvalFlowUniqueId = `fdp-approval-flow-${++defaultId}`;\n\n /** @hidden */\n protected readonly rtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n protected readonly prevSlideArrowGlyph = computed(() =>\n this.rtl() ? 'navigation-right-arrow' : 'navigation-left-arrow'\n );\n\n /** @hidden */\n protected readonly nextSlideArrowGlyph = computed(() =>\n this.rtl() ? 'navigation-left-arrow' : 'navigation-right-arrow'\n );\n\n /** @hidden */\n get _selectedNodes(): ApprovalGraphNode[] {\n return getGraphNodes(this._graph).filter((node) => node.selected);\n }\n\n /** @hidden */\n private _selectedWatchers: ApprovalUser[] = [];\n\n /** @hidden */\n private _editModeInitSub: Subscription;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _dataSourceChanged$ = new Subject<void>();\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly providers = inject<Map<string, DataProvider<any>>>(DATA_PROVIDERS, { optional: true });\n\n /** @hidden */\n constructor(\n private readonly _dialogService: DialogService,\n private readonly _cdr: ChangeDetectorRef,\n private readonly _injector: Injector\n ) {\n console.log('ApprovalFlowComponent is deprecated and will be removed in next release.');\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (!this.userDataSource) {\n const usersDP = this.usersDataProviderEntityKey && this.providers?.get(this.usersDataProviderEntityKey);\n if (usersDP) {\n this.userDataSource = new ApprovalFlowUserDataSource(usersDP);\n } else {\n console.error('Could not resolve users data source');\n }\n }\n if (!this.watcherDataSource) {\n const watchersDP =\n this.watchersDataProviderEntityKey && this.providers?.get(this.watchersDataProviderEntityKey);\n if (watchersDP) {\n this.watcherDataSource = new ApprovalFlowUserDataSource(watchersDP);\n } else {\n console.error('Could not resolve watchers data source');\n }\n }\n if (!this.teamDataSource) {\n const teamsDP = this.teamsDataProviderEntityKey && this.providers?.get(this.teamsDataProviderEntityKey);\n if (teamsDP) {\n this.teamDataSource = new ApprovalFlowTeamDataSource(teamsDP);\n } else {\n console.error('Could not resolve teams data source');\n }\n }\n\n this._listenOnResize();\n this._setupDataSourceSubscription();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n const process = this.value ?? { watchers: [], nodes: [] };\n this._initialApprovalProcess = structuredClone(process);\n this._buildView(process);\n }\n\n if (changes.userDataSource || changes.watcherDataSource || changes.teamDataSource) {\n this._dataSourceChanged$.next();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n _isNextNodeBlank(node: ApprovalGraphNode, columnIndex: number, nodeIndex: number): boolean {\n const nextNode = this._graph.columns[columnIndex + 1]?.nodes[nodeIndex];\n const nextNodeBlank = nextNode?.blank;\n const nextNodeParallelEnd = this._graphMetadata[nextNode?.id]?.parallelEnd;\n\n return !node.blank && !!nextNodeBlank && !nextNodeParallelEnd;\n }\n\n /** @hidden */\n _isCdkDragDisabled(node: ApprovalGraphNode): boolean {\n return !this._isEditMode || node.blank || node.space || node.status !== 'not started';\n }\n\n /** @hidden Node click handler */\n _onNodeClick(node: ApprovalNode): void {\n if (this._dragDropInProgress) {\n return;\n }\n\n const dialog = this._dialogService.open<ApprovalFlowApproverDetailsDialogRefData>(\n ApprovalFlowApproverDetailsComponent,\n {\n data: {\n node,\n allowSendReminder: this.allowSendRemindersForStatuses.includes(node.status),\n ...this._defaultDialogOptions\n }\n },\n this._injector\n );\n\n dialog.afterClosed.subscribe((reminderTargets) => {\n if (Array.isArray(reminderTargets)) {\n this.sendReminders.emit({ users: reminderTargets, node });\n }\n });\n\n this.nodeClick.emit(node);\n }\n\n /** @hidden */\n _onNodeAdd(node: ApprovalNode): void {\n this.afterNodeAdd.emit(node);\n }\n\n /** @hidden */\n _onNodeEdit(node: ApprovalNode): void {\n this.afterNodeEdit.emit(node);\n }\n\n /** @hidden */\n _onNodeSelectionChange(event: GridListSelectionEvent<ApprovalGraphNode>): void {\n this._graph.columns.forEach((column) => {\n column.nodes.forEach((node) => {\n node.selected = !!event.selection.find((_node) => _node.id === node.id);\n });\n });\n }\n\n /** @hidden Watcher's avatar click handler */\n _onWatcherClick(watcher: ApprovalUser, event: Event): void {\n event.preventDefault();\n this._dialogService.open<ApprovalFlowApproverDetailsDialogRefData>(ApprovalFlowApproverDetailsComponent, {\n data: {\n watcher,\n ...this._defaultDialogOptions\n }\n });\n }\n\n /** Retrive metadata by node id */\n getNodeMetadataByNodeId(nodeId: string): ApprovalGraphNodeMetadata {\n return this._graphMetadata[nodeId];\n }\n\n /** Scroll to the next horizontal slide */\n nextSlide(dir = 1): void {\n const threshold = 1;\n\n let pos: number;\n\n if (dir === 1) {\n const lastStep = this._carouselStepsRight === 1;\n const nextStep = this._carouselStepsCount - this._carouselStepsRight + 1;\n const visibleRightPoint = this._carouselStepSize * nextStep + (lastStep ? 0 : threshold);\n pos = visibleRightPoint - this._graphEl.nativeElement.clientWidth;\n } else {\n const lastStep = this._carouselStepsLeft === 1;\n const nextStep = this._carouselStepsLeft - 1;\n pos = this._carouselStepSize * nextStep - (lastStep ? 0 : threshold);\n }\n\n this._setScrollPosition(pos);\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _setScrollPosition(pos: number): void {\n this._graphContainerEl.nativeElement.scrollTo({\n left: pos,\n behavior: 'smooth'\n });\n }\n\n /** @hidden Handle node keydown and focus other node based on which key is pressed */\n _onNodeKeyDown(event: KeyboardEvent, node: ApprovalGraphNode): void {\n if (!KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW])) {\n return;\n }\n\n const { nodeIndex, columnIndex } = this._graphMetadata[node.id];\n\n event.preventDefault();\n\n let nextFocusTarget: ApprovalGraphNode | undefined;\n\n if (typeof nodeIndex === 'number' && typeof columnIndex === 'number') {\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n if (nodeIndex > 0) {\n nextFocusTarget = this._getNextVerticalNode(nodeIndex, columnIndex, 'up');\n }\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n nextFocusTarget = this._getNextVerticalNode(nodeIndex, columnIndex, 'down');\n } else if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n nextFocusTarget = this._getNextHorizontalNode(nodeIndex, columnIndex, this.rtl() ? 'right' : 'left');\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n nextFocusTarget = this._getNextHorizontalNode(nodeIndex, columnIndex, this.rtl() ? 'left' : 'right');\n }\n }\n\n if (nextFocusTarget) {\n this._focusNode(nextFocusTarget);\n }\n }\n\n /** @hidden Fetch all necessary data and enter edit mode */\n _enterEditMode(): void {\n // there's no support for searching in multi-input, so grabbing all watchers\n // triggering initial loading of data in data sources\n this.watcherDataSource.match();\n this._editModeInitSub = this.watcherDataSource.open().subscribe((watchers) => {\n this._usersForWatchersList = watchers;\n this._selectedWatchers = this._approvalProcess.watchers;\n this._selectedWatcherIds = this._selectedWatchers.map((w) => w.id);\n this._isEditMode = true;\n this._initialApprovalProcess = structuredClone(this._approvalProcess);\n this._cdr.detectChanges();\n });\n this._subscriptions.add(this._editModeInitSub);\n }\n\n /** @hidden Send update approval process calls to DataSource and exit edit mode*/\n _saveEditModeChanges(): void {\n this._editModeInitSub?.unsubscribe();\n this.watcherDataSource.close();\n\n this._initialApprovalProcess = undefined;\n this._isEditMode = false;\n this._messages = [];\n\n const updated = {\n ...this._approvalProcess,\n watchers: this._selectedWatchers\n };\n\n this._buildView(updated);\n\n this.valueChange.emit(updated);\n }\n\n /** @hidden Restore initial approval flow state and exit edit mode */\n _exitEditMode(): void {\n this._editModeInitSub?.unsubscribe();\n this.watcherDataSource.close();\n\n this._approvalProcess = structuredClone(this._initialApprovalProcess!);\n this._initialApprovalProcess = undefined;\n this._isEditMode = false;\n this._messages = [];\n\n this._buildView(this._approvalProcess);\n }\n\n /** @hidden */\n _watchersSelectionChanged(selectedIds: ApprovalUser['id'][]): void {\n const idsSet = new Set(selectedIds);\n // updating watchers selection\n // since it's possible \"_usersForWatchersList\" might not contain all selected values,\n // determine current selection based on what's already selected and \"_usersForWatchersList\"\n this._selectedWatchers = uniqBy(\n this._selectedWatchers.concat(this._usersForWatchersList).filter((user) => idsSet.has(user.id)),\n (u) => u.id\n );\n }\n\n /** @hidden Restore previously saved approval process state */\n _undoLastAction(): void {\n this._approvalProcess = structuredClone(this._previousApprovalProcess!);\n this._previousApprovalProcess = undefined;\n\n this._buildView(this._approvalProcess);\n }\n\n /** @hidden Open add node dialog */\n _addNode(source: ApprovalGraphNode, type: ApprovalFlowNodeTarget): void {\n const showNodeTypeSelect = type === 'before' && !source.actionsConfig?.disableAddParallel;\n\n const dialog = this._dialogService.open<AddNodeDialogRefData>(\n ApprovalFlowAddNodeComponent,\n {\n data: {\n nodeTarget: type,\n showNodeTypeSelect,\n node: Object.assign(getBlankApprovalGraphNode(), { blank: false }),\n checkDueDate: this.checkDueDate,\n ...this._defaultDialogOptions\n }\n },\n this._injector\n );\n\n dialog.afterClosed.subscribe((data: AddNodeDialogFormData) => {\n if (!data) {\n return;\n }\n\n const { node, nodeType, toNextSerial } = data;\n\n if (!node) {\n return;\n }\n\n this._cacheCurrentApprovalProcess();\n\n node.id = `tempId${(Math.random() * 1000).toFixed()}`;\n\n switch (type) {\n case 'empty':\n this._enterEditMode();\n break;\n\n case 'before':\n if (nodeType === APPROVAL_FLOW_NODE_TYPES.SERIAL) {\n node.targets = [source.id];\n this._replaceTargets(source.id, [node.id]);\n }\n\n if (nodeType === APPROVAL_FLOW_NODE_TYPES.PARALLEL) {\n this._processAddingParallelNode(node, source, toNextSerial);\n }\n\n break;\n\n case 'before-all':\n node.targets = this._graph.columns[0].nodes.map((_node) => _node.id);\n break;\n\n case 'after':\n node.targets = source.targets;\n source.targets = [node.id];\n break;\n\n case 'after-all': {\n const targetParents = this._graphMetadata[source.targets[0]]?.parents;\n\n if (targetParents) {\n node.targets = source.targets;\n this._replaceTargets(source.id, [node.id]);\n\n this._approvalProcess.nodes = this._approvalProcess.nodes.filter(\n (_node) => _node.id !== source.id\n );\n } else {\n this._graph.columns[this._graph.columns.length - 1].nodes.forEach((_node) =>\n _node.targets.push(node.id)\n );\n }\n\n break;\n }\n case 'parallel':\n this._processAddingParallelNode(node, source, toNextSerial);\n break;\n }\n\n this._showMessage(node.approvalTeamId ? 'teamAddSuccess' : 'approverAddSuccess');\n this._approvalProcess.nodes.push(node);\n\n this._buildView(this._approvalProcess);\n this._onNodeAdd(node);\n });\n }\n\n /** @hidden Open edit node dialog */\n _editNode(node: ApprovalNode): void {\n const dialog = this._dialogService.open<AddNodeDialogRefData>(\n ApprovalFlowAddNodeComponent,\n {\n data: {\n isEdit: true,\n node: Object.assign({}, node),\n checkDueDate: this.checkDueDate,\n ...this._defaultDialogOptions\n }\n },\n this._injector\n );\n\n dialog.afterClosed.subscribe((data: { node: ApprovalNode }) => {\n const updatedNode = data?.node;\n\n if (!updatedNode) {\n return;\n }\n\n this._cacheCurrentApprovalProcess();\n this._updateNode(updatedNode);\n this._showMessage('nodeEdit');\n this._buildView(this._approvalProcess);\n this._onNodeEdit(node);\n });\n }\n\n /** @hidden \"Delete\" button click handler */\n _onNodeDelete(nodeToDelete: ApprovalNode): void {\n this._cacheCurrentApprovalProcess();\n this._deleteNode(nodeToDelete);\n this._showMessage(nodeToDelete.approvalTeamId ? 'teamRemove' : 'nodeRemove');\n this._buildView(this._approvalProcess);\n }\n\n /** @hidden */\n _deleteSelectedNodes(): void {\n this._cacheCurrentApprovalProcess();\n\n const nodesToDelete = this._nodeComponents\n .filter((nodeComponent) => nodeComponent._isSelected)\n .map((nodeComponent) => nodeComponent.node);\n\n nodesToDelete.forEach((node) => {\n this._deleteNode(node);\n this._buildView(this._approvalProcess);\n });\n\n this._showMessage('nodesRemove');\n }\n\n /** @hidden Node drag move handler, used to check if need to highlight a drop zone rectangle */\n _onNodeDragMoved(node: ApprovalGraphNode): void {\n const draggedNodeDimensions = this._nodeComponents\n .find((comp) => comp.node === node)\n ?._nativeElement.getBoundingClientRect();\n\n if (!draggedNodeDimensions) {\n return;\n }\n\n this._nodeComponents.forEach((component) => {\n if (component.node !== node && Boolean(component._dropZones.length)) {\n component._checkIfNodeDraggedInDropZone(draggedNodeDimensions);\n }\n });\n }\n\n /** @hidden */\n _focusNode(node: ApprovalGraphNode): void {\n const nodeToFocus = this._nodeComponents.find((comp) => comp.node === node);\n\n if (!nodeToFocus) {\n return;\n }\n this._moveColInView(node.colIndex ?? 0);\n nodeToFocus._focus({ preventScroll: true });\n }\n\n /** @hidden Node drop handler */\n _onNodeDrop(nodeToDrop: ApprovalGraphNode, drag: CdkDrag): void {\n drag.reset();\n\n setTimeout(() => (this._dragDropInProgress = false));\n\n const dropTarget = this._nodeComponents.find((n) => n._isAnyDropZoneActive);\n\n if (!dropTarget) {\n return;\n }\n\n this._cacheCurrentApprovalProcess();\n\n const placement = dropTarget._activeDropZones[0].placement;\n\n this._nodeComponents.forEach((n) => n._deactivateDropZones());\n\n if (placement === 'after') {\n this._deleteNode(nodeToDrop);\n this._buildView(this._approvalProcess);\n\n const nextNode = getGraphNodes(this._graph).find((node) => node.id === dropTarget.node.targets[0]);\n\n if (nextNode?.blank) {\n this._deleteNode(nextNode);\n this._buildView(this._approvalProcess);\n }\n\n nodeToDrop.targets =\n this._approvalProcess.nodes.find((node) => node.id === dropTarget.node.id)?.targets ?? [];\n dropTarget.node.targets = [nodeToDrop.id];\n\n this._finishDragDropProcess(nodeToDrop);\n } else if (placement === 'before') {\n const dialog = this._dialogService.open(ApprovalFlowSelectTypeComponent, undefined, this._injector);\n\n dialog.afterClosed.subscribe((data: SelectTypeDialogFormData) => {\n if (!data) {\n return;\n }\n\n const { type, toNextSerial } = data;\n\n this._deleteNode(nodeToDrop);\n this._buildView(this._approvalProcess);\n\n if (type === APPROVAL_FLOW_NODE_TYPES.SERIAL) {\n this._replaceTargets(dropTarget.node.id, [nodeToDrop.id]);\n nodeToDrop.targets = [dropTarget.node.id];\n }\n\n if (type === APPROVAL_FLOW_NODE_TYPES.PARALLEL) {\n this._processAddingParallelNode(nodeToDrop, dropTarget.node, toNextSerial);\n }\n\n this._finishDragDropProcess(nodeToDrop);\n });\n } else if (placement === 'before-all') {\n this._deleteNode(nodeToDrop);\n\n const firstColumnNodes = this._graph.columns[0].nodes;\n nodeToDrop.targets = firstColumnNodes.map((node) => node.id);\n\n this._finishDragDropProcess(nodeToDrop);\n } else if (placement === 'after-all') {\n this._deleteNode(nodeToDrop);\n this._buildView(this._approvalProcess);\n\n nodeToDrop.targets = [...dropTarget.node.targets];\n\n if (dropTarget.node.targets.length === 0) {\n const lastColumnNodes = this._graph.columns[this._graph.columns.length - 1].nodes;\n lastColumnNodes.forEach((node) => node.targets.push(nodeToDrop.id));\n } else {\n this._approvalProcess.nodes = this._approvalProcess.nodes.filter(\n (node) => node.id !== dropTarget.node.id\n );\n this._replaceTargets(dropTarget.node.id, [nodeToDrop.id]);\n }\n\n this._finishDragDropProcess(nodeToDrop);\n }\n }\n\n /** @hidden */\n private _moveColInView(colIndex: number): any {\n const node = this._graphEl.nativeElement.children[colIndex].firstElementChild;\n if (!node) {\n return;\n }\n\n const { x: nodeX, width } = node.getBoundingClientRect();\n\n const delta = this._graphContainerEl.nativeElement.getBoundingClientRect().x;\n\n const left = nodeX - delta;\n const right = left + width;\n\n if (left < 0) {\n this._setScrollPosition(this._graphContainerEl.nativeElement.scrollLeft + left);\n } else if (right > this._graphEl.nativeElement.clientWidth) {\n this._setScrollPosition(\n this._graphContainerEl.nativeElement.scrollLeft + right - this._graphEl.nativeElement.clientWidth\n );\n }\n }\n\n /** @hidden */\n private _finishDragDropProcess(nodeToDrop: ApprovalGraphNode): void {\n this._approvalProcess.nodes.push(nodeToDrop);\n this._buildView(this._approvalProcess);\n }\n\n /** @hidden */\n private _showMessage(type: ApprovalFlowMessageType): void {\n this._messages = [{ type }];\n }\n\n /** @hidden Build Approval Flow graph and render it */\n private _buildView(approvalProcess: ApprovalProcess): void {\n if (!approvalProcess.nodes) {\n approvalProcess.nodes = [];\n }\n if (!approvalProcess.watchers) {\n approvalProcess.watchers = [];\n }\n this._approvalProcess = approvalProcess;\n this._graph = generateApprovalFlowGraph(this._approvalProcess.nodes);\n\n if (this.removeSpaceNode) {\n this._graph.columns = this.removeSpaceNodesFromColumns(this._graph.columns);\n }\n\n if (this._graph.errors) {\n this._showMessage('error');\n return;\n }\n\n this._graphMetadata = generateApprovalFlowGraphMetadata(this._graph);\n\n const nodes = getGraphNodes(this._graph);\n this._approvalProcess.nodes = nodes.filter((node) => !node.space);\n this._multipleRootNodes = nodes.filter((node) => this._graphMetadata[node.id].isRoot).length > 1;\n this._multipleFinalNodes = nodes.filter((node) => this._graphMetadata[node.id].isFinal).length > 1;\n\n this._cdr.detectChanges();\n this._gridList?.clearSelection();\n\n if (!this._isEditMode) {\n this._setScrollPosition(0);\n }\n }\n\n /** @hidden Listen window resize and distribute cards on column change */\n private _listenOnResize(): void {\n this._subscriptions.add(\n merge(fromEvent(window, 'resize'), fromEvent(this._graphContainerEl.nativeElement, 'scroll'))\n .pipe(throttleTime(50, undefined, { leading: true, trailing: true }))\n .subscribe(() => {\n this._cdr.detectChanges();\n })\n );\n }\n\n /** @hidden Update node object in local approval process data structure */\n private _updateNode(node: ApprovalNode): void {\n const nodeIndex = this._approvalProcess.nodes.findIndex((n) => n.id === node.id);\n\n if (nodeIndex > -1) {\n this._approvalProcess.nodes[nodeIndex] = node;\n }\n }\n\n /** @hidden Delete node object in local approval process data structure */\n private _deleteNode(nodeToDelete: ApprovalNode): void {\n const nodesToDelete = [nodeToDelete];\n const graphNodes = getGraphNodes(this._graph);\n let currNode = graphNodes.find((node) => node.id === nodeToDelete.id);\n let nextNode: ApprovalGraphNode | undefined;\n\n do {\n if (currNode?.targets.length === 1) {\n nextNode = graphNodes.find((node) => node.id === currNode?.targets[0]);\n\n if (nextNode?.blank && this._graphMetadata[nextNode.id].parents.length === 1) {\n nodesToDelete.push(nextNode);\n\n currNode = nextNode;\n nextNode = graphNodes.find((node) => node.id === currNode?.targets[0]);\n }\n }\n } while (nextNode?.blank && this._graphMetadata[nextNode.id].parents.length === 1);\n\n const parent = this._graphMetadata[nodeToDelete.id].parents[0];\n const target = nodeToDelete.targets[0];\n const isParentParallelStart = this._graphMetadata[parent?.id]?.parallelStart;\n const isTargetParallelEnd = this._graphMetadata[target]?.parallelEnd;\n const targets =\n (isParentParallelStart && isTargetParallelEnd) || nodesToDelete.length > 1 ? [] : (currNode?.targets ?? []);\n\n this._replaceTargets(nodeToDelete.id, targets);\n\n this._approvalProcess.nodes = this._approvalProcess.nodes.filter((node) => !nodesToDelete.includes(node));\n }\n\n /** @hidden */\n private _addParallelTargets(targetNodeId: string, nodeIdToAdd: string): void {\n this._approvalProcess.nodes.forEach((node) => {\n if (isNodeTargetsIncludeId(node, targetNodeId)) {\n node.targets.push(nodeIdToAdd);\n }\n });\n }\n\n /** @hidden Replace all occurrences of \"idToReplace\" in all nodes' \"targets\" with ones in \"replaceWith\" array */\n private _replaceTargets(IdToReplace: string, replaceWithId: string[]): void {\n this._approvalProcess.nodes.forEach((n) => {\n if (isNodeTargetsIncludeId(n, IdToReplace)) {\n n.targets = n.targets.filter((_id) => _id !== IdToReplace);\n n.targets.push(...replaceWithId);\n }\n });\n }\n\n /** @hidden Save current state of approval process data to be able to undo an action made in edit mode */\n private _cacheCurrentApprovalProcess(): void {\n this._previousApprovalProcess = structuredClone(this._approvalProcess);\n }\n\n /** @hidden */\n private _getNextHorizontalNode = (\n nodeIndex: number,\n columnIndex: number,\n direction: 'left' | 'right'\n ): ApprovalGraphNode | undefined => {\n const indexDiff = direction === 'right' ? 1 : -1;\n const nextColumn = this._graph.columns[columnIndex + indexDiff];\n const nextNode = nextColumn?.nodes[nodeIndex];\n\n if (!nextNode) {\n return undefined;\n }\n\n if (nextNode.blank || nextNode.space) {\n return this._getNextHorizontalNode(nodeIndex, columnIndex + indexDiff, direction);\n }\n\n return nextNode;\n };\n\n /** @hidden */\n private _getNextVerticalNode = (\n nodeIndex: number,\n columnIndex: number,\n direction: 'up' | 'down'\n ): ApprovalGraphNode | undefined => {\n const indexDiff = direction === 'down' ? 1 : -1;\n const currColumn = this._graph.columns[columnIndex];\n const nextNode = currColumn.nodes[nodeIndex + indexDiff];\n\n if (!nextNode) {\n return undefined;\n }\n\n if (nextNode.blank || nextNode.space) {\n return this._getNextVerticalNode(nodeIndex + indexDiff, columnIndex, direction);\n }\n\n return nextNode;\n };\n\n /** @hidden */\n private get _carouselStepSize(): number {\n return this._graphEl.nativeElement.scrollWidth / this._carouselStepsCount;\n }\n\n /** @hidden */\n get _scrollDiff(): number {\n if (!this._graphEl) {\n return 0;\n }\n return this._graphEl.nativeElement.scrollWidth - this._graphEl.nativeElement.clientWidth;\n }\n\n /** @hidden */\n get _carouselStepsCount(): number {\n return this._graphEl.nativeElement.children.length;\n }\n\n /** @hidden */\n get _carouselStepsLeft(): number {\n return Math.ceil(this._graphContainerEl.nativeElement.scrollLeft / this._carouselStepSize);\n }\n\n /** @hidden */\n get _carouselStepsRight(): number {\n return Math.ceil(\n (this._scrollDiff - Math.round(this._graphContainerEl.nativeElement.scrollLeft)) / this._carouselStepSize\n );\n }\n\n /** @hidden */\n private get _defaultDialogOptions(): DefaultDialogOptions {\n return {\n teamDataSource: this.teamDataSource,\n userDataSource: this.userDataSource,\n userDetailsTemplate: this.userDetailsTemplate,\n rtl: this.rtl()\n };\n }\n\n /** @hidden */\n private _findSerialNode(yIndex?: number, targets?: string[]): string[] {\n const targetIsParent =\n Number.isInteger(yIndex) &&\n targets?.some((targetId) => {\n const nodeIndex = this._graphMetadata[targetId]?.nodeIndex;\n return Number.isInteger(nodeIndex) && nodeIndex! <= yIndex! - 1;\n });\n\n if (targetIsParent) {\n return targets ?? [];\n }\n\n const targetNode = this._approvalProcess.nodes.find((node) => node.id === targets?.[0]);\n return this._findSerialNode(yIndex, targetNode?.targets);\n }\n\n /** @hidden */\n private _processAddingParallelNode(\n addedNode: ApprovalGraphNode,\n sourceNode: ApprovalGraphNode,\n toNextSerial = false\n ): void {\n addedNode.targets = sourceNode.targets;\n\n this._addParallelTargets(sourceNode.id, addedNode.id);\n\n if (toNextSerial) {\n let yIndex = this._graphMetadata[sourceNode.id].nodeIndex;\n let targets = sourceNode.targets;\n\n if (yIndex === 0) {\n const sourceNodeMetadata = this._graphMetadata[sourceNode.id];\n const columnNodes = this._graph.columns?.[sourceNodeMetadata.columnIndex!]?.nodes;\n const nextParallelNode = columnNodes.find((node, index) => index > 0 && !node.space);\n\n if (nextParallelNode) {\n yIndex = this._graphMetadata[nextParallelNode.id].columnIndex;\n targets = nextParallelNode.targets;\n\n addedNode.targets = this._findSerialNode(yIndex, targets);\n return;\n }\n\n addedNode.targets = sourceNode.targets;\n return;\n }\n\n addedNode.targets = this._findSerialNode(yIndex, targets);\n }\n }\n\n /** @hidden */\n private _setupDataSourceSubscription(): void {\n const sub = this._dataSourceChanged$\n .pipe(\n startWith(null),\n switchMap(() => {\n const loadingStates = [this.teamDataSource, this.userDataSource, this.watcherDataSource]\n .filter(Boolean)\n .map((ds) =>\n merge(ds.onDataRequested().pipe(mapTo(true)), ds.onDataReceived().pipe(mapTo(false))).pipe(\n startWith(ds.isDataLoading)\n )\n );\n return combineLatest(loadingStates);\n }),\n map((loadingStates) => loadingStates.some(Boolean)),\n distinctUntilChanged()\n )\n .subscribe((someLoading) => {\n if (someLoading) {\n this.onDataRequested.emit();\n } else {\n this.onDataReceived.emit();\n }\n });\n this._subscriptions.add(sub);\n }\n\n /** @hidden */\n private removeSpaceNodesFromColumns(columns: ApprovalGraphColumn[]): ApprovalGraphColumn[] {\n const filteredColumns: ApprovalGraphColumn[] = [];\n\n columns.forEach((column) => {\n const filteredNodes = column.nodes.filter((node) => !node.space);\n\n const updatedColumn = {\n ...column, // Preserve other properties of the column\n nodes: filteredNodes // Use the filtered list of nodes\n };\n\n filteredColumns.push(updatedColumn);\n });\n\n return filteredColumns;\n }\n}\n\ninterface DefaultDialogOptions {\n teamDataSource: ApprovalFlowTeamDataSource<ApprovalTeam>;\n userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n userDetailsTemplate: TemplateRef<any>;\n rtl: boolean;\n}\n","<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)()\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n @if (isEditAvailable) {\n <fdp-approval-flow-toolbar-actions\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n }\n </fd-grid-list-title-bar>\n @if (_approvalProcess.watchers?.length || _isEditMode) {\n <div class=\"fdp-approval-flow__watchers\" [attr.aria-label]=\"watchersLabel\">\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate)() }}\n </p>\n @if (!_isEditMode) {\n @for (watcher of _approvalProcess.watchers; track _trackByFn($index, watcher)) {\n <fd-avatar\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n }\n } @else {\n <div class=\"fdp-approval-flow__watchers-input-container\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"('platformApprovalFlow.watchersInputPlaceholder' | fdTranslate)()\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n }\n </div>\n }\n @if (!_graph.errors) {\n @if (_graph.columns.length) {\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n @if (_scrollDiff > 0) {\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n @if (_carouselStepsLeft > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"('platformApprovalFlow.prevButtonAriaLabel' | fdTranslate)()\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"prevSlideArrowGlyph()\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n }\n @if (_carouselStepsRight > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"('platformApprovalFlow.nextButtonAriaLabel' | fdTranslate)()\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"nextSlideArrowGlyph()\"></fd-icon>\n </button>\n }\n </div>\n }\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n @for (column of _graph.columns; track column; let columnIndex = $index) {\n <div class=\"fdp-approval-flow__graph-column\">\n @for (\n node of column.nodes;\n track _trackByFn(nodeIndex, node);\n let nodeIndex = $index\n ) {\n <fdp-approval-flow-node\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n @if (_isEditMode) {\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-template>\n }\n </fd-grid-list-item-toolbar>\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"\n node.approvers.length === 1 ? node.approvers[0].imgUrl : null\n \"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n <ng-template fd-grid-list-item-body>\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-template>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n }\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ ('platformApprovalFlow.emptyTitle' | fdTranslate)() }}\n </h3>\n <p fd-illustrated-message-text>\n {{ ('platformApprovalFlow.emptyHint' | fdTranslate)() }}\n </p>\n </figcaption>\n </figure>\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n [style.fill]=\"'var(--sapIllus_PatternShadow)'\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n [style.fill]=\"'var(--sapIllus_ObjectFillColor)'\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n [style.fill]=\"'var(--sapIllus_BrandColorSecondary)'\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n [style.fill]=\"'var(--sapIllus_Layering1)'\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n [style.fill]=\"'var(--sapIllus_Layering1)'\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n [style.fill]=\"'var(--sapIllus_Layering1)'\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n [style.fill]=\"'var(--sapIllus_StrokeDetailColor)'\"\n ></path>\n </svg>\n </div>\n }\n }\n </fd-grid-list>\n @if (_isEditMode) {\n <div fd-bar>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"('platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate)()\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"('platformApprovalFlow.editModeExitButtonLabel' | fdTranslate)()\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n }\n</ng-container>\n","import { NgModule } from '@angular/core';\n\nimport { ApprovalFlowAddNodeComponent } from './approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowApproverDetailsComponent } from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport { ApprovalFlowMessagesComponent } from './approval-flow-messages/approval-flow-messages.component';\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-node/approval-flow-drop-zone.directive';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport { ApprovalFlowSelectTypeComponent } from './approval-flow-select-type/approval-flow-select-type.component';\nimport { ApprovalFlowTeamListComponent } from './approval-flow-team-list/approval-flow-team-list.component';\nimport { ApprovalFlowToolbarActionsComponent } from './approval-flow-toolbar-actions/approval-flow-toolbar-actions.component';\nimport { ApprovalFlowUserDetailsComponent } from './approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowUserListComponent } from './approval-flow-user-list/approval-flow-user-list.component';\nimport { ApprovalFlowComponent } from './approval-flow.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [\n ApprovalFlowComponent,\n ApprovalFlowNodeComponent,\n ApprovalFlowApproverDetailsComponent,\n ApprovalFlowAddNodeComponent,\n ApprovalFlowUserListComponent,\n ApprovalFlowUserDetailsComponent,\n ApprovalFlowDropZoneDirective,\n ApprovalFlowTeamListComponent,\n ApprovalFlowSelectTypeComponent,\n ApprovalFlowMessagesComponent,\n ApprovalFlowToolbarActionsComponent\n ],\n exports: [ApprovalFlowComponent]\n})\nexport class PlatformApprovalFlowModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.ApprovalFlowAddNodeViewService","defaultId","i2"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-platform-approval-flow.mjs","sources":["../../../../libs/platform/approval-flow/helpers/index.ts","../../../../libs/platform/approval-flow/approval-flow-graph.ts","../../../../libs/platform/approval-flow/approval-flow-team-list/approval-flow-team-list.component.ts","../../../../libs/platform/approval-flow/approval-flow-team-list/approval-flow-team-list.component.html","../../../../libs/platform/approval-flow/approval-flow-user-details/approval-flow-user-details.component.ts","../../../../libs/platform/approval-flow/approval-flow-user-details/approval-flow-user-details.component.html","../../../../libs/platform/approval-flow/approval-flow-user-list/approval-flow-user-list.component.ts","../../../../libs/platform/approval-flow/approval-flow-user-list/approval-flow-user-list.component.html","../../../../libs/platform/approval-flow/services/approval-flow-add-node-view.service.ts","../../../../libs/platform/approval-flow/approval-flow-add-node/approval-flow-add-node.component.ts","../../../../libs/platform/approval-flow/approval-flow-add-node/approval-flow-add-node.component.html","../../../../libs/platform/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.ts","../../../../libs/platform/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.html","../../../../libs/platform/approval-flow/approval-flow-messages/approval-flow-messages.component.ts","../../../../libs/platform/approval-flow/approval-flow-messages/approval-flow-messages.component.html","../../../../libs/platform/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.ts","../../../../libs/platform/approval-flow/approval-flow-node/approval-flow-node.component.ts","../../../../libs/platform/approval-flow/approval-flow-node/approval-flow-node.component.html","../../../../libs/platform/approval-flow/approval-flow-select-type/approval-flow-select-type.component.ts","../../../../libs/platform/approval-flow/approval-flow-select-type/approval-flow-select-type.component.html","../../../../libs/platform/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.ts","../../../../libs/platform/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.html","../../../../libs/platform/approval-flow/approval-flow.component.ts","../../../../libs/platform/approval-flow/approval-flow.component.html","../../../../libs/platform/approval-flow/approval-flow.module.ts","../../../../libs/platform/approval-flow/fundamental-ngx-platform-approval-flow.ts"],"sourcesContent":["import { ApprovalFlowGraph } from '../approval-flow-graph';\nimport { ApprovalGraphNode, ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\n\n/** @hidden */\nexport function isNodeApproved(node: ApprovalNode): boolean {\n return node.status === 'approved';\n}\n\n/** @hidden */\nexport function isNodeStarted(node: ApprovalNode): boolean {\n return node.status !== 'not started';\n}\n\n/** @hidden */\nexport function displayTeamFn(team: ApprovalTeam): string {\n return team?.name;\n}\n\n/** @hidden */\nexport function displayUserFn(user: ApprovalUser): string {\n return user?.name;\n}\n\n/** @hidden */\nexport function userValueFn(user: ApprovalUser): string {\n return user?.id;\n}\n\n/** @hidden */\nexport function filterByName(obj: { name: string }, searchString: string): boolean {\n return obj.name.toLowerCase().indexOf(searchString.toLowerCase()) > -1;\n}\n\n/** @hidden */\nexport function trackByFn(index: number, item: { id: string }): number | string {\n return item?.id ?? index;\n}\n\n/** @hidden */\nexport function getGraphNodes(graph: ApprovalFlowGraph): ApprovalGraphNode[] {\n return graph.columns.reduce((acc, column) => acc.concat(column.nodes), <ApprovalGraphNode[]>[]);\n}\n\n/** @hidden */\nexport function getParentNodes(node: ApprovalNode, nodes: ApprovalNode[]): ApprovalNode[] {\n return nodes.filter((_node) => isNodeTargetsIncludeId(_node, node.id));\n}\n\n/** @hidden */\nexport function getBlankApprovalGraphNode(): ApprovalGraphNode {\n return {\n id: `blankId${(Math.random() * 1000).toFixed()}`,\n name: '',\n targets: [],\n approvers: [],\n status: 'not started',\n blank: true\n };\n}\n\n/** @hidden */\nexport function getSpaceApprovalGraphNode(): ApprovalGraphNode {\n return {\n id: `spaceId${(Math.random() * 1000).toFixed()}`,\n name: '',\n targets: [],\n approvers: [],\n status: 'not started',\n space: true\n };\n}\n\n/** @hidden */\nexport function isNodeTargetsIncludeId(node: ApprovalNode, id: string): boolean {\n return node.targets.includes(id);\n}\n","import { ApprovalGraphNode, ApprovalGraphNodeMetadata, ApprovalNode, ApprovalStatus } from './interfaces';\n\nimport {\n getBlankApprovalGraphNode,\n getGraphNodes,\n getParentNodes,\n getSpaceApprovalGraphNode,\n isNodeApproved,\n isNodeStarted,\n isNodeTargetsIncludeId\n} from './helpers';\n\nexport interface ApprovalFlowGraph {\n columns: ApprovalGraphColumn[];\n errors?: boolean;\n}\n\nexport interface ApprovalGraphColumn {\n nodes: ApprovalGraphNode[];\n index?: number;\n allNodesApproved?: boolean;\n}\n\nexport interface ApprovalGraphMetadata {\n [key: string]: ApprovalGraphNodeMetadata;\n}\n\n/** Algorithm in short:\n * 1. Find all possible paths (longest path length = amount of the columns in the graph)\n * 2. Trim paths (remove blank nodes at the end of the paths)\n * 3. Make all paths the same length (= longest path length) to make every unique node be present at the same index across all paths\n * 4. Sort paths by their likeness between each other to avoid paths crossing\n * 5. Remove \"duplicate\" nodes in paths (make every unique node be present only once across all paths)\n * 6. Remove empty paths\n * 7. Transform paths into the columns\n * 8. Trim columns (remove space nodes at the end of columns)\n * 9. Remove columns which contain only blank and empty nodes\n * 10. Transform columns into the graph columns\n */\nexport function generateApprovalFlowGraph(nodes: ApprovalGraphNode[]): ApprovalFlowGraph {\n const graph: ApprovalFlowGraph = { columns: [], errors: false };\n\n if (!nodes.length) {\n return graph;\n }\n\n const rootNodes = findRootNodes(nodes);\n const finalNodes = findFinalNodes(nodes);\n\n if (!rootNodes.length || !finalNodes.length) {\n console.warn(`Err: Not possible to build graph because root or final nodes aren't present!`);\n graph.errors = true;\n return graph;\n }\n\n const paths = getPaths(rootNodes, nodes);\n\n if (!paths.length) {\n console.warn('Err: Not possible to build graph!');\n graph.errors = true;\n return graph;\n }\n\n const trimmedPaths = trimPaths(paths);\n const sameLengthPaths = makePathsSameLength(trimmedPaths);\n const pathsBySimilarity = sortPaths(sameLengthPaths);\n const pathsWithUniqueNodes = removeDuplicateNodes(pathsBySimilarity);\n const notEmptyPaths = removeEmptyPaths(pathsWithUniqueNodes);\n const columns = getColumnsFromPaths(notEmptyPaths);\n const trimmedColumns = trimColumns(columns);\n const notEmptyColumns = removeEmptyColumns(trimmedColumns);\n graph.columns = getGraphColumnsFromPaths(notEmptyColumns);\n\n return graph;\n}\n\n/** Generate graph metadata */\nexport function generateApprovalFlowGraphMetadata(graph: ApprovalFlowGraph): ApprovalGraphMetadata {\n const nodes = getGraphNodes(graph);\n const metadata: ApprovalGraphMetadata = {};\n\n graph.columns.forEach((column, columnIndex) => {\n column.nodes.forEach((node, nodeIndex) => {\n const parents = getParentNodes(node, nodes);\n const parentsApproved = parents.length ? parents.every((_node) => isNodeApproved(_node)) : false;\n const isRoot = !parents.length && !node.space;\n const isFinal = !node.targets.length && !node.space;\n const parallelEnd = parents.length > 1;\n const firstOfMultipleRootNodes = columnIndex === 0 && column.nodes.length > 1 && nodeIndex === 0;\n const firstOfMultipleFinalNodes =\n columnIndex === graph.columns.length - 1 && column.nodes.length > 1 && nodeIndex === 0;\n\n metadata[node.id] = {\n parents,\n isRoot,\n isFinal,\n parallelStart: node.targets.length > 1,\n parallelEnd,\n columnIndex,\n nodeIndex,\n canAddNodeBefore: !isNodeStarted(node) && !parentsApproved,\n canAddNodeBeforeAll: isRoot && firstOfMultipleRootNodes,\n canAddNodeAfter: !isNodeApproved(node),\n canAddNodeAfterAll:\n !isNodeApproved(node) && ((isFinal && firstOfMultipleFinalNodes) || (parallelEnd && node.blank)),\n canAddParallel: !isNodeApproved(node),\n isVerticalLineBeforeSolid: node.space && graph.columns[columnIndex - 1]?.allNodesApproved,\n isVerticalLineAfterSolid: node.space && column.allNodesApproved,\n firstOfMultipleRootNodes,\n firstOfMultipleFinalNodes,\n rootNodesApproved: columnIndex === 0 && column.allNodesApproved\n };\n });\n });\n\n /* Some flags can be calculated only on the second run, when all nodes already have base metadata */\n graph.columns.forEach((column) => {\n column.nodes.forEach((node, nodeIndex) => {\n const nodeMetadata = metadata[node.id];\n\n nodeMetadata.isLastInParallel = metadata[node.targets[0]]?.parallelEnd;\n nodeMetadata.isFirstInParallel = metadata[nodeMetadata.parents[0]?.id]?.parallelStart;\n\n const columnIndex = column.index;\n const graphPrevColumn = columnIndex ? graph.columns[columnIndex - 1] : undefined;\n const graphNextColumn = columnIndex ? graph.columns[columnIndex + 1] : undefined;\n\n const prevHNode = graphPrevColumn?.nodes[nodeIndex];\n const nextHNode = graphNextColumn?.nodes[nodeIndex];\n\n nodeMetadata.renderAddNodeAfterButton =\n nodeMetadata.canAddNodeAfter &&\n (nodeMetadata.isFinal ||\n nodeMetadata.parallelStart ||\n nodeMetadata.isLastInParallel ||\n nextHNode?.blank);\n\n const nextColumnNodes = graphNextColumn?.nodes;\n if (nodeMetadata.parallelStart && nextColumnNodes) {\n const children = nextColumnNodes.filter((_node) => node.targets.includes(_node.id));\n const firstChildIndex = nextColumnNodes.findIndex((_node) => _node.id === children[0].id);\n const lastChildIndex = nextColumnNodes.findIndex(\n (_node) => _node.id === children[children.length - 1].id\n );\n\n for (let i = firstChildIndex + 1; i <= lastChildIndex; i++) {\n metadata[nextColumnNodes[i].id].renderVerticalLineBefore = true;\n }\n }\n\n const prevColumnNodes = graphPrevColumn?.nodes;\n if (nodeMetadata.parallelEnd && prevColumnNodes) {\n const firstParentIndex = prevColumnNodes.findIndex((_node) => _node.id === nodeMetadata.parents[0].id);\n const lastParentIndex = prevColumnNodes.findIndex(\n (_node) => _node.id === nodeMetadata.parents[nodeMetadata.parents.length - 1].id\n );\n\n for (let i = firstParentIndex + 1; i <= lastParentIndex; i++) {\n metadata[prevColumnNodes[i].id].renderVerticalLineAfter = true;\n }\n }\n\n nodeMetadata.renderVerticalLineBefore = !nodeMetadata.renderVerticalLineBefore\n ? nodeIndex > 0 && !prevHNode\n : true;\n nodeMetadata.renderVerticalLineAfter = !nodeMetadata.renderVerticalLineAfter\n ? nodeIndex > 0 && !nextHNode\n : true;\n });\n });\n\n return metadata;\n}\n\nfunction findRootNodes(nodes: ApprovalNode[]): ApprovalNode[] {\n return nodes.filter((node) => nodes.every((n) => !isNodeTargetsIncludeId(n, node.id)));\n}\n\nfunction findFinalNodes(nodes: ApprovalNode[]): ApprovalNode[] {\n return nodes.filter((node) => !node.targets.length);\n}\n\n/** Find all possible paths (longest path length = amount of the columns in the graph) */\nfunction getPaths(rootNodes: ApprovalGraphNode[], nodes: ApprovalGraphNode[]): ApprovalGraphNode[][] {\n const paths: ApprovalGraphNode[][] = [];\n const queue: ApprovalGraphNode[][] = [];\n\n for (let i = 0; i < rootNodes.length; i++) {\n queue.push([rootNodes[i]]);\n\n while (queue.length) {\n const path = queue.pop();\n let lastNodeInPath: ApprovalGraphNode | undefined;\n if (path) {\n lastNodeInPath = path[path.length - 1];\n }\n\n /** Indicates about an error */\n if (!lastNodeInPath) {\n return [];\n }\n\n if (!lastNodeInPath.targets.length) {\n paths.push(path!);\n } else {\n lastNodeInPath.targets.forEach((targetId) => {\n const targetNode = nodes.find((node) => node.id === targetId);\n if (!targetNode) {\n return;\n }\n const newPath = [...path!, targetNode];\n\n queue.push(newPath);\n });\n }\n }\n }\n\n return paths;\n}\n\n/** Trim paths (remove blank nodes at the end of the paths) */\nfunction trimPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedPaths: ApprovalGraphNode[][] = [];\n\n paths.forEach((path) => {\n let indexToSlice = path.length - 1;\n\n for (let i = path.length - 1; i > 0; --i) {\n if (path[i].blank) {\n indexToSlice = i - 1;\n } else {\n break;\n }\n }\n\n path[indexToSlice].targets = [];\n processedPaths.push(path.slice(0, indexToSlice + 1));\n });\n\n return processedPaths;\n}\n\n/** Make all paths the same length (= longest path length) to make every unique node be present at the same index across all paths */\nfunction makePathsSameLength(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedPaths: ApprovalGraphNode[][] = [];\n const pathLengths = paths.map((path) => path.length);\n const longestPathLength = Math.max(...pathLengths);\n\n paths.forEach((path) => {\n if (path.length === longestPathLength) {\n processedPaths.push(path);\n return;\n }\n\n path.forEach((node, nodeIndex) => {\n /** Try to get blank nodes from already processed paths as paths may be the same within some part */\n let blankNodes = getBlankNodesAfterNode(node, processedPaths);\n if (blankNodes.length && blankNodes[0].id !== path[nodeIndex + 1]?.id) {\n path.splice(nodeIndex + 1, 0, ...blankNodes);\n return;\n }\n\n const nodeIndexInPaths = paths.map((_path) => _path.indexOf(node));\n const mostFarNodeIndexInPaths = Math.max(...nodeIndexInPaths);\n\n if (nodeIndex < mostFarNodeIndexInPaths) {\n blankNodes = getBlankNodes(mostFarNodeIndexInPaths - nodeIndex, path[nodeIndex - 1].status);\n\n blankNodes[blankNodes.length - 1].targets = [node.id];\n path[nodeIndex - 1].targets = [blankNodes[0].id];\n\n path.splice(nodeIndex, 0, ...blankNodes);\n return;\n }\n\n if (nodeIndex === mostFarNodeIndexInPaths && nodeIndex === path.length - 1) {\n blankNodes = getBlankNodes(longestPathLength - path.length, path[nodeIndex].status);\n\n path[nodeIndex].targets = [blankNodes[0].id];\n\n path.splice(nodeIndex + 1, 0, ...blankNodes);\n return;\n }\n });\n\n processedPaths.push(path);\n });\n\n return processedPaths;\n}\n\n/** Try to get blank nodes from already processed paths as paths may be the same within some part */\nfunction getBlankNodesAfterNode(node: ApprovalGraphNode, paths: ApprovalGraphNode[][]): ApprovalGraphNode[] {\n const blankNodes: ApprovalGraphNode[] = [];\n\n const pathWithBlankNodeAfter = paths.find((path) => {\n const nodeIndex = path.indexOf(node);\n return nodeIndex > -1 && path[nodeIndex + 1]?.blank;\n });\n\n if (pathWithBlankNodeAfter) {\n const nodeIndex = pathWithBlankNodeAfter.indexOf(node) + 1;\n const nextNotBlankNodeIndex = pathWithBlankNodeAfter.findIndex(\n (_node, _index) => _index > nodeIndex && !_node.blank\n );\n\n blankNodes.push(\n ...pathWithBlankNodeAfter.slice(nodeIndex, nextNotBlankNodeIndex > 0 ? nextNotBlankNodeIndex : undefined)\n );\n }\n\n return blankNodes;\n}\n\n/** Generate blank nodes sequential */\nfunction getBlankNodes(count: number, status: ApprovalStatus): ApprovalGraphNode[] {\n const nodes: ApprovalGraphNode[] = [];\n\n let node: ApprovalGraphNode;\n let nodeId: string | undefined;\n\n for (let i = count; i > 0; i--) {\n node = Object.assign({}, getBlankApprovalGraphNode(), { targets: nodeId ? [nodeId] : [], status });\n nodeId = node.id;\n\n nodes.unshift(node);\n }\n\n return nodes;\n}\n\n/** Sort paths by their likeness (= count of the same nodes relatively to the other paths) between each other to avoid paths crossing */\nfunction sortPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n if (paths.length === 1) {\n return paths;\n }\n\n /** [pathIndex, relativeToPathIndex, sameNodesCount][] */\n let similarities: number[][] = [];\n let pathSimilarity = 0;\n\n paths.forEach((path, index) => {\n for (let i = 0; i < paths.length; i++) {\n if (index !== i && !similarities.some((likely) => index === likely[1] && i === likely[0])) {\n pathSimilarity = 0;\n\n for (let j = 0; j < path.length; j++) {\n if (path[j].id === paths[i][j].id) {\n pathSimilarity++;\n }\n }\n\n similarities.push([index, i, pathSimilarity]);\n }\n }\n });\n\n similarities = similarities.sort((a, b) => (a[2] > b[2] ? -1 : 1));\n\n const usedPathIndexes: number[] = [];\n const processedPaths: ApprovalGraphNode[][] = [];\n\n similarities.forEach((similarity) => {\n if (!usedPathIndexes.some((i) => i === similarity[0])) {\n processedPaths.push(paths[similarity[0]]);\n usedPathIndexes.push(similarity[0]);\n }\n\n if (!usedPathIndexes.some((i) => i === similarity[1])) {\n processedPaths.push(paths[similarity[1]]);\n usedPathIndexes.push(similarity[1]);\n }\n });\n\n return processedPaths;\n}\n\n/** Remove \"duplicate\" nodes in paths (make every unique node be present only once across all paths) */\nfunction removeDuplicateNodes(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedPaths: ApprovalGraphNode[][] = [];\n\n paths.forEach((path, index) => {\n path.forEach((node) => {\n paths.forEach((_path, _index) => {\n const isNodeInPath = _index !== index && _path.indexOf(node) > -1;\n\n if (isNodeInPath) {\n /** Instead of node place space node */\n _path.splice(_path.indexOf(node), 1, getSpaceApprovalGraphNode());\n }\n });\n });\n\n processedPaths.push(path);\n });\n\n return processedPaths;\n}\n\n/** Remove empty paths (which contains only empty nodes) */\nfunction removeEmptyPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n return paths.reduce((acc, path) => {\n if (!path.every((node) => node.space)) {\n acc.push(path);\n }\n\n return acc;\n }, [] as ApprovalGraphNode[][]);\n}\n\n/** Transform paths into the columns (it's possible as they're all the same length) */\nfunction getColumnsFromPaths(paths: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const columns: ApprovalGraphNode[][] = [];\n let column: ApprovalGraphNode[] = [];\n\n for (let i = 0; i < paths[0].length; i++) {\n column = [];\n\n for (let v = 0; v < paths.length; v++) {\n column.push(paths[v][i]);\n }\n\n columns.push(column);\n }\n\n return columns;\n}\n\n/** Trim space nodes at the end of the columns. */\nfunction trimColumns(columns: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedColumns: ApprovalGraphNode[][] = [];\n\n columns.forEach((column) => {\n let lastNotSpaceNodeIndex;\n\n for (let i = column.length - 1; i >= 0; i--) {\n if (!column[i].space) {\n lastNotSpaceNodeIndex = i;\n break;\n }\n }\n\n if (lastNotSpaceNodeIndex < column.length) {\n processedColumns.push(column.slice(0, lastNotSpaceNodeIndex + 1));\n } else {\n processedColumns.push(column);\n }\n });\n\n return processedColumns;\n}\n\n/** Remove empty columns (where every node is a blank node) */\nfunction removeEmptyColumns(columns: ApprovalGraphNode[][]): ApprovalGraphNode[][] {\n const processedColumns: ApprovalGraphNode[][] = [];\n\n columns.forEach((column) => {\n const areAllNodesEmpty = column.every((node) => node.blank || node.space);\n\n if (areAllNodesEmpty) {\n column.forEach((node) => {\n if (node.blank) {\n /** Connect previous column to the next column, omitting current column. */\n replaceTargets(node.id, node.targets, columns);\n }\n });\n } else {\n processedColumns.push(column);\n }\n });\n\n return processedColumns;\n}\n\nfunction replaceTargets(replaceId: string, replaceWithId: string[], columns: ApprovalGraphNode[][]): void {\n columns.forEach((column) => {\n column.forEach((n) => {\n if (isNodeTargetsIncludeId(n, replaceId)) {\n n.targets = n.targets.filter((_id) => _id !== replaceId);\n n.targets.push(...replaceWithId);\n }\n });\n });\n}\n\n/** Transform columns into the graph columns (with additional metadata). */\nfunction getGraphColumnsFromPaths(columns: ApprovalGraphNode[][]): ApprovalGraphColumn[] {\n const graphColumns: ApprovalGraphColumn[] = [];\n\n columns.forEach((column, index) => {\n column.forEach((node) => (node.colIndex = index));\n\n graphColumns.push({\n nodes: column,\n index,\n allNodesApproved: column.every((node) => isNodeApproved(node))\n });\n });\n\n return graphColumns;\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { FormsModule } from '@angular/forms';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { FormGroupComponent, FormItemComponent } from '@fundamental-ngx/core/form';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { ListComponent, StandardListItemComponent } from '@fundamental-ngx/platform/list';\nimport { trackByFn } from '../helpers';\nimport { ApprovalTeam } from '../interfaces';\n\n/**\n * @deprecated\n * ApprovalFlowTeamList component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-team-list',\n templateUrl: './approval-flow-team-list.component.html',\n styleUrl: './approval-flow-team-list.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-approval-flow-team-list'\n },\n imports: [\n ListComponent,\n ContentDensityDirective,\n FormGroupComponent,\n FormItemComponent,\n RadioButtonComponent,\n FormsModule,\n StandardListItemComponent,\n IconComponent\n ]\n})\nexport class ApprovalFlowTeamListComponent {\n /** Approval flow teams */\n @Input()\n teams: ApprovalTeam[] = [];\n\n /** Whether in RTL mode */\n @Input()\n isRtl = false;\n\n /** Selected team ID */\n @Input()\n selectedTeamId: Nullable<string>;\n\n /** Event emitted on team click */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTeamClick = new EventEmitter<ApprovalTeam>();\n\n /** Event emitted on team selection change */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onTeamRadioClick = new EventEmitter<ApprovalTeam>();\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n _showTeamDetails(team: ApprovalTeam): void {\n this.onTeamClick.emit(team);\n }\n}\n","<fdp-list [hasByLine]=\"true\" fdCompact>\n <fd-form-group>\n @for (team of teams; track _trackByFn(i, team); let i = $index) {\n <div fd-form-item>\n <fd-radio-button\n [value]=\"team.id\"\n [attr.id]=\"'team-radio' + i\"\n [name]=\"'team-radio' + i\"\n [(ngModel)]=\"selectedTeamId\"\n (click)=\"onTeamRadioClick.emit(team)\"\n >\n </fd-radio-button>\n <fdp-standard-list-item\n [attr.id]=\"'approval-team-' + team.id\"\n [avatar]=\"{ image: '', ariaLabel: team.name }\"\n [description]=\"team.description || team.members.length + ' members'\"\n [title]=\"team.name\"\n (click)=\"_showTeamDetails(team)\"\n >\n </fdp-standard-list-item>\n <fd-icon [glyph]=\"'navigation-' + (isRtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </div>\n }\n </fd-form-group>\n</fdp-list>\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { AsyncPipe, NgTemplateOutlet } from '@angular/common';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { AvatarComponent } from '@fundamental-ngx/core/avatar';\nimport { ApprovalUser } from '../interfaces';\n\n/**\n * @deprecated\n * ApprovalFlowUserDetails component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-user-details',\n templateUrl: './approval-flow-user-details.component.html',\n styleUrl: './approval-flow-user-details.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-user-details'\n },\n imports: [AvatarComponent, NgTemplateOutlet, AsyncPipe]\n})\nexport class ApprovalFlowUserDetailsComponent {\n /** Approval Flow user */\n @Input()\n user: ApprovalUser;\n\n /** Approval Flow user details */\n @Input()\n details: Nullable<Observable<any>>;\n\n /** Approval Flow user details template */\n @Input()\n detailsTemplate: TemplateRef<any>;\n}\n","<div class=\"fdp-approval-flow-user-details__user-info\">\n <fd-avatar [image]=\"user.imgUrl\" size=\"s\"> </fd-avatar>\n <div>\n <div class=\"fdp-approval-flow-user-details__name\">{{ user.name }}</div>\n <div class=\"fdp-approval-flow-user-details__description\">{{ user.description }}</div>\n </div>\n</div>\n@if (detailsTemplate) {\n <ng-template [ngTemplateOutlet]=\"detailsTemplate\" [ngTemplateOutletContext]=\"{ data: details | async }\">\n </ng-template>\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n DestroyRef,\n EventEmitter,\n inject,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\n\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { FormsModule } from '@angular/forms';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n BaseListItem,\n ListComponent,\n SelectionChangeEvent,\n StandardListItemComponent\n} from '@fundamental-ngx/platform/list';\nimport { trackByFn } from '../helpers';\nimport { ApprovalUser } from '../interfaces';\n\nconst ITEMS_RENDERED_AT_ONCE = 100;\nconst INTERVAL_IN_MS = 10;\n\n/**\n * @deprecated\n * ApprovalFlowUserList component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-user-list',\n templateUrl: './approval-flow-user-list.component.html',\n styleUrl: './approval-flow-user-list.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-user-list'\n },\n imports: [ListComponent, FormsModule, StandardListItemComponent, FdTranslatePipe]\n})\nexport class ApprovalFlowUserListComponent implements AfterViewInit, OnChanges, OnDestroy {\n /** Approval flow users */\n @Input()\n users: ApprovalUser[] = [];\n\n /** Approval flow selected users */\n @Input()\n selectedUsers: ApprovalUser[] = [];\n\n /** Whether the list is selectable */\n @Input()\n isSelectable = true;\n\n /** Event emitted on user click */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onUserClick = new EventEmitter<ApprovalUser>();\n\n /** Event emitted on selection change */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onSelectionChange = new EventEmitter<ApprovalUser[]>();\n\n /** @hidden */\n @ViewChild(ListComponent)\n list: ListComponent<ApprovalUser>;\n\n /** @hidden */\n @ViewChildren(StandardListItemComponent)\n listItems: QueryList<StandardListItemComponent>;\n\n /** @hidden */\n _selectedItems: BaseListItem[] = [];\n\n /** @hidden */\n _idPrefix = 'approval-node-user-';\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n _displayUsers: ApprovalUser[] = [];\n\n /** @hidden */\n _allSelectedUsers: ApprovalUser[] = [];\n\n /** @hidden */\n private _intervalID?: number;\n\n /** @hidden */\n private _destroyed$ = inject(DestroyRef);\n\n /** @hidden */\n private _dontCallSelection = false;\n\n /** @hidden */\n constructor(private _cdr: ChangeDetectorRef) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.selectedUsers.length) {\n this._selectItems(this.selectedUsers);\n this._allSelectedUsers = [...this.selectedUsers];\n this._cdr.markForCheck();\n }\n\n if (this.isSelectable) {\n this._listenToListItemChange();\n }\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.users) {\n this._collectDataProgressive();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._killInterval();\n }\n\n /** @hidden */\n _onSelect(event: SelectionChangeEvent): void {\n if (!this._dontCallSelection) {\n this._selectedItems = event.selectedItems;\n\n if (event.removed) {\n const ids = event.removed.map((item: BaseListItem) => item.id);\n this._allSelectedUsers = this._allSelectedUsers.filter(\n (user: ApprovalUser) => !ids.includes(`${this._idPrefix + user.id}`)\n );\n }\n\n if (event.added) {\n this._allSelectedUsers.push(...this._getUsersFromSelectedItems(event.added));\n }\n\n this.onSelectionChange.emit(this._allSelectedUsers);\n this._cdr.detectChanges();\n }\n }\n\n /** @hidden */\n private _getUsersFromSelectedItems(items: BaseListItem[]): ApprovalUser[] {\n return items\n .map((item) => this.users.find((user) => `${this._idPrefix + user.id}` === item.id))\n .filter((u): u is ApprovalUser => !!u);\n }\n\n /** @hidden */\n private _collectDataProgressive(): void {\n this._killInterval();\n this._displayUsers = [];\n\n if (!this.users?.length) {\n return;\n }\n\n const collectionTracker = { currentIndex: 0 };\n\n this._userCollectorIntervalFn(collectionTracker);\n this._intervalID = window.setInterval(\n this._userCollectorIntervalFn.bind(this),\n INTERVAL_IN_MS,\n collectionTracker\n );\n }\n\n /** @hidden */\n private _userCollectorIntervalFn(tracker: { currentIndex: number }): void {\n const nextIndex = tracker.currentIndex + ITEMS_RENDERED_AT_ONCE;\n\n const collectedUsers: ApprovalUser[] = [];\n\n for (let i = tracker.currentIndex; i <= nextIndex; i++) {\n if (i >= this.users.length) {\n this._killInterval();\n break;\n }\n\n collectedUsers.push(this.users[i]);\n }\n\n tracker.currentIndex += ITEMS_RENDERED_AT_ONCE;\n\n this._displayUsers.push(...collectedUsers);\n this._cdr.markForCheck();\n }\n\n /** @hidden */\n private _killInterval(): void {\n if (this._intervalID) {\n clearInterval(this._intervalID);\n }\n }\n\n /** @hidden */\n private _listenToListItemChange(): void {\n this.listItems.changes.pipe(takeUntilDestroyed(this._destroyed$)).subscribe(() => {\n this._selectItems(this._allSelectedUsers);\n this._cdr.detectChanges();\n });\n }\n\n /** @hidden */\n private _selectItems(users: ApprovalUser[]): void {\n this._dontCallSelection = true;\n const allSelectedUserNames = users.map((user) => this._idPrefix + user.id);\n const currentSelectedList = this.listItems.filter((item) => allSelectedUserNames.includes(item.id));\n this.list._clearSelection();\n this._selectedItems = [...currentSelectedList];\n this._selectedItems.forEach((item) => {\n item._selected = true;\n this.list._selectItem(item);\n });\n this._dontCallSelection = false;\n }\n}\n","@if (_allSelectedUsers.length) {\n <div class=\"fdp-approval-flow-user-list__selected-count\">\n @if (_allSelectedUsers.length === 1) {\n {{ 'platformApprovalFlow.userListSelectedItemsCountSingular' | fdTranslate }}\n } @else {\n {{\n 'platformApprovalFlow.userListSelectedItemsCountPlural'\n | fdTranslate: { count: _allSelectedUsers.length }\n }}\n }\n </div>\n}\n<fdp-list\n [selectionMode]=\"isSelectable ? 'multi' : 'none'\"\n [selection]=\"isSelectable\"\n [navigationIndicator]=\"true\"\n [hasByLine]=\"true\"\n [(ngModel)]=\"_selectedItems\"\n [selectedItems]=\"_selectedItems\"\n (selectedItemChange)=\"_onSelect($event)\"\n>\n @for (_user of _displayUsers; track _trackByFn($index, _user)) {\n <fdp-standard-list-item\n [attr.id]=\"_idPrefix + _user.id\"\n [id]=\"_idPrefix + _user.id\"\n [avatar]=\"{ image: _user.imgUrl, ariaLabel: _user.name }\"\n [description]=\"_user.description\"\n [ariaLabel]=\"_user.name\"\n [title]=\"_user.name\"\n (click)=\"$event.stopPropagation(); onUserClick.emit(_user)\"\n ></fdp-standard-list-item>\n }\n</fdp-list>\n","import { EventEmitter, Injectable } from '@angular/core';\nimport { ApprovalTeam } from '../interfaces';\n\nexport enum VIEW_MODES {\n SELECT_TEAM = 'SELECT_TEAM',\n SELECT_USER = 'SELECT_USER',\n VIEW_TEAM_MEMBERS = 'VIEW_TEAM_MEMBERS',\n USER_DETAILS = 'USER_DETAILS'\n}\n\n@Injectable()\nexport class ApprovalFlowAddNodeViewService {\n /** @hidden */\n onViewChange = new EventEmitter();\n\n /** @hidden */\n private currentView?: VIEW_MODES;\n /** @hidden */\n private selectedTeam?: ApprovalTeam;\n\n /** @hidden */\n get isUserDetailsMode(): boolean {\n return this.currentView === VIEW_MODES.USER_DETAILS;\n }\n\n /** @hidden */\n get isTeamMembersMode(): boolean {\n return this.currentView === VIEW_MODES.VIEW_TEAM_MEMBERS;\n }\n\n /** @hidden */\n get isSelectUserMode(): boolean {\n return this.currentView === VIEW_MODES.SELECT_USER;\n }\n\n /** @hidden */\n get isSelectTeamMode(): boolean {\n return this.currentView === VIEW_MODES.SELECT_TEAM;\n }\n\n /** @hidden */\n get team(): ApprovalTeam | undefined {\n return this.selectedTeam;\n }\n\n /** @hidden */\n setCurrentView(view: VIEW_MODES): void {\n this.currentView = view;\n this.onViewChange.emit();\n }\n\n /** @hidden */\n resetView(): void {\n this.currentView = undefined;\n this.onViewChange.emit();\n }\n\n /** @hidden */\n selectTeam(team: ApprovalTeam): void {\n this.selectedTeam = team;\n }\n\n /** @hidden */\n resetTeam(): void {\n this.selectedTeam = undefined;\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { Observable, Subscription, combineLatest } from 'rxjs';\n\nimport { FdDate } from '@fundamental-ngx/core/datetime';\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { FormsModule } from '@angular/forms';\nimport { Nullable, TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { BusyIndicatorComponent } from '@fundamental-ngx/core/busy-indicator';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { DatePickerComponent } from '@fundamental-ngx/core/date-picker';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { FormItemComponent, FormLabelComponent } from '@fundamental-ngx/core/form';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { MultiInputComponent } from '@fundamental-ngx/core/multi-input';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { OptionComponent, SelectComponent } from '@fundamental-ngx/core/select';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent } from '@fundamental-ngx/platform/search-field';\nimport { ApprovalFlowTeamDataSource, ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\nimport { ApprovalFlowTeamListComponent } from '../approval-flow-team-list/approval-flow-team-list.component';\nimport { ApprovalFlowUserDetailsComponent } from '../approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowUserListComponent } from '../approval-flow-user-list/approval-flow-user-list.component';\nimport { displayTeamFn, displayUserFn, filterByName, trackByFn } from '../helpers';\nimport { ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\nimport { ApprovalFlowAddNodeViewService, VIEW_MODES } from '../services/approval-flow-add-node-view.service';\n\nexport interface AddNodeDialogRefData {\n isEdit?: boolean;\n showNodeTypeSelect?: boolean;\n node?: ApprovalNode;\n nodeTarget?: ApprovalFlowNodeTarget;\n teamDataSource: ApprovalFlowTeamDataSource<ApprovalTeam>;\n userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n userDetailsTemplate: TemplateRef<any>;\n checkDueDate?: boolean;\n rtl: boolean;\n}\n\nexport interface AddNodeDialogFormData {\n node: ApprovalNode;\n nodeType: APPROVAL_FLOW_NODE_TYPES;\n toNextSerial: boolean;\n}\n\nexport type ApprovalFlowNewNodePlacement = 'before' | 'after' | 'before-all' | 'after-all';\n\nexport type ApprovalFlowNodeTarget = ApprovalFlowNewNodePlacement | 'empty' | 'parallel';\n\nexport enum APPROVAL_FLOW_NODE_TYPES {\n SERIAL = 'SERIAL',\n PARALLEL = 'PARALLEL'\n}\n\nexport enum APPROVAL_FLOW_APPROVER_TYPES {\n SINGLE_USER = 'SINGLE_USER',\n ANYONE = 'ANYONE',\n EVERYONE = 'EVERYONE'\n}\n\n/**\n * @deprecated\n * ApprovalFlowAddNode component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-add-node',\n templateUrl: './approval-flow-add-node.component.html',\n styleUrls: ['../styles/approval-flow-dialog.scss', './approval-flow-add-node.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-dialog fdp-approval-flow-add-node'\n },\n imports: [\n DialogComponent,\n ContentDensityDirective,\n DialogHeaderComponent,\n TemplateDirective,\n IconComponent,\n SearchFieldComponent,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n FormItemComponent,\n FormLabelComponent,\n SelectComponent,\n OptionComponent,\n MultiInputComponent,\n FormsModule,\n CheckboxComponent,\n DatePickerComponent,\n ApprovalFlowTeamListComponent,\n ApprovalFlowUserListComponent,\n ApprovalFlowUserDetailsComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n BusyIndicatorComponent,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowAddNodeComponent implements OnInit, OnDestroy {\n /** @hidden */\n _nodeType = APPROVAL_FLOW_NODE_TYPES.SERIAL;\n\n /** @hidden */\n _nodeTypes = APPROVAL_FLOW_NODE_TYPES;\n\n /** @hidden */\n _nodeTypesArray = Object.keys(APPROVAL_FLOW_NODE_TYPES);\n\n /** @hidden */\n _approverType = APPROVAL_FLOW_APPROVER_TYPES.SINGLE_USER;\n\n /** @hidden */\n _approverTypes = APPROVAL_FLOW_APPROVER_TYPES;\n\n /** @hidden */\n _approverTypesArray = Object.keys(APPROVAL_FLOW_APPROVER_TYPES);\n\n /** @hidden */\n _dueDate = FdDate.getNow();\n\n /** @hidden */\n _selectMode = false;\n\n /** @hidden */\n _approvers: ApprovalUser[] = [];\n\n /** @hidden */\n _teams: ApprovalTeam[] = [];\n\n /** @hidden */\n _selectedApprovers: ApprovalUser[] = [];\n\n /** @hidden */\n _selectedTeam: Nullable<ApprovalTeam>;\n\n /** @hidden */\n _selectedTeamArray: ApprovalTeam[] = [];\n\n /** @hidden */\n _selectedTeamMembers: ApprovalUser[] = [];\n\n /** @hidden */\n _filteredTeamMembers: ApprovalUser[] = [];\n\n /** @hidden */\n _userToShowDetails?: ApprovalUser;\n\n /** @hidden */\n _userToShowDetailsData$?: Observable<any>;\n\n /** @hidden */\n _checkDueDate = false;\n\n /** @hidden */\n _displayUserFn = displayUserFn;\n\n /** @hidden */\n _displayTeamFn = displayTeamFn;\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n _addToNextSerial = false;\n\n /** @hidden */\n _searchInput = '';\n\n /** @hidden */\n private _viewChangeSub: Subscription;\n\n /** @hidden */\n private _dataSourceSub: Subscription;\n\n /** @hidden */\n constructor(\n public dialogRef: DialogRef<AddNodeDialogRefData>,\n public viewService: ApprovalFlowAddNodeViewService,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n get _data(): AddNodeDialogRefData {\n return this.dialogRef.data;\n }\n\n /** @hidden */\n get _isSingleUserMode(): boolean {\n return this._approverType === this._approverTypes.SINGLE_USER;\n }\n\n /** @hidden */\n get _isMainSubmitButtonDisabled(): boolean {\n const approvers = this._isSingleUserMode ? this._selectedApprovers : this._selectedTeamArray;\n\n return !approvers.length || (this._checkDueDate && !this._dueDate);\n }\n\n /** @hidden */\n get _headerArrowGlyph(): string {\n return 'navigation-' + (this._data.rtl ? 'right' : 'left') + '-arrow';\n }\n\n /** @hidden */\n ngOnInit(): void {\n // triggering initial loading of data in data sources.\n this._data.teamDataSource.match();\n this._data.userDataSource.match();\n const teams$ = this._data.teamDataSource.open();\n const approvers$ = this._data.userDataSource.open();\n this._dataSourceSub = combineLatest([teams$, approvers$]).subscribe(([teams, approvers]) => {\n this._teams = teams;\n\n this._approvers = approvers;\n\n if (this._data.isEdit) {\n this._checkDueDate = !!this._data.checkDueDate;\n\n if (this._checkDueDate && this._data.node?.dueDate) {\n this._dueDate = FdDate.getFdDateByDate(new Date(this._data.node.dueDate));\n }\n\n this._selectedApprovers = [...(this._data.node?.approvers ?? [])];\n\n const team =\n this._data.node?.approvalTeamId &&\n this._teams.find((t) => t.id === this._data.node?.approvalTeamId);\n if (team) {\n this.viewService.selectTeam(team);\n\n this._selectedTeam = team;\n this._selectedTeamArray = [team];\n this._approverType = this._data.node?.isEveryoneApprovalNeeded\n ? this._approverTypes.EVERYONE\n : this._approverTypes.ANYONE;\n }\n }\n this._cdr.detectChanges();\n });\n\n this._viewChangeSub = this.viewService.onViewChange.subscribe(() => {\n this._cdr.detectChanges();\n });\n\n switch (this._data.nodeTarget) {\n case 'empty':\n case 'before':\n case 'after':\n this._nodeType = this._nodeTypes.SERIAL;\n break;\n case 'parallel':\n this._nodeType = this._nodeTypes.PARALLEL;\n break;\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._viewChangeSub.unsubscribe();\n this._dataSourceSub.unsubscribe();\n this._data.userDataSource.close();\n this._data.teamDataSource.close();\n }\n\n /** @hidden */\n _goToSelectMode(): void {\n this._selectMode = true;\n\n this.viewService.setCurrentView(this._isSingleUserMode ? VIEW_MODES.SELECT_USER : VIEW_MODES.SELECT_TEAM);\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _exitSelectMode(): void {\n this._searchInput = '';\n this._onSearchStringChange('');\n this._selectedApprovers = this._data.node?.approvers?.length ? [...this._data.node.approvers] : [];\n\n if (!this._data.isEdit && !this._data.node?.approvalTeamId) {\n this.viewService.resetTeam();\n }\n\n this._selectMode = false;\n this.viewService.resetView();\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _setSelectedApprovers(approvers: ApprovalUser[]): void {\n this._selectedApprovers = approvers;\n\n this._confirmSelectedApprovers();\n }\n\n /** @hidden */\n _confirmSelectedApprovers(): void {\n if (!this._data.node) {\n return;\n }\n this._data.node.approvers = this._selectedApprovers;\n this._data.node.variousTeams = this._data.node.approvers.some(\n (u) => u.teamId !== this._data.node!.approvers[0].teamId\n );\n this._data.node.description = this._data.node.variousTeams ? '' : this._selectedApprovers[0]?.description;\n\n delete this._data.node.approvalTeamId;\n delete this._data.node.isEveryoneApprovalNeeded;\n\n this._exitSelectMode();\n }\n\n /** @hidden */\n _setSelectedTeam(team: ApprovalTeam): void {\n this.viewService.selectTeam(team);\n }\n\n /** @hidden */\n _confirmSelectedTeam(): void {\n if (!this.viewService.team) {\n return;\n }\n this._selectedTeam = this.viewService.team;\n this._selectedTeamArray = [this.viewService.team];\n\n if (this._data.node) {\n this._data.node.variousTeams = false;\n this._data.node.approvalTeamId = this.viewService.team.id;\n this._data.node.description = this.viewService.team.name;\n this._data.node.isEveryoneApprovalNeeded = this._approverType === APPROVAL_FLOW_APPROVER_TYPES.EVERYONE;\n }\n\n this._exitSelectMode();\n }\n\n /** @hidden */\n _seeUserDetails(user: ApprovalUser): void {\n this.viewService.setCurrentView(VIEW_MODES.USER_DETAILS);\n\n this._userToShowDetails = user;\n this._userToShowDetailsData$ = this._data.userDataSource.dataProvider.getOne(new Map([['id', user.id]]));\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _exitUserDetailsMode(): void {\n this.viewService.setCurrentView(this.viewService.team ? VIEW_MODES.VIEW_TEAM_MEMBERS : VIEW_MODES.SELECT_USER);\n\n this._userToShowDetails = undefined;\n this._userToShowDetailsData$ = undefined;\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _viewTeamMembers(team: ApprovalTeam): void {\n this.viewService.selectTeam(team);\n this.viewService.setCurrentView(VIEW_MODES.VIEW_TEAM_MEMBERS);\n\n this._selectedTeamMembers = team.members;\n\n this._setFilteredTeamMembers(this._selectedTeamMembers); // applying local filtering\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _exitTeamMembersMode(): void {\n this.viewService.setCurrentView(VIEW_MODES.SELECT_TEAM);\n this.viewService.resetTeam();\n\n this._selectedTeamMembers = [];\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _submit(): void {\n if (this._data.node && !this._isSingleUserMode && this._selectedTeam) {\n this._data.node.approvers = [...this._selectedTeam.members];\n }\n\n if (this._data.node && this._checkDueDate) {\n this._data.node.dueDate = this._dueDate.toDate();\n }\n\n this.dialogRef.close({\n node: this._data.node,\n nodeType: this._nodeType,\n toNextSerial: this._addToNextSerial\n } as AddNodeDialogFormData);\n }\n\n /** @hidden */\n _onSearchStringChange(searchString = ''): void {\n this._searchInput = searchString;\n const params = new Map([['query', searchString]]);\n\n if (this.viewService.isSelectUserMode) {\n this._data.userDataSource.match(params);\n } else if (this.viewService.isSelectTeamMode) {\n this._data.teamDataSource.match(params);\n } else if (this.viewService.isTeamMembersMode) {\n this._setFilteredTeamMembers(this._selectedTeamMembers.filter((user) => filterByName(user, searchString)));\n }\n }\n\n /** @hidden */\n _setFilteredTeamMembers(users: ApprovalUser[]): void {\n this._filteredTeamMembers = [...users];\n this._cdr.detectChanges();\n }\n}\n","<fd-dialog fdCompact>\n <fd-dialog-header [class.show-search]=\"_selectMode && !_userToShowDetails\">\n <ng-template fdkTemplate=\"header\">\n <p>\n @if (!_selectMode && !_data.isEdit) {\n {{ 'platformApprovalFlow.addNodeDialogHeaderAddApprovers' | fdTranslate }}\n }\n @if (!_selectMode && _data.isEdit) {\n {{ 'platformApprovalFlow.addNodeDialogHeaderEditApprover' | fdTranslate }}\n }\n @if (viewService.isSelectUserMode || viewService.isSelectTeamMode) {\n {{ 'platformApprovalFlow.addNodeDialogHeaderAddApproverTeam' | fdTranslate }}\n }\n @if (viewService.isTeamMembersMode) {\n <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitTeamMembersMode()\"></fd-icon>\n {{ viewService.team?.name ?? '' }} ({{ viewService.team?.members?.length ?? 0 }})\n }\n @if (viewService.isUserDetailsMode) {\n <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitUserDetailsMode()\"></fd-icon>\n {{ 'platformApprovalFlow.addNodeDialogHeaderDetail' | fdTranslate }}\n }\n </p>\n @if (_selectMode && !_userToShowDetails) {\n <fdp-search-field\n [placeholder]=\"'platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate\"\n [suggestions]=\"[]\"\n [inputText]=\"_searchInput\"\n (inputChange)=\"_onSearchStringChange($event.text)\"\n ></fdp-search-field>\n }\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body [class.fd-dialog__body--auto-height]=\"viewService.isUserDetailsMode\">\n @if (!_selectMode) {\n @if (_data.showNodeTypeSelect) {\n <div fd-form-item>\n <label fd-form-label>\n {{ 'platformApprovalFlow.addNodeDialogNodeType' | fdTranslate }}\n </label>\n <fd-select [(value)]=\"_nodeType\">\n @for (option of _nodeTypesArray; track option) {\n @switch (option) {\n @case (_nodeTypes.SERIAL) {\n <li fd-option [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogNodeTypeSerial' | fdTranslate }}\n </li>\n }\n @case (_nodeTypes.PARALLEL) {\n <li fd-option [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogNodeTypeParallel' | fdTranslate }}\n </li>\n }\n }\n }\n </fd-select>\n </div>\n }\n <div fd-form-item>\n <label fd-form-label>\n {{ 'platformApprovalFlow.addNodeDialogApproverType' | fdTranslate }}\n </label>\n <fd-select [(value)]=\"_approverType\">\n @for (option of _approverTypesArray; track option) {\n @switch (option) {\n @case (_approverTypes.SINGLE_USER) {\n <li fd-option [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogApproverTypeUser' | fdTranslate }}\n </li>\n }\n @case (_approverTypes.ANYONE) {\n <li fd-option [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogApproverTypeTeamAnyone' | fdTranslate }}\n </li>\n }\n @case (_approverTypes.EVERYONE) {\n <li fd-option [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogApproverTypeTeamEveryone' | fdTranslate }}\n </li>\n }\n }\n }\n </fd-select>\n </div>\n <div fd-form-item>\n <label fd-form-label>{{ 'platformApprovalFlow.addNodeDialogUserOrTeam' | fdTranslate }}</label>\n @if (_isSingleUserMode) {\n <fd-multi-input\n [showAllButton]=\"false\"\n [dropdownValues]=\"_selectedApprovers\"\n [(ngModel)]=\"_selectedApprovers\"\n [displayFn]=\"_displayUserFn\"\n (openChange)=\"_goToSelectMode()\"\n (selectedChange)=\"_setSelectedApprovers($event)\"\n ></fd-multi-input>\n }\n @if (!_isSingleUserMode) {\n <fd-multi-input\n [showAllButton]=\"false\"\n [dropdownValues]=\"_selectedTeamArray\"\n [(ngModel)]=\"_selectedTeamArray\"\n [displayFn]=\"_displayTeamFn\"\n (openChange)=\"_goToSelectMode()\"\n ></fd-multi-input>\n }\n </div>\n @if (_nodeType === _nodeTypes.PARALLEL) {\n <div fd-form-item>\n <fd-checkbox [(ngModel)]=\"_addToNextSerial\">\n {{ 'platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate }}\n </fd-checkbox>\n </div>\n }\n @if (_checkDueDate) {\n <div fd-form-item>\n <label fd-form-label>{{ 'platformApprovalFlow.addNodeDialogDueDate' | fdTranslate }}</label>\n <fd-date-picker type=\"single\" [state]=\"!this._dueDate ? 'error' : null\" [(ngModel)]=\"_dueDate\">\n </fd-date-picker>\n </div>\n }\n }\n @if (_selectMode) {\n @if (viewService.isSelectTeamMode) {\n @if (!_data.teamDataSource.isDataLoading) {\n <fdp-approval-flow-team-list\n [isRtl]=\"_data.rtl\"\n [teams]=\"_teams\"\n [selectedTeamId]=\"_selectedTeam?.id\"\n (onTeamClick)=\"_viewTeamMembers($event)\"\n (onTeamRadioClick)=\"_setSelectedTeam($event)\"\n ></fdp-approval-flow-team-list>\n } @else {\n <fd-busy-indicator [loading]=\"true\" [block]=\"true\"> </fd-busy-indicator>\n }\n }\n @if (viewService.isSelectUserMode || viewService.isTeamMembersMode) {\n @if (viewService.isSelectUserMode || !_data.userDataSource.isDataLoading) {\n <fdp-approval-flow-user-list\n [users]=\"viewService.isSelectUserMode ? _approvers : _filteredTeamMembers\"\n [isSelectable]=\"viewService.isSelectUserMode\"\n [selectedUsers]=\"_selectedApprovers\"\n (onUserClick)=\"_seeUserDetails($event)\"\n (onSelectionChange)=\"_selectedApprovers = $event\"\n ></fdp-approval-flow-user-list>\n } @else {\n <fd-busy-indicator [loading]=\"true\" [block]=\"true\"> </fd-busy-indicator>\n }\n }\n @if (viewService.isUserDetailsMode && _userToShowDetails) {\n <fdp-approval-flow-user-details\n [user]=\"_userToShowDetails\"\n [detailsTemplate]=\"_data.userDetailsTemplate\"\n [details]=\"_userToShowDetailsData$\"\n ></fdp-approval-flow-user-details>\n }\n }\n </fd-dialog-body>\n <fd-dialog-footer>\n @if (!_selectMode) {\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.addNodeAddActionBtnLabel' | fdTranslate\"\n [disabled]=\"_isMainSubmitButtonDisabled\"\n (click)=\"_submit()\"\n >\n </fd-button-bar>\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeCancelActionBtnLabel' | fdTranslate\"\n (click)=\"dialogRef.close()\"\n ></fd-button-bar>\n }\n @if (_selectMode) {\n @if (viewService.isSelectUserMode) {\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate\"\n [disabled]=\"!_selectedApprovers.length\"\n (click)=\"_confirmSelectedApprovers()\"\n ></fd-button-bar>\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate\"\n (click)=\"_exitSelectMode()\"\n ></fd-button-bar>\n }\n @if (viewService.isSelectTeamMode) {\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate\"\n [disabled]=\"!_selectedTeam && !viewService.team\"\n (click)=\"_confirmSelectedTeam()\"\n ></fd-button-bar>\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate\"\n (click)=\"_exitSelectMode()\"\n ></fd-button-bar>\n }\n @if (viewService.isTeamMembersMode) {\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate\"\n (click)=\"_exitTeamMembersMode()\"\n ></fd-button-bar>\n }\n @if (viewService.isUserDetailsMode) {\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate\"\n (click)=\"_exitUserDetailsMode()\"\n ></fd-button-bar>\n }\n }\n </fd-dialog-footer>\n</fd-dialog>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnInit,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { SearchFieldComponent } from '@fundamental-ngx/platform/search-field';\nimport { ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\nimport { ApprovalFlowUserDetailsComponent } from '../approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowUserListComponent } from '../approval-flow-user-list/approval-flow-user-list.component';\nimport { filterByName } from '../helpers';\nimport { ApprovalNode, ApprovalUser } from '../interfaces';\n\nexport interface ApprovalFlowApproverDetailsDialogRefData {\n node?: ApprovalNode;\n watcher?: ApprovalUser;\n allowSendReminder?: boolean;\n userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n userDetailsTemplate: TemplateRef<any>;\n rtl?: boolean;\n}\n\n/**\n * @deprecated\n * ApprovalFlowApproverDetails component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-approver-details',\n templateUrl: './approval-flow-approver-details.component.html',\n styleUrl: '../styles/approval-flow-dialog.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-approval-flow-dialog fdp-approval-flow-approver-details'\n },\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n IconComponent,\n SearchFieldComponent,\n ContentDensityDirective,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n ApprovalFlowUserDetailsComponent,\n ApprovalFlowUserListComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowApproverDetailsComponent implements OnInit {\n /** @hidden */\n _isListMode = false;\n\n /** @hidden */\n _listItems: ApprovalUser[] = [];\n\n /** @hidden */\n _selectedUsers: ApprovalUser[] = [];\n\n /** @hidden */\n _userToShowDetails?: ApprovalUser;\n\n /** @hidden */\n _userToShowDetailsData$: Observable<any>;\n\n /** @hidden */\n constructor(\n public dialogRef: DialogRef<ApprovalFlowApproverDetailsDialogRefData>,\n private _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n get _data(): ApprovalFlowApproverDetailsDialogRefData {\n return this.dialogRef.data;\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._isListMode = (this._data.node?.approvers.length ?? 0) > 1;\n\n if (this._isListMode) {\n this._setListItems(this._data.node?.approvers ?? []);\n } else {\n const user = this._data.watcher || this._data.node?.approvers[0];\n if (user) {\n this._seeUserDetails(user);\n } else {\n this.dialogRef.close();\n }\n }\n }\n\n /** @hidden */\n _setListItems(items: ApprovalUser[] = []): void {\n this._listItems = [...items];\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _exitUserDetailsMode(): void {\n this._userToShowDetails = undefined;\n this._isListMode = true;\n }\n\n /** @hidden */\n _seeUserDetails(user: ApprovalUser): void {\n this._userToShowDetails = user;\n this._userToShowDetailsData$ = this._data.userDataSource.dataProvider.getOne(new Map([['id', user.id]]));\n this._isListMode = false;\n this._selectedUsers = [];\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _sendReminder(): void {\n const reminderTargets = this._isListMode ? this._selectedUsers : this._data.node?.approvers;\n this.dialogRef.close(reminderTargets);\n }\n\n /** @hidden */\n _onSearchStringChange(searchString: string): void {\n if (!searchString) {\n this._setListItems(this._data.node?.approvers);\n return;\n }\n\n this._setListItems(this._data.node?.approvers.filter((user) => filterByName(user, searchString)));\n }\n}\n","<fd-dialog>\n <fd-dialog-header [class.show-search]=\"!_userToShowDetails && _isListMode\">\n <ng-template fdkTemplate=\"header\">\n <p>\n @if (_userToShowDetails && _data.node?.approvers && _data.node!.approvers!.length > 1) {\n <fd-icon\n [glyph]=\"'navigation-' + (_data.rtl ? 'right' : 'left') + '-arrow'\"\n tabindex=\"0\"\n role=\"button\"\n (click)=\"_exitUserDetailsMode()\"\n (keyup.space)=\"_exitUserDetailsMode()\"\n (keyup.enter)=\"_exitUserDetailsMode()\"\n ></fd-icon>\n }\n @if (_isListMode && !_userToShowDetails) {\n {{ _data.node?.description }} ({{ _data.node?.approvers?.length ?? 0 }})\n } @else {\n {{ 'platformApprovalFlow.userDetailsHeader' | fdTranslate }}\n }\n </p>\n @if (!_userToShowDetails && _isListMode) {\n <fdp-search-field\n [placeholder]=\"'platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate\"\n fdCompact\n [suggestions]=\"[]\"\n (inputChange)=\"_onSearchStringChange($event.text)\"\n ></fdp-search-field>\n }\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body>\n @if (_userToShowDetails) {\n <fdp-approval-flow-user-details\n [user]=\"_userToShowDetails\"\n [detailsTemplate]=\"_data.userDetailsTemplate\"\n [details]=\"_userToShowDetailsData$\"\n ></fdp-approval-flow-user-details>\n }\n @if (_isListMode) {\n <fdp-approval-flow-user-list\n [users]=\"_listItems\"\n (onUserClick)=\"_seeUserDetails($event)\"\n (onSelectionChange)=\"_selectedUsers = $event\"\n ></fdp-approval-flow-user-list>\n }\n </fd-dialog-body>\n <fd-dialog-footer fdCompact>\n @if (_isListMode || (_userToShowDetails && _data.node?.approvers?.length === 1)) {\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.userDetailsSendReminderBtnLabel' | fdTranslate\"\n [disabled]=\"!_data.allowSendReminder || (_isListMode && !_selectedUsers.length)\"\n (click)=\"_sendReminder()\"\n ></fd-button-bar>\n }\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.userDetailsCancelBtnLabel' | fdTranslate\"\n (click)=\"dialogRef.close('Cancel')\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { MessageStripComponent } from '@fundamental-ngx/core/message-strip';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { trackByFn } from '../helpers';\n\nexport type ApprovalFlowMessageType =\n | 'watchersChangeSuccess'\n | 'approverAddSuccess'\n | 'teamAddSuccess'\n | 'nodeEdit'\n | 'nodeRemove'\n | 'nodesRemove'\n | 'teamRemove'\n | 'error';\n\nexport interface ApprovalFlowMessage {\n type: ApprovalFlowMessageType;\n}\n\n/**\n * @deprecated\n * ApprovalFlowMessages component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-messages',\n templateUrl: './approval-flow-messages.component.html',\n styleUrl: './approval-flow-messages.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-messages'\n },\n imports: [MessageStripComponent, FdTranslatePipe]\n})\nexport class ApprovalFlowMessagesComponent {\n /** Array of messages */\n @Input()\n messages: ApprovalFlowMessage[] = [];\n\n /** Whether undo action is available */\n @Input()\n undoLastActionAvailable = false;\n\n /** Event emitted when messages array change */\n @Output()\n messagesChange = new EventEmitter<ApprovalFlowMessage[]>();\n\n /** Event emitted when user click undo button */\n @Output()\n undoLastAction = new EventEmitter<void>();\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n _dismissMessage(messageIndex: number): void {\n this.messages.splice(messageIndex, 1);\n }\n\n /** @hidden */\n _undoLastAction(messageIndex: number, event: Event): void {\n event.preventDefault();\n\n this._dismissMessage(messageIndex);\n this.undoLastAction.emit();\n }\n}\n","@for (message of messages; track message; let i = $index) {\n <fd-message-strip\n class=\"fdp-approval-flow-messages__item\"\n [type]=\"message.type === 'error' ? 'error' : 'success'\"\n [dismissible]=\"message.type !== 'error'\"\n (onDismiss)=\"_dismissMessage(i)\"\n >\n <bdi>\n <span>\n @switch (message.type) {\n @case ('approverAddSuccess') {\n {{ 'platformApprovalFlow.messagesApproverAddedSuccess' | fdTranslate }}\n }\n @case ('teamAddSuccess') {\n {{ 'platformApprovalFlow.messagesTeamAddedSuccess' | fdTranslate }}\n }\n @case ('nodeEdit') {\n {{ 'platformApprovalFlow.messagesNodeEdited' | fdTranslate }}\n }\n @case ('nodeRemove') {\n {{ 'platformApprovalFlow.messagesNodeRemovedSingular' | fdTranslate }}\n }\n @case ('nodesRemove') {\n {{ 'platformApprovalFlow.messagesNodeRemovedPlural' | fdTranslate }}\n }\n @case ('teamRemove') {\n {{ 'platformApprovalFlow.messagesTeamRemoved' | fdTranslate }}\n }\n @case ('error') {\n {{ 'platformApprovalFlow.messagesErrorBuildGraph' | fdTranslate }}\n }\n }\n </span>\n @if (undoLastActionAvailable) {\n <a\n href=\"#\"\n (click)=\"_undoLastAction(i, $event)\"\n (keyup.enter)=\"_undoLastAction(i, $event)\"\n (keyup.space)=\"_undoLastAction(i, $event)\"\n >\n {{ 'platformApprovalFlow.messagesUndoAction' | fdTranslate }}\n </a>\n }\n </bdi>\n </fd-message-strip>\n}\n","import { Directive, ElementRef, Input } from '@angular/core';\n\nimport { ApprovalFlowNewNodePlacement } from '../approval-flow-add-node/approval-flow-add-node.component';\n\n@Directive({\n // eslint-disable-next-line @angular-eslint/directive-selector\n selector: '[fdp-approval-flow-drop-zone]',\n exportAs: 'fdp-approval-flow-drop-zone',\n standalone: true\n})\nexport class ApprovalFlowDropZoneDirective {\n /** Approval flow new node placement */\n @Input()\n placement: ApprovalFlowNewNodePlacement;\n\n /** Whether drop zone is active (pointer with dragged node over the drop zone) */\n active = false;\n\n /** @hidden */\n constructor(private readonly elRef: ElementRef) {}\n\n /** @hidden */\n _checkIfNodeDraggedInDropZone(nodeRect: DOMRect): void {\n this.active = false;\n\n const dropZoneRect = this.elRef.nativeElement.getBoundingClientRect();\n\n if (\n dropZoneRect.top + dropZoneRect.height > nodeRect.top &&\n dropZoneRect.left + dropZoneRect.width > nodeRect.left &&\n dropZoneRect.bottom - dropZoneRect.height < nodeRect.bottom &&\n dropZoneRect.right - dropZoneRect.width < nodeRect.right\n ) {\n this.active = true;\n }\n }\n}\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { GridListItemComponent } from '@fundamental-ngx/core/grid-list';\nimport { MenuComponent } from '@fundamental-ngx/core/menu';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n MenuInteractiveComponent,\n MenuItemComponent,\n MenuTitleDirective,\n MenuTriggerDirective\n} from '@fundamental-ngx/core/menu';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ObjectStatusComponent, PlatformObjectStatusTextDirective } from '@fundamental-ngx/platform/object-status';\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { isNodeApproved, isNodeStarted } from '../helpers';\nimport { ApprovalGraphNode, ApprovalGraphNodeMetadata, ApprovalStatus } from '../interfaces';\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-drop-zone.directive';\n\nconst NODE_STATUS_CLASS_MAP = {\n approved: 'positive',\n rejected: 'negative',\n 'in progress': 'informative',\n 'not started': ''\n};\n\nconst DAY_IN_MILLISECONDS = 1000 * 60 * 60 * 24;\n\nlet defaultId = 0;\n\n/**\n * @deprecated\n * ApprovalFlowNode component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-node',\n templateUrl: './approval-flow-node.component.html',\n styleUrl: './approval-flow-node.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-approval-flow-node',\n '[class.fdp-approval-flow-node--first-root]': 'meta?.firstOfMultipleRootNodes',\n '[class.fdp-approval-flow-node--first-final]': 'meta?.firstOfMultipleFinalNodes'\n },\n imports: [\n ButtonComponent,\n ContentDensityDirective,\n MenuTriggerDirective,\n ObjectStatusComponent,\n PlatformObjectStatusTextDirective,\n NgTemplateOutlet,\n ApprovalFlowDropZoneDirective,\n MenuComponent,\n MenuItemComponent,\n MenuInteractiveComponent,\n MenuTitleDirective,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowNodeComponent implements OnInit, OnChanges, OnDestroy {\n /** Approval flow graph node */\n @Input() node: ApprovalGraphNode;\n\n /** Node metadata */\n @Input() meta: ApprovalGraphNodeMetadata;\n\n /** Whether node element has arrow on the left side pointing to the node */\n @Input() renderArrow = false;\n\n /** Whether to display due date warning in status */\n @Input() checkDueDate = false;\n\n /** Number of days before due date when status changes to `warning` with text 'Due in X days'.\n * Not used if 'checkDueDate' equals false */\n @Input() dueDateThreshold = 7;\n\n /** Whether nodes in column in which current node placed are approved\n * Used to render appropriate vertical line after (dashed/solid)\n */\n @Input() allNodesInColumnApproved = false;\n\n /** A reference to the app custom statuses */\n @Input()\n approvalStatusTemplate: TemplateRef<any>;\n\n /** Custom status to color mapping */\n @Input()\n statusColorMapping: Record<ApprovalStatus, ObjectStatus>;\n\n /** Whether the node is in edit mode */\n @Input()\n @HostBinding('class.fdp-approval-flow-node--edit-mode')\n isEdit: boolean;\n\n /** Whether the node after is blank */\n @Input()\n @HostBinding('class.fdp-approval-flow-node--next-blank')\n isNextNodeBlank: boolean;\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--blank')\n get _blank(): boolean {\n return !!this.node?.blank;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--space')\n get _space(): boolean {\n return !!this.node?.space;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--root')\n get _isRoot(): boolean {\n return this.meta?.isRoot;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--final')\n get _isFinal(): boolean {\n return this.meta?.isFinal;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--line-before')\n get _renderLineBefore(): boolean {\n return !this.node?.blank;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--line-after')\n get _renderLineAfter(): boolean {\n return !this.node?.blank || this._isFinal;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--approved')\n get _isApproved(): boolean {\n return this.node && isNodeApproved(this.node);\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--parent-approved')\n get _isParentApproved(): boolean {\n if (!this.meta?.parents?.length) {\n return !!this.meta?.rootNodesApproved;\n }\n\n return this.meta.parents.every((node) => isNodeApproved(node));\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--selected')\n get _isNodeSelected(): boolean {\n return this.isEdit && this._isSelected;\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--parallel-start')\n get _isParallelStart(): boolean {\n return Boolean(this.meta?.parallelStart);\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--parallel-end')\n get _isParallelEnd(): boolean {\n return Boolean(this.meta?.parallelEnd);\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--first-in-parallel')\n get _isFirstInParallel(): boolean {\n return Boolean(this.meta?.isFirstInParallel);\n }\n\n /** @hidden */\n @HostBinding('class.fdp-approval-flow-node--last-in-parallel')\n get _isLastInParallel(): boolean {\n return Boolean(this.meta?.isLastInParallel);\n }\n\n /** Whether the node is blank and the final */\n @HostBinding('class.fdp-approval-flow-node--last-blank')\n get _lastBlank(): boolean {\n return this._blank && this.node.targets.length === 0;\n }\n\n /** @hidden */\n get _isSelected(): boolean {\n return !!this.node.selected;\n }\n\n /** Event emitted on add node button clicked, value is the placement for the new node */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onAdd = new EventEmitter<ApprovalFlowNodeTarget>();\n\n /** Event emitted on edit node button clicked */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onEdit = new EventEmitter<void>();\n\n /** Event emitted on delete node button clicked */\n @Output()\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n onDelete = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild(MenuComponent)\n _menu: MenuComponent;\n\n /** @hidden */\n @ViewChild('overflowMenuButton')\n _overflowMenuButton: TemplateRef<any>;\n\n /** @hidden */\n @ViewChild('nodeContent')\n _nodeContent: TemplateRef<any>;\n\n /** @hidden */\n @ViewChildren(ApprovalFlowDropZoneDirective)\n _dropZones: QueryList<ApprovalFlowDropZoneDirective>;\n\n /** @hidden */\n @ContentChild(GridListItemComponent)\n _gridListItem: GridListItemComponent<ApprovalGraphNode>;\n\n /** @hidden */\n _objectStatus: ObjectStatus;\n\n /** @hidden */\n _showDueDateWarning = false;\n\n /** @hidden */\n _dueIn = 0;\n\n /** @hidden */\n readonly approvalFlowNodeId = 'fdp-approval-flow-node-' + defaultId++;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n constructor(\n private readonly _elRef: ElementRef,\n private readonly _cdr: ChangeDetectorRef\n ) {}\n\n /** @hidden */\n get _nativeElement(): HTMLElement {\n return this._elRef.nativeElement;\n }\n\n /** @hidden */\n get _isNotStarted(): boolean {\n return !isNodeStarted(this.node);\n }\n\n /** @hidden */\n get _isEditActionsAvailable(): boolean {\n return this.node.status === 'approved' || this.node.status === 'rejected';\n }\n\n /** @hidden */\n get _activeDropZones(): ApprovalFlowDropZoneDirective[] {\n return this._dropZones.filter((z) => z.active);\n }\n\n /** @hidden */\n get _isAnyDropZoneActive(): boolean {\n return this._activeDropZones.length > 0;\n }\n\n /** @hidden */\n get _isVerticalLineBeforeSolid(): boolean {\n if (!this.meta?.parents.length) {\n return !!this.meta?.isVerticalLineBeforeSolid;\n }\n\n return this.meta.parents.every((parentNode) => isNodeApproved(parentNode));\n }\n\n /** @hidden */\n get _isVerticalLineAfterSolid(): boolean {\n if (!this.node?.targets.length) {\n return !!this.meta?.isVerticalLineAfterSolid;\n }\n\n return this._isVerticalLineBeforeSolid && this.allNodesInColumnApproved;\n }\n\n /** @hidden */\n get _showAddButton(): boolean {\n return this.isEdit && !this._blank && !this._space && !this.node?.disableActions;\n }\n\n /** @hidden */\n get _showAfterAllAddButton(): boolean {\n return this.isEdit && !this._space && !this.node?.disableActions;\n }\n\n /** @hidden */\n _dropZonePartial(placement: ApprovalFlowNodeTarget): boolean {\n return (\n (!this._blank && (!this.isNextNodeBlank || placement === 'before')) ||\n (this._lastBlank && placement === 'after-all')\n );\n }\n\n /** @hidden */\n ngOnInit(): void {\n this._checkNodeStatus();\n }\n\n /** @hidden */\n ngOnChanges(): void {\n this._checkNodeStatus();\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n _onMenuOpen(): void {\n this._menu.refreshPosition();\n }\n\n /** @hidden */\n _focus(options?: FocusOptions): void {\n this._gridListItem?.focus(options);\n }\n\n /** @hidden */\n _deactivateDropZones(): void {\n this._dropZones.forEach((dropZone) => (dropZone.active = false));\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _checkIfNodeDraggedInDropZone(nodeRect: DOMRect): void {\n this._dropZones.forEach((dropZone) => dropZone._checkIfNodeDraggedInDropZone(nodeRect));\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n private _checkNodeStatus(): void {\n if (!this.node) {\n return;\n }\n\n if (this.checkDueDate && this.node.dueDate) {\n const dueThreshold = Number(new Date(this.node.dueDate)) - this.dueDateThreshold * DAY_IN_MILLISECONDS;\n const nowAndDueDiff = Date.now() - dueThreshold;\n\n this._dueIn = Math.round(nowAndDueDiff / DAY_IN_MILLISECONDS);\n this._showDueDateWarning = !isNodeApproved(this.node) && dueThreshold < Date.now();\n this._objectStatus = this._showDueDateWarning ? 'critical' : this._getNodeStatusClass();\n\n this._cdr.detectChanges();\n\n return;\n }\n\n this._objectStatus = this._getNodeStatusClass();\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n private _getNodeStatusClass(): ObjectStatus {\n return (\n this.statusColorMapping\n ? this.statusColorMapping[this.node.status]\n : NODE_STATUS_CLASS_MAP[this.node.status]\n ) as ObjectStatus;\n }\n}\n","@if (meta?.renderVerticalLineBefore) {\n <div\n class=\"fdp-approval-flow-node__vertical-line-before\"\n [class.fdp-approval-flow-node__vertical-line-before-solid]=\"_isVerticalLineBeforeSolid\"\n ></div>\n}\n@if (meta?.renderVerticalLineAfter) {\n <div\n class=\"fdp-approval-flow-node__vertical-line-after\"\n [class.fdp-approval-flow-node__vertical-line-after-solid]=\"_isVerticalLineAfterSolid\"\n ></div>\n}\n@if (!_blank && !_space) {\n @if (renderArrow) {\n <div class=\"fdp-approval-flow-node__arrow\"></div>\n }\n @if (_isRoot && meta?.nodeIndex === 0) {\n <div class=\"fdp-approval-flow-node__carousel-start-marker\"></div>\n }\n @if (_isFinal && meta?.nodeIndex === 0) {\n <div class=\"fdp-approval-flow-node__carousel-end-marker\"></div>\n }\n <ng-content></ng-content>\n}\n<ng-template #overflowMenuButton>\n <!-- Actually just the fd-grid-item action button but with some hardcode to be used as menu trigger -->\n @if (!node?.disableActions) {\n <button\n class=\"fdp-approval-flow-node__menu-button\"\n fd-button\n fdType=\"transparent\"\n tabindex=\"0\"\n glyph=\"overflow\"\n [title]=\"'platformApprovalFlow.nodeMenuButtonTitle' | fdTranslate\"\n fdCompact\n [fdMenuTrigger]=\"menu\"\n [disabled]=\"_isEditActionsAvailable\"\n (click)=\"$event.stopPropagation()\"\n ></button>\n }\n</ng-template>\n<ng-template #nodeContent>\n <div class=\"fdp-approval-flow-node__info\">\n <div\n class=\"fdp-approval-flow-node__name\"\n [class.fdp-approval-flow-node__name--members-count]=\"node.approvers.length > 1\"\n [id]=\"approvalFlowNodeId\"\n >\n @if (node.approvers.length === 1) {\n {{ node.approvers[0].name }}\n } @else {\n {{ 'platformApprovalFlow.nodeMembersCount' | fdTranslate: { count: node.approvers.length } }}\n }\n </div>\n <div class=\"fdp-approval-flow-node__description\">\n @if (!node.variousTeams) {\n {{\n node.approvers.length > 1\n ? node.description\n : node.approvers.length\n ? node.approvers[0].description\n : ''\n }}\n } @else {\n {{ 'platformApprovalFlow.nodeVariousTeams' | fdTranslate }}\n }\n <ng-template #variousTeams> {{ 'platformApprovalFlow.nodeVariousTeams' | fdTranslate }} </ng-template>\n </div>\n <fdp-object-status [status]=\"_objectStatus\" [inverted]=\"true\">\n <ng-template fdpObjectStatusText>\n @if (approvalStatusTemplate) {\n @if (!checkDueDate || !_showDueDateWarning) {\n @if (approvalStatusTemplate) {\n <ng-template\n [ngTemplateOutlet]=\"approvalStatusTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\"\n >\n </ng-template>\n }\n }\n } @else {\n @if (!checkDueDate || !_showDueDateWarning) {\n @switch (node.status) {\n @case ('approved') {\n {{ 'platformApprovalFlow.statusApproved' | fdTranslate }}\n }\n @case ('rejected') {\n {{ 'platformApprovalFlow.statusRejected' | fdTranslate }}\n }\n @case ('in progress') {\n {{ 'platformApprovalFlow.statusInProgress' | fdTranslate }}\n }\n @case ('not started') {\n {{ 'platformApprovalFlow.statusNotStarted' | fdTranslate }}\n }\n }\n }\n }\n @if (checkDueDate && _showDueDateWarning) {\n @if (_dueIn === dueDateThreshold) {\n {{ 'platformApprovalFlow.nodeStatusDueToday' | fdTranslate }}\n }\n @if (_dueIn < dueDateThreshold) {\n {{\n 'platformApprovalFlow.nodeStatusDueInXDays'\n | fdTranslate: { count: dueDateThreshold - _dueIn }\n }}\n }\n @if (_dueIn > dueDateThreshold) {\n {{\n 'platformApprovalFlow.nodeStatusXDaysOverdue'\n | fdTranslate: { count: _dueIn - dueDateThreshold }\n }}\n }\n }\n </ng-template>\n </fdp-object-status>\n </div>\n</ng-template>\n@if (_showAddButton && meta?.canAddNodeBeforeAll && !node?.actionsConfig?.disableAddBefore) {\n <ng-template\n [ngTemplateOutlet]=\"addNodeButton\"\n [ngTemplateOutletContext]=\"{ placement: 'before-all' }\"\n ></ng-template>\n}\n@if (_showAddButton && meta?.canAddNodeBefore && !node?.actionsConfig?.disableAddBefore) {\n <ng-template [ngTemplateOutlet]=\"addNodeButton\" [ngTemplateOutletContext]=\"{ placement: 'before' }\"></ng-template>\n}\n@if (\n _showAddButton && meta?.canAddNodeAfter && meta?.renderAddNodeAfterButton && !node?.actionsConfig?.disableAddAfter\n) {\n <ng-template [ngTemplateOutlet]=\"addNodeButton\" [ngTemplateOutletContext]=\"{ placement: 'after' }\"></ng-template>\n}\n@if (\n _showAfterAllAddButton &&\n meta?.canAddNodeAfterAll &&\n meta?.renderAddNodeAfterButton &&\n !node?.actionsConfig?.disableAddAfter\n) {\n <ng-template\n [ngTemplateOutlet]=\"addNodeButton\"\n [ngTemplateOutletContext]=\"{ placement: 'after-all' }\"\n ></ng-template>\n}\n<ng-template #addNodeButton let-placement=\"placement\">\n @if (node.status !== 'approved') {\n <button\n fd-button\n glyph=\"add\"\n [title]=\"'platformApprovalFlow.addNodeButtonTitle' | fdTranslate\"\n fdCompact\n class=\"fdp-approval-flow-node__add\"\n [class.fdp-approval-flow-node__add--blank]=\"this._blank\"\n [class.fdp-approval-flow-node__add--before]=\"\n !this._blank && (placement === 'before' || placement === 'before-all')\n \"\n [class.fdp-approval-flow-node__add--before-all]=\"!this._blank && placement === 'before-all'\"\n [class.fdp-approval-flow-node__add--after]=\"\n !this._blank && (placement === 'after' || placement === 'after-all')\n \"\n [class.fdp-approval-flow-node__add--after-all]=\"placement === 'after-all'\"\n [style.visibility]=\"dropZone.active ? 'hidden' : ''\"\n (click)=\"onAdd.emit(placement)\"\n ></button>\n }\n <div\n #dropZone=\"fdp-approval-flow-drop-zone\"\n fdp-approval-flow-drop-zone\n [placement]=\"placement\"\n class=\"fdp-approval-flow-node__drop-zone\"\n [class.fdp-approval-flow-node__drop-zone--active]=\"dropZone.active\"\n [class.fdp-approval-flow-node__drop-zone--blank]=\"isNextNodeBlank\"\n [class.fdp-approval-flow-node__drop-zone--partial]=\"_dropZonePartial(placement)\"\n ></div>\n</ng-template>\n<fd-menu #menu fdContentDensity placement=\"bottom-end\" (isOpenChange)=\"_onMenuOpen()\">\n @if (meta?.canAddNodeBefore && !this.node?.actionsConfig?.disableAddBefore) {\n <li fd-menu-item (click)=\"menu.close(); onAdd.emit('before')\">\n <div fd-menu-interactive>\n <span fd-menu-title>{{ 'platformApprovalFlow.nodeActionAddApproversBefore' | fdTranslate }}</span>\n </div>\n </li>\n }\n @if (meta?.canAddNodeAfter && !this.node?.actionsConfig?.disableAddAfter) {\n <li fd-menu-item (click)=\"menu.close(); onAdd.emit('after')\">\n <div fd-menu-interactive>\n <span fd-menu-title>{{ 'platformApprovalFlow.nodeActionAddApproversAfter' | fdTranslate }}</span>\n </div>\n </li>\n }\n @if (meta?.canAddParallel && !this.node?.actionsConfig?.disableAddParallel) {\n <li fd-menu-item (click)=\"menu.close(); onAdd.emit('parallel')\">\n <div fd-menu-interactive>\n <span fd-menu-title>{{ 'platformApprovalFlow.nodeActionAddApproversParallel' | fdTranslate }}</span>\n </div>\n </li>\n }\n @if (_isNotStarted && !this.node?.actionsConfig?.disableEdit) {\n <li fd-menu-item (click)=\"menu.close(); onEdit.emit()\">\n <div fd-menu-interactive>\n <span fd-menu-title> {{ 'platformApprovalFlow.nodeActionEditApprover' | fdTranslate }}</span>\n </div>\n </li>\n }\n @if (!this.node?.actionsConfig?.disableRemove) {\n <li fd-menu-item (click)=\"menu.close(); onDelete.emit()\">\n <div fd-menu-interactive>\n <span fd-menu-title> {{ 'platformApprovalFlow.nodeActionRemove' | fdTranslate }}</span>\n </div>\n </li>\n }\n</fd-menu>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { CdkScrollable } from '@angular/cdk/overlay';\n\nimport { FormsModule } from '@angular/forms';\nimport { TemplateDirective } from '@fundamental-ngx/cdk/utils';\nimport { ButtonBarComponent } from '@fundamental-ngx/core/bar';\nimport { CheckboxComponent } from '@fundamental-ngx/core/checkbox';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n DialogBodyComponent,\n DialogComponent,\n DialogFooterComponent,\n DialogHeaderComponent\n} from '@fundamental-ngx/core/dialog';\nimport { FormGroupComponent, FormItemComponent } from '@fundamental-ngx/core/form';\nimport { RadioButtonComponent } from '@fundamental-ngx/core/radio';\nimport { ScrollbarDirective } from '@fundamental-ngx/core/scrollbar';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { APPROVAL_FLOW_NODE_TYPES } from '../approval-flow-add-node/approval-flow-add-node.component';\n\nexport interface SelectTypeDialogFormData {\n type: APPROVAL_FLOW_NODE_TYPES;\n toNextSerial: boolean;\n}\n\n/**\n * @deprecated\n * ApprovalFlowSelectType component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-select-type',\n templateUrl: './approval-flow-select-type.component.html',\n styleUrls: ['../styles/approval-flow-dialog.scss', './approval-flow-select-type.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n host: {\n class: 'fdp-approval-flow-dialog fdp-approval-flow-select-type'\n },\n imports: [\n DialogComponent,\n DialogHeaderComponent,\n TemplateDirective,\n CdkScrollable,\n ScrollbarDirective,\n DialogBodyComponent,\n ContentDensityDirective,\n FormGroupComponent,\n FormItemComponent,\n RadioButtonComponent,\n FormsModule,\n CheckboxComponent,\n DialogFooterComponent,\n ButtonBarComponent,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowSelectTypeComponent {\n /** @hidden */\n _nodeType = APPROVAL_FLOW_NODE_TYPES.SERIAL;\n\n /** @hidden */\n _nodeTypes = APPROVAL_FLOW_NODE_TYPES;\n\n /** @hidden */\n _toNextSerial = false;\n\n /** @hidden */\n constructor(public readonly _dialogRef: DialogRef) {}\n\n /** @hidden */\n _submit(): void {\n this._dialogRef.close({ type: this._nodeType, toNextSerial: this._toNextSerial } as SelectTypeDialogFormData);\n }\n}\n","<fd-dialog>\n <fd-dialog-header>\n <ng-template fdkTemplate=\"header\">\n <p>{{ 'platformApprovalFlow.selectTypeDialogMoveApproverAs' | fdTranslate }}</p>\n </ng-template>\n </fd-dialog-header>\n <fd-dialog-body fdCompact>\n <span class=\"fd-form-label\">\n {{ 'platformApprovalFlow.selectTypeDialogParallelOrSerial' | fdTranslate }}\n </span>\n <fd-form-group class=\"fdp-approval-flow-select-type__form\">\n <div fd-form-item>\n <fd-radio-button\n [value]=\"_nodeTypes.PARALLEL\"\n [(ngModel)]=\"_nodeType\"\n id=\"select-type-parallel\"\n name=\"select-type-parallel\"\n >\n {{ 'platformApprovalFlow.selectTypeDialogNodeTypeParallel' | fdTranslate }}\n </fd-radio-button>\n </div>\n <div fd-form-item>\n <fd-radio-button\n [value]=\"_nodeTypes.SERIAL\"\n [(ngModel)]=\"_nodeType\"\n id=\"select-type-serial\"\n name=\"select-type-serial\"\n >\n {{ 'platformApprovalFlow.selectTypeDialogNodeTypeSerial' | fdTranslate }}\n </fd-radio-button>\n </div>\n @if (_nodeType === _nodeTypes.PARALLEL) {\n <div fd-form-item>\n <fd-checkbox [(ngModel)]=\"_toNextSerial\">\n {{ 'platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate }}\n </fd-checkbox>\n </div>\n }\n </fd-form-group>\n </fd-dialog-body>\n <fd-dialog-footer fdCompact>\n <fd-button-bar\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.selectTypeDialogConfirmButton' | fdTranslate\"\n (click)=\"_submit()\"\n ></fd-button-bar>\n <fd-button-bar\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.selectTypeDialogCancelButton' | fdTranslate\"\n (click)=\"_dialogRef.close()\"\n ></fd-button-bar>\n </fd-dialog-footer>\n</fd-dialog>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowGraph, ApprovalGraphMetadata } from '../approval-flow-graph';\nimport { isNodeApproved } from '../helpers';\nimport { ApprovalGraphNode } from '../interfaces/approval-node';\n\n/**\n * @deprecated\n * ApprovalFlowToolbarActions component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-toolbar-actions',\n templateUrl: './approval-flow-toolbar-actions.component.html',\n styleUrl: './approval-flow-toolbar-actions.component.scss',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-toolbar-actions'\n },\n imports: [ContentDensityDirective, ButtonComponent, FdTranslatePipe]\n})\nexport class ApprovalFlowToolbarActionsComponent {\n /** Approval flow graph */\n @Input()\n graph: ApprovalFlowGraph;\n\n /** Approval flow graph metadata */\n @Input()\n graphMetadata: ApprovalGraphMetadata;\n\n /** Array of selected approval flow graph nodes */\n @Input()\n set selectedNodes(value: ApprovalGraphNode[]) {\n this._selectedNodes = value;\n\n this._canRemoveSelectedNodes =\n !!this.selectedNodes.length &&\n this.selectedNodes.every((node) => !node.disableActions && !node.actionsConfig?.disableRemove);\n }\n get selectedNodes(): ApprovalGraphNode[] {\n return this._selectedNodes;\n }\n\n /** Whether approval flow in the edit mode */\n @Input()\n isEditMode = false;\n\n /** Event emitted when edit mode toggled */\n @Output()\n enterEditMode = new EventEmitter<void>();\n\n /** Event emitted when node added */\n @Output()\n addNode = new EventEmitter<{ node: ApprovalGraphNode; target: ApprovalFlowNodeTarget }>();\n\n /** Event emitted when selected node edited */\n @Output()\n editSelectedNode = new EventEmitter<ApprovalGraphNode>();\n\n /** Event emitted when selected nodes deleted (bulk) */\n @Output()\n deleteSelectedNodes = new EventEmitter<void>();\n\n /** @hidden */\n _canRemoveSelectedNodes = false;\n\n /** @hidden */\n private _selectedNodes: ApprovalGraphNode[] = [];\n\n /** @hidden */\n get _notApprovedSelectedNode(): ApprovalGraphNode | null {\n if (this.selectedNodes.length !== 1) {\n return null;\n }\n\n return !isNodeApproved(this.selectedNodes[0]) ? this.selectedNodes[0] : null;\n }\n\n /** @hidden */\n get _canAddBefore(): boolean {\n const node = this._notApprovedSelectedNode;\n\n return (\n !!node &&\n !node.disableActions &&\n !node.actionsConfig?.disableAddBefore &&\n !!this.graphMetadata[node.id].canAddNodeBefore\n );\n }\n\n /** @hidden */\n get _canAddAfter(): boolean {\n const node = this._notApprovedSelectedNode;\n\n return (\n !!node &&\n !node.disableActions &&\n !node.actionsConfig?.disableAddAfter &&\n !!this.graphMetadata[node.id].canAddNodeAfter\n );\n }\n\n /** @hidden */\n get _canAddParallel(): boolean {\n const node = this._notApprovedSelectedNode;\n\n return (\n !!this._notApprovedSelectedNode &&\n !node?.disableActions &&\n !node?.actionsConfig?.disableAddParallel &&\n !!this.graphMetadata[node!.id].canAddParallel\n );\n }\n\n /** @hidden */\n get _canEditNode(): boolean {\n const node = this._notApprovedSelectedNode;\n\n return !!node && !node.disableActions && !node.actionsConfig?.disableEdit;\n }\n\n /** @hidden */\n _addNode(target: ApprovalFlowNodeTarget): void {\n const node = this.selectedNodes[0];\n this.addNode.emit({ node, target });\n }\n\n /** @hidden */\n _editSelectedNode(): void {\n const node = this.selectedNodes[0];\n this.editSelectedNode.emit(node);\n }\n}\n","<ng-container fdCompact>\n @if (!graph?.columns?.length && !graph?.errors) {\n <button\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddStepButton' | fdTranslate\"\n (click)=\"_addNode('empty')\"\n ></button>\n }\n @if (!!graph?.columns?.length && !isEditMode) {\n <button\n fd-button\n [label]=\"'platformApprovalFlow.toolbarEditButton' | fdTranslate\"\n (click)=\"enterEditMode.emit()\"\n ></button>\n }\n @if (isEditMode) {\n @if (_canAddBefore) {\n <button\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddApproversBefore' | fdTranslate\"\n (click)=\"_addNode('before')\"\n ></button>\n }\n @if (_canAddAfter) {\n <button\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddApproversAfter' | fdTranslate\"\n (click)=\"_addNode('after')\"\n ></button>\n }\n @if (_canAddParallel) {\n <button\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddApproversParallel' | fdTranslate\"\n (click)=\"_addNode('parallel')\"\n ></button>\n }\n @if (_canRemoveSelectedNodes) {\n <button\n fd-button\n [label]=\"'platformApprovalFlow.toolbarRemove' | fdTranslate\"\n (click)=\"deleteSelectedNodes.emit()\"\n ></button>\n }\n @if (_canEditNode) {\n <button\n fd-button\n [label]=\"'platformApprovalFlow.toolbarEditApprover' | fdTranslate\"\n (click)=\"_editSelectedNode()\"\n ></button>\n }\n }\n</ng-container>\n","import { CdkDrag } from '@angular/cdk/drag-drop';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation,\n computed,\n inject\n} from '@angular/core';\nimport { Subject, Subscription, combineLatest, fromEvent, merge } from 'rxjs';\nimport { distinctUntilChanged, map, mapTo, startWith, switchMap, throttleTime } from 'rxjs/operators';\n\nimport { KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { DialogService } from '@fundamental-ngx/core/dialog';\nimport { GridListComponent, GridListSelectionEvent } from '@fundamental-ngx/core/grid-list';\n\nimport { NgTemplateOutlet } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { uniqBy } from '@fundamental-ngx/cdk/utils';\nimport { AvatarComponent } from '@fundamental-ngx/core/avatar';\nimport { BarComponent, BarElementDirective, BarRightDirective } from '@fundamental-ngx/core/bar';\nimport { ButtonComponent } from '@fundamental-ngx/core/button';\nimport { ContentDensityDirective } from '@fundamental-ngx/core/content-density';\nimport {\n GridListItemBodyDirective,\n GridListItemComponent,\n GridListItemImageDirective,\n GridListItemToolbarComponent,\n GridListTitleBarComponent,\n GridListTitleBarSpacerComponent\n} from '@fundamental-ngx/core/grid-list';\nimport { IconComponent } from '@fundamental-ngx/core/icon';\nimport {\n IllustratedMessageComponent,\n IllustratedMessageFigcaptionComponent,\n IllustratedMessageTextDirective,\n IllustratedMessageTitleDirective\n} from '@fundamental-ngx/core/illustrated-message';\nimport { MultiInputComponent } from '@fundamental-ngx/core/multi-input';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\nimport { FdTranslatePipe } from '@fundamental-ngx/i18n';\nimport {\n ApprovalFlowTeamDataSource,\n ApprovalFlowUserDataSource,\n DATA_PROVIDERS,\n DataProvider\n} from '@fundamental-ngx/platform/shared';\nimport {\n APPROVAL_FLOW_NODE_TYPES,\n AddNodeDialogFormData,\n AddNodeDialogRefData,\n ApprovalFlowAddNodeComponent,\n ApprovalFlowNodeTarget\n} from './approval-flow-add-node/approval-flow-add-node.component';\nimport {\n ApprovalFlowApproverDetailsComponent,\n ApprovalFlowApproverDetailsDialogRefData\n} from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport {\n ApprovalFlowGraph,\n ApprovalGraphColumn,\n ApprovalGraphMetadata,\n generateApprovalFlowGraph,\n generateApprovalFlowGraphMetadata\n} from './approval-flow-graph';\nimport {\n ApprovalFlowMessage,\n ApprovalFlowMessageType,\n ApprovalFlowMessagesComponent\n} from './approval-flow-messages/approval-flow-messages.component';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport {\n ApprovalFlowSelectTypeComponent,\n SelectTypeDialogFormData\n} from './approval-flow-select-type/approval-flow-select-type.component';\nimport { ApprovalFlowToolbarActionsComponent } from './approval-flow-toolbar-actions/approval-flow-toolbar-actions.component';\nimport {\n displayUserFn,\n getBlankApprovalGraphNode,\n getGraphNodes,\n isNodeTargetsIncludeId,\n trackByFn,\n userValueFn\n} from './helpers';\nimport {\n ApprovalGraphNode,\n ApprovalGraphNodeMetadata,\n ApprovalNode,\n ApprovalProcess,\n ApprovalStatus,\n ApprovalTeam,\n ApprovalUser,\n SendRemindersData\n} from './interfaces';\nimport { ApprovalFlowAddNodeViewService } from './services/approval-flow-add-node-view.service';\n\nlet defaultId = 0;\n/**\n * @deprecated\n * Approval Flow component is deprecated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow',\n templateUrl: './approval-flow.component.html',\n styleUrl: './approval-flow.component.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n providers: [ApprovalFlowAddNodeViewService],\n imports: [\n ContentDensityDirective,\n ApprovalFlowMessagesComponent,\n GridListComponent,\n GridListTitleBarComponent,\n GridListTitleBarSpacerComponent,\n ApprovalFlowToolbarActionsComponent,\n AvatarComponent,\n MultiInputComponent,\n FormsModule,\n IconComponent,\n ApprovalFlowNodeComponent,\n CdkDrag,\n GridListItemComponent,\n GridListItemToolbarComponent,\n NgTemplateOutlet,\n GridListItemImageDirective,\n GridListItemBodyDirective,\n BarComponent,\n BarRightDirective,\n BarElementDirective,\n ButtonComponent,\n IllustratedMessageComponent,\n IllustratedMessageFigcaptionComponent,\n IllustratedMessageTitleDirective,\n IllustratedMessageTextDirective,\n FdTranslatePipe\n ]\n})\nexport class ApprovalFlowComponent implements OnInit, OnChanges, OnDestroy {\n /** Title which is displayed in the header of the Approval Flow component. */\n @Input() title: string;\n\n /** Value of the approval flow component. */\n @Input() value: ApprovalProcess;\n\n /** Data source for the users of Approval Flow component. */\n @Input() userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n\n /** Data source for the watchers of Approval Flow component. */\n @Input() watcherDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n\n /** Data source for the teams of Approval Flow component. */\n @Input() teamDataSource: ApprovalFlowTeamDataSource<ApprovalTeam>;\n\n /** A reference to the user details template */\n @Input() userDetailsTemplate: TemplateRef<any>;\n\n /** A reference to the app custom statuses */\n @Input() approvalStatusTemplate: TemplateRef<any>;\n\n /** Custom status to color mapping */\n @Input()\n statusColorMapping: Record<ApprovalStatus, ObjectStatus>;\n\n /** Whether to display due date warning in status */\n @Input() checkDueDate = false;\n\n /** Number of days before due date when status changes to `warning` with text 'Due in X days'.\n * Not used if 'checkDueDate' equals false */\n @Input() dueDateThreshold = 7;\n\n /** A list of approval statuses that allow sending reminders to their approvers */\n @Input() allowSendRemindersForStatuses: ApprovalStatus[] = ['in progress', 'not started'];\n\n /** Whether the approval flow is editable */\n @Input() isEditAvailable = false;\n\n /** Text label for watchers list */\n @Input() watchersLabel: string;\n\n /** Enables or disables ability to add parallel nodes */\n @Input() allowAddParallelNodes = true;\n\n /** Disables save button, save button is enabled by default */\n @Input() disableSaveButton = false;\n\n /** Disables exit button, exit button is enabled by default */\n @Input() disableExitButton = false;\n\n /**\n * Name of the entity for which users DataProvider will be loaded.\n * Internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input() usersDataProviderEntityKey?: string;\n\n /**\n * Name of the entity for which teams DataProvider will be loaded.\n * Internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input() teamsDataProviderEntityKey?: string;\n\n /**\n * Name of the entity for which approval flow DataProvider will be loaded.\n * Internally we should be able to do lookup to some registry\n * and retrieve the best matching DataProvider that is set on application level\n */\n @Input() watchersDataProviderEntityKey?: string;\n\n /**\n * Should remove the space node from the graph\n */\n @Input() removeSpaceNode?: boolean = false;\n\n /** Event emitted on approval flow node click. */\n @Output() nodeClick = new EventEmitter<ApprovalNode>();\n\n /** Event emitted on approval flow node add */\n @Output() afterNodeAdd = new EventEmitter<ApprovalNode>();\n\n /** Event emitted on approval flow node edit */\n @Output() afterNodeEdit = new EventEmitter<ApprovalNode>();\n\n /** Event emitted whenver save is clicked in edit mode */\n @Output() valueChange = new EventEmitter<ApprovalProcess>();\n\n /** Event emitted whenever reminders should be sent */\n @Output() sendReminders = new EventEmitter<SendRemindersData>();\n\n /** Event emitted when data loading is started. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataRequested = new EventEmitter<void>();\n\n /** Event emitted when data loading is finished. */\n // eslint-disable-next-line @angular-eslint/no-output-on-prefix\n @Output() onDataReceived = new EventEmitter<void>();\n\n /** @hidden */\n @ViewChild('graphContainerEl') _graphContainerEl: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n @ViewChild('graphEl') _graphEl: ElementRef<HTMLDivElement>;\n\n /** @hidden */\n @ViewChild('gridList') _gridList: GridListComponent<ApprovalGraphNode>;\n\n /** @hidden */\n @ViewChildren(ApprovalFlowNodeComponent) _nodeComponents: QueryList<ApprovalFlowNodeComponent>;\n\n /** @hidden */\n _approvalProcess: ApprovalProcess;\n\n /** @hidden */\n _initialApprovalProcess?: ApprovalProcess;\n\n /** @hidden */\n _previousApprovalProcess?: ApprovalProcess;\n\n /** @hidden */\n _graph: ApprovalFlowGraph;\n\n /** @hidden */\n _isCarousel = false;\n\n /** @hidden */\n _graphMetadata: ApprovalGraphMetadata = {};\n\n /** @hidden */\n _isEditMode = false;\n\n /** @hidden */\n _usersForWatchersList: ApprovalUser[] = [];\n\n /** @hidden */\n _selectedWatcherIds: ApprovalUser['id'][] = [];\n\n /** @hidden */\n _messages: ApprovalFlowMessage[] = [];\n\n /** @hidden */\n _emptyApprovalFlowSpotConfig = {\n spot: { url: '', id: 'sapIllus-Spot-NoData' }\n };\n\n /** @hidden */\n _multipleRootNodes = false;\n\n /** @hidden */\n _multipleFinalNodes = false;\n\n /** @hidden */\n _dragDropInProgress = false;\n\n /** Returns snapshot of the current and initial states of approval process */\n get approvalProcess(): ApprovalProcess {\n return structuredClone(this._approvalProcess);\n }\n\n /** @hidden */\n _displayUserFn = displayUserFn;\n\n /** @hidden */\n _userValueFn = userValueFn;\n\n /** @hidden */\n _trackByFn = trackByFn;\n\n /** @hidden */\n readonly approvalFlowUniqueId = `fdp-approval-flow-${++defaultId}`;\n\n /** @hidden */\n protected readonly rtl = computed(() => this._rtlService?.rtl() ?? false);\n\n /** @hidden */\n protected readonly prevSlideArrowGlyph = computed(() =>\n this.rtl() ? 'navigation-right-arrow' : 'navigation-left-arrow'\n );\n\n /** @hidden */\n protected readonly nextSlideArrowGlyph = computed(() =>\n this.rtl() ? 'navigation-left-arrow' : 'navigation-right-arrow'\n );\n\n /** @hidden */\n get _selectedNodes(): ApprovalGraphNode[] {\n return getGraphNodes(this._graph).filter((node) => node.selected);\n }\n\n /** @hidden */\n private _selectedWatchers: ApprovalUser[] = [];\n\n /** @hidden */\n private _editModeInitSub: Subscription;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _dataSourceChanged$ = new Subject<void>();\n\n /** @hidden */\n private readonly _rtlService = inject(RtlService, { optional: true });\n\n /** @hidden */\n private readonly providers = inject<Map<string, DataProvider<any>>>(DATA_PROVIDERS, { optional: true });\n\n /** @hidden */\n constructor(\n private readonly _dialogService: DialogService,\n private readonly _cdr: ChangeDetectorRef,\n private readonly _injector: Injector\n ) {\n console.log('ApprovalFlowComponent is deprecated and will be removed in next release.');\n }\n\n /** @hidden */\n ngOnInit(): void {\n if (!this.userDataSource) {\n const usersDP = this.usersDataProviderEntityKey && this.providers?.get(this.usersDataProviderEntityKey);\n if (usersDP) {\n this.userDataSource = new ApprovalFlowUserDataSource(usersDP);\n } else {\n console.error('Could not resolve users data source');\n }\n }\n if (!this.watcherDataSource) {\n const watchersDP =\n this.watchersDataProviderEntityKey && this.providers?.get(this.watchersDataProviderEntityKey);\n if (watchersDP) {\n this.watcherDataSource = new ApprovalFlowUserDataSource(watchersDP);\n } else {\n console.error('Could not resolve watchers data source');\n }\n }\n if (!this.teamDataSource) {\n const teamsDP = this.teamsDataProviderEntityKey && this.providers?.get(this.teamsDataProviderEntityKey);\n if (teamsDP) {\n this.teamDataSource = new ApprovalFlowTeamDataSource(teamsDP);\n } else {\n console.error('Could not resolve teams data source');\n }\n }\n\n this._listenOnResize();\n this._setupDataSourceSubscription();\n }\n\n /** @hidden */\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.value) {\n const process = this.value ?? { watchers: [], nodes: [] };\n this._initialApprovalProcess = structuredClone(process);\n this._buildView(process);\n }\n\n if (changes.userDataSource || changes.watcherDataSource || changes.teamDataSource) {\n this._dataSourceChanged$.next();\n }\n }\n\n /** @hidden */\n ngOnDestroy(): void {\n this._subscriptions.unsubscribe();\n }\n\n /** @hidden */\n _isNextNodeBlank(node: ApprovalGraphNode, columnIndex: number, nodeIndex: number): boolean {\n const nextNode = this._graph.columns[columnIndex + 1]?.nodes[nodeIndex];\n const nextNodeBlank = nextNode?.blank;\n const nextNodeParallelEnd = this._graphMetadata[nextNode?.id]?.parallelEnd;\n\n return !node.blank && !!nextNodeBlank && !nextNodeParallelEnd;\n }\n\n /** @hidden */\n _isCdkDragDisabled(node: ApprovalGraphNode): boolean {\n return !this._isEditMode || node.blank || node.space || node.status !== 'not started';\n }\n\n /** @hidden Node click handler */\n _onNodeClick(node: ApprovalNode): void {\n if (this._dragDropInProgress) {\n return;\n }\n\n const dialog = this._dialogService.open<ApprovalFlowApproverDetailsDialogRefData>(\n ApprovalFlowApproverDetailsComponent,\n {\n data: {\n node,\n allowSendReminder: this.allowSendRemindersForStatuses.includes(node.status),\n ...this._defaultDialogOptions\n }\n },\n this._injector\n );\n\n dialog.afterClosed.subscribe((reminderTargets) => {\n if (Array.isArray(reminderTargets)) {\n this.sendReminders.emit({ users: reminderTargets, node });\n }\n });\n\n this.nodeClick.emit(node);\n }\n\n /** @hidden */\n _onNodeAdd(node: ApprovalNode): void {\n this.afterNodeAdd.emit(node);\n }\n\n /** @hidden */\n _onNodeEdit(node: ApprovalNode): void {\n this.afterNodeEdit.emit(node);\n }\n\n /** @hidden */\n _onNodeSelectionChange(event: GridListSelectionEvent<ApprovalGraphNode>): void {\n this._graph.columns.forEach((column) => {\n column.nodes.forEach((node) => {\n node.selected = !!event.selection.find((_node) => _node.id === node.id);\n });\n });\n }\n\n /** @hidden Watcher's avatar click handler */\n _onWatcherClick(watcher: ApprovalUser, event: Event): void {\n event.preventDefault();\n this._dialogService.open<ApprovalFlowApproverDetailsDialogRefData>(ApprovalFlowApproverDetailsComponent, {\n data: {\n watcher,\n ...this._defaultDialogOptions\n }\n });\n }\n\n /** Retrive metadata by node id */\n getNodeMetadataByNodeId(nodeId: string): ApprovalGraphNodeMetadata {\n return this._graphMetadata[nodeId];\n }\n\n /** Scroll to the next horizontal slide */\n nextSlide(dir = 1): void {\n const threshold = 1;\n\n let pos: number;\n\n if (dir === 1) {\n const lastStep = this._carouselStepsRight === 1;\n const nextStep = this._carouselStepsCount - this._carouselStepsRight + 1;\n const visibleRightPoint = this._carouselStepSize * nextStep + (lastStep ? 0 : threshold);\n pos = visibleRightPoint - this._graphEl.nativeElement.clientWidth;\n } else {\n const lastStep = this._carouselStepsLeft === 1;\n const nextStep = this._carouselStepsLeft - 1;\n pos = this._carouselStepSize * nextStep - (lastStep ? 0 : threshold);\n }\n\n this._setScrollPosition(pos);\n\n this._cdr.detectChanges();\n }\n\n /** @hidden */\n _setScrollPosition(pos: number): void {\n this._graphContainerEl.nativeElement.scrollTo({\n left: pos,\n behavior: 'smooth'\n });\n }\n\n /** @hidden Handle node keydown and focus other node based on which key is pressed */\n _onNodeKeyDown(event: KeyboardEvent, node: ApprovalGraphNode): void {\n if (!KeyUtil.isKeyCode(event, [UP_ARROW, DOWN_ARROW, RIGHT_ARROW, LEFT_ARROW])) {\n return;\n }\n\n const { nodeIndex, columnIndex } = this._graphMetadata[node.id];\n\n event.preventDefault();\n\n let nextFocusTarget: ApprovalGraphNode | undefined;\n\n if (typeof nodeIndex === 'number' && typeof columnIndex === 'number') {\n if (KeyUtil.isKeyCode(event, UP_ARROW)) {\n if (nodeIndex > 0) {\n nextFocusTarget = this._getNextVerticalNode(nodeIndex, columnIndex, 'up');\n }\n } else if (KeyUtil.isKeyCode(event, DOWN_ARROW)) {\n nextFocusTarget = this._getNextVerticalNode(nodeIndex, columnIndex, 'down');\n } else if (KeyUtil.isKeyCode(event, LEFT_ARROW)) {\n nextFocusTarget = this._getNextHorizontalNode(nodeIndex, columnIndex, this.rtl() ? 'right' : 'left');\n } else if (KeyUtil.isKeyCode(event, RIGHT_ARROW)) {\n nextFocusTarget = this._getNextHorizontalNode(nodeIndex, columnIndex, this.rtl() ? 'left' : 'right');\n }\n }\n\n if (nextFocusTarget) {\n this._focusNode(nextFocusTarget);\n }\n }\n\n /** @hidden Fetch all necessary data and enter edit mode */\n _enterEditMode(): void {\n // there's no support for searching in multi-input, so grabbing all watchers\n // triggering initial loading of data in data sources\n this.watcherDataSource.match();\n this._editModeInitSub = this.watcherDataSource.open().subscribe((watchers) => {\n this._usersForWatchersList = watchers;\n this._selectedWatchers = this._approvalProcess.watchers;\n this._selectedWatcherIds = this._selectedWatchers.map((w) => w.id);\n this._isEditMode = true;\n this._initialApprovalProcess = structuredClone(this._approvalProcess);\n this._cdr.detectChanges();\n });\n this._subscriptions.add(this._editModeInitSub);\n }\n\n /** @hidden Send update approval process calls to DataSource and exit edit mode*/\n _saveEditModeChanges(): void {\n this._editModeInitSub?.unsubscribe();\n this.watcherDataSource.close();\n\n this._initialApprovalProcess = undefined;\n this._isEditMode = false;\n this._messages = [];\n\n const updated = {\n ...this._approvalProcess,\n watchers: this._selectedWatchers\n };\n\n this._buildView(updated);\n\n this.valueChange.emit(updated);\n }\n\n /** @hidden Restore initial approval flow state and exit edit mode */\n _exitEditMode(): void {\n this._editModeInitSub?.unsubscribe();\n this.watcherDataSource.close();\n\n this._approvalProcess = structuredClone(this._initialApprovalProcess!);\n this._initialApprovalProcess = undefined;\n this._isEditMode = false;\n this._messages = [];\n\n this._buildView(this._approvalProcess);\n }\n\n /** @hidden */\n _watchersSelectionChanged(selectedIds: ApprovalUser['id'][]): void {\n const idsSet = new Set(selectedIds);\n // updating watchers selection\n // since it's possible \"_usersForWatchersList\" might not contain all selected values,\n // determine current selection based on what's already selected and \"_usersForWatchersList\"\n this._selectedWatchers = uniqBy(\n this._selectedWatchers.concat(this._usersForWatchersList).filter((user) => idsSet.has(user.id)),\n (u) => u.id\n );\n }\n\n /** @hidden Restore previously saved approval process state */\n _undoLastAction(): void {\n this._approvalProcess = structuredClone(this._previousApprovalProcess!);\n this._previousApprovalProcess = undefined;\n\n this._buildView(this._approvalProcess);\n }\n\n /** @hidden Open add node dialog */\n _addNode(source: ApprovalGraphNode, type: ApprovalFlowNodeTarget): void {\n const showNodeTypeSelect = type === 'before' && !source.actionsConfig?.disableAddParallel;\n\n const dialog = this._dialogService.open<AddNodeDialogRefData>(\n ApprovalFlowAddNodeComponent,\n {\n data: {\n nodeTarget: type,\n showNodeTypeSelect,\n node: Object.assign(getBlankApprovalGraphNode(), { blank: false }),\n checkDueDate: this.checkDueDate,\n ...this._defaultDialogOptions\n }\n },\n this._injector\n );\n\n dialog.afterClosed.subscribe((data: AddNodeDialogFormData) => {\n if (!data) {\n return;\n }\n\n const { node, nodeType, toNextSerial } = data;\n\n if (!node) {\n return;\n }\n\n this._cacheCurrentApprovalProcess();\n\n node.id = `tempId${(Math.random() * 1000).toFixed()}`;\n\n switch (type) {\n case 'empty':\n this._enterEditMode();\n break;\n\n case 'before':\n if (nodeType === APPROVAL_FLOW_NODE_TYPES.SERIAL) {\n node.targets = [source.id];\n this._replaceTargets(source.id, [node.id]);\n }\n\n if (nodeType === APPROVAL_FLOW_NODE_TYPES.PARALLEL) {\n this._processAddingParallelNode(node, source, toNextSerial);\n }\n\n break;\n\n case 'before-all':\n node.targets = this._graph.columns[0].nodes.map((_node) => _node.id);\n break;\n\n case 'after':\n node.targets = source.targets;\n source.targets = [node.id];\n break;\n\n case 'after-all': {\n const targetParents = this._graphMetadata[source.targets[0]]?.parents;\n\n if (targetParents) {\n node.targets = source.targets;\n this._replaceTargets(source.id, [node.id]);\n\n this._approvalProcess.nodes = this._approvalProcess.nodes.filter(\n (_node) => _node.id !== source.id\n );\n } else {\n this._graph.columns[this._graph.columns.length - 1].nodes.forEach((_node) =>\n _node.targets.push(node.id)\n );\n }\n\n break;\n }\n case 'parallel':\n this._processAddingParallelNode(node, source, toNextSerial);\n break;\n }\n\n this._showMessage(node.approvalTeamId ? 'teamAddSuccess' : 'approverAddSuccess');\n this._approvalProcess.nodes.push(node);\n\n this._buildView(this._approvalProcess);\n this._onNodeAdd(node);\n });\n }\n\n /** @hidden Open edit node dialog */\n _editNode(node: ApprovalNode): void {\n const dialog = this._dialogService.open<AddNodeDialogRefData>(\n ApprovalFlowAddNodeComponent,\n {\n data: {\n isEdit: true,\n node: Object.assign({}, node),\n checkDueDate: this.checkDueDate,\n ...this._defaultDialogOptions\n }\n },\n this._injector\n );\n\n dialog.afterClosed.subscribe((data: { node: ApprovalNode }) => {\n const updatedNode = data?.node;\n\n if (!updatedNode) {\n return;\n }\n\n this._cacheCurrentApprovalProcess();\n this._updateNode(updatedNode);\n this._showMessage('nodeEdit');\n this._buildView(this._approvalProcess);\n this._onNodeEdit(node);\n });\n }\n\n /** @hidden \"Delete\" button click handler */\n _onNodeDelete(nodeToDelete: ApprovalNode): void {\n this._cacheCurrentApprovalProcess();\n this._deleteNode(nodeToDelete);\n this._showMessage(nodeToDelete.approvalTeamId ? 'teamRemove' : 'nodeRemove');\n this._buildView(this._approvalProcess);\n }\n\n /** @hidden */\n _deleteSelectedNodes(): void {\n this._cacheCurrentApprovalProcess();\n\n const nodesToDelete = this._nodeComponents\n .filter((nodeComponent) => nodeComponent._isSelected)\n .map((nodeComponent) => nodeComponent.node);\n\n nodesToDelete.forEach((node) => {\n this._deleteNode(node);\n this._buildView(this._approvalProcess);\n });\n\n this._showMessage('nodesRemove');\n }\n\n /** @hidden Node drag move handler, used to check if need to highlight a drop zone rectangle */\n _onNodeDragMoved(node: ApprovalGraphNode): void {\n const draggedNodeDimensions = this._nodeComponents\n .find((comp) => comp.node === node)\n ?._nativeElement.getBoundingClientRect();\n\n if (!draggedNodeDimensions) {\n return;\n }\n\n this._nodeComponents.forEach((component) => {\n if (component.node !== node && Boolean(component._dropZones.length)) {\n component._checkIfNodeDraggedInDropZone(draggedNodeDimensions);\n }\n });\n }\n\n /** @hidden */\n _focusNode(node: ApprovalGraphNode): void {\n const nodeToFocus = this._nodeComponents.find((comp) => comp.node === node);\n\n if (!nodeToFocus) {\n return;\n }\n this._moveColInView(node.colIndex ?? 0);\n nodeToFocus._focus({ preventScroll: true });\n }\n\n /** @hidden Node drop handler */\n _onNodeDrop(nodeToDrop: ApprovalGraphNode, drag: CdkDrag): void {\n drag.reset();\n\n setTimeout(() => (this._dragDropInProgress = false));\n\n const dropTarget = this._nodeComponents.find((n) => n._isAnyDropZoneActive);\n\n if (!dropTarget) {\n return;\n }\n\n this._cacheCurrentApprovalProcess();\n\n const placement = dropTarget._activeDropZones[0].placement;\n\n this._nodeComponents.forEach((n) => n._deactivateDropZones());\n\n if (placement === 'after') {\n this._deleteNode(nodeToDrop);\n this._buildView(this._approvalProcess);\n\n const nextNode = getGraphNodes(this._graph).find((node) => node.id === dropTarget.node.targets[0]);\n\n if (nextNode?.blank) {\n this._deleteNode(nextNode);\n this._buildView(this._approvalProcess);\n }\n\n nodeToDrop.targets =\n this._approvalProcess.nodes.find((node) => node.id === dropTarget.node.id)?.targets ?? [];\n dropTarget.node.targets = [nodeToDrop.id];\n\n this._finishDragDropProcess(nodeToDrop);\n } else if (placement === 'before') {\n const dialog = this._dialogService.open(ApprovalFlowSelectTypeComponent, undefined, this._injector);\n\n dialog.afterClosed.subscribe((data: SelectTypeDialogFormData) => {\n if (!data) {\n return;\n }\n\n const { type, toNextSerial } = data;\n\n this._deleteNode(nodeToDrop);\n this._buildView(this._approvalProcess);\n\n if (type === APPROVAL_FLOW_NODE_TYPES.SERIAL) {\n this._replaceTargets(dropTarget.node.id, [nodeToDrop.id]);\n nodeToDrop.targets = [dropTarget.node.id];\n }\n\n if (type === APPROVAL_FLOW_NODE_TYPES.PARALLEL) {\n this._processAddingParallelNode(nodeToDrop, dropTarget.node, toNextSerial);\n }\n\n this._finishDragDropProcess(nodeToDrop);\n });\n } else if (placement === 'before-all') {\n this._deleteNode(nodeToDrop);\n\n const firstColumnNodes = this._graph.columns[0].nodes;\n nodeToDrop.targets = firstColumnNodes.map((node) => node.id);\n\n this._finishDragDropProcess(nodeToDrop);\n } else if (placement === 'after-all') {\n this._deleteNode(nodeToDrop);\n this._buildView(this._approvalProcess);\n\n nodeToDrop.targets = [...dropTarget.node.targets];\n\n if (dropTarget.node.targets.length === 0) {\n const lastColumnNodes = this._graph.columns[this._graph.columns.length - 1].nodes;\n lastColumnNodes.forEach((node) => node.targets.push(nodeToDrop.id));\n } else {\n this._approvalProcess.nodes = this._approvalProcess.nodes.filter(\n (node) => node.id !== dropTarget.node.id\n );\n this._replaceTargets(dropTarget.node.id, [nodeToDrop.id]);\n }\n\n this._finishDragDropProcess(nodeToDrop);\n }\n }\n\n /** @hidden */\n private _moveColInView(colIndex: number): any {\n const node = this._graphEl.nativeElement.children[colIndex].firstElementChild;\n if (!node) {\n return;\n }\n\n const { x: nodeX, width } = node.getBoundingClientRect();\n\n const delta = this._graphContainerEl.nativeElement.getBoundingClientRect().x;\n\n const left = nodeX - delta;\n const right = left + width;\n\n if (left < 0) {\n this._setScrollPosition(this._graphContainerEl.nativeElement.scrollLeft + left);\n } else if (right > this._graphEl.nativeElement.clientWidth) {\n this._setScrollPosition(\n this._graphContainerEl.nativeElement.scrollLeft + right - this._graphEl.nativeElement.clientWidth\n );\n }\n }\n\n /** @hidden */\n private _finishDragDropProcess(nodeToDrop: ApprovalGraphNode): void {\n this._approvalProcess.nodes.push(nodeToDrop);\n this._buildView(this._approvalProcess);\n }\n\n /** @hidden */\n private _showMessage(type: ApprovalFlowMessageType): void {\n this._messages = [{ type }];\n }\n\n /** @hidden Build Approval Flow graph and render it */\n private _buildView(approvalProcess: ApprovalProcess): void {\n if (!approvalProcess.nodes) {\n approvalProcess.nodes = [];\n }\n if (!approvalProcess.watchers) {\n approvalProcess.watchers = [];\n }\n this._approvalProcess = approvalProcess;\n this._graph = generateApprovalFlowGraph(this._approvalProcess.nodes);\n\n if (this.removeSpaceNode) {\n this._graph.columns = this.removeSpaceNodesFromColumns(this._graph.columns);\n }\n\n if (this._graph.errors) {\n this._showMessage('error');\n return;\n }\n\n this._graphMetadata = generateApprovalFlowGraphMetadata(this._graph);\n\n const nodes = getGraphNodes(this._graph);\n this._approvalProcess.nodes = nodes.filter((node) => !node.space);\n this._multipleRootNodes = nodes.filter((node) => this._graphMetadata[node.id].isRoot).length > 1;\n this._multipleFinalNodes = nodes.filter((node) => this._graphMetadata[node.id].isFinal).length > 1;\n\n this._cdr.detectChanges();\n this._gridList?.clearSelection();\n\n if (!this._isEditMode) {\n this._setScrollPosition(0);\n }\n }\n\n /** @hidden Listen window resize and distribute cards on column change */\n private _listenOnResize(): void {\n this._subscriptions.add(\n merge(fromEvent(window, 'resize'), fromEvent(this._graphContainerEl.nativeElement, 'scroll'))\n .pipe(throttleTime(50, undefined, { leading: true, trailing: true }))\n .subscribe(() => {\n this._cdr.detectChanges();\n })\n );\n }\n\n /** @hidden Update node object in local approval process data structure */\n private _updateNode(node: ApprovalNode): void {\n const nodeIndex = this._approvalProcess.nodes.findIndex((n) => n.id === node.id);\n\n if (nodeIndex > -1) {\n this._approvalProcess.nodes[nodeIndex] = node;\n }\n }\n\n /** @hidden Delete node object in local approval process data structure */\n private _deleteNode(nodeToDelete: ApprovalNode): void {\n const nodesToDelete = [nodeToDelete];\n const graphNodes = getGraphNodes(this._graph);\n let currNode = graphNodes.find((node) => node.id === nodeToDelete.id);\n let nextNode: ApprovalGraphNode | undefined;\n\n do {\n if (currNode?.targets.length === 1) {\n nextNode = graphNodes.find((node) => node.id === currNode?.targets[0]);\n\n if (nextNode?.blank && this._graphMetadata[nextNode.id].parents.length === 1) {\n nodesToDelete.push(nextNode);\n\n currNode = nextNode;\n nextNode = graphNodes.find((node) => node.id === currNode?.targets[0]);\n }\n }\n } while (nextNode?.blank && this._graphMetadata[nextNode.id].parents.length === 1);\n\n const parent = this._graphMetadata[nodeToDelete.id].parents[0];\n const target = nodeToDelete.targets[0];\n const isParentParallelStart = this._graphMetadata[parent?.id]?.parallelStart;\n const isTargetParallelEnd = this._graphMetadata[target]?.parallelEnd;\n const targets =\n (isParentParallelStart && isTargetParallelEnd) || nodesToDelete.length > 1 ? [] : (currNode?.targets ?? []);\n\n this._replaceTargets(nodeToDelete.id, targets);\n\n this._approvalProcess.nodes = this._approvalProcess.nodes.filter((node) => !nodesToDelete.includes(node));\n }\n\n /** @hidden */\n private _addParallelTargets(targetNodeId: string, nodeIdToAdd: string): void {\n this._approvalProcess.nodes.forEach((node) => {\n if (isNodeTargetsIncludeId(node, targetNodeId)) {\n node.targets.push(nodeIdToAdd);\n }\n });\n }\n\n /** @hidden Replace all occurrences of \"idToReplace\" in all nodes' \"targets\" with ones in \"replaceWith\" array */\n private _replaceTargets(IdToReplace: string, replaceWithId: string[]): void {\n this._approvalProcess.nodes.forEach((n) => {\n if (isNodeTargetsIncludeId(n, IdToReplace)) {\n n.targets = n.targets.filter((_id) => _id !== IdToReplace);\n n.targets.push(...replaceWithId);\n }\n });\n }\n\n /** @hidden Save current state of approval process data to be able to undo an action made in edit mode */\n private _cacheCurrentApprovalProcess(): void {\n this._previousApprovalProcess = structuredClone(this._approvalProcess);\n }\n\n /** @hidden */\n private _getNextHorizontalNode = (\n nodeIndex: number,\n columnIndex: number,\n direction: 'left' | 'right'\n ): ApprovalGraphNode | undefined => {\n const indexDiff = direction === 'right' ? 1 : -1;\n const nextColumn = this._graph.columns[columnIndex + indexDiff];\n const nextNode = nextColumn?.nodes[nodeIndex];\n\n if (!nextNode) {\n return undefined;\n }\n\n if (nextNode.blank || nextNode.space) {\n return this._getNextHorizontalNode(nodeIndex, columnIndex + indexDiff, direction);\n }\n\n return nextNode;\n };\n\n /** @hidden */\n private _getNextVerticalNode = (\n nodeIndex: number,\n columnIndex: number,\n direction: 'up' | 'down'\n ): ApprovalGraphNode | undefined => {\n const indexDiff = direction === 'down' ? 1 : -1;\n const currColumn = this._graph.columns[columnIndex];\n const nextNode = currColumn.nodes[nodeIndex + indexDiff];\n\n if (!nextNode) {\n return undefined;\n }\n\n if (nextNode.blank || nextNode.space) {\n return this._getNextVerticalNode(nodeIndex + indexDiff, columnIndex, direction);\n }\n\n return nextNode;\n };\n\n /** @hidden */\n private get _carouselStepSize(): number {\n return this._graphEl.nativeElement.scrollWidth / this._carouselStepsCount;\n }\n\n /** @hidden */\n get _scrollDiff(): number {\n if (!this._graphEl) {\n return 0;\n }\n return this._graphEl.nativeElement.scrollWidth - this._graphEl.nativeElement.clientWidth;\n }\n\n /** @hidden */\n get _carouselStepsCount(): number {\n return this._graphEl.nativeElement.children.length;\n }\n\n /** @hidden */\n get _carouselStepsLeft(): number {\n return Math.ceil(this._graphContainerEl.nativeElement.scrollLeft / this._carouselStepSize);\n }\n\n /** @hidden */\n get _carouselStepsRight(): number {\n return Math.ceil(\n (this._scrollDiff - Math.round(this._graphContainerEl.nativeElement.scrollLeft)) / this._carouselStepSize\n );\n }\n\n /** @hidden */\n private get _defaultDialogOptions(): DefaultDialogOptions {\n return {\n teamDataSource: this.teamDataSource,\n userDataSource: this.userDataSource,\n userDetailsTemplate: this.userDetailsTemplate,\n rtl: this.rtl()\n };\n }\n\n /** @hidden */\n private _findSerialNode(yIndex?: number, targets?: string[]): string[] {\n const targetIsParent =\n Number.isInteger(yIndex) &&\n targets?.some((targetId) => {\n const nodeIndex = this._graphMetadata[targetId]?.nodeIndex;\n return Number.isInteger(nodeIndex) && nodeIndex! <= yIndex! - 1;\n });\n\n if (targetIsParent) {\n return targets ?? [];\n }\n\n const targetNode = this._approvalProcess.nodes.find((node) => node.id === targets?.[0]);\n return this._findSerialNode(yIndex, targetNode?.targets);\n }\n\n /** @hidden */\n private _processAddingParallelNode(\n addedNode: ApprovalGraphNode,\n sourceNode: ApprovalGraphNode,\n toNextSerial = false\n ): void {\n addedNode.targets = sourceNode.targets;\n\n this._addParallelTargets(sourceNode.id, addedNode.id);\n\n if (toNextSerial) {\n let yIndex = this._graphMetadata[sourceNode.id].nodeIndex;\n let targets = sourceNode.targets;\n\n if (yIndex === 0) {\n const sourceNodeMetadata = this._graphMetadata[sourceNode.id];\n const columnNodes = this._graph.columns?.[sourceNodeMetadata.columnIndex!]?.nodes;\n const nextParallelNode = columnNodes.find((node, index) => index > 0 && !node.space);\n\n if (nextParallelNode) {\n yIndex = this._graphMetadata[nextParallelNode.id].columnIndex;\n targets = nextParallelNode.targets;\n\n addedNode.targets = this._findSerialNode(yIndex, targets);\n return;\n }\n\n addedNode.targets = sourceNode.targets;\n return;\n }\n\n addedNode.targets = this._findSerialNode(yIndex, targets);\n }\n }\n\n /** @hidden */\n private _setupDataSourceSubscription(): void {\n const sub = this._dataSourceChanged$\n .pipe(\n startWith(null),\n switchMap(() => {\n const loadingStates = [this.teamDataSource, this.userDataSource, this.watcherDataSource]\n .filter(Boolean)\n .map((ds) =>\n merge(ds.onDataRequested().pipe(mapTo(true)), ds.onDataReceived().pipe(mapTo(false))).pipe(\n startWith(ds.isDataLoading)\n )\n );\n return combineLatest(loadingStates);\n }),\n map((loadingStates) => loadingStates.some(Boolean)),\n distinctUntilChanged()\n )\n .subscribe((someLoading) => {\n if (someLoading) {\n this.onDataRequested.emit();\n } else {\n this.onDataReceived.emit();\n }\n });\n this._subscriptions.add(sub);\n }\n\n /** @hidden */\n private removeSpaceNodesFromColumns(columns: ApprovalGraphColumn[]): ApprovalGraphColumn[] {\n const filteredColumns: ApprovalGraphColumn[] = [];\n\n columns.forEach((column) => {\n const filteredNodes = column.nodes.filter((node) => !node.space);\n\n const updatedColumn = {\n ...column, // Preserve other properties of the column\n nodes: filteredNodes // Use the filtered list of nodes\n };\n\n filteredColumns.push(updatedColumn);\n });\n\n return filteredColumns;\n }\n}\n\ninterface DefaultDialogOptions {\n teamDataSource: ApprovalFlowTeamDataSource<ApprovalTeam>;\n userDataSource: ApprovalFlowUserDataSource<ApprovalUser>;\n userDetailsTemplate: TemplateRef<any>;\n rtl: boolean;\n}\n","<ng-container fdCompact>\n <fdp-approval-flow-messages\n [(messages)]=\"_messages\"\n [undoLastActionAvailable]=\"!!_previousApprovalProcess\"\n (undoLastAction)=\"_undoLastAction()\"\n ></fdp-approval-flow-messages>\n <fd-grid-list\n #gridList\n class=\"fdp-approval-flow__toolbar\"\n [selectionMode]=\"_isEditMode ? 'multiSelect' : 'none'\"\n (selectionChange)=\"_onNodeSelectionChange($event)\"\n >\n <fd-grid-list-title-bar [title]=\"title || ('platformApprovalFlow.defaultTitle' | fdTranslate)\">\n <fd-grid-list-title-bar-spacer></fd-grid-list-title-bar-spacer>\n @if (isEditAvailable) {\n <fdp-approval-flow-toolbar-actions\n [graph]=\"_graph\"\n [selectedNodes]=\"_selectedNodes\"\n [graphMetadata]=\"_graphMetadata\"\n [isEditMode]=\"_isEditMode\"\n (enterEditMode)=\"_enterEditMode()\"\n (addNode)=\"_addNode($event.node, $event.target)\"\n (editSelectedNode)=\"_editNode($event)\"\n (deleteSelectedNodes)=\"_deleteSelectedNodes()\"\n ></fdp-approval-flow-toolbar-actions>\n }\n </fd-grid-list-title-bar>\n @if (_approvalProcess.watchers?.length || _isEditMode) {\n <div class=\"fdp-approval-flow__watchers\" [attr.aria-label]=\"watchersLabel\">\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n @if (!_isEditMode) {\n @for (watcher of _approvalProcess.watchers; track _trackByFn($index, watcher)) {\n <fd-avatar\n size=\"xs\"\n [image]=\"watcher.imgUrl || ''\"\n [label]=\"watcher.name\"\n [clickable]=\"true\"\n [circle]=\"true\"\n (avatarClicked)=\"_onWatcherClick(watcher, $event)\"\n ></fd-avatar>\n }\n } @else {\n <div class=\"fdp-approval-flow__watchers-input-container\">\n <fd-multi-input\n [dropdownValues]=\"_usersForWatchersList\"\n [placeholder]=\"'platformApprovalFlow.watchersInputPlaceholder' | fdTranslate\"\n [displayFn]=\"_displayUserFn\"\n [valueFn]=\"_userValueFn\"\n [showAllButton]=\"true\"\n [(ngModel)]=\"_selectedWatcherIds\"\n (ngModelChange)=\"_watchersSelectionChanged($event)\"\n ></fd-multi-input>\n </div>\n }\n </div>\n }\n @if (!_graph.errors) {\n @if (_graph.columns.length) {\n <div\n class=\"fdp-approval-flow__container\"\n [class.fdp-approval-flow__container--extra-padding-start]=\"true\"\n [class.fdp-approval-flow__container--extra-padding-end]=\"true\"\n >\n @if (_scrollDiff > 0) {\n <div\n class=\"fdp-approval-flow-carousel-controls\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n @if (_carouselStepsLeft > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--prev-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.prevButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide(-1)\"\n >\n <fd-icon [glyph]=\"prevSlideArrowGlyph()\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n }\n @if (_carouselStepsRight > 0) {\n <button\n class=\"fdp-approval-flow-carousel-controls__button--next-slide\"\n [attr.aria-label]=\"'platformApprovalFlow.nextButtonAriaLabel' | fdTranslate\"\n (click)=\"nextSlide()\"\n >\n {{ _carouselStepsRight }}\n <fd-icon [glyph]=\"nextSlideArrowGlyph()\"></fd-icon>\n </button>\n }\n </div>\n }\n <div\n class=\"fdp-approval-flow__graph-container\"\n [class.fdp-approval-flow__graph-container--multiple-root-nodes]=\"_multipleRootNodes\"\n [class.fdp-approval-flow__graph-container--multiple-final-nodes]=\"_multipleFinalNodes\"\n [class.fd-scrollbar]=\"true\"\n #graphContainerEl\n >\n <div\n class=\"fdp-approval-flow__graph\"\n #graphEl\n [class.fdp-approval-flow__graph--edit-mode]=\"_isEditMode\"\n >\n @for (column of _graph.columns; track column; let columnIndex = $index) {\n <div class=\"fdp-approval-flow__graph-column\">\n @for (\n node of column.nodes;\n track _trackByFn(nodeIndex, node);\n let nodeIndex = $index\n ) {\n <fdp-approval-flow-node\n cdkDrag\n #approvalFlowNode\n [cdkDragDisabled]=\"_isCdkDragDisabled(node)\"\n [node]=\"node\"\n [meta]=\"_graphMetadata[node.id]\"\n [isEdit]=\"_isEditMode\"\n [isNextNodeBlank]=\"_isNextNodeBlank(node, columnIndex, nodeIndex)\"\n [checkDueDate]=\"checkDueDate\"\n [dueDateThreshold]=\"dueDateThreshold\"\n [renderArrow]=\"columnIndex > 0\"\n [allNodesInColumnApproved]=\"!!column.allNodesApproved\"\n [approvalStatusTemplate]=\"approvalStatusTemplate\"\n [statusColorMapping]=\"statusColorMapping\"\n (onAdd)=\"_addNode(node, $event)\"\n (onEdit)=\"_editNode(node)\"\n (onDelete)=\"_onNodeDelete(node)\"\n (keydown)=\"_onNodeKeyDown($event, node)\"\n (cdkDragStarted)=\"_dragDropInProgress = true\"\n (cdkDragReleased)=\"_onNodeDrop(node, $event.source)\"\n (cdkDragMoved)=\"_onNodeDragMoved(node)\"\n >\n <!-- Trick with using projection to make grid list items visible for the grid list -->\n <fd-grid-list-item\n type=\"active\"\n [value]=\"node\"\n [selected]=\"!!node.selected\"\n [ariaLabelledBy]=\"approvalFlowNode.approvalFlowNodeId\"\n [disableToolbarClick]=\"true\"\n class=\"fdp-approval-flow__graph-node-inner\"\n [class.fdp-approval-flow__graph-node-inner--edit]=\"_isEditMode\"\n (press)=\"_onNodeClick(node)\"\n >\n <fd-grid-list-item-toolbar>\n @if (_isEditMode) {\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-template>\n }\n </fd-grid-list-item-toolbar>\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"\n node.approvers.length === 1 ? node.approvers[0].imgUrl : null\n \"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n <ng-template fd-grid-list-item-body>\n <ng-template\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-template>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n }\n </div>\n }\n </div>\n </div>\n </div>\n } @else {\n <figure fd-illustrated-message type=\"spot\" [svgConfig]=\"_emptyApprovalFlowSpotConfig\">\n <figcaption fd-illustrated-message-figcaption>\n <h3 fd-illustrated-message-title>\n {{ 'platformApprovalFlow.emptyTitle' | fdTranslate }}\n </h3>\n <p fd-illustrated-message-text>\n {{ 'platformApprovalFlow.emptyHint' | fdTranslate }}\n </p>\n </figcaption>\n </figure>\n <!-- TODO #5178: Replace with illustrated image component after it gets fixed -->\n <div [style.display]=\"'none'\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"128\"\n height=\"128\"\n viewBox=\"0 0 128 128\"\n id=\"sapIllus-Spot-NoData\"\n >\n <path\n d=\"M41.6179,32.7174H84.6273a1,1,0,0,1,.723.3092l7.2445,7.5824,7.4817,7.8491a1,1,0,0,1,.2761.69l-.0046,55.6069a4.1038,4.1038,0,0,1-.8787,2.1212A4.0564,4.0564,0,0,1,98.1,107.9631l-56.3858.0313a2.6167,2.6167,0,0,1-3.0812-3.2309l-.0152-69.0594Z\"\n class=\"sapIllus_PatternShadow\"\n [style.fill]=\"'var(--sapIllus_PatternShadow)'\"\n ></path>\n <path\n d=\"M35.7928,27.4987H78.8022a1,1,0,0,1,.723.3092L86.77,35.39l7.4816,7.8492a1,1,0,0,1,.2762.69l-.0046,55.6069a3,3,0,0,1-3,3H35.808a2.9946,2.9946,0,0,1-3-2.9913c-.01-12.0564-.0423-57.0116-.0152-69.0595A2.9943,2.9943,0,0,1,35.7928,27.4987Z\"\n class=\"sapIllus_ObjectFillColor\"\n [style.fill]=\"'var(--sapIllus_ObjectFillColor)'\"\n ></path>\n <path\n d=\"M93.2978,44.5335H78.8208a.9925.9925,0,0,1-.974-1.01V28.5108a.97.97,0,0,1,1.6628-.7143L93.9865,42.8092A1.0151,1.0151,0,0,1,93.2978,44.5335Z\"\n class=\"sapIllus_BrandColorSecondary\"\n [style.fill]=\"'var(--sapIllus_BrandColorSecondary)'\"\n ></path>\n <path\n d=\"M104.608,38.9485l5.9157-1.7721c1.32-.3954.7584-2.5258-.5689-2.1282L104.0392,36.82c-1.32.3953-.7584,2.5258.5688,2.1282Z\"\n class=\"sapIllus_Layering1\"\n [style.fill]=\"'var(--sapIllus_Layering1)'\"\n ></path>\n <path\n d=\"M85.2973,21.2465l.9718-5.9331c.2154-1.3151-1.777-1.8807-1.9941-.5554l-.9718,5.9332c-.2155,1.3151,1.777,1.8807,1.9941.5553Z\"\n class=\"sapIllus_Layering1\"\n [style.fill]=\"'var(--sapIllus_Layering1)'\"\n ></path>\n <path\n d=\"M95.3034,29.0015a1.01,1.01,0,0,1-.6837-.267,1.0783,1.0783,0,0,1-.0864-1.4932l5.9511-6.8857a1.01,1.01,0,0,1,1.4538-.0884,1.0785,1.0785,0,0,1,.0865,1.4932l-5.9511,6.8858A1.0164,1.0164,0,0,1,95.3034,29.0015Z\"\n class=\"sapIllus_Layering1\"\n [style.fill]=\"'var(--sapIllus_Layering1)'\"\n ></path>\n <path\n d=\"M94.8747,42.8861,80.0855,27.4623a1.5152,1.5152,0,0,0-1.0885-.4636H35.807a3.509,3.509,0,0,0-3.5146,3.4836c-.0294,13.2857.0137,66.7559.0157,69.0257a3.5076,3.5076,0,0,0,3.5146,3.4894H91.7709a3.5106,3.5106,0,0,0,3.5146-3.4982l.005-55.5785A1.49,1.49,0,0,0,94.8747,42.8861Zm-16.21-14.8355a1.15,1.15,0,0,1,.2561-.0309,1.04,1.04,0,0,1,.51.2134l14.276,14.8837.0194.02a.5891.5891,0,0,1,.0968.6251c-.1016.1764-.4086.24-.69.24L78.8355,44a.6031.6031,0,0,1-.5472-.6131c-.0087-4.9588-.017-9.9015-.0035-14.8689A.5189.5189,0,0,1,78.6646,28.0506Zm13.1062,73.95H35.8188a2.5045,2.5045,0,0,1-2.5107-2.491c-.002-2.2694-.0451-55.74-.0157-69.0248a2.5054,2.5054,0,0,1,2.5107-2.4861H77.3684a1.49,1.49,0,0,0-.0976.5106V43.4934A1.5145,1.5145,0,0,0,78.7894,45H78.92L94.286,47.9749l-.0046,51.5269A2.5074,2.5074,0,0,1,91.7708,102.0006Z\"\n class=\"sapIllus_StrokeDetailColor\"\n [style.fill]=\"'var(--sapIllus_StrokeDetailColor)'\"\n ></path>\n </svg>\n </div>\n }\n }\n </fd-grid-list>\n @if (_isEditMode) {\n <div fd-bar>\n <div fd-bar-right>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeSaveButtonLabel' | fdTranslate\"\n fdType=\"emphasized\"\n [disabled]=\"disableSaveButton\"\n (click)=\"_saveEditModeChanges()\"\n ></button>\n </fd-bar-element>\n <fd-bar-element>\n <button\n fd-button\n [label]=\"'platformApprovalFlow.editModeExitButtonLabel' | fdTranslate\"\n fdType=\"transparent\"\n [disabled]=\"disableExitButton\"\n (click)=\"_exitEditMode()\"\n ></button>\n </fd-bar-element>\n </div>\n </div>\n }\n</ng-container>\n","import { NgModule } from '@angular/core';\n\nimport { ApprovalFlowAddNodeComponent } from './approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowApproverDetailsComponent } from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport { ApprovalFlowMessagesComponent } from './approval-flow-messages/approval-flow-messages.component';\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-node/approval-flow-drop-zone.directive';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport { ApprovalFlowSelectTypeComponent } from './approval-flow-select-type/approval-flow-select-type.component';\nimport { ApprovalFlowTeamListComponent } from './approval-flow-team-list/approval-flow-team-list.component';\nimport { ApprovalFlowToolbarActionsComponent } from './approval-flow-toolbar-actions/approval-flow-toolbar-actions.component';\nimport { ApprovalFlowUserDetailsComponent } from './approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowUserListComponent } from './approval-flow-user-list/approval-flow-user-list.component';\nimport { ApprovalFlowComponent } from './approval-flow.component';\n\n/**\n * @deprecated\n * Use direct imports of components and directives.\n */\n@NgModule({\n imports: [\n ApprovalFlowComponent,\n ApprovalFlowNodeComponent,\n ApprovalFlowApproverDetailsComponent,\n ApprovalFlowAddNodeComponent,\n ApprovalFlowUserListComponent,\n ApprovalFlowUserDetailsComponent,\n ApprovalFlowDropZoneDirective,\n ApprovalFlowTeamListComponent,\n ApprovalFlowSelectTypeComponent,\n ApprovalFlowMessagesComponent,\n ApprovalFlowToolbarActionsComponent\n ],\n exports: [ApprovalFlowComponent]\n})\nexport class PlatformApprovalFlowModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1","i2.ApprovalFlowAddNodeViewService","defaultId","i2"],"mappings":"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"}
|