@fundamental-ngx/platform 0.43.11 → 0.43.13
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/esm2020/approval-flow/approval-flow-add-node/approval-flow-add-node.component.mjs +1 -1
- package/esm2020/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.mjs +1 -1
- package/esm2020/form/multi-combobox/multi-combobox/multi-combobox.component.mjs +3 -3
- package/esm2020/form/multi-combobox/multi-combobox.module.mjs +8 -5
- package/esm2020/form/multi-input/multi-input.component.mjs +3 -3
- package/esm2020/form/multi-input/multi-input.module.mjs +8 -5
- package/esm2020/search-field/search-field.component.mjs +6 -2
- package/esm2020/smart-filter-bar/smart-filter-bar.component.mjs +1 -1
- package/esm2020/table/components/table-p13-dialog/columns/columns.component.mjs +1 -1
- package/esm2020/table/components/table-toolbar/table-toolbar.component.mjs +3 -3
- package/esm2020/value-help-dialog/value-help-dialog/value-help-dialog.component.mjs +1 -1
- package/esm2020/variant-management/variant-management.component.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-approval-flow.mjs +2 -2
- package/fesm2015/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-form.mjs +17 -11
- package/fesm2015/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-search-field.mjs +5 -1
- package/fesm2015/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-table.mjs +3 -3
- package/fesm2015/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2015/fundamental-ngx-platform-variant-management.mjs +1 -1
- package/fesm2015/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-approval-flow.mjs +2 -2
- package/fesm2020/fundamental-ngx-platform-approval-flow.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-form.mjs +17 -11
- package/fesm2020/fundamental-ngx-platform-form.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-search-field.mjs +5 -1
- package/fesm2020/fundamental-ngx-platform-search-field.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-smart-filter-bar.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-table.mjs +3 -3
- package/fesm2020/fundamental-ngx-platform-table.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-value-help-dialog.mjs.map +1 -1
- package/fesm2020/fundamental-ngx-platform-variant-management.mjs +1 -1
- package/fesm2020/fundamental-ngx-platform-variant-management.mjs.map +1 -1
- package/form/multi-combobox/multi-combobox.module.d.ts +1 -1
- package/form/multi-input/multi-input.module.d.ts +1 -1
- package/fundamental-ngx-platform-v0.43.13.tgz +0 -0
- package/package.json +4 -4
- package/schematics/ng-add/index.js +1 -1
- package/search-field/search-field.component.d.ts +3 -1
- package/fundamental-ngx-platform-v0.43.11.tgz +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fundamental-ngx-platform-approval-flow.mjs","sources":["../../../../libs/platform/src/lib/approval-flow/helpers/index.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-user-list/approval-flow-user-list.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-user-list/approval-flow-user-list.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-user-details/approval-flow-user-details.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-user-details/approval-flow-user-details.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-node/approval-flow-node.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-node/approval-flow-node.component.html","../../../../libs/platform/src/lib/approval-flow/services/approval-flow-add-node-view.service.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-team-list/approval-flow-team-list.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-team-list/approval-flow-team-list.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-add-node/approval-flow-add-node.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-add-node/approval-flow-add-node.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-select-type/approval-flow-select-type.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-select-type/approval-flow-select-type.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-graph.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-messages/approval-flow-messages.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-messages/approval-flow-messages.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow.module.ts","../../../../libs/platform/src/lib/approval-flow/fundamental-ngx-platform-approval-flow.ts"],"sourcesContent":["import { ApprovalGraphNode, ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\nimport { ApprovalFlowGraph } from '../approval-flow-graph';\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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {\n BaseListItem,\n ListComponent,\n SelectionChangeEvent,\n StandardListItemComponent\n} from '@fundamental-ngx/platform/list';\nimport { ApprovalUser } from '../interfaces';\nimport { trackByFn } from '../helpers';\n\nconst ITEMS_RENDERED_AT_ONCE = 100;\nconst INTERVAL_IN_MS = 10;\n\n/**\n * @deprecated\n * ApprovalFlowUserList component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-user-list',\n templateUrl: './approval-flow-user-list.component.html',\n styleUrls: ['./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})\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 private _intervalID?: number;\n\n /** @hidden */\n constructor(private _cdr: ChangeDetectorRef) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.selectedUsers.length) {\n const selectedApproversNames = this.selectedUsers.map((approver) => approver.name);\n\n this._selectedItems = this.listItems.filter(\n (item) => !!item.avatar?.ariaLabel && selectedApproversNames.includes(item.avatar.ariaLabel)\n );\n\n this._selectedItems.forEach((item) => {\n item._selected = true;\n this.list._selectItem(item);\n });\n\n this._cdr.detectChanges();\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 this._selectedItems = event.selectedItems;\n\n this.onSelectionChange.emit(this._getUsersFromSelectedItems(event.selectedItems));\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.itemEl.nativeElement.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","<div class=\"fdp-approval-flow-user-list__selected-count\" *ngIf=\"_selectedItems.length\">\n <ng-container *ngIf=\"_selectedItems.length === 1; else multipleItems\">\n {{ 'platformApprovalFlow.userListSelectedItemsCountSingular' | fdTranslate }}\n </ng-container>\n\n <ng-template #multipleItems>\n {{ 'platformApprovalFlow.userListSelectedItemsCountPlural' | fdTranslate: { count: _selectedItems.length } }}\n </ng-template>\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 <fdp-standard-list-item\n *ngFor=\"let _user of _displayUsers; trackBy: _trackByFn\"\n [attr.id]=\"_idPrefix + _user.id\"\n [avatarSrc]=\"_user.imgUrl\"\n [avatarTitle]=\"_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</fdp-list>\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ApprovalUser } from '../interfaces';\n\n/**\n * @deprecated\n * ApprovalFlowUserDetails component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-user-details',\n templateUrl: './approval-flow-user-details.component.html',\n styleUrls: ['./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})\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\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\n<ng-container\n *ngIf=\"detailsTemplate\"\n [ngTemplateOutlet]=\"detailsTemplate\"\n [ngTemplateOutletContext]=\"{ data: details | async }\"\n>\n</ng-container>\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 { ApprovalNode, ApprovalUser } from '../interfaces';\nimport { filterByName } from '../helpers';\nimport { ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\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 depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-approver-details',\n templateUrl: './approval-flow-approver-details.component.html',\n styleUrls: ['../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})\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 <fd-icon\n *ngIf=\"_userToShowDetails && _data.node?.approvers && _data.node!.approvers!.length > 1\"\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 <ng-container *ngIf=\"_isListMode && !_userToShowDetails; else defaultHeader\"\n >{{ _data.node?.description }} ({{ _data.node?.approvers?.length ?? 0 }})</ng-container\n >\n </p>\n\n <fdp-search-field\n *ngIf=\"!_userToShowDetails && _isListMode\"\n [placeholder]=\"'platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate\"\n fdCompact\n [suggestions]=\"[]\"\n (inputChange)=\"_onSearchStringChange($event.text)\"\n ></fdp-search-field>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <fdp-approval-flow-user-details\n *ngIf=\"_userToShowDetails\"\n [user]=\"_userToShowDetails\"\n [detailsTemplate]=\"_data.userDetailsTemplate\"\n [details]=\"_userToShowDetailsData$\"\n ></fdp-approval-flow-user-details>\n <fdp-approval-flow-user-list\n *ngIf=\"_isListMode\"\n [users]=\"_listItems\"\n (onUserClick)=\"_seeUserDetails($event)\"\n (onSelectionChange)=\"_selectedUsers = $event\"\n ></fdp-approval-flow-user-list>\n </fd-dialog-body>\n\n <fd-dialog-footer fdCompact>\n <fd-dialog-footer-button *ngIf=\"_isListMode || (_userToShowDetails && _data.node?.approvers?.length === 1)\">\n <button\n fd-button\n fd-dialog-decisive-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.userDetailsSendReminderBtnLabel' | fdTranslate\"\n [disabled]=\"!_data.allowSendReminder || (_isListMode && !_selectedUsers.length)\"\n (click)=\"_sendReminder()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fd-dialog-decisive-button\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.userDetailsCancelBtnLabel' | fdTranslate\"\n (click)=\"dialogRef.close('Cancel')\"\n ></button>\n </fd-dialog-footer-button>\n </fd-dialog-footer>\n</fd-dialog>\n\n<ng-template #defaultHeader>\n {{ 'platformApprovalFlow.userDetailsHeader' | fdTranslate }}\n</ng-template>\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})\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 Optional,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport { MenuComponent } from '@fundamental-ngx/core/menu';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\nimport { GridListItemComponent } from '@fundamental-ngx/core/grid-list';\n\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-drop-zone.directive';\nimport { ApprovalGraphNode, ApprovalGraphNodeMetadata, ApprovalStatus } from '../interfaces';\nimport { isNodeApproved, isNodeStarted } from '../helpers';\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { TranslationResolver } from '@fundamental-ngx/i18n';\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 depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-node',\n templateUrl: './approval-flow-node.component.html',\n styleUrls: ['./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})\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 /** @hidden */\n _objectStatus: ObjectStatus;\n\n /** @hidden */\n _showDueDateWarning = false;\n\n /** @hidden */\n _dueIn = 0;\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 readonly approvalFlowNodeId = 'fdp-approval-flow-node-' + defaultId++;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _translationResolver = new TranslationResolver();\n\n /** @hidden */\n constructor(\n private readonly _elRef: ElementRef,\n private readonly _cdr: ChangeDetectorRef,\n @Optional() private readonly _rtlService: RtlService\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 this._subscriptions.add(this._rtlService?.rtl.subscribe(() => this._cdr.markForCheck()));\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","<div\n *ngIf=\"meta?.renderVerticalLineBefore\"\n class=\"fdp-approval-flow-node__vertical-line-before\"\n [class.fdp-approval-flow-node__vertical-line-before-solid]=\"_isVerticalLineBeforeSolid\"\n></div>\n\n<div\n *ngIf=\"meta?.renderVerticalLineAfter\"\n class=\"fdp-approval-flow-node__vertical-line-after\"\n [class.fdp-approval-flow-node__vertical-line-after-solid]=\"_isVerticalLineAfterSolid\"\n></div>\n\n<ng-container *ngIf=\"!_blank && !_space\">\n <div *ngIf=\"renderArrow\" class=\"fdp-approval-flow-node__arrow\"></div>\n\n <div *ngIf=\"_isRoot && meta?.nodeIndex === 0\" class=\"fdp-approval-flow-node__carousel-start-marker\"></div>\n\n <div *ngIf=\"_isFinal && meta?.nodeIndex === 0\" class=\"fdp-approval-flow-node__carousel-end-marker\"></div>\n\n <ng-content></ng-content>\n</ng-container>\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 <button\n *ngIf=\"!node?.disableActions\"\n class=\"fdp-approval-flow-node__menu-button\"\n fd-button\n fdType=\"transparent\"\n tabindex=\"0\"\n glyph=\"overflow\"\n title=\"Menu\"\n fdCompact\n [fdMenuTrigger]=\"menu\"\n [disabled]=\"_isEditActionsAvailable\"\n (click)=\"$event.stopPropagation()\"\n ></button>\n</ng-template>\n\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 <ng-container *ngIf=\"node.approvers.length === 1; else multipleApprovers\">\n {{ node.approvers[0].name }}\n </ng-container>\n\n <ng-template #multipleApprovers>\n {{ 'platformApprovalFlow.nodeMembersCount' | fdTranslate : { count: node.approvers.length } }}\n </ng-template>\n </div>\n\n <div class=\"fdp-approval-flow-node__description\">\n <ng-container *ngIf=\"!node.variousTeams; else variousTeams\">\n {{\n node.approvers.length > 1\n ? node.description\n : node.approvers.length\n ? node.approvers[0].description\n : ''\n }}\n </ng-container>\n\n <ng-template #variousTeams> {{ 'platformApprovalFlow.nodeVariousTeams' | fdTranslate }} </ng-template>\n </div>\n\n <fdp-object-status [status]=\"_objectStatus\" [inverted]=\"true\">\n <ng-container *ngIf=\"approvalStatusTemplate; then userStatusTemplate; else defaultStatusTemplate\">\n </ng-container>\n\n <ng-container *ngIf=\"checkDueDate && _showDueDateWarning\">\n <ng-container *ngIf=\"_dueIn === dueDateThreshold\">\n {{ 'platformApprovalFlow.nodeStatusDueToday' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngIf=\"_dueIn < dueDateThreshold\">\n {{\n 'platformApprovalFlow.nodeStatusDueInXDays' | fdTranslate : { count: dueDateThreshold - _dueIn }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"_dueIn > dueDateThreshold\">\n {{\n 'platformApprovalFlow.nodeStatusXDaysOverdue'\n | fdTranslate : { count: _dueIn - dueDateThreshold }\n }}\n </ng-container>\n </ng-container>\n </fdp-object-status>\n </div>\n</ng-template>\n\n<ng-container *ngIf=\"_showAddButton && meta?.canAddNodeBeforeAll && !node?.actionsConfig?.disableAddBefore\">\n <ng-container *ngTemplateOutlet=\"addNodeButton; context: { placement: 'before-all' }\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"_showAddButton && meta?.canAddNodeBefore && !node?.actionsConfig?.disableAddBefore\">\n <ng-container *ngTemplateOutlet=\"addNodeButton; context: { placement: 'before' }\"></ng-container>\n</ng-container>\n\n<ng-container\n *ngIf=\"\n _showAddButton &&\n meta?.canAddNodeAfter &&\n meta?.renderAddNodeAfterButton &&\n !node?.actionsConfig?.disableAddAfter\n \"\n>\n <ng-container *ngTemplateOutlet=\"addNodeButton; context: { placement: 'after' }\"></ng-container>\n</ng-container>\n\n<ng-container\n *ngIf=\"\n _showAfterAllAddButton &&\n meta?.canAddNodeAfterAll &&\n meta?.renderAddNodeAfterButton &&\n !node?.actionsConfig?.disableAddAfter\n \"\n>\n <ng-container *ngTemplateOutlet=\"addNodeButton; context: { placement: 'after-all' }\"></ng-container>\n</ng-container>\n\n<ng-template #addNodeButton let-placement=\"placement\">\n <button\n *ngIf=\"node.status !== 'approved'\"\n fd-button\n glyph=\"add\"\n title=\"Add node\"\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\n<ng-template #defaultStatusTemplate>\n <ng-container *ngIf=\"!checkDueDate || !_showDueDateWarning\">\n <ng-container [ngSwitch]=\"node.status\">\n <ng-container *ngSwitchCase=\"'approved'\">{{\n 'platformApprovalFlow.statusApproved' | fdTranslate\n }}</ng-container>\n <ng-container *ngSwitchCase=\"'rejected'\">{{\n 'platformApprovalFlow.statusRejected' | fdTranslate\n }}</ng-container>\n <ng-container *ngSwitchCase=\"'in progress'\">{{\n 'platformApprovalFlow.statusInProgress' | fdTranslate\n }}</ng-container>\n <ng-container *ngSwitchCase=\"'not started'\">{{\n 'platformApprovalFlow.statusNotStarted' | fdTranslate\n }}</ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #userStatusTemplate>\n <ng-container *ngIf=\"!checkDueDate || !_showDueDateWarning\">\n <ng-container\n *ngIf=\"approvalStatusTemplate\"\n [ngTemplateOutlet]=\"approvalStatusTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\"\n >\n </ng-container>\n </ng-container>\n</ng-template>\n\n<fd-menu #menu fdContentDensity placement=\"bottom-end\" (isOpenChange)=\"_onMenuOpen()\">\n <li\n *ngIf=\"meta?.canAddNodeBefore && !this.node?.actionsConfig?.disableAddBefore\"\n fd-menu-item\n (click)=\"menu.close(); onAdd.emit('before')\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ 'platformApprovalFlow.nodeActionAddApproversBefore' | fdTranslate }}</span>\n </div>\n </li>\n\n <li\n *ngIf=\"meta?.canAddNodeAfter && !this.node?.actionsConfig?.disableAddAfter\"\n fd-menu-item\n (click)=\"menu.close(); onAdd.emit('after')\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ 'platformApprovalFlow.nodeActionAddApproversAfter' | fdTranslate }}</span>\n </div>\n </li>\n\n <li\n *ngIf=\"meta?.canAddParallel && !this.node?.actionsConfig?.disableAddParallel\"\n fd-menu-item\n (click)=\"menu.close(); onAdd.emit('parallel')\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ 'platformApprovalFlow.nodeActionAddApproversParallel' | fdTranslate }}</span>\n </div>\n </li>\n\n <li\n *ngIf=\"_isNotStarted && !this.node?.actionsConfig?.disableEdit\"\n fd-menu-item\n (click)=\"menu.close(); onEdit.emit()\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title> {{ 'platformApprovalFlow.nodeActionEditApprover' | fdTranslate }}</span>\n </div>\n </li>\n\n <li *ngIf=\"!this.node?.actionsConfig?.disableRemove\" 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</fd-menu>\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 { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ApprovalTeam } from '../interfaces';\nimport { trackByFn } from '../helpers';\n\n/**\n * @deprecated\n * ApprovalFlowTeamList component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-team-list',\n templateUrl: './approval-flow-team-list.component.html',\n styleUrls: ['./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})\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 <div *ngFor=\"let team of teams; let i = index; trackBy: _trackByFn\" 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\n <fdp-standard-list-item\n [attr.id]=\"'approval-team-' + team.id\"\n [avatarSrc]=\"''\"\n [avatarTitle]=\"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\n <fd-icon [glyph]=\"'navigation-' + (isRtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </div>\n </fd-form-group>\n</fdp-list>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { combineLatest, Observable, Subscription } from 'rxjs';\n\nimport { FdDate } from '@fundamental-ngx/core/datetime';\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { ApprovalFlowAddNodeViewService, VIEW_MODES } from '../services/approval-flow-add-node-view.service';\nimport { displayTeamFn, displayUserFn, filterByName, trackByFn } from '../helpers';\nimport { ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\nimport { ApprovalFlowTeamDataSource, ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\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 depricated 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})\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 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._onSearchStringChange('');\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 if (this._selectedApprovers.length && !this._data.node?.approvers.length) {\n this._selectedApprovers = [];\n }\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 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 <ng-container *ngIf=\"!_selectMode && !_data.isEdit\">\n {{ 'platformApprovalFlow.addNodeDialogHeaderAddApprovers' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngIf=\"!_selectMode && _data.isEdit\">\n {{ 'platformApprovalFlow.addNodeDialogHeaderEditApprover' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isSelectUserMode || viewService.isSelectTeamMode\">\n {{ 'platformApprovalFlow.addNodeDialogHeaderAddApproverTeam' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isTeamMembersMode\">\n <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitTeamMembersMode()\"></fd-icon>\n {{ viewService.team?.name ?? '' }} ({{ viewService.team?.members?.length ?? 0 }})\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isUserDetailsMode\">\n <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitUserDetailsMode()\"></fd-icon>\n {{ 'platformApprovalFlow.addNodeDialogHeaderDetail' | fdTranslate }}\n </ng-container>\n </p>\n\n <fdp-search-field\n *ngIf=\"_selectMode && !_userToShowDetails\"\n [placeholder]=\"'platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate\"\n [suggestions]=\"[]\"\n (inputChange)=\"_onSearchStringChange($event.text)\"\n ></fdp-search-field>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body [class.fd-dialog__body--auto-height]=\"viewService.isUserDetailsMode\">\n <ng-container *ngIf=\"!_selectMode\">\n <div fd-form-item *ngIf=\"_data.showNodeTypeSelect\">\n <label fd-form-label>\n {{ 'platformApprovalFlow.addNodeDialogNodeType' | fdTranslate }}\n </label>\n\n <fd-select [(value)]=\"_nodeType\">\n <ng-container *ngFor=\"let option of _nodeTypesArray\">\n <ng-container [ngSwitch]=\"option\">\n <li fd-option *ngSwitchCase=\"_nodeTypes.SERIAL\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogNodeTypeSerial' | fdTranslate }}\n </li>\n\n <li fd-option *ngSwitchCase=\"_nodeTypes.PARALLEL\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogNodeTypeParallel' | fdTranslate }}\n </li>\n </ng-container>\n </ng-container>\n </fd-select>\n </div>\n\n <div fd-form-item>\n <label fd-form-label>\n {{ 'platformApprovalFlow.addNodeDialogApproverType' | fdTranslate }}\n </label>\n\n <fd-select [(value)]=\"_approverType\">\n <ng-container *ngFor=\"let option of _approverTypesArray\">\n <ng-container [ngSwitch]=\"option\">\n <li fd-option *ngSwitchCase=\"_approverTypes.SINGLE_USER\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogApproverTypeUser' | fdTranslate }}\n </li>\n\n <li fd-option *ngSwitchCase=\"_approverTypes.ANYONE\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogApproverTypeTeamAnyone' | fdTranslate }}\n </li>\n\n <li fd-option *ngSwitchCase=\"_approverTypes.EVERYONE\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogApproverTypeTeamEveryone' | fdTranslate }}\n </li>\n </ng-container>\n </ng-container>\n </fd-select>\n </div>\n\n <div fd-form-item>\n <label fd-form-label>{{ 'platformApprovalFlow.addNodeDialogUserOrTeam' | fdTranslate }}</label>\n\n <fd-multi-input\n *ngIf=\"_isSingleUserMode\"\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 <fd-multi-input\n *ngIf=\"!_isSingleUserMode\"\n [showAllButton]=\"false\"\n [dropdownValues]=\"_selectedTeamArray\"\n [(ngModel)]=\"_selectedTeamArray\"\n [displayFn]=\"_displayTeamFn\"\n (openChange)=\"_goToSelectMode()\"\n ></fd-multi-input>\n </div>\n\n <div *ngIf=\"_nodeType === _nodeTypes.PARALLEL\" fd-form-item>\n <fd-checkbox [(ngModel)]=\"_addToNextSerial\">\n {{ 'platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate }}\n </fd-checkbox>\n </div>\n\n <div *ngIf=\"_checkDueDate\" fd-form-item>\n <label fd-form-label>{{ 'platformApprovalFlow.addNodeDialogDueDate' | fdTranslate }}</label>\n\n <fd-date-picker type=\"single\" [state]=\"!this._dueDate ? 'error' : null\" [(ngModel)]=\"_dueDate\">\n </fd-date-picker>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"_selectMode\">\n <ng-container *ngIf=\"viewService.isSelectTeamMode\">\n <fdp-approval-flow-team-list\n *ngIf=\"!_data.teamDataSource.isDataLoading; else loadingTpl\"\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 </ng-container>\n\n <ng-container *ngIf=\"viewService.isSelectUserMode || viewService.isTeamMembersMode\">\n <fdp-approval-flow-user-list\n *ngIf=\"viewService.isSelectUserMode || !_data.userDataSource.isDataLoading; else loadingTpl\"\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 </ng-container>\n\n <fdp-approval-flow-user-details\n *ngIf=\"viewService.isUserDetailsMode && _userToShowDetails\"\n [user]=\"_userToShowDetails\"\n [detailsTemplate]=\"_data.userDetailsTemplate\"\n [details]=\"_userToShowDetailsData$\"\n ></fdp-approval-flow-user-details>\n </ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <ng-container *ngIf=\"!_selectMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fd-dialog-decisive-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.addNodeAddActionBtnLabel' | fdTranslate\"\n [disabled]=\"_isMainSubmitButtonDisabled\"\n (click)=\"_submit()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fd-dialog-decisive-button\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeCancelActionBtnLabel' | fdTranslate\"\n (click)=\"dialogRef.close()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n\n <ng-container *ngIf=\"_selectMode\">\n <ng-container *ngIf=\"viewService.isSelectUserMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate\"\n [disabled]=\"!_selectedApprovers.length\"\n (click)=\"_confirmSelectedApprovers()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate\"\n (click)=\"_exitSelectMode()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isSelectTeamMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate\"\n [disabled]=\"!_selectedTeam && !viewService.team\"\n (click)=\"_confirmSelectedTeam()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate\"\n (click)=\"_exitSelectMode()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isTeamMembersMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate\"\n (click)=\"_exitTeamMembersMode()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isUserDetailsMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate\"\n (click)=\"_exitUserDetailsMode()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n </ng-container>\n </fd-dialog-footer>\n</fd-dialog>\n\n<ng-template #loadingTpl>\n <fd-busy-indicator [loading]=\"true\" [block]=\"true\"> </fd-busy-indicator>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\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 depricated 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})\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\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\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\n <div *ngIf=\"_nodeType === _nodeTypes.PARALLEL\" fd-form-item>\n <fd-checkbox [(ngModel)]=\"_toNextSerial\">\n {{ 'platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate }}\n </fd-checkbox>\n </div>\n </fd-form-group>\n </fd-dialog-body>\n\n <fd-dialog-footer fdCompact>\n <ng-container>\n <fd-dialog-footer-button>\n <button\n fd-button\n fd-dialog-decisive-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.selectTypeDialogConfirmButton' | fdTranslate\"\n (click)=\"_submit()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fd-dialog-decisive-button\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.selectTypeDialogCancelButton' | fdTranslate\"\n (click)=\"_dialogRef.close()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n </fd-dialog-footer>\n</fd-dialog>\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 { 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 depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-messages',\n templateUrl: './approval-flow-messages.component.html',\n styleUrls: ['./approval-flow-messages.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-messages'\n }\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","<fd-message-strip\n *ngFor=\"let message of messages; let i = index\"\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 [ngSwitch]=\"message.type\">\n <ng-container *ngSwitchCase=\"'approverAddSuccess'\">\n {{ 'platformApprovalFlow.messagesApproverAddedSuccess' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'teamAddSuccess'\">\n {{ 'platformApprovalFlow.messagesTeamAddedSuccess' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'nodeEdit'\">\n {{ 'platformApprovalFlow.messagesNodeEdited' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'nodeRemove'\">\n {{ 'platformApprovalFlow.messagesNodeRemovedSingular' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'nodesRemove'\">\n {{ 'platformApprovalFlow.messagesNodeRemovedPlural' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'teamRemove'\">\n {{ 'platformApprovalFlow.messagesTeamRemoved' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'error'\">\n {{ 'platformApprovalFlow.messagesErrorBuildGraph' | fdTranslate }}\n </ng-container>\n </span>\n\n <a\n href=\"#\"\n *ngIf=\"undoLastActionAvailable\"\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 </bdi>\n</fd-message-strip>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowGraph, ApprovalGraphMetadata } from '../approval-flow-graph';\nimport { ApprovalGraphNode } from '../interfaces/approval-node';\nimport { isNodeApproved } from '../helpers';\n\n/**\n * @deprecated\n * ApprovalFlowToolbarActions component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-toolbar-actions',\n templateUrl: './approval-flow-toolbar-actions.component.html',\n styleUrls: ['./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})\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 <button\n *ngIf=\"!graph?.columns?.length && !graph?.errors\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddStepButton' | fdTranslate\"\n (click)=\"_addNode('empty')\"\n ></button>\n\n <button\n *ngIf=\"!!graph?.columns?.length && !isEditMode\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarEditButton' | fdTranslate\"\n (click)=\"enterEditMode.emit()\"\n ></button>\n\n <ng-container *ngIf=\"isEditMode\">\n <button\n *ngIf=\"_canAddBefore\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddApproversBefore' | fdTranslate\"\n (click)=\"_addNode('before')\"\n ></button>\n\n <button\n *ngIf=\"_canAddAfter\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddApproversAfter' | fdTranslate\"\n (click)=\"_addNode('after')\"\n ></button>\n\n <button\n *ngIf=\"_canAddParallel\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddApproversParallel' | fdTranslate\"\n (click)=\"_addNode('parallel')\"\n ></button>\n\n <button\n *ngIf=\"_canRemoveSelectedNodes\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarRemove' | fdTranslate\"\n (click)=\"deleteSelectedNodes.emit()\"\n ></button>\n\n <button\n *ngIf=\"_canEditNode\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarEditApprover' | fdTranslate\"\n (click)=\"_editSelectedNode()\"\n ></button>\n </ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\nimport { combineLatest, fromEvent, merge, Subject, Subscription } from 'rxjs';\nimport { throttleTime, switchMap, mapTo, map, startWith, distinctUntilChanged } from 'rxjs/operators';\n\nimport { KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { GridListComponent, GridListSelectionEvent } from '@fundamental-ngx/core/grid-list';\nimport { DialogService } from '@fundamental-ngx/core/dialog';\n\nimport {\n ApprovalFlowApproverDetailsComponent,\n ApprovalFlowApproverDetailsDialogRefData\n} from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport {\n AddNodeDialogFormData,\n APPROVAL_FLOW_NODE_TYPES,\n ApprovalFlowAddNodeComponent,\n AddNodeDialogRefData,\n ApprovalFlowNodeTarget\n} from './approval-flow-add-node/approval-flow-add-node.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 {\n ApprovalFlowSelectTypeComponent,\n SelectTypeDialogFormData\n} from './approval-flow-select-type/approval-flow-select-type.component';\nimport {\n ApprovalFlowGraph,\n ApprovalGraphMetadata,\n generateApprovalFlowGraph,\n generateApprovalFlowGraphMetadata\n} from './approval-flow-graph';\nimport {\n ApprovalFlowMessage,\n ApprovalFlowMessageType\n} from './approval-flow-messages/approval-flow-messages.component';\nimport {\n DataProvider,\n DATA_PROVIDERS,\n ApprovalFlowTeamDataSource,\n ApprovalFlowUserDataSource\n} from '@fundamental-ngx/platform/shared';\nimport { cloneDeep, uniqBy } from 'lodash-es';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\n\nlet defaultId = 0;\n/**\n * @deprecated\n * Approval Flow component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow',\n templateUrl: './approval-flow.component.html',\n styleUrls: ['./approval-flow.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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 /** 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 private _selectedWatchers: ApprovalUser[] = [];\n\n /** @hidden */\n _selectedWatcherIds: ApprovalUser['id'][] = [];\n\n /** @hidden */\n _messages: ApprovalFlowMessage[] = [];\n\n /** @hidden */\n _displayUserFn = displayUserFn;\n\n /** @hidden */\n _userValueFn = userValueFn;\n\n /** @hidden */\n _trackByFn = trackByFn;\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 /** @hidden */\n readonly approvalFlowUniqueId = `fdp-approval-flow-${++defaultId}`;\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 constructor(\n private readonly _dialogService: DialogService,\n private readonly _cdr: ChangeDetectorRef,\n private readonly _injector: Injector,\n @Optional() @Inject(DATA_PROVIDERS) private providers: Map<string, DataProvider<any>>,\n @Optional() private readonly _rtlService: RtlService\n ) {}\n\n /** Returns snapshot of the current and initial states of approval process */\n get approvalProcess(): ApprovalProcess {\n return cloneDeep(this._approvalProcess);\n }\n\n /** @hidden */\n get _rtl(): boolean {\n return this._rtlService?.rtl.getValue();\n }\n\n /** @hidden */\n get _selectedNodes(): ApprovalGraphNode[] {\n return getGraphNodes(this._graph).filter((node) => node.selected);\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 = cloneDeep(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 = 0;\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 */\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 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 = cloneDeep(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 = cloneDeep(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 = cloneDeep(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 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 _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._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 */\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 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 = cloneDeep(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\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\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\n <fdp-approval-flow-toolbar-actions\n *ngIf=\"isEditAvailable\"\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 </fd-grid-list-title-bar>\n\n <div\n class=\"fdp-approval-flow__watchers\"\n *ngIf=\"_approvalProcess?.watchers?.length || _isEditMode\"\n [attr.aria-label]=\"watchersLabel\"\n >\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n\n <ng-container *ngIf=\"!_isEditMode\">\n <fd-avatar\n *ngFor=\"let watcher of _approvalProcess?.watchers; trackBy: _trackByFn\"\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 </ng-container>\n\n <div class=\"fdp-approval-flow__watchers-input-container\" *ngIf=\"_isEditMode\">\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 </div>\n\n <ng-container *ngIf=\"!_graph.errors\">\n <ng-container *ngIf=\"_graph.columns.length; else emptyApprovalFlowGraph\">\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 <div\n class=\"fdp-approval-flow-carousel-controls\"\n *ngIf=\"_scrollDiff > 0\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n <button\n *ngIf=\"_carouselStepsLeft > 0\"\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]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n\n <button\n *ngIf=\"_carouselStepsRight > 0\"\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]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\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 <div\n class=\"fdp-approval-flow__graph-column\"\n *ngFor=\"let column of _graph.columns; let columnIndex = index\"\n >\n <fdp-approval-flow-node\n *ngFor=\"let node of column.nodes; let nodeIndex = index; trackBy: _trackByFn\"\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 <ng-container *ngIf=\"_isEditMode\">\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-container>\n </ng-container>\n </fd-grid-list-item-toolbar>\n\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"node.approvers.length === 1 ? node.approvers[0].imgUrl : null\"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n\n <ng-template fd-grid-list-item-body>\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-container>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </fd-grid-list>\n\n <div fd-bar *ngIf=\"_isEditMode\">\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\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-template #emptyApprovalFlowGraph>\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\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 </ng-template>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\nimport { AvatarModule } from '@fundamental-ngx/core/avatar';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { CheckboxModule } from '@fundamental-ngx/core/checkbox';\nimport { DatePickerModule } from '@fundamental-ngx/core/date-picker';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { FormModule } from '@fundamental-ngx/core/form';\nimport { GridListModule } from '@fundamental-ngx/core/grid-list';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { IllustratedMessageModule } from '@fundamental-ngx/core/illustrated-message';\nimport { MenuModule } from '@fundamental-ngx/core/menu';\nimport { MessageStripModule } from '@fundamental-ngx/core/message-strip';\nimport { MultiInputModule } from '@fundamental-ngx/core/multi-input';\nimport { RadioModule } from '@fundamental-ngx/core/radio';\nimport { SelectModule } from '@fundamental-ngx/core/select';\nimport { BusyIndicatorModule } from '@fundamental-ngx/core/busy-indicator';\n\nimport { PlatformObjectStatusModule } from '@fundamental-ngx/platform/object-status';\nimport { PlatformSearchFieldModule } from '@fundamental-ngx/platform/search-field';\nimport { PlatformListModule, StandardListItemModule } from '@fundamental-ngx/platform/list';\n\nimport { ApprovalFlowComponent } from './approval-flow.component';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport { ApprovalFlowApproverDetailsComponent } from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport { ApprovalFlowAddNodeComponent } from './approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowUserListComponent } from './approval-flow-user-list/approval-flow-user-list.component';\nimport { ApprovalFlowUserDetailsComponent } from './approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-node/approval-flow-drop-zone.directive';\nimport { ApprovalFlowTeamListComponent } from './approval-flow-team-list/approval-flow-team-list.component';\nimport { ApprovalFlowAddNodeViewService } from './services/approval-flow-add-node-view.service';\nimport { ApprovalFlowSelectTypeComponent } from './approval-flow-select-type/approval-flow-select-type.component';\nimport { ApprovalFlowMessagesComponent } from './approval-flow-messages/approval-flow-messages.component';\nimport { ApprovalFlowToolbarActionsComponent } from './approval-flow-toolbar-actions/approval-flow-toolbar-actions.component';\nimport { I18nModule } from '@fundamental-ngx/i18n';\n\n@NgModule({\n declarations: [\n ApprovalFlowComponent,\n ApprovalFlowNodeComponent,\n ApprovalFlowApproverDetailsComponent,\n ApprovalFlowAddNodeComponent,\n ApprovalFlowUserListComponent,\n ApprovalFlowUserDetailsComponent,\n ApprovalFlowDropZoneDirective,\n ApprovalFlowTeamListComponent,\n ApprovalFlowSelectTypeComponent,\n ApprovalFlowMessagesComponent,\n ApprovalFlowToolbarActionsComponent\n ],\n providers: [ApprovalFlowAddNodeViewService],\n imports: [\n CommonModule,\n FormsModule,\n AvatarModule,\n BarModule,\n ButtonModule,\n IconModule,\n GridListModule,\n DialogModule,\n PlatformObjectStatusModule,\n PlatformListModule,\n StandardListItemModule,\n PlatformSearchFieldModule,\n MultiInputModule,\n MessageStripModule,\n CheckboxModule,\n I18nModule,\n MenuModule,\n SelectModule,\n DatePickerModule,\n BusyIndicatorModule,\n FormModule,\n DragDropModule,\n RadioModule,\n IllustratedMessageModule\n ],\n exports: [ApprovalFlowComponent]\n})\nexport class PlatformApprovalFlowModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i2","i1","i3","i8.ApprovalFlowUserListComponent","i9.ApprovalFlowUserDetailsComponent","defaultId","i5","i6","i7.ApprovalFlowDropZoneDirective","i8","i7","i2.ApprovalFlowAddNodeViewService","i9","i10","i15","i16.ApprovalFlowUserListComponent","i17.ApprovalFlowUserDetailsComponent","i18.ApprovalFlowTeamListComponent","i19","i11","i12","i13","i14.ApprovalFlowNodeComponent","i15.ApprovalFlowMessagesComponent","i16.ApprovalFlowToolbarActionsComponent","i17"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fundamental-ngx-platform-approval-flow.mjs","sources":["../../../../libs/platform/src/lib/approval-flow/helpers/index.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-user-list/approval-flow-user-list.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-user-list/approval-flow-user-list.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-user-details/approval-flow-user-details.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-user-details/approval-flow-user-details.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-approver-details/approval-flow-approver-details.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-node/approval-flow-drop-zone.directive.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-node/approval-flow-node.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-node/approval-flow-node.component.html","../../../../libs/platform/src/lib/approval-flow/services/approval-flow-add-node-view.service.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-team-list/approval-flow-team-list.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-team-list/approval-flow-team-list.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-add-node/approval-flow-add-node.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-add-node/approval-flow-add-node.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-select-type/approval-flow-select-type.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-select-type/approval-flow-select-type.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-graph.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-messages/approval-flow-messages.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-messages/approval-flow-messages.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow-toolbar-actions/approval-flow-toolbar-actions.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow.component.ts","../../../../libs/platform/src/lib/approval-flow/approval-flow.component.html","../../../../libs/platform/src/lib/approval-flow/approval-flow.module.ts","../../../../libs/platform/src/lib/approval-flow/fundamental-ngx-platform-approval-flow.ts"],"sourcesContent":["import { ApprovalGraphNode, ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\nimport { ApprovalFlowGraph } from '../approval-flow-graph';\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 {\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n EventEmitter,\n Input,\n OnChanges,\n OnDestroy,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\n\nimport {\n BaseListItem,\n ListComponent,\n SelectionChangeEvent,\n StandardListItemComponent\n} from '@fundamental-ngx/platform/list';\nimport { ApprovalUser } from '../interfaces';\nimport { trackByFn } from '../helpers';\n\nconst ITEMS_RENDERED_AT_ONCE = 100;\nconst INTERVAL_IN_MS = 10;\n\n/**\n * @deprecated\n * ApprovalFlowUserList component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-user-list',\n templateUrl: './approval-flow-user-list.component.html',\n styleUrls: ['./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})\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 private _intervalID?: number;\n\n /** @hidden */\n constructor(private _cdr: ChangeDetectorRef) {}\n\n /** @hidden */\n ngAfterViewInit(): void {\n if (this.selectedUsers.length) {\n const selectedApproversNames = this.selectedUsers.map((approver) => approver.name);\n\n this._selectedItems = this.listItems.filter(\n (item) => !!item.avatar?.ariaLabel && selectedApproversNames.includes(item.avatar.ariaLabel)\n );\n\n this._selectedItems.forEach((item) => {\n item._selected = true;\n this.list._selectItem(item);\n });\n\n this._cdr.detectChanges();\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 this._selectedItems = event.selectedItems;\n\n this.onSelectionChange.emit(this._getUsersFromSelectedItems(event.selectedItems));\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.itemEl.nativeElement.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","<div class=\"fdp-approval-flow-user-list__selected-count\" *ngIf=\"_selectedItems.length\">\n <ng-container *ngIf=\"_selectedItems.length === 1; else multipleItems\">\n {{ 'platformApprovalFlow.userListSelectedItemsCountSingular' | fdTranslate }}\n </ng-container>\n\n <ng-template #multipleItems>\n {{ 'platformApprovalFlow.userListSelectedItemsCountPlural' | fdTranslate: { count: _selectedItems.length } }}\n </ng-template>\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 <fdp-standard-list-item\n *ngFor=\"let _user of _displayUsers; trackBy: _trackByFn\"\n [attr.id]=\"_idPrefix + _user.id\"\n [avatarSrc]=\"_user.imgUrl\"\n [avatarTitle]=\"_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</fdp-list>\n","import { ChangeDetectionStrategy, Component, Input, TemplateRef, ViewEncapsulation } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ApprovalUser } from '../interfaces';\n\n/**\n * @deprecated\n * ApprovalFlowUserDetails component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-user-details',\n templateUrl: './approval-flow-user-details.component.html',\n styleUrls: ['./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})\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\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\n<ng-container\n *ngIf=\"detailsTemplate\"\n [ngTemplateOutlet]=\"detailsTemplate\"\n [ngTemplateOutletContext]=\"{ data: details | async }\"\n>\n</ng-container>\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 { ApprovalNode, ApprovalUser } from '../interfaces';\nimport { filterByName } from '../helpers';\nimport { ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\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 depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-approver-details',\n templateUrl: './approval-flow-approver-details.component.html',\n styleUrls: ['../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})\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 <fd-icon\n *ngIf=\"_userToShowDetails && _data.node?.approvers && _data.node!.approvers!.length > 1\"\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 <ng-container *ngIf=\"_isListMode && !_userToShowDetails; else defaultHeader\"\n >{{ _data.node?.description }} ({{ _data.node?.approvers?.length ?? 0 }})</ng-container\n >\n </p>\n\n <fdp-search-field\n *ngIf=\"!_userToShowDetails && _isListMode\"\n [placeholder]=\"'platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate\"\n fdCompact\n [suggestions]=\"[]\"\n (inputChange)=\"_onSearchStringChange($event.text)\"\n ></fdp-search-field>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body>\n <fdp-approval-flow-user-details\n *ngIf=\"_userToShowDetails\"\n [user]=\"_userToShowDetails\"\n [detailsTemplate]=\"_data.userDetailsTemplate\"\n [details]=\"_userToShowDetailsData$\"\n ></fdp-approval-flow-user-details>\n <fdp-approval-flow-user-list\n *ngIf=\"_isListMode\"\n [users]=\"_listItems\"\n (onUserClick)=\"_seeUserDetails($event)\"\n (onSelectionChange)=\"_selectedUsers = $event\"\n ></fdp-approval-flow-user-list>\n </fd-dialog-body>\n\n <fd-dialog-footer fdCompact>\n <fd-dialog-footer-button *ngIf=\"_isListMode || (_userToShowDetails && _data.node?.approvers?.length === 1)\">\n <button\n fd-button\n fd-dialog-decisive-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.userDetailsSendReminderBtnLabel' | fdTranslate\"\n [disabled]=\"!_data.allowSendReminder || (_isListMode && !_selectedUsers.length)\"\n (click)=\"_sendReminder()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fd-dialog-decisive-button\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.userDetailsCancelBtnLabel' | fdTranslate\"\n (click)=\"dialogRef.close('Cancel')\"\n ></button>\n </fd-dialog-footer-button>\n </fd-dialog-footer>\n</fd-dialog>\n\n<ng-template #defaultHeader>\n {{ 'platformApprovalFlow.userDetailsHeader' | fdTranslate }}\n</ng-template>\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})\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 Optional,\n Output,\n QueryList,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { Subscription } from 'rxjs';\n\nimport { RtlService } from '@fundamental-ngx/cdk/utils';\nimport { MenuComponent } from '@fundamental-ngx/core/menu';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\nimport { GridListItemComponent } from '@fundamental-ngx/core/grid-list';\n\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-drop-zone.directive';\nimport { ApprovalGraphNode, ApprovalGraphNodeMetadata, ApprovalStatus } from '../interfaces';\nimport { isNodeApproved, isNodeStarted } from '../helpers';\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { TranslationResolver } from '@fundamental-ngx/i18n';\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 depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-node',\n templateUrl: './approval-flow-node.component.html',\n styleUrls: ['./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})\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 /** @hidden */\n _objectStatus: ObjectStatus;\n\n /** @hidden */\n _showDueDateWarning = false;\n\n /** @hidden */\n _dueIn = 0;\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 readonly approvalFlowNodeId = 'fdp-approval-flow-node-' + defaultId++;\n\n /** @hidden */\n private _subscriptions = new Subscription();\n\n /** @hidden */\n private _translationResolver = new TranslationResolver();\n\n /** @hidden */\n constructor(\n private readonly _elRef: ElementRef,\n private readonly _cdr: ChangeDetectorRef,\n @Optional() private readonly _rtlService: RtlService\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 this._subscriptions.add(this._rtlService?.rtl.subscribe(() => this._cdr.markForCheck()));\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","<div\n *ngIf=\"meta?.renderVerticalLineBefore\"\n class=\"fdp-approval-flow-node__vertical-line-before\"\n [class.fdp-approval-flow-node__vertical-line-before-solid]=\"_isVerticalLineBeforeSolid\"\n></div>\n\n<div\n *ngIf=\"meta?.renderVerticalLineAfter\"\n class=\"fdp-approval-flow-node__vertical-line-after\"\n [class.fdp-approval-flow-node__vertical-line-after-solid]=\"_isVerticalLineAfterSolid\"\n></div>\n\n<ng-container *ngIf=\"!_blank && !_space\">\n <div *ngIf=\"renderArrow\" class=\"fdp-approval-flow-node__arrow\"></div>\n\n <div *ngIf=\"_isRoot && meta?.nodeIndex === 0\" class=\"fdp-approval-flow-node__carousel-start-marker\"></div>\n\n <div *ngIf=\"_isFinal && meta?.nodeIndex === 0\" class=\"fdp-approval-flow-node__carousel-end-marker\"></div>\n\n <ng-content></ng-content>\n</ng-container>\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 <button\n *ngIf=\"!node?.disableActions\"\n class=\"fdp-approval-flow-node__menu-button\"\n fd-button\n fdType=\"transparent\"\n tabindex=\"0\"\n glyph=\"overflow\"\n title=\"Menu\"\n fdCompact\n [fdMenuTrigger]=\"menu\"\n [disabled]=\"_isEditActionsAvailable\"\n (click)=\"$event.stopPropagation()\"\n ></button>\n</ng-template>\n\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 <ng-container *ngIf=\"node.approvers.length === 1; else multipleApprovers\">\n {{ node.approvers[0].name }}\n </ng-container>\n\n <ng-template #multipleApprovers>\n {{ 'platformApprovalFlow.nodeMembersCount' | fdTranslate : { count: node.approvers.length } }}\n </ng-template>\n </div>\n\n <div class=\"fdp-approval-flow-node__description\">\n <ng-container *ngIf=\"!node.variousTeams; else variousTeams\">\n {{\n node.approvers.length > 1\n ? node.description\n : node.approvers.length\n ? node.approvers[0].description\n : ''\n }}\n </ng-container>\n\n <ng-template #variousTeams> {{ 'platformApprovalFlow.nodeVariousTeams' | fdTranslate }} </ng-template>\n </div>\n\n <fdp-object-status [status]=\"_objectStatus\" [inverted]=\"true\">\n <ng-container *ngIf=\"approvalStatusTemplate; then userStatusTemplate; else defaultStatusTemplate\">\n </ng-container>\n\n <ng-container *ngIf=\"checkDueDate && _showDueDateWarning\">\n <ng-container *ngIf=\"_dueIn === dueDateThreshold\">\n {{ 'platformApprovalFlow.nodeStatusDueToday' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngIf=\"_dueIn < dueDateThreshold\">\n {{\n 'platformApprovalFlow.nodeStatusDueInXDays' | fdTranslate : { count: dueDateThreshold - _dueIn }\n }}\n </ng-container>\n\n <ng-container *ngIf=\"_dueIn > dueDateThreshold\">\n {{\n 'platformApprovalFlow.nodeStatusXDaysOverdue'\n | fdTranslate : { count: _dueIn - dueDateThreshold }\n }}\n </ng-container>\n </ng-container>\n </fdp-object-status>\n </div>\n</ng-template>\n\n<ng-container *ngIf=\"_showAddButton && meta?.canAddNodeBeforeAll && !node?.actionsConfig?.disableAddBefore\">\n <ng-container *ngTemplateOutlet=\"addNodeButton; context: { placement: 'before-all' }\"></ng-container>\n</ng-container>\n\n<ng-container *ngIf=\"_showAddButton && meta?.canAddNodeBefore && !node?.actionsConfig?.disableAddBefore\">\n <ng-container *ngTemplateOutlet=\"addNodeButton; context: { placement: 'before' }\"></ng-container>\n</ng-container>\n\n<ng-container\n *ngIf=\"\n _showAddButton &&\n meta?.canAddNodeAfter &&\n meta?.renderAddNodeAfterButton &&\n !node?.actionsConfig?.disableAddAfter\n \"\n>\n <ng-container *ngTemplateOutlet=\"addNodeButton; context: { placement: 'after' }\"></ng-container>\n</ng-container>\n\n<ng-container\n *ngIf=\"\n _showAfterAllAddButton &&\n meta?.canAddNodeAfterAll &&\n meta?.renderAddNodeAfterButton &&\n !node?.actionsConfig?.disableAddAfter\n \"\n>\n <ng-container *ngTemplateOutlet=\"addNodeButton; context: { placement: 'after-all' }\"></ng-container>\n</ng-container>\n\n<ng-template #addNodeButton let-placement=\"placement\">\n <button\n *ngIf=\"node.status !== 'approved'\"\n fd-button\n glyph=\"add\"\n title=\"Add node\"\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\n<ng-template #defaultStatusTemplate>\n <ng-container *ngIf=\"!checkDueDate || !_showDueDateWarning\">\n <ng-container [ngSwitch]=\"node.status\">\n <ng-container *ngSwitchCase=\"'approved'\">{{\n 'platformApprovalFlow.statusApproved' | fdTranslate\n }}</ng-container>\n <ng-container *ngSwitchCase=\"'rejected'\">{{\n 'platformApprovalFlow.statusRejected' | fdTranslate\n }}</ng-container>\n <ng-container *ngSwitchCase=\"'in progress'\">{{\n 'platformApprovalFlow.statusInProgress' | fdTranslate\n }}</ng-container>\n <ng-container *ngSwitchCase=\"'not started'\">{{\n 'platformApprovalFlow.statusNotStarted' | fdTranslate\n }}</ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n\n<ng-template #userStatusTemplate>\n <ng-container *ngIf=\"!checkDueDate || !_showDueDateWarning\">\n <ng-container\n *ngIf=\"approvalStatusTemplate\"\n [ngTemplateOutlet]=\"approvalStatusTemplate\"\n [ngTemplateOutletContext]=\"{ node: node }\"\n >\n </ng-container>\n </ng-container>\n</ng-template>\n\n<fd-menu #menu fdContentDensity placement=\"bottom-end\" (isOpenChange)=\"_onMenuOpen()\">\n <li\n *ngIf=\"meta?.canAddNodeBefore && !this.node?.actionsConfig?.disableAddBefore\"\n fd-menu-item\n (click)=\"menu.close(); onAdd.emit('before')\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ 'platformApprovalFlow.nodeActionAddApproversBefore' | fdTranslate }}</span>\n </div>\n </li>\n\n <li\n *ngIf=\"meta?.canAddNodeAfter && !this.node?.actionsConfig?.disableAddAfter\"\n fd-menu-item\n (click)=\"menu.close(); onAdd.emit('after')\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ 'platformApprovalFlow.nodeActionAddApproversAfter' | fdTranslate }}</span>\n </div>\n </li>\n\n <li\n *ngIf=\"meta?.canAddParallel && !this.node?.actionsConfig?.disableAddParallel\"\n fd-menu-item\n (click)=\"menu.close(); onAdd.emit('parallel')\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title>{{ 'platformApprovalFlow.nodeActionAddApproversParallel' | fdTranslate }}</span>\n </div>\n </li>\n\n <li\n *ngIf=\"_isNotStarted && !this.node?.actionsConfig?.disableEdit\"\n fd-menu-item\n (click)=\"menu.close(); onEdit.emit()\"\n >\n <div fd-menu-interactive>\n <span fd-menu-title> {{ 'platformApprovalFlow.nodeActionEditApprover' | fdTranslate }}</span>\n </div>\n </li>\n\n <li *ngIf=\"!this.node?.actionsConfig?.disableRemove\" 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</fd-menu>\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 { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\nimport { ApprovalTeam } from '../interfaces';\nimport { trackByFn } from '../helpers';\n\n/**\n * @deprecated\n * ApprovalFlowTeamList component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-team-list',\n templateUrl: './approval-flow-team-list.component.html',\n styleUrls: ['./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})\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 <div *ngFor=\"let team of teams; let i = index; trackBy: _trackByFn\" 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\n <fdp-standard-list-item\n [attr.id]=\"'approval-team-' + team.id\"\n [avatarSrc]=\"''\"\n [avatarTitle]=\"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\n <fd-icon [glyph]=\"'navigation-' + (isRtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </div>\n </fd-form-group>\n</fdp-list>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n OnDestroy,\n OnInit,\n TemplateRef,\n ViewEncapsulation\n} from '@angular/core';\nimport { combineLatest, Observable, Subscription } from 'rxjs';\n\nimport { FdDate } from '@fundamental-ngx/core/datetime';\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\nimport { ApprovalFlowAddNodeViewService, VIEW_MODES } from '../services/approval-flow-add-node-view.service';\nimport { displayTeamFn, displayUserFn, filterByName, trackByFn } from '../helpers';\nimport { ApprovalNode, ApprovalTeam, ApprovalUser } from '../interfaces';\nimport { ApprovalFlowTeamDataSource, ApprovalFlowUserDataSource } from '@fundamental-ngx/platform/shared';\nimport { Nullable } from '@fundamental-ngx/cdk/utils';\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 depricated 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})\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 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._onSearchStringChange('');\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 if (this._selectedApprovers.length && !this._data.node?.approvers.length) {\n this._selectedApprovers = [];\n }\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 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 <ng-container *ngIf=\"!_selectMode && !_data.isEdit\">\n {{ 'platformApprovalFlow.addNodeDialogHeaderAddApprovers' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngIf=\"!_selectMode && _data.isEdit\">\n {{ 'platformApprovalFlow.addNodeDialogHeaderEditApprover' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isSelectUserMode || viewService.isSelectTeamMode\">\n {{ 'platformApprovalFlow.addNodeDialogHeaderAddApproverTeam' | fdTranslate }}\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isTeamMembersMode\">\n <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitTeamMembersMode()\"></fd-icon>\n {{ viewService.team?.name ?? '' }} ({{ viewService.team?.members?.length ?? 0 }})\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isUserDetailsMode\">\n <fd-icon [glyph]=\"_headerArrowGlyph\" (click)=\"_exitUserDetailsMode()\"></fd-icon>\n {{ 'platformApprovalFlow.addNodeDialogHeaderDetail' | fdTranslate }}\n </ng-container>\n </p>\n\n <fdp-search-field\n *ngIf=\"_selectMode && !_userToShowDetails\"\n [placeholder]=\"'platformApprovalFlow.addNodeSearchPlaceholder' | fdTranslate\"\n [suggestions]=\"[]\"\n (inputChange)=\"_onSearchStringChange($event.text)\"\n ></fdp-search-field>\n </ng-template>\n </fd-dialog-header>\n\n <fd-dialog-body [class.fd-dialog__body--auto-height]=\"viewService.isUserDetailsMode\">\n <ng-container *ngIf=\"!_selectMode\">\n <div fd-form-item *ngIf=\"_data.showNodeTypeSelect\">\n <label fd-form-label>\n {{ 'platformApprovalFlow.addNodeDialogNodeType' | fdTranslate }}\n </label>\n\n <fd-select [(value)]=\"_nodeType\">\n <ng-container *ngFor=\"let option of _nodeTypesArray\">\n <ng-container [ngSwitch]=\"option\">\n <li fd-option *ngSwitchCase=\"_nodeTypes.SERIAL\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogNodeTypeSerial' | fdTranslate }}\n </li>\n\n <li fd-option *ngSwitchCase=\"_nodeTypes.PARALLEL\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogNodeTypeParallel' | fdTranslate }}\n </li>\n </ng-container>\n </ng-container>\n </fd-select>\n </div>\n\n <div fd-form-item>\n <label fd-form-label>\n {{ 'platformApprovalFlow.addNodeDialogApproverType' | fdTranslate }}\n </label>\n\n <fd-select [(value)]=\"_approverType\">\n <ng-container *ngFor=\"let option of _approverTypesArray\">\n <ng-container [ngSwitch]=\"option\">\n <li fd-option *ngSwitchCase=\"_approverTypes.SINGLE_USER\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogApproverTypeUser' | fdTranslate }}\n </li>\n\n <li fd-option *ngSwitchCase=\"_approverTypes.ANYONE\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogApproverTypeTeamAnyone' | fdTranslate }}\n </li>\n\n <li fd-option *ngSwitchCase=\"_approverTypes.EVERYONE\" [value]=\"option\">\n {{ 'platformApprovalFlow.addNodeDialogApproverTypeTeamEveryone' | fdTranslate }}\n </li>\n </ng-container>\n </ng-container>\n </fd-select>\n </div>\n\n <div fd-form-item>\n <label fd-form-label>{{ 'platformApprovalFlow.addNodeDialogUserOrTeam' | fdTranslate }}</label>\n\n <fd-multi-input\n *ngIf=\"_isSingleUserMode\"\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 <fd-multi-input\n *ngIf=\"!_isSingleUserMode\"\n [showAllButton]=\"false\"\n [dropdownValues]=\"_selectedTeamArray\"\n [(ngModel)]=\"_selectedTeamArray\"\n [displayFn]=\"_displayTeamFn\"\n (openChange)=\"_goToSelectMode()\"\n ></fd-multi-input>\n </div>\n\n <div *ngIf=\"_nodeType === _nodeTypes.PARALLEL\" fd-form-item>\n <fd-checkbox [(ngModel)]=\"_addToNextSerial\">\n {{ 'platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate }}\n </fd-checkbox>\n </div>\n\n <div *ngIf=\"_checkDueDate\" fd-form-item>\n <label fd-form-label>{{ 'platformApprovalFlow.addNodeDialogDueDate' | fdTranslate }}</label>\n\n <fd-date-picker type=\"single\" [state]=\"!this._dueDate ? 'error' : null\" [(ngModel)]=\"_dueDate\">\n </fd-date-picker>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"_selectMode\">\n <ng-container *ngIf=\"viewService.isSelectTeamMode\">\n <fdp-approval-flow-team-list\n *ngIf=\"!_data.teamDataSource.isDataLoading; else loadingTpl\"\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 </ng-container>\n\n <ng-container *ngIf=\"viewService.isSelectUserMode || viewService.isTeamMembersMode\">\n <fdp-approval-flow-user-list\n *ngIf=\"viewService.isSelectUserMode || !_data.userDataSource.isDataLoading; else loadingTpl\"\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 </ng-container>\n\n <fdp-approval-flow-user-details\n *ngIf=\"viewService.isUserDetailsMode && _userToShowDetails\"\n [user]=\"_userToShowDetails\"\n [detailsTemplate]=\"_data.userDetailsTemplate\"\n [details]=\"_userToShowDetailsData$\"\n ></fdp-approval-flow-user-details>\n </ng-container>\n </fd-dialog-body>\n\n <fd-dialog-footer>\n <ng-container *ngIf=\"!_selectMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fd-dialog-decisive-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.addNodeAddActionBtnLabel' | fdTranslate\"\n [disabled]=\"_isMainSubmitButtonDisabled\"\n (click)=\"_submit()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fd-dialog-decisive-button\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeCancelActionBtnLabel' | fdTranslate\"\n (click)=\"dialogRef.close()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n\n <ng-container *ngIf=\"_selectMode\">\n <ng-container *ngIf=\"viewService.isSelectUserMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate\"\n [disabled]=\"!_selectedApprovers.length\"\n (click)=\"_confirmSelectedApprovers()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate\"\n (click)=\"_exitSelectMode()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isSelectTeamMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.addNodeSelectApproverActionBtnLabel' | fdTranslate\"\n [disabled]=\"!_selectedTeam && !viewService.team\"\n (click)=\"_confirmSelectedTeam()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeCancelApproverSelectionActionBtnLabel' | fdTranslate\"\n (click)=\"_exitSelectMode()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isTeamMembersMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate\"\n (click)=\"_exitTeamMembersMode()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n\n <ng-container *ngIf=\"viewService.isUserDetailsMode\">\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.addNodeApproverOrTeamDetailsCloseActionBtnLabel' | fdTranslate\"\n (click)=\"_exitUserDetailsMode()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n </ng-container>\n </fd-dialog-footer>\n</fd-dialog>\n\n<ng-template #loadingTpl>\n <fd-busy-indicator [loading]=\"true\" [block]=\"true\"> </fd-busy-indicator>\n</ng-template>\n","import { ChangeDetectionStrategy, Component, ViewEncapsulation } from '@angular/core';\n\nimport { DialogRef } from '@fundamental-ngx/core/dialog';\n\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 depricated 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})\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\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\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\n <div *ngIf=\"_nodeType === _nodeTypes.PARALLEL\" fd-form-item>\n <fd-checkbox [(ngModel)]=\"_toNextSerial\">\n {{ 'platformApprovalFlow.addNodeDialogAddToNext' | fdTranslate }}\n </fd-checkbox>\n </div>\n </fd-form-group>\n </fd-dialog-body>\n\n <fd-dialog-footer fdCompact>\n <ng-container>\n <fd-dialog-footer-button>\n <button\n fd-button\n fd-dialog-decisive-button\n fdType=\"emphasized\"\n [label]=\"'platformApprovalFlow.selectTypeDialogConfirmButton' | fdTranslate\"\n (click)=\"_submit()\"\n ></button>\n </fd-dialog-footer-button>\n\n <fd-dialog-footer-button>\n <button\n fd-button\n fdkInitialFocus\n fd-dialog-decisive-button\n fdType=\"transparent\"\n [label]=\"'platformApprovalFlow.selectTypeDialogCancelButton' | fdTranslate\"\n (click)=\"_dialogRef.close()\"\n ></button>\n </fd-dialog-footer-button>\n </ng-container>\n </fd-dialog-footer>\n</fd-dialog>\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 { 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 depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-messages',\n templateUrl: './approval-flow-messages.component.html',\n styleUrls: ['./approval-flow-messages.component.scss'],\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'fdp-approval-flow-messages'\n }\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","<fd-message-strip\n *ngFor=\"let message of messages; let i = index\"\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 [ngSwitch]=\"message.type\">\n <ng-container *ngSwitchCase=\"'approverAddSuccess'\">\n {{ 'platformApprovalFlow.messagesApproverAddedSuccess' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'teamAddSuccess'\">\n {{ 'platformApprovalFlow.messagesTeamAddedSuccess' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'nodeEdit'\">\n {{ 'platformApprovalFlow.messagesNodeEdited' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'nodeRemove'\">\n {{ 'platformApprovalFlow.messagesNodeRemovedSingular' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'nodesRemove'\">\n {{ 'platformApprovalFlow.messagesNodeRemovedPlural' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'teamRemove'\">\n {{ 'platformApprovalFlow.messagesTeamRemoved' | fdTranslate }}\n </ng-container>\n <ng-container *ngSwitchCase=\"'error'\">\n {{ 'platformApprovalFlow.messagesErrorBuildGraph' | fdTranslate }}\n </ng-container>\n </span>\n\n <a\n href=\"#\"\n *ngIf=\"undoLastActionAvailable\"\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 </bdi>\n</fd-message-strip>\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\nimport { ApprovalFlowNodeTarget } from '../approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowGraph, ApprovalGraphMetadata } from '../approval-flow-graph';\nimport { ApprovalGraphNode } from '../interfaces/approval-node';\nimport { isNodeApproved } from '../helpers';\n\n/**\n * @deprecated\n * ApprovalFlowToolbarActions component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow-toolbar-actions',\n templateUrl: './approval-flow-toolbar-actions.component.html',\n styleUrls: ['./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})\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 <button\n *ngIf=\"!graph?.columns?.length && !graph?.errors\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddStepButton' | fdTranslate\"\n (click)=\"_addNode('empty')\"\n ></button>\n\n <button\n *ngIf=\"!!graph?.columns?.length && !isEditMode\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarEditButton' | fdTranslate\"\n (click)=\"enterEditMode.emit()\"\n ></button>\n\n <ng-container *ngIf=\"isEditMode\">\n <button\n *ngIf=\"_canAddBefore\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddApproversBefore' | fdTranslate\"\n (click)=\"_addNode('before')\"\n ></button>\n\n <button\n *ngIf=\"_canAddAfter\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddApproversAfter' | fdTranslate\"\n (click)=\"_addNode('after')\"\n ></button>\n\n <button\n *ngIf=\"_canAddParallel\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarAddApproversParallel' | fdTranslate\"\n (click)=\"_addNode('parallel')\"\n ></button>\n\n <button\n *ngIf=\"_canRemoveSelectedNodes\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarRemove' | fdTranslate\"\n (click)=\"deleteSelectedNodes.emit()\"\n ></button>\n\n <button\n *ngIf=\"_canEditNode\"\n fd-button\n [label]=\"'platformApprovalFlow.toolbarEditApprover' | fdTranslate\"\n (click)=\"_editSelectedNode()\"\n ></button>\n </ng-container>\n</ng-container>\n","import {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Inject,\n Injector,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Optional,\n Output,\n QueryList,\n SimpleChanges,\n TemplateRef,\n ViewChild,\n ViewChildren,\n ViewEncapsulation\n} from '@angular/core';\nimport { DOWN_ARROW, LEFT_ARROW, RIGHT_ARROW, UP_ARROW } from '@angular/cdk/keycodes';\nimport { CdkDrag } from '@angular/cdk/drag-drop';\nimport { combineLatest, fromEvent, merge, Subject, Subscription } from 'rxjs';\nimport { throttleTime, switchMap, mapTo, map, startWith, distinctUntilChanged } from 'rxjs/operators';\n\nimport { KeyUtil, RtlService } from '@fundamental-ngx/cdk/utils';\nimport { GridListComponent, GridListSelectionEvent } from '@fundamental-ngx/core/grid-list';\nimport { DialogService } from '@fundamental-ngx/core/dialog';\n\nimport {\n ApprovalFlowApproverDetailsComponent,\n ApprovalFlowApproverDetailsDialogRefData\n} from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport {\n AddNodeDialogFormData,\n APPROVAL_FLOW_NODE_TYPES,\n ApprovalFlowAddNodeComponent,\n AddNodeDialogRefData,\n ApprovalFlowNodeTarget\n} from './approval-flow-add-node/approval-flow-add-node.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 {\n ApprovalFlowSelectTypeComponent,\n SelectTypeDialogFormData\n} from './approval-flow-select-type/approval-flow-select-type.component';\nimport {\n ApprovalFlowGraph,\n ApprovalGraphMetadata,\n generateApprovalFlowGraph,\n generateApprovalFlowGraphMetadata\n} from './approval-flow-graph';\nimport {\n ApprovalFlowMessage,\n ApprovalFlowMessageType\n} from './approval-flow-messages/approval-flow-messages.component';\nimport {\n DataProvider,\n DATA_PROVIDERS,\n ApprovalFlowTeamDataSource,\n ApprovalFlowUserDataSource\n} from '@fundamental-ngx/platform/shared';\nimport { cloneDeep, uniqBy } from 'lodash-es';\nimport { ObjectStatus } from '@fundamental-ngx/core/object-status';\n\nlet defaultId = 0;\n/**\n * @deprecated\n * Approval Flow component is depricated since version 0.40.0\n */\n@Component({\n selector: 'fdp-approval-flow',\n templateUrl: './approval-flow.component.html',\n styleUrls: ['./approval-flow.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None\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 /** 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 private _selectedWatchers: ApprovalUser[] = [];\n\n /** @hidden */\n _selectedWatcherIds: ApprovalUser['id'][] = [];\n\n /** @hidden */\n _messages: ApprovalFlowMessage[] = [];\n\n /** @hidden */\n _displayUserFn = displayUserFn;\n\n /** @hidden */\n _userValueFn = userValueFn;\n\n /** @hidden */\n _trackByFn = trackByFn;\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 /** @hidden */\n readonly approvalFlowUniqueId = `fdp-approval-flow-${++defaultId}`;\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 constructor(\n private readonly _dialogService: DialogService,\n private readonly _cdr: ChangeDetectorRef,\n private readonly _injector: Injector,\n @Optional() @Inject(DATA_PROVIDERS) private providers: Map<string, DataProvider<any>>,\n @Optional() private readonly _rtlService: RtlService\n ) {}\n\n /** Returns snapshot of the current and initial states of approval process */\n get approvalProcess(): ApprovalProcess {\n return cloneDeep(this._approvalProcess);\n }\n\n /** @hidden */\n get _rtl(): boolean {\n return this._rtlService?.rtl.getValue();\n }\n\n /** @hidden */\n get _selectedNodes(): ApprovalGraphNode[] {\n return getGraphNodes(this._graph).filter((node) => node.selected);\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 = cloneDeep(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 = 0;\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 */\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 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 = cloneDeep(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 = cloneDeep(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 = cloneDeep(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 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 _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._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 */\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 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 = cloneDeep(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\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\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\n <fdp-approval-flow-toolbar-actions\n *ngIf=\"isEditAvailable\"\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 </fd-grid-list-title-bar>\n\n <div\n class=\"fdp-approval-flow__watchers\"\n *ngIf=\"_approvalProcess?.watchers?.length || _isEditMode\"\n [attr.aria-label]=\"watchersLabel\"\n >\n <p class=\"fdp-approval-flow__watchers-title\">\n {{ watchersLabel || ('platformApprovalFlow.defaultWatchersLabel' | fdTranslate) }}\n </p>\n\n <ng-container *ngIf=\"!_isEditMode\">\n <fd-avatar\n *ngFor=\"let watcher of _approvalProcess?.watchers; trackBy: _trackByFn\"\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 </ng-container>\n\n <div class=\"fdp-approval-flow__watchers-input-container\" *ngIf=\"_isEditMode\">\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 </div>\n\n <ng-container *ngIf=\"!_graph.errors\">\n <ng-container *ngIf=\"_graph.columns.length; else emptyApprovalFlowGraph\">\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 <div\n class=\"fdp-approval-flow-carousel-controls\"\n *ngIf=\"_scrollDiff > 0\"\n [class.fdp-approval-flow-carousel-controls--edit-mode]=\"_isEditMode\"\n >\n <button\n *ngIf=\"_carouselStepsLeft > 0\"\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]=\"'navigation-' + (_rtl ? 'right' : 'left') + '-arrow'\"></fd-icon>\n {{ _carouselStepsLeft }}\n </button>\n\n <button\n *ngIf=\"_carouselStepsRight > 0\"\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]=\"'navigation-' + (_rtl ? 'left' : 'right') + '-arrow'\"></fd-icon>\n </button>\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 <div\n class=\"fdp-approval-flow__graph-column\"\n *ngFor=\"let column of _graph.columns; let columnIndex = index\"\n >\n <fdp-approval-flow-node\n *ngFor=\"let node of column.nodes; let nodeIndex = index; trackBy: _trackByFn\"\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 <ng-container *ngIf=\"_isEditMode\">\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._overflowMenuButton\"\n ></ng-container>\n </ng-container>\n </fd-grid-list-item-toolbar>\n\n <fd-avatar\n fd-grid-list-item-image\n [image]=\"node.approvers.length === 1 ? node.approvers[0].imgUrl : null\"\n [label]=\"node.approvers.length > 1 ? node.description : null\"\n size=\"xs\"\n [circle]=\"true\"\n ></fd-avatar>\n\n <ng-template fd-grid-list-item-body>\n <ng-container\n [ngTemplateOutlet]=\"approvalFlowNode._nodeContent\"\n ></ng-container>\n </ng-template>\n </fd-grid-list-item>\n </fdp-approval-flow-node>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n </fd-grid-list>\n\n <div fd-bar *ngIf=\"_isEditMode\">\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\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-template #emptyApprovalFlowGraph>\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\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 </ng-template>\n</ng-container>\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { FormsModule } from '@angular/forms';\nimport { DragDropModule } from '@angular/cdk/drag-drop';\n\nimport { AvatarModule } from '@fundamental-ngx/core/avatar';\nimport { BarModule } from '@fundamental-ngx/core/bar';\nimport { ButtonModule } from '@fundamental-ngx/core/button';\nimport { CheckboxModule } from '@fundamental-ngx/core/checkbox';\nimport { DatePickerModule } from '@fundamental-ngx/core/date-picker';\nimport { DialogModule } from '@fundamental-ngx/core/dialog';\nimport { FormModule } from '@fundamental-ngx/core/form';\nimport { GridListModule } from '@fundamental-ngx/core/grid-list';\nimport { IconModule } from '@fundamental-ngx/core/icon';\nimport { IllustratedMessageModule } from '@fundamental-ngx/core/illustrated-message';\nimport { MenuModule } from '@fundamental-ngx/core/menu';\nimport { MessageStripModule } from '@fundamental-ngx/core/message-strip';\nimport { MultiInputModule } from '@fundamental-ngx/core/multi-input';\nimport { RadioModule } from '@fundamental-ngx/core/radio';\nimport { SelectModule } from '@fundamental-ngx/core/select';\nimport { BusyIndicatorModule } from '@fundamental-ngx/core/busy-indicator';\n\nimport { PlatformObjectStatusModule } from '@fundamental-ngx/platform/object-status';\nimport { PlatformSearchFieldModule } from '@fundamental-ngx/platform/search-field';\nimport { PlatformListModule, StandardListItemModule } from '@fundamental-ngx/platform/list';\n\nimport { ApprovalFlowComponent } from './approval-flow.component';\nimport { ApprovalFlowNodeComponent } from './approval-flow-node/approval-flow-node.component';\nimport { ApprovalFlowApproverDetailsComponent } from './approval-flow-approver-details/approval-flow-approver-details.component';\nimport { ApprovalFlowAddNodeComponent } from './approval-flow-add-node/approval-flow-add-node.component';\nimport { ApprovalFlowUserListComponent } from './approval-flow-user-list/approval-flow-user-list.component';\nimport { ApprovalFlowUserDetailsComponent } from './approval-flow-user-details/approval-flow-user-details.component';\nimport { ApprovalFlowDropZoneDirective } from './approval-flow-node/approval-flow-drop-zone.directive';\nimport { ApprovalFlowTeamListComponent } from './approval-flow-team-list/approval-flow-team-list.component';\nimport { ApprovalFlowAddNodeViewService } from './services/approval-flow-add-node-view.service';\nimport { ApprovalFlowSelectTypeComponent } from './approval-flow-select-type/approval-flow-select-type.component';\nimport { ApprovalFlowMessagesComponent } from './approval-flow-messages/approval-flow-messages.component';\nimport { ApprovalFlowToolbarActionsComponent } from './approval-flow-toolbar-actions/approval-flow-toolbar-actions.component';\nimport { I18nModule } from '@fundamental-ngx/i18n';\n\n@NgModule({\n declarations: [\n ApprovalFlowComponent,\n ApprovalFlowNodeComponent,\n ApprovalFlowApproverDetailsComponent,\n ApprovalFlowAddNodeComponent,\n ApprovalFlowUserListComponent,\n ApprovalFlowUserDetailsComponent,\n ApprovalFlowDropZoneDirective,\n ApprovalFlowTeamListComponent,\n ApprovalFlowSelectTypeComponent,\n ApprovalFlowMessagesComponent,\n ApprovalFlowToolbarActionsComponent\n ],\n providers: [ApprovalFlowAddNodeViewService],\n imports: [\n CommonModule,\n FormsModule,\n AvatarModule,\n BarModule,\n ButtonModule,\n IconModule,\n GridListModule,\n DialogModule,\n PlatformObjectStatusModule,\n PlatformListModule,\n StandardListItemModule,\n PlatformSearchFieldModule,\n MultiInputModule,\n MessageStripModule,\n CheckboxModule,\n I18nModule,\n MenuModule,\n SelectModule,\n DatePickerModule,\n BusyIndicatorModule,\n FormModule,\n DragDropModule,\n RadioModule,\n IllustratedMessageModule\n ],\n exports: [ApprovalFlowComponent]\n})\nexport class PlatformApprovalFlowModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i4","i2","i1","i3","i8.ApprovalFlowUserListComponent","i9.ApprovalFlowUserDetailsComponent","defaultId","i5","i6","i7.ApprovalFlowDropZoneDirective","i8","i7","i2.ApprovalFlowAddNodeViewService","i9","i10","i15","i16.ApprovalFlowUserListComponent","i17.ApprovalFlowUserDetailsComponent","i18.ApprovalFlowTeamListComponent","i19","i11","i12","i13","i14.ApprovalFlowNodeComponent","i15.ApprovalFlowMessagesComponent","i16.ApprovalFlowToolbarActionsComponent","i17"],"mappings":"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"}
|