@tuki-io/tuki-widgets 0.0.219-dev.3 → 0.0.219-dev.6
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/README.md +24 -24
- package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +1 -1
- package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
- package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +3 -3
- package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
- package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
- package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
- package/esm2020/lib/widgets.component.mjs +9 -9
- package/esm2020/lib/widgets.module.mjs +1 -1
- package/esm2020/lib/widgets.service.mjs +1 -1
- package/esm2020/public-api.mjs +1 -1
- package/esm2020/user-creation/src/app.constants.mjs +1 -1
- package/esm2020/user-creation/src/classes/notification.mjs +1 -1
- package/esm2020/user-creation/src/classes/site.mjs +1 -1
- package/esm2020/user-creation/src/environments/environment.mjs +1 -1
- package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +1 -1
- package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +3 -3
- package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +1 -1
- package/esm2020/user-creation/src/shared/services/notification.service.mjs +1 -1
- package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +1 -1
- package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
- package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +1 -1
- package/esm2020/user-creation/src/utils/device-default-prefix.mjs +1 -1
- package/esm2020/user-creation/src/utils/device-name-validation.mjs +1 -1
- package/esm2020/user-creation/src/utils/model.mjs +1 -1
- package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +1 -1
- package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +3 -3
- package/esm2020/user-device-manage/public-api.mjs +1 -1
- package/esm2020/user-device-manage/src/app.constants.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
- package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
- package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
- package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
- package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
- package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +2 -2
- package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
- package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
- package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
- package/esm2020/user-device-manage/src/material.module.mjs +1 -1
- package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
- package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
- package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/user.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
- package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
- package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +1 -1
- package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/user-manage/public-api.mjs +1 -1
- package/esm2020/user-manage/src/app.constants.mjs +1 -1
- package/esm2020/user-manage/src/classes/device.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
- package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
- package/esm2020/user-manage/src/classes/line.mjs +1 -1
- package/esm2020/user-manage/src/classes/notification.mjs +1 -1
- package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
- package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
- package/esm2020/user-manage/src/classes/simplified-user.mjs +1 -1
- package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
- package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
- package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
- package/esm2020/user-manage/src/common-functions.mjs +1 -1
- package/esm2020/user-manage/src/device-list/device-list.component.mjs +3 -3
- package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +3 -3
- package/esm2020/user-manage/src/environments/environment.mjs +1 -1
- package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
- package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
- package/esm2020/user-manage/src/material.module.mjs +1 -1
- package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
- package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/user-manage/src/services/api.service.mjs +1 -1
- package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
- package/esm2020/user-manage/src/services/line.service.mjs +1 -1
- package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
- package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
- package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
- package/esm2020/user-manage/src/services/user.service.mjs +1 -1
- package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
- package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
- package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
- package/esm2020/user-manage/src/user-manage-widget.component.mjs +12 -6
- package/esm2020/user-manage/src/user-manage.module.mjs +1 -1
- package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
- package/esm2020/users-list/public-api.mjs +1 -1
- package/esm2020/users-list/src/app.constants.mjs +2 -1
- package/esm2020/users-list/src/classes/app-location.mjs +1 -1
- package/esm2020/users-list/src/classes/device.mjs +1 -1
- package/esm2020/users-list/src/classes/line.mjs +1 -1
- package/esm2020/users-list/src/classes/move-user.mjs +1 -1
- package/esm2020/users-list/src/classes/notification.mjs +1 -1
- package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
- package/esm2020/users-list/src/classes/table-data.mjs +1 -1
- package/esm2020/users-list/src/classes/user-list.mjs +1 -1
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
- package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +3 -3
- package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
- package/esm2020/users-list/src/services/api.service.mjs +1 -1
- package/esm2020/users-list/src/services/dns.service.mjs +1 -1
- package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
- package/esm2020/users-list/src/services/notification.service.mjs +1 -1
- package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
- package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
- package/esm2020/users-list/src/services/user.service.mjs +8 -1
- package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
- package/esm2020/users-list/src/users-list.component.mjs +20 -7
- package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
- package/esm2020/users-list/src/utils/notifications/notification.component.mjs +3 -3
- package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2 -2
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +20 -20
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +6 -6
- package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +28 -22
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +39 -18
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
- package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2 -2
- package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +20 -20
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +6 -6
- package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +27 -21
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +39 -18
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
- package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
- package/package.json +1 -1
- package/users-list/src/app.constants.d.ts +1 -0
- package/users-list/src/services/user.service.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuki-io-tuki-widgets-contact-center.mjs","sources":["../../../../projects/tuki/widgets/contact-center/shared/api.service.ts","../../../../projects/tuki/widgets/contact-center/shared/api.endpoints.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/cc-readiness.service.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/components/card/card.component.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/components/card/card.component.html","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.html","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.html","../../../../projects/tuki/widgets/contact-center/cc-readiness/cc-readiness.module.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/constants/cytoscape.config.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/utils/node-mappings.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/utils/node-html-template.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc2graph.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/cystoscape-viewport.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc-activity-manage.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc-activity-creation.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/constants/wxcc-api.constants.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc-flow-api.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/cc-script-editor.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/cc-script-editor.component.html","../../../../projects/tuki/widgets/contact-center/shared/material.module.ts","../../../../projects/tuki/widgets/contact-center/shared/shared.module.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.module.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/cc-script-editor.module.ts","../../../../projects/tuki/widgets/contact-center/tuki-io-tuki-widgets-contact-center.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class APIService {\r\ntoken!: string;\r\napiUrl!: string;\r\n\r\nconstructor(\r\n private httpClient: HttpClient\r\n ) { }\r\n\r\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n const headers = this.getHeaders(cache);\r\n params = params || {};\r\n return this.httpClient.get(this.apiUrl + url, {params: this.prepareEncodedParams(params), headers});\r\n }\r\n\r\n post(url: string, body: any, params = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {params: this.prepareEncodedParams(params), headers});\r\n }\r\n\r\n // use when response extended data is necessary:\r\n postExtended(url: string, body = null, params = {}, headers = {}) {\r\n headers = headers || this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {\r\n headers,\r\n observe: 'response',\r\n params: this.prepareEncodedParams(params)\r\n });\r\n }\r\n\r\n put(url: string, body = null, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.put(this.apiUrl + url, body, {headers, params: this.prepareEncodedParams(params)});\r\n }\r\n\r\n delete(url: string, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.delete(this.apiUrl + url, {headers, params: this.prepareEncodedParams(params)});\r\n }\r\n\r\n fetchPagination(url: string, pageSize: number, pageNumber: number, additionalParams = {}, cache?: boolean): Observable<any> {\r\n const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));\r\n const params = Object.assign(copyAdditionalParams, {size: pageSize.toString(), page: pageNumber.toString()});\r\n return this.fetch(url, params, cache) as Observable<any>;\r\n }\r\n\r\n private prepareEncodedParams(params: any) {\r\n const result: any = {};\r\n\r\n if (!params) {\r\n return {};\r\n }\r\n for (const key of Object.keys(params)) {\r\n if (params[key]) {\r\n const stringParam = params[key].toString();\r\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private getHeaders(cache?: boolean): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n if (cache) {\r\n headers = headers.append('_Cache', 'true ');\r\n }\r\n const token = this.token || this.getParameterByName('token');\r\n headers = headers.append('Authorization', 'Bearer '+ token);\r\n return headers;\r\n }\r\n\r\n private getParameterByName(name: any, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n}","export const API = {\r\n READINESS: {\r\n UCCX_SERVER_ENTITY_STATS: (customerId: number) => `/api/uccx/migration/customer/${customerId}/entity-counts`,\r\n LICENSE_USAGE_SUMMARY: (customerId: number) => `/api/uccx/migration/customer/${customerId}/cc-license-stats`,\r\n }\r\n}","import { inject, Inject, Injectable } from '@angular/core';\nimport { APIService } from '../shared/api.service';\nimport { UccxServerEntityStats, WebexLicenseUsageSummary } from './types/cc-readiness';\nimport { API } from '../shared/api.endpoints';\nimport { catchError, map, Observable, throwError } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CcReadinessService {\n private readonly api = inject(APIService);\n\n constructor() { }\n\n fetchUccxServerEntityStats(customerId: number): Observable<UccxServerEntityStats[]> {\n return this.api.fetch(API.READINESS.UCCX_SERVER_ENTITY_STATS(customerId))\n .pipe(map((stats: UccxServerEntityStats[]) => {\n stats.forEach(stat => {\n // @ts-ignore\n delete stat.counts.reasonCodes;\n });\n return stats;\n }));\n }\n\n fetchWebexLicenseUsageSummary(customerId: number): Observable<WebexLicenseUsageSummary[]> {\n return this.api.fetch(API.READINESS.LICENSE_USAGE_SUMMARY(customerId));\n }\n\n setToken(token: string): void {\n this.api.token = token;\n }\n\n setHost(host: string): void {\n this.api.apiUrl = host;\n }\n}","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'tk-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class CardComponent {\r\n @Input() title!: string;\r\n}","<article class=\"card\">\r\n <header class=\"card__header\">\r\n <h2>{{ title }}</h2>\r\n <!--<div class=\"card__menu-button\">\r\n <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\r\n </div>-->\r\n </header>\r\n <div class=\"card__content\">\r\n <ng-content select=\"card-content\"></ng-content>\r\n </div>\r\n</article>\r\n","import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, inject } from '@angular/core';\nimport { ApexChart, ApexDataLabels, ApexLegend, ApexNonAxisChartSeries, ApexPlotOptions, ApexTooltip } from 'ng-apexcharts';\nimport { catchError, finalize, of, Subscription } from 'rxjs';\nimport { CcReadinessService } from '../../cc-readiness.service';\nimport { WebexLicenseUsageSummary } from '../../types/cc-readiness';\n\ninterface LicenseLegendItem {\n label: string;\n count: number;\n percentage: number;\n color: string;\n}\n\ninterface LicenseTableRow {\n label: string;\n value: number;\n}\n\ninterface LicenseChartOptions {\n series: ApexNonAxisChartSeries;\n chart: ApexChart;\n labels: string[];\n colors: string[];\n legend: ApexLegend;\n plotOptions: ApexPlotOptions;\n dataLabels: ApexDataLabels;\n tooltip: ApexTooltip;\n}\n\ninterface LicenseRequirementViewModel {\n chartOptions: LicenseChartOptions;\n legendItems: LicenseLegendItem[];\n rows: LicenseTableRow[];\n totalRequired: number;\n}\n\nconst LEGEND_COLORS = {\n existing: '#16A693',\n missing: '#808080',\n empty: '#E0E0E0'\n};\n\n@Component({\n selector: 'cc-licenses-requirement',\n templateUrl: './licences-requirement.component.html',\n styleUrls: ['./licences-requirement.component.scss']\n})\nexport class LicencesRequirementComponent implements OnInit, OnDestroy, OnChanges {\n @Input() customerId!: number;\n @Input() host!: string;\n @Input() token!: string;\n\n private readonly ccReadinessService = inject(CcReadinessService);\n private subscription?: Subscription;\n\n viewModel: LicenseRequirementViewModel | null = null;\n loading = false;\n error = false;\n\n filters: string[] = ['All'];\n selectedSummaryIndex = 0;\n\n private summary: WebexLicenseUsageSummary | null = null;\n\n ngOnInit(): void {\n this.loadSummaries();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if ((changes['customerId'] && !changes['customerId'].firstChange) ||\n (changes['token'] && !changes['token'].firstChange)) {\n this.loadSummaries();\n }\n }\n\n onFilterChange(index: number): void {\n if (!isNaN(index) && index >= 0 && index < this.filters.length) {\n this.selectFilter(index);\n }\n }\n\n private loadSummaries(): void {\n const numericCustomerId = Number(this.customerId);\n if (!numericCustomerId || !this.token) {\n return;\n }\n\n this.subscription?.unsubscribe();\n this.loading = true;\n this.error = false;\n this.viewModel = null;\n this.selectedSummaryIndex = 0;\n\n this.ccReadinessService.setHost(this.host);\n this.ccReadinessService.setToken(this.token);\n\n this.subscription = this.ccReadinessService.fetchWebexLicenseUsageSummary(numericCustomerId)\n .pipe(\n catchError(error => {\n console.error('Unable to load Webex license usage summary', error);\n this.error = true;\n return of<WebexLicenseUsageSummary[]>([]);\n }),\n finalize(() => this.loading = false)\n )\n .subscribe(items => {\n console.log('Raw API response:', items);\n // Handle both array and single object responses\n if (Array.isArray(items) && items.length > 0) {\n this.summary = items[0];\n } else if (items && typeof items === 'object' && !Array.isArray(items)) {\n // If single object returned, use it directly\n this.summary = items as unknown as WebexLicenseUsageSummary;\n } else {\n this.summary = null;\n }\n\n // Build filters dynamically from license names\n if (this.summary?.licenses?.length) {\n this.filters = ['All', ...this.summary.licenses.map(l => l.name)];\n } else {\n this.filters = ['All'];\n }\n\n console.log('Processed summary:', this.summary);\n this.selectFilter(0);\n });\n }\n\n private selectFilter(index: number): void {\n this.selectedSummaryIndex = index;\n if (!this.summary) {\n this.viewModel = null;\n return;\n }\n this.viewModel = this.mapSummaryToViewModel(this.summary, index);\n console.log('Created viewModel for filter index', index, ':', this.viewModel);\n }\n\n private mapSummaryToViewModel(summary: WebexLicenseUsageSummary, filterIndex: number): LicenseRequirementViewModel {\n console.log('Mapping summary to viewModel:', summary, 'filterIndex:', filterIndex);\n\n const licenses = summary.licenses || [];\n\n let existingCount: number;\n let missingCount: number;\n let rows: LicenseTableRow[];\n\n if (filterIndex === 0) {\n // \"All\" filter: show totalExistingLicenses vs total consumedUnits\n existingCount = summary.totalExistingLicenses ?? 0;\n missingCount = licenses.reduce((acc, l) => acc + l.consumedUnits, 0);\n rows = licenses.map(l => ({\n label: l.name,\n value: l.consumedUnits\n }));\n } else {\n // Specific license filter: show 0 existing vs consumedUnits for that license\n const selectedLicense = licenses[filterIndex - 1];\n existingCount = 0;\n missingCount = selectedLicense?.consumedUnits ?? 0;\n rows = selectedLicense ? [{ label: selectedLicense.name, value: selectedLicense.consumedUnits }] : [];\n }\n\n const totalLicenses = existingCount + missingCount;\n\n const legendItems: LicenseLegendItem[] = [\n {\n label: 'Existing licenses',\n count: existingCount,\n percentage: totalLicenses > 0 ? (existingCount / totalLicenses) * 100 : 0,\n color: LEGEND_COLORS.existing\n },\n {\n label: 'Missing licenses',\n count: missingCount,\n percentage: totalLicenses > 0 ? (missingCount / totalLicenses) * 100 : 0,\n color: LEGEND_COLORS.missing\n }\n ];\n\n console.log('Legend items:', legendItems);\n console.log('Table rows:', rows);\n\n const totalRequired = existingCount + missingCount;\n\n return {\n chartOptions: this.buildChartOptions(legendItems),\n legendItems,\n rows,\n totalRequired\n };\n }\n\n private buildChartOptions(legendItems: LicenseLegendItem[]): LicenseChartOptions {\n const totalCount = legendItems.reduce((acc, item) => acc + item.count, 0);\n const isEmpty = totalCount === 0;\n\n // For empty chart, show a full light gray donut\n const series = isEmpty ? [1] : legendItems.map(item => item.count);\n const labels = isEmpty ? ['No data'] : legendItems.map(item => item.label);\n const colors = isEmpty ? [LEGEND_COLORS.empty] : legendItems.map(item => item.color);\n\n return {\n series,\n chart: {\n type: 'donut',\n height: 220\n },\n labels,\n colors,\n legend: {\n show: false\n },\n plotOptions: {\n pie: {\n donut: {\n size: '75%'\n }\n }\n },\n dataLabels: {\n enabled: false\n },\n tooltip: {\n enabled: !isEmpty\n }\n };\n }\n\n private normalizePercentage(value: number): number {\n if (!isFinite(value)) {\n return 0;\n }\n // Convert decimal to percentage (0.9487 → 94.9)\n const percentage = value * 100;\n return Math.round(percentage * 10) / 10;\n }\n}\n","<tk-card title=\"Licenses requirement\">\n <ng-container ngProjectAs=\"card-content\">\n <div\n class=\"widget-body\"\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\n >\n <div class=\"left-section\">\n <mat-select\n [(value)]=\"selectedSummaryIndex\"\n (selectionChange)=\"onFilterChange($event.value)\"\n class=\"filter-select\"\n >\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\n {{ option }}\n </mat-option>\n </mat-select>\n\n <div class=\"chart-section\">\n <div class=\"chart-wrapper\">\n <apx-chart\n [series]=\"viewModel.chartOptions.series\"\n [chart]=\"viewModel.chartOptions.chart\"\n [labels]=\"viewModel.chartOptions.labels\"\n [colors]=\"viewModel.chartOptions.colors\"\n [legend]=\"viewModel.chartOptions.legend\"\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\n [tooltip]=\"viewModel.chartOptions.tooltip\"\n >\n </apx-chart>\n </div>\n <div class=\"legend\">\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\n <span\n class=\"legend-marker\"\n [style.backgroundColor]=\"item.color\"\n ></span>\n <span class=\"legend-label\">{{ item.label }}</span>\n <span class=\"legend-value\">{{ item.count | number }}</span>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"divider\" aria-hidden=\"true\"></div>\n\n <div class=\"table-section\">\n <div class=\"lic-table-header\">\n <span>License</span>\n <span>Required</span>\n </div>\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\n <span>{{ row.label }}</span>\n <span>{{ row.value | number }}</span>\n </div>\n <div class=\"table-row total-row\">\n <span>Total</span>\n <span>{{ viewModel.totalRequired | number }}</span>\n </div>\n </div>\n </div>\n\n <ng-template #widgetState>\n <div class=\"state-message\" *ngIf=\"loading\">\n Loading license requirements…\n </div>\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\n Unable to load license requirements.\n </div>\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\n No license data available.\n </div>\n </ng-template>\n </ng-container>\n</tk-card>\n","import { Component, inject, Input, OnInit } from \"@angular/core\";\r\nimport { CcReadinessService } from \"../../cc-readiness.service\";\r\nimport { map, Observable } from \"rxjs\";\r\nimport { EntityType, UccxServerEntityStats } from \"../../types/cc-readiness\";\r\n\r\ninterface SummaryGridCount {\r\n name: string;\r\n value: number;\r\n}\r\n\r\ninterface SummaryGridItem {\r\n uccxIp: string;\r\n counts: SummaryGridCount[];\r\n}\r\n\r\nconst ENTITY_CONFIG: { [key: string]: { label: string } } = {\r\n applications: { label: 'Applications' },\r\n triggers: { label: 'Triggers' },\r\n contactServiceQueues: { label: 'CSQs' },\r\n resources: { label: 'Resources' },\r\n resourceGroups: { label: 'Resource Groups' },\r\n skills: { label: 'Skills' },\r\n xml: { label: 'XML' },\r\n scripts: { label: 'Scripts' },\r\n audioPrompts: { label: 'Audio Prompts' },\r\n teams: { label: 'Teams' },\r\n wrapUpCodes: { label: 'Wrap-Up Codes' },\r\n phonebooks: { label: 'Phonebooks' }\r\n};\r\n\r\n@Component({\r\n selector: 'cc-summary-grid',\r\n templateUrl: 'summary-grid.component.html',\r\n styleUrls: ['summary-grid.component.scss']\r\n})\r\nexport class SummaryGridComponent implements OnInit {\r\n @Input() customerId!: number;\r\n @Input() host!: string;\r\n @Input() token!: string;\r\n\r\n private readonly ccReadinessService = inject(CcReadinessService);\r\n\r\n readonly ENTITY_CONFIG = ENTITY_CONFIG;\r\n\r\n data$!: Observable<SummaryGridItem[]>;\r\n\r\n ngOnInit(): void {\r\n this.ccReadinessService.setToken(this.token);\r\n this.ccReadinessService.setHost(this.host);\r\n\r\n this.data$ = this.ccReadinessService.fetchUccxServerEntityStats(this.customerId)\r\n .pipe(map(items => {\r\n return items.map(item => ({\r\n uccxIp: item.uccxIp,\r\n counts: Object.entries(item.counts).map(([name, value]) => ({ name, value }))\r\n }));\r\n }));\r\n }\r\n}","<ng-container *ngIf=\"data$ | async as data\">\r\n <div *ngFor=\"let stats of data\">\r\n <tk-card [title]=\"stats.uccxIp\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div class=\"grid-wrapper\">\r\n <div class=\"grid-item\" *ngFor=\"let item of stats.counts\">\r\n <div class=\"item-top\">\r\n <span class=\"item-icon\">\r\n <img width=\"24\" height=\"24\" src=\"assets/icons/{{ item.name }}.svg\" alt=\"{{ item.name }} Icon\">\r\n </span>\r\n <span class=\"item-count\">{{ item.value }}</span>\r\n </div>\r\n <span class=\"item-label\">{{ ENTITY_CONFIG[item.name].label }}</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </tk-card>\r\n </div>\r\n</ng-container>","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { LicencesRequirementComponent } from './widgets/licences-requirement/licences-requirement.component';\nimport { SummaryGridComponent } from './widgets/summary-grid/summary-grid.component';\nimport { CardComponent } from './components/card/card.component';\nimport { NgApexchartsModule } from 'ng-apexcharts';\nimport { MaterialModule } from '../shared/material.module';\nimport { SharedModule } from '../shared/shared.module';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatOptionModule } from '@angular/material/core';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatTableModule } from '@angular/material/table';\n\n\n\n@NgModule({\n declarations: [\n LicencesRequirementComponent,\n SummaryGridComponent,\n CardComponent\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n NgApexchartsModule,\n MatTableModule,\n MatButtonModule,\n MatCheckboxModule,\n MatSelectModule,\n MatProgressSpinnerModule,\n MatOptionModule,\n MatPaginatorModule,\n MatSelectModule\n ],\n exports: [\n LicencesRequirementComponent,\n SummaryGridComponent\n ]\n})\nexport class CcReadinessModule { }\n","import { StylesheetStyle } from \"cytoscape\";\r\n\r\nexport const StyleConfig: StylesheetStyle[] = [\r\n {\r\n selector: 'node',\r\n style: {\r\n 'background-color': 'transparent',\r\n 'background-opacity': 0,\r\n 'width': 220,\r\n 'height': 100,\r\n 'shape': 'roundrectangle',\r\n 'border-width': 0\r\n }\r\n },\r\n {\r\n selector: 'node:selected',\r\n style: {\r\n 'background-color': 'transparent',\r\n 'background-opacity': 0\r\n }\r\n },\r\n {\r\n selector: 'edge',\r\n style: {\r\n 'width': 1,\r\n 'line-color': '#d4d4d4',\r\n // 'line-color': '#B0BEC5',\r\n 'target-arrow-color': '#d4d4d4',\r\n 'target-arrow-shape': 'triangle',\r\n 'curve-style': 'bezier',\r\n 'control-point-step-size': 40,\r\n 'label': 'data(label)',\r\n 'font-size': '9px',\r\n 'color': '#546E7A',\r\n 'text-background-color': '#fff',\r\n 'text-background-opacity': 1,\r\n 'text-background-padding': '4px',\r\n 'text-border-width': 1,\r\n 'text-border-color': '#E0E0E0',\r\n 'text-border-opacity': 0.8,\r\n 'text-margin-y': -10,\r\n 'z-index': 10\r\n }\r\n },\r\n {\r\n selector: 'edge[label=\"default\"]',\r\n style: {\r\n 'line-color': '#90A4AE',\r\n 'target-arrow-color': '#90A4AE'\r\n }\r\n },\r\n {\r\n selector: 'edge[label=\"queued\"]',\r\n style: {\r\n 'line-color': '#66BB6A',\r\n 'target-arrow-color': '#66BB6A'\r\n }\r\n },\r\n {\r\n selector: 'edge[label=\"failure\"]',\r\n style: {\r\n 'line-color': '#EF5350',\r\n 'target-arrow-color': '#EF5350'\r\n }\r\n },\r\n {\r\n selector: ':selected',\r\n style: {\r\n 'line-color': '#FF6B6B',\r\n 'target-arrow-color': '#FF6B6B'\r\n }\r\n }\r\n];","import { ExtendedActivityType } from \"../types/extended-activity\";\r\nimport { WxCCActivityType, WxCCTemplatedActivityType } from \"../types/wxcc-activity\";\r\n\r\nexport interface IconInfo {\r\n iconSrc: string;\r\n alt: string;\r\n}\r\n\r\nexport interface ActivityDisplayType {\r\n activityName: ExtendedActivityType,\r\n value: ActivityDisplayTypeValue;\r\n label: string;\r\n icon: string;\r\n group: string;\r\n}\r\n\r\nexport interface CreatableActivityDisplayType extends ActivityDisplayType {\r\n activityName: WxCCTemplatedActivityType;\r\n}\r\n\r\nconst CREATABLE_WXCC_ACTIVITY_TYPES: ReadonlySet<WxCCTemplatedActivityType> = new Set<WxCCTemplatedActivityType>([\r\n 'NewPhoneContact',\r\n 'play-message',\r\n 'play-music',\r\n 'ivr-menu',\r\n 'set-variable',\r\n 'blind-transfer',\r\n 'business-hours',\r\n]);\r\n\r\nexport type ActivityDisplayTypeValue =\r\n | 'condition-activity'\r\n | 'queue-contact'\r\n | 'ivr-menu'\r\n | 'blind-transfer'\r\n | 'wait-activity'\r\n | 'newphonecontact'\r\n | 'disconnect-contact'\r\n | 'play-message'\r\n | 'play-music'\r\n | 'unmapped'\r\n | 'business-hours'\r\n | 'set-variable'\r\n | 'end'\r\n\r\n/**\r\n * Map of node icons based on display type or label\r\n */\r\nexport const ICON_MAP: { [key in ActivityDisplayTypeValue]: string } = {\r\n 'condition-activity': 'assets/wxcc/if.svg',\r\n 'queue-contact': 'assets/wxcc/route.svg',\r\n 'ivr-menu': 'assets/wxcc/m1.svg',\r\n 'blind-transfer': 'assets/wxcc/terminate2.svg',\r\n 'wait-activity': 'assets/wxcc/delay.svg',\r\n 'newphonecontact': 'assets/wxcc/p1.svg',\r\n 'disconnect-contact': 'assets/wxcc/terminate2.svg',\r\n 'play-message': 'assets/wxcc/s1.svg',\r\n 'play-music': 'assets/wxcc/delay.svg',\r\n 'unmapped': 'assets/wxcc/unmapped.svg',\r\n 'business-hours': 'assets/wxcc/c2.svg',\r\n 'set-variable': 'assets/wxcc/variable.svg',\r\n 'end': 'assets/wxcc/close1.svg'\r\n};\r\n\r\n/**\r\n * Map of node color classes based on group\r\n */\r\nconst COLOR_CLASS_MAP: { [key: string]: string } = {\r\n 'start': 'node-start',\r\n 'end': 'node-end',\r\n 'terminating-action': 'node-end',\r\n 'set-variable': 'node-action',\r\n 'unmapped': 'node-default',\r\n 'enum-gateway': 'node-gateway',\r\n 'action': 'node-action'\r\n};\r\n\r\n/**\r\n * Map of activity type labels based on group\r\n */\r\nconst ACTIVITY_TYPE_LABELS: { [key: string]: string } = {\r\n 'start': 'Start',\r\n 'end': 'End',\r\n 'terminating-action': 'Terminate',\r\n 'enum-gateway': 'Menu',\r\n 'action': 'Action',\r\n 'unmapped': 'Unmapped'\r\n};\r\n\r\n/**\r\n * All available activity display types for node configuration\r\n * Values match ICON_MAP keys exactly\r\n */\r\nexport const ACTIVITY_DISPLAY_TYPES: ActivityDisplayType[] = [\r\n { activityName: 'NewPhoneContact', value: 'newphonecontact', label: 'Start', icon: ICON_MAP['newphonecontact'], group: 'start' },\r\n { activityName: 'end', value: 'end', label: 'End', icon: ICON_MAP['end'], group: 'end' },\r\n { activityName: 'play-message', value: 'play-message', label: 'Play Message', icon: ICON_MAP['play-message'], group: 'action' },\r\n { activityName: 'ivr-menu', value: 'ivr-menu', label: 'Menu', icon: ICON_MAP['ivr-menu'], group: 'enum-gateway' },\r\n { activityName: 'queue-contact', value: 'queue-contact', label: 'Queue Contact', icon: ICON_MAP['queue-contact'], group: 'action' },\r\n { activityName: 'set-variable', value: 'set-variable', label: 'Set Variable', icon: ICON_MAP['set-variable'], group: 'set-variable' },\r\n { activityName: 'condition-activity', value: 'condition-activity', label: 'Condition', icon: ICON_MAP['condition-activity'], group: 'enum-gateway' },\r\n { activityName: 'business-hours', value: 'business-hours', label: 'Business Hours', icon: ICON_MAP['business-hours'], group: 'enum-gateway' },\r\n { activityName: 'wait-activity', value: 'wait-activity', label: 'Wait', icon: ICON_MAP['wait-activity'], group: 'action' },\r\n { activityName: 'play-music', value: 'play-music', label: 'Play Music', icon: ICON_MAP['play-music'], group: 'action' },\r\n { activityName: 'blind-transfer', value: 'blind-transfer', label: 'Blind Transfer', icon: ICON_MAP['blind-transfer'], group: 'action' },\r\n { activityName: 'disconnect-contact', value: 'disconnect-contact', label: 'Disconnect', icon: ICON_MAP['disconnect-contact'], group: 'terminating-action' },\r\n { activityName: 'unmapped', value: 'unmapped', label: 'Unmapped', icon: ICON_MAP['unmapped'], group: 'unmapped' }\r\n];\r\n\r\nexport const CREATABLE_ACTIVITY_DISPLAY_TYPES: CreatableActivityDisplayType[] = ACTIVITY_DISPLAY_TYPES\r\n .filter(type => CREATABLE_WXCC_ACTIVITY_TYPES.has(type.activityName as WxCCTemplatedActivityType)) as CreatableActivityDisplayType[];\r\n\r\n/**\r\n * Get node icon information based on name or display type\r\n * @param name - The node name or display type\r\n * @returns Icon information with src and alt text\r\n */\r\nexport function getNodeIcon(name: string): IconInfo {\r\n const key = name.toLowerCase() as ActivityDisplayTypeValue;\r\n const iconSrc = ICON_MAP[key] || ICON_MAP['unmapped'];\r\n return { iconSrc, alt: key };\r\n}\r\n\r\n/**\r\n * Get node color class based on group\r\n * @param group - The node group\r\n * @returns CSS class name for node coloring\r\n */\r\nexport function getNodeColorClass(group: string): string {\r\n return COLOR_CLASS_MAP[group] || 'node-default';\r\n}\r\n\r\n/**\r\n * Get activity type label based on group\r\n * @param group - The node group\r\n * @returns Human-readable activity type label\r\n */\r\nexport function getActivityTypeLabel(group: string): string {\r\n return ACTIVITY_TYPE_LABELS[group] || 'Activity';\r\n}\r\n\r\n/**\r\n * Find activity display type by value\r\n * @param value - The display type value\r\n * @returns Display type or unmapped if not found\r\n */\r\nexport function getActivityDisplayTypeByValue(value: string): ActivityDisplayType {\r\n return ACTIVITY_DISPLAY_TYPES.find(dt => dt.value === value) || ACTIVITY_DISPLAY_TYPES[ACTIVITY_DISPLAY_TYPES.length - 1];\r\n}\r\n\r\nexport function getCreatableActivityDisplayTypeByValue(value: string): CreatableActivityDisplayType {\r\n return CREATABLE_ACTIVITY_DISPLAY_TYPES.find(type => type.value === value) || CREATABLE_ACTIVITY_DISPLAY_TYPES[0];\r\n}\r\n","import { ExtendedActivity, Review } from \"../types/extended-activity\";\r\nimport { getNodeIcon, getNodeColorClass, getActivityTypeLabel } from \"./node-mappings\";\r\n\r\nfunction escapeHtml(text: string): string {\r\n if (!text) return '';\r\n return text\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''');\r\n}\r\n\r\nexport function getTranformedActivityName(name: string): string {\r\n return name\r\n .split('-')\r\n .map(s => s.charAt(0).toLocaleUpperCase() + s.slice(1))\r\n .join(' ');\r\n}\r\n\r\nfunction getReviewElement(review?: Review): string {\r\n if (!review)\r\n return `No review is available`;\r\n\r\n const reviewColor = review.color;\r\n const reviewColorLabel = `${reviewColor.charAt(0).toUpperCase()}${reviewColor.slice(1)}`;\r\n\r\n const reviewLevelLabel = review.level.replace('_', ' ');\r\n\r\n return `\r\n <span class=\"review-${reviewColor}\">\r\n ${reviewColorLabel} (${reviewLevelLabel})\r\n </span>\r\n `;\r\n}\r\n\r\nexport function getNodeHtmlTemplate(data: ExtendedActivity): string {\r\n const group = data.wxccGroup || 'unknown';\r\n\r\n const colorClass = getNodeColorClass(group);\r\n const typeLabel = getActivityTypeLabel(group);\r\n\r\n const name = data.name ? data.name.split('\\n')[0] : '';\r\n const detailsHeading =\r\n (data.suggestedProperties && data.suggestedProperties.uccxDescription\r\n ? data.suggestedProperties.uccxDescription\r\n : '').trim();\r\n const activityName = data.wxccActivityName || 'unmapped';\r\n\r\n const iconInfo = data.iconUrl ?\r\n { iconSrc: data.iconUrl, alt: data.iconUrl } :\r\n getNodeIcon(typeLabel === 'Unmapped' ? typeLabel : activityName);\r\n const { iconSrc, alt } = iconInfo;\r\n\r\n const transformedActivityName = getTranformedActivityName(activityName);\r\n\r\n const extraDetails: { [key: string]: string } = {\r\n Review: getReviewElement(data.review)\r\n };\r\n\r\n // Allow highlight class to be toggled by data.highlighted property\r\n const highlightClass = (data as any).highlighted ? 'highlighted' : '';\r\n\r\n return `\r\n <div class=\"node-content ${colorClass} ${highlightClass}\">\r\n <header>\r\n <div class=\"node-icon\">\r\n <img\r\n src=\"${iconSrc}\"\r\n alt=\"${alt}\"\r\n title=\"${typeLabel}\"\r\n />\r\n </div>\r\n <div class=\"node-info\">\r\n <div class=\"node-label\" title=\"${escapeHtml(name)}\">${name}</div>\r\n <div class=\"node-activity-name\" title=\"${escapeHtml(transformedActivityName)}\">\r\n ${transformedActivityName}\r\n </div>\r\n </div>\r\n </header>\r\n <div class=\"node-details\">\r\n <div class=\"node-details-item\" title=\"${escapeHtml(detailsHeading)}\">${detailsHeading}</div>\r\n ${Object.entries(extraDetails).map(([key, value]) => {\r\n const fullText = `${key}: ${value}`;\r\n return `<div>${fullText}</div>`;\r\n })}\r\n </div>\r\n </div>\r\n `;\r\n}","import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core';\r\nimport {\r\n CREATABLE_ACTIVITY_DISPLAY_TYPES,\r\n CreatableActivityDisplayType,\r\n getCreatableActivityDisplayTypeByValue,\r\n} from '../../../utils/node-mappings';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ReadonlyExtendedActivity } from '../../../types/extended-activity';\r\n\r\nexport interface NewNodeData {\r\n activityTypeName: CreatableActivityDisplayType['activityName'];\r\n name: string;\r\n parentNodeIds: string[];\r\n childNodeIds: string[];\r\n}\r\n\r\n@Component({\r\n selector: 'add-node-dialog',\r\n templateUrl: './add-node-dialog.component.html',\r\n styleUrls: ['./add-node-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AddNodeDialogComponent implements OnInit {\r\n readonly activityDisplayTypes = CREATABLE_ACTIVITY_DISPLAY_TYPES;\r\n\r\n selectedActivityType: CreatableActivityDisplayType = CREATABLE_ACTIVITY_DISPLAY_TYPES[0];\r\n nodeName = '';\r\n selectedParentIds: string[] = [];\r\n selectedChildIds: string[] = [];\r\n availableNodes: ReadonlyExtendedActivity[] = [];\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: { availableNodes: ReadonlyExtendedActivity[] },\r\n private dialogRef: MatDialogRef<AddNodeDialogComponent>\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.availableNodes = this.data.availableNodes;\r\n }\r\n\r\n private resetForm(): void {\r\n this.selectedActivityType = CREATABLE_ACTIVITY_DISPLAY_TYPES[0];\r\n this.nodeName = '';\r\n this.selectedParentIds = [];\r\n this.selectedChildIds = [];\r\n }\r\n\r\n onActivityTypeChange(value: string): void {\r\n this.selectedActivityType = getCreatableActivityDisplayTypeByValue(value);\r\n }\r\n\r\n onClose(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onSubmit(): void {\r\n if (!this.nodeName.trim()) {\r\n return;\r\n }\r\n\r\n const newNodeData: NewNodeData = {\r\n activityTypeName: this.selectedActivityType.activityName,\r\n name: this.nodeName.trim(),\r\n parentNodeIds: this.selectedParentIds,\r\n childNodeIds: this.selectedChildIds\r\n };\r\n\r\n this.dialogRef.close(newNodeData);\r\n }\r\n\r\n trackByValue(index: number, type: CreatableActivityDisplayType): string {\r\n return type.value;\r\n }\r\n\r\n trackByNodeId(index: number, node: ReadonlyExtendedActivity): string {\r\n return node.id;\r\n }\r\n}\r\n","","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ReadonlyExtendedActivity } from '../../../types/extended-activity';\r\n\r\nexport interface LinkNodeData {\r\n sourceNodeId: string;\r\n targetNodeId: string;\r\n label?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'link-node-dialog',\r\n templateUrl: './link-node-dialog.component.html',\r\n styleUrls: ['./link-node-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class LinkNodeDialogComponent implements OnInit, OnChanges {\r\n // @Input() isOpen = false;\r\n // @Input() sourceNode: ActivityData | null = null;\r\n \r\n availableNodes: ReadonlyExtendedActivity[] = [];\r\n sourceNode!: ReadonlyExtendedActivity;\r\n\r\n @Output() close = new EventEmitter<void>();\r\n @Output() linkNodes = new EventEmitter<LinkNodeData>();\r\n\r\n selectedTargetId: string | null = null;\r\n linkLabel = '';\r\n searchQuery = '';\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: {\r\n sourceNode: ReadonlyExtendedActivity,\r\n availableNodes: ReadonlyExtendedActivity[]\r\n },\r\n private readonly dialogRef: MatDialogRef<LinkNodeDialogComponent>\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.availableNodes = this.data.availableNodes;\r\n this.sourceNode = this.data.sourceNode;\r\n }\r\n\r\n get filteredNodes(): ReadonlyExtendedActivity[] {\r\n if (!this.sourceNode) {\r\n return [];\r\n }\r\n \r\n if (!this.searchQuery.trim()) {\r\n return this.availableNodes.filter(n => n && n.id !== this.sourceNode!.id);\r\n }\r\n \r\n const query = this.searchQuery.toLowerCase();\r\n return this.availableNodes.filter(n => \r\n n && n.id !== this.sourceNode!.id && \r\n ((n.name && n.name.toLowerCase().includes(query)) || \r\n (n.wxccActivityName && n.wxccActivityName.toLowerCase().includes(query)))\r\n );\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // if (changes['isOpen'] && this.isOpen) {\r\n // this.resetForm();\r\n // }\r\n }\r\n\r\n private resetForm(): void {\r\n this.selectedTargetId = null;\r\n this.linkLabel = '';\r\n this.searchQuery = '';\r\n }\r\n\r\n selectNode(nodeId: string): void {\r\n this.selectedTargetId = nodeId;\r\n }\r\n\r\n isSelected(nodeId: string): boolean {\r\n return this.selectedTargetId === nodeId;\r\n }\r\n\r\n onClose(): void {\r\n this.dialogRef.close();\r\n }\r\n \r\n\r\n onSubmit(): void {\r\n if (!this.sourceNode || !this.selectedTargetId) {\r\n return;\r\n }\r\n\r\n const linkData: LinkNodeData = {\r\n sourceNodeId: this.sourceNode.id,\r\n targetNodeId: this.selectedTargetId,\r\n label: this.linkLabel.trim() || undefined\r\n };\r\n\r\n this.dialogRef.close(linkData);\r\n // this.linkNodes.emit(linkData);\r\n // this.onClose();\r\n }\r\n\r\n trackByNodeId(index: number, node: ReadonlyExtendedActivity): string {\r\n return node.id;\r\n }\r\n}\r\n","","import { Injectable } from \"@angular/core\";\r\nimport * as uuid from \"uuid\";\r\nimport { IWxCCFlowchart, IWxCCJSON, IWxCCNonIRJSON, WxCCFlowchartEdge, WxCCFlowchartNode } from \"../types/wxcc\";\r\nimport { ExtendedActivity, ExtendedLink } from \"../types/extended-activity\";\r\n\r\n@Injectable()\r\nexport class WxCC2GraphService {\r\n wxccJSON!: IWxCCJSON;\r\n wxccNonIRJSON!: IWxCCNonIRJSON;\r\n\r\n parseWxCC(wxcc: IWxCCJSON, nonIr?: IWxCCNonIRJSON): IWxCCFlowchart {\r\n this.wxccJSON = wxcc;\r\n if (nonIr) {\r\n this.wxccNonIRJSON = nonIr;\r\n }\r\n\r\n const nodes: WxCCFlowchartNode[] = [];\r\n const edges: WxCCFlowchartEdge[] = [];\r\n\r\n wxcc.activities.forEach(activity => nodes.push(this.toWxCCNode(activity)));\r\n wxcc.links.forEach(link => edges.push(this.toWxCCEdge(link)));\r\n\r\n return {\r\n flowId: wxcc.generatedAt,\r\n flowName: wxcc.prefix,\r\n nodes: nodes,\r\n edges: edges\r\n } as IWxCCFlowchart;\r\n }\r\n\r\n setSourceDocuments(ir: IWxCCJSON, nonIr: IWxCCNonIRJSON): void {\r\n this.wxccJSON = ir;\r\n this.wxccNonIRJSON = nonIr;\r\n }\r\n\r\n updateActivityData(data: ExtendedActivity): boolean {\r\n const { iconUrl, ...dataWithoutIcon } = data;\r\n\r\n const wxccActivityData = this.getActivityById(data.id);\r\n\r\n if (!wxccActivityData) {\r\n console.error(`Activity with id ${data.id} not found`);\r\n return false;\r\n }\r\n\r\n const source = dataWithoutIcon as Record<string, any>;\r\n const target = wxccActivityData as Record<string, any>;\r\n\r\n Object.keys(source).forEach(key => {\r\n if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {\r\n // For nested objects, merge them recursively\r\n target[key] = { ...target[key], ...source[key] };\r\n } else {\r\n // For primitives and arrays, assign directly\r\n target[key] = source[key];\r\n }\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Add a new activity to the graph\r\n */\r\n addActivity(activity: ExtendedActivity): WxCCFlowchartNode {\r\n // Add to internal JSON structure\r\n (this.wxccJSON.activities as ExtendedActivity[]).push(activity);\r\n return this.toWxCCNode(activity);\r\n }\r\n\r\n /**\r\n * Remove an activity and all its connected links\r\n */\r\n removeActivity(activityId: string): { removedLinkIds: string[] } {\r\n // Remove the activity\r\n const activityIndex = this.wxccJSON.activities.findIndex(a => a.id === activityId);\r\n if (activityIndex !== -1) {\r\n (this.wxccJSON.activities as ExtendedActivity[]).splice(activityIndex, 1);\r\n }\r\n\r\n // Find and remove all links connected to this activity\r\n const removedLinkIds: string[] = [];\r\n const linksToRemove = this.wxccJSON.links.filter(\r\n link => link.sourceActivityId === activityId || link.targetActivityId === activityId\r\n );\r\n\r\n linksToRemove.forEach(link => {\r\n removedLinkIds.push(link.id);\r\n const linkIndex = this.wxccJSON.links.findIndex(l => l.id === link.id);\r\n if (linkIndex !== -1) {\r\n (this.wxccJSON.links as ExtendedLink[]).splice(linkIndex, 1);\r\n }\r\n });\r\n\r\n return { removedLinkIds };\r\n }\r\n\r\n /**\r\n * Add a new link between two activities\r\n */\r\n addLink(sourceActivityId: string, targetActivityId: string, label?: string): WxCCFlowchartEdge {\r\n const linkId = this.generateId();\r\n\r\n const link: ExtendedLink = {\r\n id: linkId,\r\n sourceActivityId,\r\n targetActivityId,\r\n uccxLabel: label || ''\r\n };\r\n\r\n (this.wxccJSON.links as ExtendedLink[]).push(link);\r\n return this.toWxCCEdge(link);\r\n }\r\n\r\n /**\r\n * Remove a link by its id\r\n */\r\n removeLink(linkId: string): boolean {\r\n const linkIndex = this.wxccJSON.links.findIndex(l => l.id === linkId);\r\n if (linkIndex !== -1) {\r\n (this.wxccJSON.links as ExtendedLink[]).splice(linkIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if a link already exists between two nodes\r\n */\r\n linkExists(sourceActivityId: string, targetActivityId: string): boolean {\r\n return this.wxccJSON.links.some(\r\n link => link.sourceActivityId === sourceActivityId && link.targetActivityId === targetActivityId\r\n );\r\n }\r\n\r\n /**\r\n * Get all activities for selection purposes\r\n */\r\n getAllActivities(): ExtendedActivity[] {\r\n return [...this.wxccJSON.activities];\r\n }\r\n\r\n getActivityById(id: string): ExtendedActivity | undefined {\r\n return this.wxccJSON.activities.find(a => a.id === id);\r\n }\r\n\r\n generateId() {\r\n return uuid.v4();\r\n }\r\n\r\n private toWxCCNode(activity: ExtendedActivity): WxCCFlowchartNode {\r\n const label = activity.name || activity.wxccActivityName || 'Activity';\r\n return {\r\n data: {\r\n ...activity,\r\n label: label\r\n }\r\n }\r\n }\r\n\r\n private toWxCCEdge(link: ExtendedLink): WxCCFlowchartEdge {\r\n const label = link.uccxLabel || link.conditionExpr || '';\r\n return {\r\n data: {\r\n ...link,\r\n source: link.sourceActivityId,\r\n target: link.targetActivityId,\r\n label: label\r\n }\r\n }\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { CollectionReturnValue, Core, Css } from \"cytoscape\";\r\n\r\ntype ViewportConfig = Readonly<{\r\n minZoomLevel: number,\r\n maxZoomLevel: number,\r\n animateOptions: {\r\n duration: number,\r\n easing: Css.TransitionTimingFunction\r\n }\r\n}>;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CytoscapeViewportService {\r\n \r\n readonly config: ViewportConfig = {\r\n minZoomLevel: 0.8,\r\n maxZoomLevel: 1.2,\r\n animateOptions: {\r\n duration: 400,\r\n easing: 'ease-in-out-cubic'\r\n }\r\n };\r\n\r\n zoomIn(cy: Core): void {\r\n this.handleZoomChange(cy, this.config.maxZoomLevel);\r\n }\r\n\r\n zoomOut(cy: Core): void {\r\n this.handleZoomChange(cy, this.config.minZoomLevel);\r\n }\r\n\r\n resetView(cy: Core, eles: CollectionReturnValue): void {\r\n this.fitToView(cy, eles);\r\n }\r\n\r\n private handleZoomChange(cy: Core, zoomLevel: number): void {\r\n if (cy) {\r\n const currentZoom = cy.zoom();\r\n const newZoom = currentZoom * zoomLevel;\r\n const zoomDelta = newZoom / currentZoom;\r\n\r\n const pan = cy.pan();\r\n const containerWidth = cy.width();\r\n const containerHeight = cy.height();\r\n\r\n const centerX = containerWidth / 2;\r\n const centerY = containerHeight / 2;\r\n\r\n // Adjust pan to zoom toward center\r\n const newPan = {\r\n x: centerX - (centerX - pan.x) * zoomDelta,\r\n y: centerY - (centerY - pan.y) * zoomDelta\r\n };\r\n\r\n cy.viewport({\r\n zoom: newZoom,\r\n pan: newPan\r\n });\r\n }\r\n }\r\n\r\n private fitToView(cy: Core, eles: CollectionReturnValue, padding = 60): void {\r\n if (cy && eles) {\r\n cy.animate({\r\n fit: {\r\n eles: eles,\r\n padding: padding\r\n },\r\n duration: this.config.animateOptions.duration,\r\n easing: this.config.animateOptions.easing\r\n });\r\n }\r\n }\r\n}","\r\nimport { Injectable } from \"@angular/core\";\r\nimport { WxCCActivity, WxCCActivityMap, WxCCTemplatedActivityType } from \"../types/wxcc-activity\";\r\n\r\n@Injectable()\r\nexport class WxCCActivityManageService {\r\n\r\n private readonly ACTIVITY_TEMPLATES: Record<WxCCTemplatedActivityType, WxCCActivity> = {\r\n NewPhoneContact: {\r\n id: '',\r\n type: 'NewPhoneContact',\r\n group: 'start',\r\n name: 'NewPhoneContact',\r\n properties: {\r\n name: 'NewPhoneContact',\r\n event: 'NewPhoneContact',\r\n flowType: {\r\n eventSourceName: 'WebexContactCenter',\r\n eventSpecificationName: 'ContactStartWorkflow',\r\n eventClassificationId: '',\r\n eventClassificationName: '',\r\n eventSpecificationId: '',\r\n eventSourceId: ''\r\n },\r\n activityName: 'NewPhoneContact',\r\n _renderRequestTimestamp: Date.now(),\r\n activityId: 'start'\r\n }\r\n },\r\n \"blind-transfer\": {\r\n id: '',\r\n type: 'blind-transfer',\r\n group: 'terminating-action',\r\n name: 'BlindTransfer',\r\n properties: {\r\n name: 'BlindTransfer',\r\n activityName: 'blind-transfer',\r\n _renderRequestTimestamp: Date.now(),\r\n transfertodn: '',\r\n activityId: '',\r\n transfertodn_radioName: 'dn',\r\n 'transfertodn:radioName': 'dn',\r\n customAttributes: {},\r\n flowDecryptAccess: false,\r\n }\r\n },\r\n \"ivr-menu\": {\r\n id: '',\r\n type: 'ivr-menu',\r\n group: 'enum-gateway',\r\n name: 'Menu',\r\n properties: {\r\n connector_name: null,\r\n name: 'Menu',\r\n menuLinks: [],\r\n toggle: false,\r\n activityName: 'ivr-menu',\r\n prompts: [],\r\n _renderRequestTimestamp: Date.now(),\r\n 'connector:name': null,\r\n activityId: '',\r\n 'menuLinks:input': [],\r\n entryTimeout: 3,\r\n volumeGainDb: 0,\r\n menuLinks_input: [],\r\n voiceLanguage_name: null,\r\n promptsTts: null,\r\n interruptible: false,\r\n connector: null,\r\n speakingRate: 1,\r\n toggleLanguage: null,\r\n voiceLanguage: null,\r\n flowDecryptAccess: false,\r\n 'voiceLanguage:name': null\r\n }\r\n },\r\n \"play-message\": {\r\n id: '',\r\n type: 'play-message',\r\n group: 'action',\r\n name: 'PlayMessage',\r\n properties: {\r\n connector_name: null,\r\n name: 'PlayMessage',\r\n toggle: false,\r\n activityName: 'play-message',\r\n prompts: [],\r\n _renderRequestTimestamp: Date.now(),\r\n 'connector:name': null,\r\n activityId: '',\r\n volumeGainDb: 0,\r\n voiceLanguage_name: null,\r\n promptsTts: null,\r\n connector: null,\r\n speakingRate: 1,\r\n toggleLanguage: null,\r\n voiceLanguage: null,\r\n flowDecryptAccess: false,\r\n 'voiceLanguage:name': null\r\n }\r\n },\r\n \"play-music\": {\r\n id: '',\r\n type: 'play-music',\r\n group: 'action',\r\n name: 'PlayPrompt',\r\n properties: {\r\n connector_name: null,\r\n name: 'PlayPrompt',\r\n toggle: false,\r\n activityName: 'play-music',\r\n prompts: [],\r\n _renderRequestTimestamp: Date.now(),\r\n 'connector:name': null,\r\n activityId: '',\r\n volumeGainDb: 0,\r\n voiceLanguage_name: null,\r\n promptsTts: null,\r\n connector: null,\r\n speakingRate: 1,\r\n toggleLanguage: null,\r\n voiceLanguage: null,\r\n flowDecryptAccess: false,\r\n 'voiceLanguage:name': null\r\n }\r\n },\r\n \"set-variable\": {\r\n id: '',\r\n type: 'set-variable',\r\n group: 'set-variable',\r\n name: 'SetVariable',\r\n properties: {\r\n setTo: 'set-to-literal',\r\n name: 'SetVariable',\r\n literal_invalid_error: false,\r\n activityName: 'set-variable',\r\n _renderRequestTimestamp: Date.now(),\r\n activityId: 'set-variable',\r\n setVariablesArray: [],\r\n flowDecryptAccess: false\r\n }\r\n },\r\n \"business-hours\": {\r\n id: '',\r\n type: 'business-hours',\r\n name: '',\r\n group: '',\r\n properties: {\r\n activityName: 'business-hours',\r\n _renderRequestTimestamp: Date.now(),\r\n activityId: ''\r\n }\r\n }\r\n }\r\n\r\n create<K extends keyof WxCCActivityMap>(type: K): WxCCActivityMap[K] {\r\n return JSON.parse(JSON.stringify(this.ACTIVITY_TEMPLATES[type])) as WxCCActivityMap[K];\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { WxCC2GraphService } from \"./wxcc2graph.service\";\r\nimport { WxCCActivityManageService } from \"./wxcc-activity-manage.service\";\r\nimport { WxCCFlowchartNode } from \"../types/wxcc\";\r\nimport { ReadonlyExtendedActivity } from \"../types/extended-activity\";\r\nimport { WxCCActivity, WxCCTemplatedActivityType } from \"../types/wxcc-activity\";\r\nimport { ACTIVITY_DISPLAY_TYPES } from \"../utils/node-mappings\";\r\n\r\nexport interface CreateActivityRequest {\r\n activityTypeName: WxCCTemplatedActivityType;\r\n name: string;\r\n}\r\n\r\n@Injectable()\r\nexport class WxCCActivityCreationService {\r\n constructor(\r\n private readonly wxcc2graph: WxCC2GraphService,\r\n private readonly wxccActivityTemplateService: WxCCActivityManageService,\r\n ) { }\r\n\r\n createAndSync(request: CreateActivityRequest): WxCCFlowchartNode {\r\n const newActivityId = this.wxcc2graph.generateId();\r\n const activityTemplate = this.buildTemplatedActivity(request, newActivityId);\r\n\r\n this.seedNonIrActivity(activityTemplate, newActivityId);\r\n\r\n const activityData = this.buildExtendedActivity(request, activityTemplate, newActivityId);\r\n const node = this.wxcc2graph.addActivity(activityData);\r\n\r\n return node;\r\n }\r\n\r\n private buildTemplatedActivity(request: CreateActivityRequest, newActivityId: string): WxCCActivity {\r\n const activityTemplate = this.wxccActivityTemplateService.create(request.activityTypeName);\r\n const templateProperties = activityTemplate.properties;\r\n const displayType = ACTIVITY_DISPLAY_TYPES.find((type) => type.activityName === request.activityTypeName);\r\n\r\n activityTemplate.id = newActivityId;\r\n activityTemplate.name = request.name;\r\n activityTemplate.group = activityTemplate.group || displayType?.group || \"unmapped\";\r\n activityTemplate.properties.activityId = newActivityId;\r\n activityTemplate.properties._renderRequestTimestamp = Date.now();\r\n // @ts-ignore\r\n templateProperties.name = request.name;\r\n\r\n return activityTemplate;\r\n }\r\n\r\n private seedNonIrActivity(activityTemplate: WxCCActivity, newActivityId: string): void {\r\n const nonIrActivities = this.getNonIrActivitiesMap();\r\n if (!nonIrActivities) {\r\n return;\r\n }\r\n\r\n nonIrActivities[newActivityId] = {\r\n id: newActivityId,\r\n group: activityTemplate.group,\r\n name: activityTemplate.name,\r\n properties: {\r\n ...activityTemplate.properties,\r\n },\r\n };\r\n }\r\n\r\n private getNonIrActivitiesMap(): Record<string, any> | null {\r\n const nonIrDoc = this.wxcc2graph.wxccNonIRJSON;\r\n if (!nonIrDoc) {\r\n return null;\r\n }\r\n\r\n const process = nonIrDoc.process;\r\n if (!process) {\r\n return null;\r\n }\r\n\r\n const activities = process.activities;\r\n if (!activities) {\r\n return null;\r\n }\r\n\r\n return activities as Record<string, any>;\r\n }\r\n\r\n private buildExtendedActivity(request: CreateActivityRequest, activityTemplate: WxCCActivity, newActivityId: string): ReadonlyExtendedActivity {\r\n const displayType = ACTIVITY_DISPLAY_TYPES.find((type) => type.activityName === request.activityTypeName);\r\n\r\n return {\r\n id: newActivityId,\r\n name: request.name,\r\n wxccActivityName: activityTemplate.type,\r\n wxccGroup: activityTemplate.group,\r\n wxccActivityId: activityTemplate.properties.activityId,\r\n // @ts-ignore\r\n iconUrl: displayType.icon || \"assets/wxcc/unmapped.svg\",\r\n suggestedProperties: {\r\n uccxDescription: \"\",\r\n },\r\n };\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\ntype _ToolbarItem = {\r\n id: string,\r\n label: string,\r\n svg: SafeHtml,\r\n action: () => void\r\n};\r\n\r\nexport interface FloatingToolbarVisibility {\r\n resetView?: boolean;\r\n zoomIn?: boolean;\r\n zoomOut?: boolean;\r\n export?: boolean;\r\n}\r\n\r\nconst DEFAULT_VISIBILITY: FloatingToolbarVisibility = {\r\n resetView: true,\r\n zoomIn: true,\r\n zoomOut: true,\r\n export: true\r\n};\r\n\r\n@Component({\r\n selector: 'graph-floating-toolbar',\r\n templateUrl: './floating-toolbar.component.html',\r\n styleUrls: ['./floating-toolbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FloatingToolBarComponent implements OnInit {\r\n @Input() visibility: FloatingToolbarVisibility = DEFAULT_VISIBILITY;\r\n\r\n toolbarConfig!: Readonly<_ToolbarItem>[];\r\n\r\n @Output() resetViewChange = new EventEmitter<void>();\r\n @Output() zoomInChange = new EventEmitter<void>();\r\n @Output() zoomOutChange = new EventEmitter<void>();\r\n @Output() exportImageChange = new EventEmitter<void>();\r\n\r\n constructor(\r\n private sanitizer: DomSanitizer\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n const mergedVisibility = { ...DEFAULT_VISIBILITY, ...this.visibility };\r\n \r\n const allItems: (_ToolbarItem & { visibilityKey: keyof FloatingToolbarVisibility })[] = [\r\n {\r\n id: 'reset-view',\r\n visibilityKey: 'resetView',\r\n label: 'UCCX.BUTTONS.RESET_VIEW',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"></path>\r\n <path d=\"M21 3v5h-5\"></path>\r\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"></path>\r\n <path d=\"M3 21v-5h5\"></path>\r\n </svg>`),\r\n action: () => this.resetView()\r\n },\r\n {\r\n id: 'zoom-in',\r\n visibilityKey: 'zoomIn',\r\n label: 'UCCX.BUTTONS.ZOOM_IN',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n <path d=\"m21 21-4.35-4.35\"></path>\r\n <path d=\"M11 8v6M8 11h6\"></path>\r\n </svg>`),\r\n action: () => this.zoomIn()\r\n },\r\n {\r\n id: 'zoom-out',\r\n visibilityKey: 'zoomOut',\r\n label: 'UCCX.BUTTONS.ZOOM_OUT',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n <path d=\"m21 21-4.35-4.35\"></path>\r\n <path d=\"M8 11h6\"></path>\r\n </svg>`),\r\n action: () => this.zoomOut()\r\n },\r\n {\r\n id: 'export',\r\n visibilityKey: 'export',\r\n label: 'UCCX.BUTTONS.EXPORT',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\r\n <polyline points=\"7 10 12 15 17 10\"></polyline>\r\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\r\n </svg>`),\r\n action: () => this.exportImage()\r\n }\r\n ];\r\n\r\n this.toolbarConfig = allItems.filter(item => mergedVisibility[item.visibilityKey] !== false);\r\n }\r\n\r\n resetView(): void {\r\n this.resetViewChange.emit();\r\n }\r\n\r\n zoomIn(): void {\r\n this.zoomInChange.emit();\r\n }\r\n\r\n zoomOut(): void {\r\n this.zoomOutChange.emit();\r\n }\r\n\r\n exportImage(): void {\r\n this.exportImageChange.emit();\r\n }\r\n\r\n trackById(index: number, item: _ToolbarItem): string {\r\n return item.id;\r\n }\r\n}","<div class=\"toolbar-wrapper\" role=\"toolbar\">\r\n <ng-container *ngFor=\"let item of toolbarConfig; trackBy: trackById\">\r\n <button\r\n type=\"button\"\r\n [attr.aria-label]=\"item.label\"\r\n [matTooltip]=\"item.label\"\r\n matTooltipPosition=\"left\"\r\n class=\"toolbar-button\"\r\n (click)=\"item.action()\">\r\n <div [innerHTML]=\"item.svg\"></div>\r\n </button>\r\n </ng-container>\r\n</div>","import { Component, EventEmitter, Input, Output, OnChanges, ChangeDetectionStrategy, SimpleChanges } from '@angular/core';\r\nimport {\r\n ACTIVITY_DISPLAY_TYPES,\r\n ActivityDisplayType,\r\n getNodeColorClass,\r\n getActivityDisplayTypeByValue,\r\n ICON_MAP\r\n} from '../../utils/node-mappings';\r\nimport { getTranformedActivityName } from '../../utils/node-html-template';\r\nimport { ReadonlyExtendedActivity } from '../../types/extended-activity';\r\n\r\n@Component({\r\n selector: 'node-details-sidebar',\r\n templateUrl: './node-details-sidebar.component.html',\r\n styleUrls: ['./node-details-sidebar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NodeDetailsSidebarComponent {\r\n @Input() isOpen = false;\r\n @Input() nodeData: ReadonlyExtendedActivity | null = null;\r\n\r\n @Output() close = new EventEmitter<void>();\r\n @Output() activityTypeChange = new EventEmitter<ActivityDisplayType>();\r\n @Output() descriptionChange = new EventEmitter<string>();\r\n\r\n readonly activityDisplayTypes = ACTIVITY_DISPLAY_TYPES;\r\n\r\n transformedActivityName!: string;\r\n selectedActivityType: ActivityDisplayType | null = null;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['nodeData'] && this.nodeData) {\r\n this.initializeActivityType();\r\n }\r\n }\r\n\r\n private initializeActivityType(): void {\r\n const activityName = this.nodeData && this.nodeData.wxccActivityName;\r\n this.selectedActivityType = getActivityDisplayTypeByValue((activityName || 'unmapped').toLocaleLowerCase());\r\n this.transformedActivityName = getTranformedActivityName(activityName || 'unmapped');\r\n }\r\n\r\n onDescriptionChange(event: Event): void {\r\n const target = event.target as HTMLTextAreaElement | null;\r\n\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const description = target.value.trim();\r\n\r\n if (!description)\r\n return;\r\n\r\n this.descriptionChange.emit(description);\r\n }\r\n\r\n private onActivityTypeChange(type: ActivityDisplayType): void {\r\n this.selectedActivityType = type;\r\n this.activityTypeChange.emit(type);\r\n }\r\n\r\n onActivityTypeSelectChange(event: Event): void {\r\n const target = event.target as HTMLSelectElement | null;\r\n\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const value = target.value;\r\n const type = getActivityDisplayTypeByValue(value);\r\n this.onActivityTypeChange(type);\r\n }\r\n\r\n onClose(): void {\r\n this.close.emit();\r\n }\r\n\r\n getNodeIcon(): string {\r\n return (this.selectedActivityType && this.selectedActivityType.icon) || ICON_MAP['unmapped'];\r\n }\r\n\r\n getNodeColorClass(): string {\r\n const group = (this.selectedActivityType && this.selectedActivityType.group) || 'unmapped';\r\n return getNodeColorClass(group);\r\n }\r\n\r\n getReviewColor(): string {\r\n const color =\r\n (this.nodeData && this.nodeData.review && this.nodeData.review.color) ||\r\n 'green';\r\n const colors: { [key: string]: string } = {\r\n 'green': '#4CAF50',\r\n 'yellow': '#FF9800',\r\n 'red': '#F44336'\r\n };\r\n return colors[color] || colors['green'];\r\n }\r\n\r\n getReviewLabel(): string {\r\n const color =\r\n (this.nodeData && this.nodeData.review && this.nodeData.review.color) ||\r\n 'green';\r\n const level =\r\n (this.nodeData && this.nodeData.review && this.nodeData.review.level) ||\r\n 'confident';\r\n return `${color.charAt(0).toUpperCase() + color.slice(1)} (${level.replace('_', ' ')})`;\r\n }\r\n\r\n trackByValue(index: number, type: ActivityDisplayType): string {\r\n return type.value;\r\n }\r\n}","<!-- <div class=\"sidebar-overlay\" *ngIf=\"isOpen\" (click)=\"onClose()\"></div> -->\r\n\r\n<div class=\"node-details-sidebar\" [class.open]=\"isOpen\">\r\n <div class=\"sidebar-header\">\r\n <h3>Node Details</h3>\r\n <button class=\"close-btn\" (click)=\"onClose()\">\r\n <span>×</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"sidebar-content\" *ngIf=\"nodeData\">\r\n <!-- Node Preview -->\r\n <div class=\"node-preview\">\r\n <div class=\"node-preview-card\" [ngClass]=\"getNodeColorClass()\">\r\n <div class=\"node-icon\">\r\n <img [src]=\"getNodeIcon()\" alt=\"Node Icon\" />\r\n </div>\r\n <div class=\"node-info\">\r\n <div class=\"node-label\">{{ nodeData.name?.split(\"\\n\")?.[0] }}</div>\r\n <div class=\"node-type\">{{ transformedActivityName }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Activity Type Selector -->\r\n <div class=\"section\">\r\n <label class=\"section-label\">Activity Type</label>\r\n <div class=\"display-type-selector\">\r\n <select\r\n class=\"form-control\"\r\n title=\"Select activity type\"\r\n [value]=\"selectedActivityType?.value\"\r\n (change)=\"onActivityTypeSelectChange($event)\"\r\n >\r\n <option\r\n *ngFor=\"let type of activityDisplayTypes; trackBy: trackByValue\"\r\n [value]=\"type.value\"\r\n >\r\n {{ type.label }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section\">\r\n <label class=\"section-label\">Description</label>\r\n <div class=\"display-type-selector\">\r\n <textarea\r\n class=\"form-control\"\r\n aria-label=\"property-description\"\r\n (input)=\"onDescriptionChange($event)\"\r\n [value]=\"nodeData.suggestedProperties?.uccxDescription\"\r\n rows=\"3\"\r\n ></textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Node Information -->\r\n <div class=\"section\">\r\n <label class=\"section-label\">Information</label>\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">UCCX Type:</span>\r\n <span class=\"info-value\" [title]=\"nodeData.uccxTypeName\">{{\r\n nodeData.uccxTypeName\r\n }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">WxCC Activity Name:</span>\r\n <span class=\"info-value\" [title]=\"transformedActivityName\">{{\r\n transformedActivityName\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Review Status -->\r\n <div class=\"section\" *ngIf=\"nodeData.review\">\r\n <label class=\"section-label\">Review Status</label>\r\n <div class=\"review-status\">\r\n <div class=\"review-badge\" [style.background-color]=\"getReviewColor()\">\r\n {{ getReviewLabel() }}\r\n </div>\r\n <div\r\n class=\"review-reasons\"\r\n *ngIf=\"nodeData.review.reasons && nodeData.review.reasons.length > 0\"\r\n >\r\n <div class=\"reason\" *ngFor=\"let reason of nodeData.review.reasons\">\r\n <span class=\"reason-icon\">⚠</span>\r\n <span>{{ reason }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Suggested Properties -->\r\n <div class=\"section\" *ngIf=\"nodeData.suggestedProperties\">\r\n <label class=\"section-label\">Migration Information</label>\r\n <div class=\"migration-info\">\r\n <div\r\n class=\"info-card\"\r\n *ngIf=\"nodeData.suggestedProperties.closestWxccActivity\"\r\n >\r\n <div class=\"card-label\">Closest WXCC Activity</div>\r\n <div class=\"card-value\">\r\n {{ nodeData.suggestedProperties.closestWxccActivity }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"info-card\"\r\n *ngIf=\"nodeData.suggestedProperties.mappingNotes\"\r\n >\r\n <div class=\"card-label\">Mapping Notes</div>\r\n <div class=\"card-value\">\r\n {{ nodeData.suggestedProperties.mappingNotes }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"info-card\"\r\n *ngIf=\"nodeData.suggestedProperties.migrationInstructions\"\r\n >\r\n <div class=\"card-label\">Migration Instructions</div>\r\n <div class=\"card-value instructions\">\r\n {{ nodeData.suggestedProperties.migrationInstructions }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\nexport interface NodeToolbarPosition {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface NodeActionToolbarAction {\r\n id: string;\r\n label: string;\r\n svg: SafeHtml;\r\n action: () => void;\r\n}\r\n\r\n@Component({\r\n selector: 'node-action-toolbar',\r\n templateUrl: './node-action-toolbar.component.html',\r\n styleUrls: ['./node-action-toolbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NodeActionToolbarComponent {\r\n @Input() isVisible = false;\r\n @Input() position: NodeToolbarPosition = { x: 0, y: 0 };\r\n\r\n @Output() deleteNode = new EventEmitter<void>();\r\n @Output() linkNode = new EventEmitter<void>();\r\n\r\n toolbarActions: NodeActionToolbarAction[];\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n this.toolbarActions = [\r\n {\r\n id: 'link',\r\n label: 'Link to Node',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path>\r\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path>\r\n </svg>\r\n `),\r\n action: () => this.onLinkNode()\r\n },\r\n {\r\n id: 'delete',\r\n label: 'Delete Node',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M3 6h18\"></path>\r\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"></path>\r\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"></path>\r\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\r\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\r\n </svg>\r\n `),\r\n action: () => this.onDeleteNode()\r\n }\r\n ];\r\n }\r\n\r\n onDeleteNode(): void {\r\n this.deleteNode.emit();\r\n }\r\n\r\n onLinkNode(): void {\r\n this.linkNode.emit();\r\n }\r\n\r\n trackById(index: number, item: NodeActionToolbarAction): string {\r\n return item.id;\r\n }\r\n}\r\n","<div \r\n class=\"node-action-toolbar\" \r\n [class.visible]=\"isVisible\"\r\n [style.left.px]=\"position.x\"\r\n [style.top.px]=\"position.y\">\r\n <ng-container *ngFor=\"let action of toolbarActions; trackBy: trackById\">\r\n <button\r\n type=\"button\"\r\n class=\"toolbar-action-btn\"\r\n [class.delete-btn]=\"action.id === 'delete'\"\r\n [attr.aria-label]=\"action.label\"\r\n [matTooltip]=\"action.label\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"action.action()\">\r\n <div [innerHTML]=\"action.svg\"></div>\r\n </button>\r\n </ng-container>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { ReadonlyExtendedActivity } from \"../../types/extended-activity\";\r\n\r\n@Component({\r\n selector: 'node-search-panel',\r\n templateUrl: './node-search-panel.component.html',\r\n styleUrls: ['./node-search-panel.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NodeSearchPanelComponent implements OnInit {\r\n @Input() nodes!: ReadonlyExtendedActivity[];\r\n\r\n @Output() private readonly searchChange = new EventEmitter<string>();\r\n @Output() private readonly selectNodeChange = new EventEmitter<string>();\r\n\r\n filteredNodes!: ReadonlyExtendedActivity[];\r\n\r\n ngOnInit(): void {\r\n this.filteredNodes = this.nodes;\r\n }\r\n\r\n onSearchChange(event: Event): void {\r\n const value = (event.target as HTMLInputElement).value.trim().toLowerCase();\r\n\r\n if (!value) {\r\n this.filteredNodes = this.nodes.slice();\r\n return;\r\n }\r\n\r\n this.filteredNodes = this.nodes\r\n .filter(node =>\r\n node.name?.toLowerCase().includes(value) ||\r\n node.wxccActivityName?.toLowerCase().includes(value) ||\r\n node.uccxTypeName?.toLowerCase().includes(value) ||\r\n node.wxccGroup?.toLowerCase().includes(value) ||\r\n node.uccxDisplayType?.toLowerCase().includes(value)\r\n );\r\n }\r\n\r\n onSelectNodeChange(event: Event): void {\r\n const target = event.target as HTMLElement;\r\n const id = target.id;\r\n\r\n this.selectNodeChange.emit(id);\r\n }\r\n}","<div class=\"search-panel\">\r\n <div class=\"search-input-wrapper\">\r\n <div class=\"search-icon\">\r\n <img src=\"assets/icons/search.svg\" />\r\n </div>\r\n <input (input)=\"onSearchChange($event)\" type=\"text\" name=\"\" id=\"\" placeholder=\"Search nodes by name, type, variables...\" class=\"search-input\">\r\n </div>\r\n <div class=\"search-results-wrapper\" (click)=\"onSelectNodeChange($event)\">\r\n <div class=\"activity-result-wrapper\" *ngFor=\"let act of filteredNodes\" id=\"{{ act.id }}\">\r\n {{ act.wxccActivityName || act.name }}\r\n </div>\r\n </div>\r\n</div>","import {\r\n\tAfterViewInit,\r\n\tChangeDetectionStrategy,\r\n\tChangeDetectorRef,\r\n\tComponent,\r\n\tElementRef,\r\n\tInput,\r\n\tOnChanges,\r\n\tOnDestroy,\r\n\tSimpleChanges,\r\n\tViewChild\r\n} from \"@angular/core\";\r\nimport { IWxCCFlowchart } from \"../../types/wxcc\";\r\nimport cytoscape, {\r\n\tElementDefinition,\r\n\tEdgeSingular,\r\n\tNodeSingular\r\n} from \"cytoscape\";\r\nimport dagre from \"cytoscape-dagre\";\r\nimport nodeHtmlLabel from \"cytoscape-node-html-label\";\r\nimport { StyleConfig } from \"../../constants/cytoscape.config\";\r\nimport { getNodeHtmlTemplate } from \"../../utils/node-html-template\";\r\nimport { ActivityDisplayType } from \"../../utils/node-mappings\";\r\nimport { WxCC2GraphService } from \"../../services/wxcc2graph.service\";\r\nimport { NodeToolbarPosition } from \"../node-action-toolbar/node-action-toolbar.component\";\r\nimport {\r\n\tAddNodeDialogComponent,\r\n\tNewNodeData\r\n} from \"../dialogs/add-node-dialog/add-node-dialog.component\";\r\nimport {\r\n\tLinkNodeData,\r\n\tLinkNodeDialogComponent\r\n} from \"../dialogs/link-node-dialog/link-node-dialog.component\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { ReadonlyExtendedActivity } from \"../../types/extended-activity\";\r\nimport { WxCCActivityCreationService } from \"../../services/wxcc-activity-creation.service\";\r\nimport { CytoscapeViewportService } from \"../../services/cystoscape-viewport.service\";\r\n\r\ncytoscape.use(dagre);\r\ncytoscape.use(nodeHtmlLabel as any);\r\n\r\n@Component({\r\n\tselector: \"wxcc-flowchart\",\r\n\ttemplateUrl: \"./wxcc-flowchart.component.html\",\r\n\tstyleUrls: [\"./wxcc-flowchart.component.scss\"],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class WxCCFlowchartComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n\t@Input() flowchart!: IWxCCFlowchart;\r\n\t@ViewChild(\"flowchartContainer\") flowchartContainer!: ElementRef<HTMLElement>;\r\n\r\n\tprivate cy?: cytoscape.Core;\r\n\tprivate viewReady = false;\r\n\tprivate readonly layoutOptions: dagre.DagreLayoutOptions = {\r\n\t\tname: \"dagre\",\r\n\t\trankDir: \"LR\",\r\n\t\tnodeSep: 180,\r\n\t\tedgeSep: 60,\r\n\t\trankSep: 150,\r\n\t\tanimate: true,\r\n\t\tanimationDuration: 500,\r\n\t\tfit: true\r\n\t};\r\n\r\n\t// Sidebar state\r\n\tisSidebarOpen = false;\r\n\tselectedNodeData: ReadonlyExtendedActivity | null = null;\r\n\r\n\t// Search panel state\r\n\tisSearchPanelVisible = false;\r\n\tsearchPanelVisible = false;\r\n\r\n\t// Node action toolbar state\r\n\tisNodeToolbarVisible = false;\r\n\tnodeToolbarPosition: NodeToolbarPosition = { x: 0, y: 0 };\r\n\r\n\t// Add node dialog state\r\n\tavailableNodes: ReadonlyExtendedActivity[] = [];\r\n\r\n\t// Link node dialog state\r\n\tisLinkDialogOpen = false;\r\n\tselectedEdgeId: string | null = null;\r\n\tselectedEdgeDeleteButtonPosition: { x: number; y: number } | null = null;\r\n\r\n\tconstructor(\r\n\t\tprivate readonly wxcc2graph: WxCC2GraphService,\r\n\t\tprivate readonly cytoscapeViewportService: CytoscapeViewportService,\r\n\t\tprivate readonly dialog: MatDialog,\r\n\t\tprivate readonly wxccActivityCreationService: WxCCActivityCreationService,\r\n\t\tprivate cdr: ChangeDetectorRef,\r\n\t) { }\r\n\r\n\tngAfterViewInit(): void {\r\n\t\tthis.viewReady = true;\r\n\t\tthis.tryInit();\r\n\t}\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tif (changes[\"flowchart\"]) {\r\n\t\t\tthis.tryInit();\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.cy?.destroy();\r\n\t\tthis.cy = undefined;\r\n\t}\r\n\r\n\tprivate tryInit(): void {\r\n\t\tif (!this.viewReady || !this.flowchartContainer || !this.flowchart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.init();\r\n\t}\r\n\r\n\tprivate init(): void {\r\n\t\tconst container = this.flowchartContainer.nativeElement;\r\n\r\n\t\tthis.cy?.destroy();\r\n\t\tthis.cy = undefined;\r\n\r\n\t\tconst elements: ElementDefinition[] = [\r\n\t\t\t...this.flowchart.nodes,\r\n\t\t\t...this.flowchart.edges,\r\n\t\t];\r\n\r\n\t\tthis.cy = cytoscape({\r\n\t\t\tcontainer: container,\r\n\t\t\telements: elements,\r\n\t\t\tstyle: this.getStylesheet(),\r\n\t\t});\r\n\r\n\t\t(this.cy as any).nodeHtmlLabel([\r\n\t\t\t{\r\n\t\t\t\tquery: \"node\",\r\n\t\t\t\thalign: \"center\",\r\n\t\t\t\tvalign: \"center\",\r\n\t\t\t\thalignBox: \"center\",\r\n\t\t\t\tvalignBox: \"center\",\r\n\t\t\t\ttpl: (data: ReadonlyExtendedActivity) => getNodeHtmlTemplate(data),\r\n\t\t\t},\r\n\t\t]);\r\n\r\n\t\tconst layout = this.cy?.layout({\r\n\t\t\t...this.layoutOptions,\r\n\t\t}).run();\r\n\r\n\t\tlayout.on(\"layoutstop\", () => {\r\n\t\t\tthis.cytoscapeViewportService.resetView(this.cy as any, this.cy?.elements() as any);\r\n\t\t});\r\n\r\n\t\tthis.setupEventListeners();\r\n\t}\r\n\r\n\tget activities() { return this.wxcc2graph.getAllActivities(); }\r\n\r\n\t// Toggle search panel visibility\r\n\ttoggleSearchPanel(): void {\r\n\t\tthis.isSearchPanelVisible = !this.isSearchPanelVisible;\r\n\t\tthis.cdr.markForCheck();\r\n\t}\r\n\r\n\tprivate setupEventListeners(): void {\r\n\t\t// Single tap on node - show only the toolbar (quick actions)\r\n\t\tthis.cy?.on(\"mouseover\", \"node\", (event) => {\r\n\t\t\tconst node = event.target as NodeSingular;\r\n\t\t\tthis.selectedNodeData = node.data() as ReadonlyExtendedActivity;\r\n\r\n\t\t\t// Calculate toolbar position relative to the container\r\n\t\t\tthis.updateToolbarPosition(node);\r\n\t\t\tthis.isNodeToolbarVisible = true;\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\tthis.cy?.on(\"tap\", \"node\", (event) => {\r\n\t\t\tconst node = event.target as NodeSingular;\r\n\t\t\tthis.clearSelectedEdge();\r\n\t\t\tthis.selectedNodeData = node.data() as ReadonlyExtendedActivity;\r\n\t\t\tthis.isSidebarOpen = true;\r\n\r\n\t\t\t// Hide toolbar when sidebar opens\r\n\t\t\tthis.isNodeToolbarVisible = false;\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\tthis.cy?.on(\"mousemove\", \"node\", (event) => {\r\n\t\t\tconst node = event.target as NodeSingular;\r\n\t\t\tthis.updateToolbarPosition(node);\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\t// Edge tap - select edge for explicit deletion action\r\n\t\tthis.cy?.on(\"tap\", \"edge\", (event) => {\r\n\t\t\tconst edge = event.target as EdgeSingular;\r\n\r\n\t\t\tthis.isSidebarOpen = false;\r\n\t\t\tthis.hideNodeToolbar();\r\n\t\t\tthis.selectedNodeData = null;\r\n\r\n\t\t\tthis.selectedEdgeId = edge.id();\r\n\t\t\tedge.select();\r\n\t\t\tthis.updateSelectedEdgeDeleteButtonPosition();\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\t// Canvas tap - hide toolbar and deselect\r\n\t\tthis.cy?.on(\"tap\", (event) => {\r\n\t\t\tif (event.target === this.cy) {\r\n\t\t\t\tthis.clearSelectedEdge();\r\n\t\t\t\tthis.isSidebarOpen = false;\r\n\t\t\t\tthis.hideNodeToolbar();\r\n\t\t\t\tthis.selectedNodeData = null;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Pan/zoom events - update toolbar position\r\n\t\tthis.cy?.on(\"pan zoom\", () => {\r\n\t\t\tif (this.isNodeToolbarVisible && this.selectedNodeData) {\r\n\t\t\t\tconst node = this.cy?.getElementById(this.selectedNodeData.id);\r\n\t\t\t\tif (node?.length) {\r\n\t\t\t\t\tthis.updateToolbarPosition(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.selectedEdgeId) {\r\n\t\t\t\tthis.updateSelectedEdgeDeleteButtonPosition();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate updateToolbarPosition(node: NodeSingular): void {\r\n\t\tconst renderedPosition = node.renderedPosition();\r\n\t\tconst renderedWidth = node.renderedWidth();\r\n\t\tconst renderedHeight = node.renderedHeight();\r\n\r\n\t\t// Position toolbar above the node, centered\r\n\t\tthis.nodeToolbarPosition = {\r\n\t\t\tx: renderedPosition.x - 30, // Center the toolbar (approx half toolbar width)\r\n\t\t\ty: renderedPosition.y - renderedHeight / 2 - 40, // Above the node\r\n\t\t};\r\n\t}\r\n\r\n\tprivate hideNodeToolbar(): void {\r\n\t\tthis.isNodeToolbarVisible = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate getStylesheet(): cytoscape.StylesheetStyle[] {\r\n\t\treturn StyleConfig;\r\n\t}\r\n\r\n\t// ==================== Sidebar Events ====================\r\n\r\n\tonCloseSidebar(): void {\r\n\t\tthis.isSidebarOpen = false;\r\n\t\tthis.hideNodeToolbar();\r\n\t\tthis.selectedNodeData = null;\r\n\t\t// this.cdr.detectChanges();\r\n\t}\r\n\r\n\tonDescriptionChange(description: string): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst node = this.cy?.getElementById(this.selectedNodeData.id);\r\n\t\tif (node) {\r\n\t\t\tconst updatedData: ReadonlyExtendedActivity = {\r\n\t\t\t\t...this.selectedNodeData,\r\n\t\t\t\tsuggestedProperties: {\r\n\t\t\t\t\t...this.selectedNodeData.suggestedProperties,\r\n\t\t\t\t\tuccxDescription: description,\r\n\t\t\t\t},\r\n\t\t\t};\r\n\r\n\t\t\tthis.wxcc2graph.updateActivityData(updatedData);\r\n\t\t\tnode.data(updatedData);\r\n\r\n\t\t\tthis.selectedNodeData = updatedData;\r\n\t\t}\r\n\t}\r\n\r\n\tonActivityTypeChange(activityType: ActivityDisplayType): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst node = this.cy?.getElementById(this.selectedNodeData.id);\r\n\t\tif (node) {\r\n\t\t\tconst updatedData: ReadonlyExtendedActivity = {\r\n\t\t\t\t...this.selectedNodeData,\r\n\t\t\t\twxccActivityName: activityType.activityName,\r\n\t\t\t\twxccGroup: activityType.group,\r\n\t\t\t\ticonUrl: activityType.icon\r\n\t\t\t};\r\n\r\n\t\t\tthis.wxcc2graph.updateActivityData(updatedData);\r\n\t\t\tnode.data(updatedData);\r\n\r\n\t\t\tthis.selectedNodeData = updatedData;\r\n\t\t}\r\n\t}\r\n\r\n\t// ==================== Node Toolbar Events ====================\r\n\r\n\tonDeleteNode(): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst nodeId = this.selectedNodeData.id;\r\n\r\n\t\t// Remove from service and get affected link IDs\r\n\t\tconst { removedLinkIds } = this.wxcc2graph.removeActivity(nodeId);\r\n\r\n\t\t// Remove edges from cytoscape\r\n\t\tremovedLinkIds.forEach((linkId) => {\r\n\t\t\tthis.cy?.getElementById(linkId).remove();\r\n\t\t});\r\n\r\n\t\t// Remove node from cytoscape\r\n\t\tthis.cy?.getElementById(nodeId).remove();\r\n\r\n\t\t// Close sidebar and toolbar\r\n\t\tthis.onCloseSidebar();\r\n\r\n\t\t// Re-run layout\r\n\t\tthis.runLayout();\r\n\t}\r\n\r\n\tonDeleteSelectedEdge(): void {\r\n\t\tif (!this.selectedEdgeId || !this.cy) return;\r\n\r\n\t\tconst edgeId = this.selectedEdgeId;\r\n\t\tconst removed = this.wxcc2graph.removeLink(edgeId);\r\n\t\tif (!removed) return;\r\n\r\n\t\tthis.cy?.getElementById(edgeId).remove();\r\n\t\tthis.selectedEdgeId = null;\r\n\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tonLinkNodeRequest(): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst sourceNode = this.selectedNodeData;\r\n\r\n\t\tif (!this.canCreateOutgoingLink(sourceNode.id)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Get the cytoscape node to inspect existing connections\r\n\t\tconst cyNode = this.cy?.getElementById(sourceNode.id);\r\n\r\n\t\t// Collect IDs of nodes already connected as targets from this source\r\n\t\tconst existingTargetIds = new Set<string>(\r\n\t\t\tcyNode.outgoers('node').map((n: NodeSingular) => n.id())\r\n\t\t);\r\n\r\n\t\t// Build the filtered list of linkable targets:\r\n\t\t// - Never allow the start node (NewPhoneContact) as a target\r\n\t\t// - Exclude the source node itself\r\n\t\t// - Exclude nodes already linked as targets from this source\r\n\t\tthis.availableNodes = this.wxcc2graph.getAllActivities().filter(act =>\r\n\t\t\tact.id !== sourceNode.id &&\r\n\t\t\tact.wxccActivityName !== 'NewPhoneContact' &&\r\n\t\t\t!existingTargetIds.has(act.id)\r\n\t\t);\r\n\r\n\t\tconst dialogRef = this.dialog.open(LinkNodeDialogComponent, {\r\n\t\t\tpanelClass: \"no-padding-modal\",\r\n\t\t\twidth: \"550px\",\r\n\t\t\tdata: {\r\n\t\t\t\tavailableNodes: this.availableNodes,\r\n\t\t\t\tsourceNode: this.selectedNodeData,\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tdialogRef.afterClosed().subscribe((result: any) => {\r\n\t\t\tif (result) {\r\n\t\t\t\tthis.onLinkNodes(result);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// ==================== Link Dialog Events ====================\r\n\r\n\tonLinkNodes(linkData: LinkNodeData): void {\r\n\t\tif (!this.cy) return;\r\n\r\n\t\tif (!this.canCreateOutgoingLink(linkData.sourceNodeId)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.wxcc2graph.linkExists(linkData.sourceNodeId, linkData.targetNodeId)) {\r\n\t\t\tconsole.warn(\"Link already exists between these nodes\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst edge = this.wxcc2graph.addLink(\r\n\t\t\tlinkData.sourceNodeId,\r\n\t\t\tlinkData.targetNodeId,\r\n\t\t\tlinkData.label,\r\n\t\t);\r\n\r\n\t\tthis.cy?.add(edge);\r\n\t\tthis.runLayout();\r\n\t}\r\n\r\n\t// ==================== Add Node Dialog Events ====================\r\n\r\n\topenAddNodeDialog(): void {\r\n\t\tthis.availableNodes = this.wxcc2graph.getAllActivities();\r\n\r\n\t\tconst dialogRef = this.dialog.open(AddNodeDialogComponent, {\r\n\t\t\tpanelClass: \"no-padding-modal\",\r\n\t\t\twidth: '450px',\r\n\t\t\tdata: {\r\n\t\t\t\tavailableNodes: this.availableNodes,\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tdialogRef.afterClosed().subscribe((result: any) => {\r\n\t\t\tif (result) {\r\n\t\t\t\tthis.addActivity(result);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\taddActivity(newNodeData: NewNodeData): void {\r\n\t\tif (!this.cy) return;\r\n\r\n\t\tconst node = this.wxccActivityCreationService.createAndSync({\r\n\t\t\tactivityTypeName: newNodeData.activityTypeName,\r\n\t\t\tname: newNodeData.name\r\n\t\t});\r\n\r\n\t\t// Add node to cytoscape\r\n\t\tthis.cy?.add({\r\n\t\t\tgroup: \"nodes\",\r\n\t\t\tdata: node.data\r\n\t\t});\r\n\r\n\t\t// Re-run layout to position the new node\r\n\t\tthis.runLayout();\r\n\t}\r\n\r\n\tonNodeSelectChange(id: string): void {\r\n\t\tconst node = this.cy?.getElementById(id) as NodeSingular;\r\n\t\tif (node) {\r\n\t\t\tthis.cy?.center(node);\r\n\r\n\t\t\t// Set highlighted property in node data\r\n\t\t\tconst originalData = node.data();\r\n\t\t\tnode.data({ ...originalData, highlighted: true });\r\n\t\t\tnode.emit('data');\r\n\r\n\t\t\t// Remove highlight after 1s\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst currentData = node.data();\r\n\t\t\t\tif (currentData.highlighted) {\r\n\t\t\t\t\t// Remove the property completely\r\n\t\t\t\t\tdelete currentData.highlighted;\r\n\t\t\t\t\tnode.data(currentData);\r\n\t\t\t\t\tnode.emit('data');\r\n\t\t\t\t}\r\n\t\t\t}, 1000);\r\n\t\t}\r\n\t}\r\n\r\n\tzoomIn(): void {\r\n\t\tthis.cytoscapeViewportService.zoomIn(this.cy as any);\r\n\t}\r\n\r\n\tzoomOut(): void {\r\n\t\tthis.cytoscapeViewportService.zoomOut(this.cy as any);\r\n\t}\r\n\r\n\tresetView(): void {\r\n\t\tthis.cytoscapeViewportService.resetView(this.cy as any, this.cy?.elements() as any);\r\n\t}\r\n\r\n\tprivate runLayout(): void {\r\n\t\tif (!this.cy) return;\r\n\r\n\t\tconst layout = this.cy?.layout({\r\n\t\t\t...this.layoutOptions,\r\n\t\t}).run();\r\n\r\n\t\tlayout.on(\"layoutstop\", () => {\r\n\t\t\tthis.cytoscapeViewportService.resetView(this.cy as any, this.cy?.elements() as any);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate canCreateOutgoingLink(sourceNodeId: string): boolean {\r\n\t\tif (!this.cy) return false;\r\n\r\n\t\tconst cyNode = this.cy?.getElementById(sourceNodeId);\r\n\t\tif (!cyNode || cyNode.length === 0) return false;\r\n\r\n\t\tconst sourceActivity = (cyNode.data() as ReadonlyExtendedActivity).wxccActivityName;\r\n\t\tconst outgoingEdgeCount = cyNode.outgoers('edge').length;\r\n\r\n\t\t// End-type nodes cannot have outgoing links.\r\n\t\tconst END_NODE_TYPES: string[] = ['end', 'disconnect-contact', 'blind-transfer'];\r\n\t\tif (END_NODE_TYPES.includes(sourceActivity as string)) return false;\r\n\r\n\t\t// Start node can only have one output.\r\n\t\tif (sourceActivity === 'NewPhoneContact' && outgoingEdgeCount >= 1) return false;\r\n\r\n\t\t// Condition node can only have true/false outputs.\r\n\t\tif (sourceActivity === 'condition-activity' && outgoingEdgeCount >= 2) return false;\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprivate clearSelectedEdge(): void {\r\n\t\tif (!this.selectedEdgeId || !this.cy) return;\r\n\r\n\t\tconst edge = this.cy?.getElementById(this.selectedEdgeId);\r\n\t\tif (edge && edge.length) {\r\n\t\t\tedge.unselect();\r\n\t\t}\r\n\r\n\t\tthis.selectedEdgeId = null;\r\n\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate updateSelectedEdgeDeleteButtonPosition(): void {\r\n\t\tif (!this.cy || !this.selectedEdgeId) {\r\n\t\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst edge = this.cy?.getElementById(this.selectedEdgeId);\r\n\t\tif (!edge || edge.length === 0) {\r\n\t\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst midpoint = (edge as EdgeSingular).renderedMidpoint();\r\n\r\n\t\t// Slight offset so the icon does not sit exactly on top of the edge line.\r\n\t\tthis.selectedEdgeDeleteButtonPosition = {\r\n\t\t\tx: midpoint.x + 12,\r\n\t\t\ty: midpoint.y - 12,\r\n\t\t};\r\n\t}\r\n}\r\n","<div class=\"wxcc-flowchart-container\">\r\n <div #flowchartContainer class=\"flowchart-canvas\"></div>\r\n\r\n <!-- Floating toolbar for viewport controls -->\r\n <graph-floating-toolbar\r\n [visibility]=\"{ export: false }\"\r\n (resetViewChange)=\"resetView()\"\r\n (zoomInChange)=\"zoomIn()\"\r\n (zoomOutChange)=\"zoomOut()\">\r\n </graph-floating-toolbar>\r\n\r\n <!-- Graph Acts -->\r\n <div class=\"graph-actions-wrapper\">\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Search workflow\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"toggleSearchPanel()\"\r\n >\r\n <img src=\"assets/wxcc/search.svg\" width=\"28\" height=\"28\" alt=\"\" />\r\n </button>\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Add New Node\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"openAddNodeDialog()\"\r\n >\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <button\r\n *ngIf=\"selectedEdgeId && selectedEdgeDeleteButtonPosition\"\r\n class=\"edge-delete-btn\"\r\n matTooltip=\"Delete this edge\"\r\n matTooltipPosition=\"above\"\r\n [style.left.px]=\"selectedEdgeDeleteButtonPosition.x\"\r\n [style.top.px]=\"selectedEdgeDeleteButtonPosition.y\"\r\n (click)=\"onDeleteSelectedEdge()\"\r\n type=\"button\"\r\n aria-label=\"Delete selected edge\"\r\n >\r\n ×\r\n </button>\r\n\r\n <node-search-panel\r\n class=\"fade-in-search-panel\"\r\n [class.visible]=\"isSearchPanelVisible\"\r\n [nodes]=\"activities\"\r\n (selectNodeChange)=\"onNodeSelectChange($event)\"\r\n (searchChange)=\"openAddNodeDialog()\"\r\n >\r\n </node-search-panel>\r\n\r\n <!-- Node action toolbar (floating near selected node) -->\r\n <node-action-toolbar\r\n [isVisible]=\"isNodeToolbarVisible\"\r\n [position]=\"nodeToolbarPosition\"\r\n (deleteNode)=\"onDeleteNode()\"\r\n (linkNode)=\"onLinkNodeRequest()\"\r\n >\r\n </node-action-toolbar>\r\n\r\n <!-- Node details sidebar -->\r\n <node-details-sidebar\r\n [isOpen]=\"isSidebarOpen\"\r\n [nodeData]=\"selectedNodeData\"\r\n (close)=\"onCloseSidebar()\"\r\n (descriptionChange)=\"onDescriptionChange($event)\"\r\n (activityTypeChange)=\"onActivityTypeChange($event)\"\r\n >\r\n </node-details-sidebar>\r\n</div>\r\n","\r\nexport type WxCCBaseURLParams = {\r\n customerId: number;\r\n uccxIp: string;\r\n fileName: string;\r\n};\r\n\r\nexport type FileState = 'ORIG' | 'DRAFT' | 'COMPLETED';\r\n\r\nconst BASE = '/api/uccx/migration';\r\n\r\nfunction buildUrl(\r\n customerId: number,\r\n uccxIp: string,\r\n fileName: string,\r\n action: 'get' | 'save',\r\n state: FileState,\r\n format?: 'ir' | undefined\r\n): string {\r\n return `${BASE}/customer/${customerId}/uccx/${uccxIp}/filename/${fileName}/${action}/type/${state}/wxcc${format ? '/ir' : ''}/json`;\r\n}\r\n/**\r\n * Any WxCC flowchart api endpoint should go here\r\n */\r\nexport const WXCC_FLOWCHART_API = {\r\n GET_DATA: (params: WxCCBaseURLParams, state: FileState = 'ORIG', format?: 'ir') => buildUrl(\r\n params.customerId,\r\n params.uccxIp,\r\n params.fileName,\r\n 'get',\r\n state,\r\n format\r\n ),\r\n SAVE_DRAFT: (params: WxCCBaseURLParams, format?: 'ir') => buildUrl(\r\n params.customerId,\r\n params.uccxIp,\r\n params.fileName,\r\n 'save',\r\n 'DRAFT',\r\n format\r\n ),\r\n RESET_DRAFT: (params: WxCCBaseURLParams, format?: 'ir') =>\r\n `${BASE}/customer/${params.customerId}/uccx/${params.uccxIp}/filename/${params.fileName}${format ? '' : '/wxcc'}/reset/draft`,\r\n COMPLETE_FLOW: (params: WxCCBaseURLParams, format?: 'ir') => buildUrl(\r\n params.customerId,\r\n params.uccxIp,\r\n params.fileName,\r\n 'save',\r\n 'COMPLETED',\r\n format\r\n )\r\n};","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { IWxCCJSON, IWxCCNonIRJSON } from \"../types/wxcc\";\r\nimport { WxCCBaseURLParams, FileState, WXCC_FLOWCHART_API } from \"../constants/wxcc-api.constants\";\r\nimport { APIService } from \"../../shared/api.service\";\r\n\r\n@Injectable()\r\nexport class WxCCAPIService {\r\n constructor(private readonly api: APIService) { }\r\n /**\r\n * Fetch original WXCC flow data\r\n */\r\n fetchWxCCFlowData(params: WxCCBaseURLParams, state: FileState = 'ORIG'): Observable<IWxCCNonIRJSON> {\r\n const url = WXCC_FLOWCHART_API.GET_DATA(params, state);\r\n // @ts-ignore\r\n return this.api.fetch<IWxCCNonIRJSON>(url);\r\n }\r\n\r\n /**\r\n * Fetch original WXCC flow data as IR format\r\n */\r\n fetchWxCCFlowDataIR(params: WxCCBaseURLParams, state: FileState = 'ORIG'): Observable<IWxCCJSON> {\r\n const url = WXCC_FLOWCHART_API.GET_DATA(params, state, 'ir');\r\n // @ts-ignore\r\n return this.api.fetch<IWxCCJSON>(url);\r\n }\r\n\r\n /**\r\n * Save WXCC flow data as DRAFT\r\n */\r\n saveWxCCFlowData(params: WxCCBaseURLParams, data: IWxCCNonIRJSON): Observable<string> {\r\n const url = WXCC_FLOWCHART_API.SAVE_DRAFT(params);\r\n // @ts-ignore\r\n return this.api.post<string>(url, data);\r\n }\r\n\r\n /**\r\n * Save WXCC flow data as DRAFT in IR format\r\n */\r\n saveWxCCFlowDataIR(params: WxCCBaseURLParams, data: IWxCCJSON): Observable<string> {\r\n const url = WXCC_FLOWCHART_API.SAVE_DRAFT(params, 'ir');\r\n // @ts-ignore\r\n return this.api.post<string>(url, data);\r\n }\r\n\r\n /**\r\n * Reset to original WXCC flow data\r\n */\r\n resetWxCCFlowData(params: WxCCBaseURLParams): Observable<IWxCCNonIRJSON> {\r\n const url = WXCC_FLOWCHART_API.RESET_DRAFT(params);\r\n // @ts-ignore\r\n return this.api.post<IWxCCNonIRJSON>(url);\r\n }\r\n\r\n /**\r\n * Reset to original WXCC flow data in IR format\r\n */\r\n resetWxCCFlowDataIR(params: WxCCBaseURLParams): Observable<IWxCCJSON> {\r\n const url = WXCC_FLOWCHART_API.RESET_DRAFT(params, 'ir');\r\n // @ts-ignore\r\n return this.api.post<IWxCCJSON>(url);\r\n }\r\n\r\n /**\r\n * Save WXCC flow data as COMPLETED\r\n */\r\n completeWxCCFlowData(params: WxCCBaseURLParams, data: IWxCCNonIRJSON): Observable<string> {\r\n const url = WXCC_FLOWCHART_API.COMPLETE_FLOW(params);\r\n // @ts-ignore\r\n return this.api.post<string>(url, data);\r\n }\r\n\r\n /**\r\n * Save WXCC flow data as COMPLETED in IR format\r\n */\r\n completeWxCCFlowDataIR(params: WxCCBaseURLParams, data: IWxCCJSON): Observable<string> {\r\n const url = WXCC_FLOWCHART_API.COMPLETE_FLOW(params, 'ir');\r\n // @ts-ignore\r\n return this.api.post<string>(url, data);\r\n }\r\n}","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'wxcc-file-selection-bar',\r\n templateUrl: './wxcc-file-selection-bar.component.html',\r\n styleUrls: ['./wxcc-file-selection-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class WxCCFileSelectionBarComponent implements OnInit {\r\n @Input() fileNames!: { fileName: string; host: string }[];\r\n @Input() selectedFileName!: string;\r\n @Input() selectedHost!: string;\r\n\r\n @Output() fileNameSelectionChange = new EventEmitter<{ host: string, fileName: string }>();\r\n\r\n readonly hostFileNames = new Map<string, string[]>();\r\n\r\n ngOnInit(): void {\r\n this.fileNames.forEach(({ fileName, host }) => {\r\n if (!this.hostFileNames.has(host)) {\r\n this.hostFileNames.set(host, []);\r\n }\r\n this.hostFileNames.get(host)?.push(fileName);\r\n });\r\n }\r\n\r\n get fileNamesByHost(): string[] {\r\n return this.hostFileNames.get(this.selectedHost) as string[];\r\n }\r\n\r\n get hosts(): string[] | null {\r\n if (!this.fileNames.length) {\r\n return null;\r\n }\r\n const hostsSet = new Set(this.fileNames.map((file) => file.host));\r\n return Array.from(hostsSet).filter(host => host);\r\n }\r\n\r\n onFileSelectionChange(fileName: string): void {\r\n this.fileNameSelectionChange.emit({ fileName: fileName, host: this.selectedHost });\r\n }\r\n\r\n onHostSelectionChange(host: string): void {\r\n this.selectedHost = host;\r\n this.fileNameSelectionChange.emit({\r\n host: host,\r\n fileName: this.fileNamesByHost[0]\r\n });\r\n }\r\n\r\n trackByFileName(_index: number, fileName: string): string {\r\n return fileName;\r\n }\r\n\r\n trackByHost(_index: number, host: string): string {\r\n return host;\r\n }\r\n}","<div class=\"file-selection-bar\">\r\n <mat-form-field appearance=\"outline\" class=\"host-selection\" *ngIf=\"hosts?.length\">\r\n <!-- <mat-label>Host</mat-label> -->\r\n <mat-select\r\n [value]=\"selectedHost\"\r\n (selectionChange)=\"onHostSelectionChange($event.value)\">\r\n <mat-option\r\n *ngFor=\"let host of hosts; trackBy: trackByHost\"\r\n title=\"{{ host }}\"\r\n [value]=\"host\">\r\n {{ host }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\" class=\"file-selection\">\r\n <!-- <mat-label>Script file</mat-label> -->\r\n <mat-select\r\n [value]=\"selectedFileName\"\r\n (selectionChange)=\"onFileSelectionChange($event.value)\">\r\n <mat-option\r\n *ngFor=\"let name of fileNamesByHost; trackBy: trackByFileName\"\r\n title=\"{{ name }}\"\r\n [value]=\"name\">\r\n {{ name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'wxcc-actions-bar',\r\n templateUrl: './wxcc-actions-bar.component.html',\r\n styleUrls: ['./wxcc-actions-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class WxCCActionsBarComponent implements OnInit {\r\n @Output() save = new EventEmitter<void>();\r\n @Output() reset = new EventEmitter<void>();\r\n @Output() complete = new EventEmitter<void>();\r\n @Output() exportNonIr = new EventEmitter<void>();\r\n\r\n ngOnInit(): void { }\r\n}","<div class=\"actions-wrapper\">\r\n <button\r\n type=\"button\"\r\n mat-button\r\n class=\"outline-button\"\r\n (click)=\"exportNonIr.emit()\">\r\n Export JSON\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-button\r\n class=\"outline-button\"\r\n (click)=\"reset.emit()\">\r\n Reset\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-button\r\n class=\"outline-button\"\r\n (click)=\"save.emit()\">\r\n Save\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-button\r\n color=\"primary\"\r\n (click)=\"complete.emit()\">\r\n Complete\r\n </button>\r\n</div>","import { Component, Input, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { WxCCAPIService } from \"./services/wxcc-flow-api.service\";\r\nimport { forkJoin, of, Subject, throwError } from \"rxjs\";\r\nimport { IWxCCFlowchart, IWxCCJSON, IWxCCNonIRJSON } from \"./types/wxcc\";\r\nimport { WxCC2GraphService } from \"./services/wxcc2graph.service\";\r\nimport { filter, finalize, mergeMap, takeUntil, tap } from \"rxjs/operators\";\r\nimport irData from \"./mock/data/QWC_ir.json\";\r\n// import { UCCXWorkflowAPIService } from \"../../uccx-workflow/services/uccx-workflow-api.service\";\r\n// import { CustomersService } from \"../../../services/customers.service\";\r\n// import { ContactCenterService } from \"../contact-center.service\";\r\n// import {\r\n// CALL_FLOW_MIGRATION_STATUSES_TO_SCRIPT_STATUS,\r\n// CallFlowMigrationStatus\r\n// } from \"../interfaces/call-flow-migration-status.interface\";\r\nimport { FileState } from \"./constants/wxcc-api.constants\";\r\n\r\ntype WxCCFlowchartState = {\r\n fileNames: { fileName: string; host: string }[];\r\n uccxIp: string;\r\n selectedFileName: string;\r\n selectedFileStatus: FileState;\r\n loading: boolean;\r\n flowchart: IWxCCFlowchart | null;\r\n irDoc: IWxCCJSON;\r\n nonIrDoc: IWxCCNonIRJSON;\r\n errorMessage: string;\r\n statuses: any[];\r\n};\r\n\r\n@Component({\r\n selector: 'cc-script-editor',\r\n templateUrl: './cc-script-editor.component.html',\r\n styleUrls: ['./cc-script-editor.component.scss']\r\n})\r\nexport class WxCCFlowchartPageComponent implements OnInit, OnDestroy {\r\n @Input() customerId = 0;\r\n @Input() host = \"\";\r\n @Input() token = \"\";\r\n\r\n private readonly destroy$ = new Subject<void>();\r\n\r\n readonly state: WxCCFlowchartState = {\r\n loading: true\r\n } as any;\r\n\r\n constructor(\r\n private readonly api: WxCCAPIService,\r\n private readonly wxcc2graph: WxCC2GraphService,\r\n // private readonly customersService: CustomersService,\r\n // private readonly uccxWorkflowApi: UCCXWorkflowAPIService,\r\n // private readonly contactCenterService: ContactCenterService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.subscribeToCustomerChanges();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n private init(): void {\r\n this.loadMockFlowchart();\r\n }\r\n\r\n private subscribeToCustomerChanges(): void {\r\n // if (!this.customer) {\r\n // this.customersService.customer$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((customer) => {\r\n // if (customer) {\r\n this.init();\r\n // }\r\n // });\r\n // } else {\r\n // this.init();\r\n // }\r\n }\r\n\r\n private loadMockFlowchart(): void {\r\n const irDoc = irData as unknown as IWxCCJSON;\r\n this.state.irDoc = irDoc;\r\n this.state.flowchart = this.wxcc2graph.parseWxCC(irDoc);\r\n this.setLoading(false);\r\n }\r\n\r\n private loadFileNames(): void {\r\n // forkJoin([\r\n // this.uccxWorkflowApi.fetchFileNames(this.customerId)\r\n // .pipe(filter(fileNames => fileNames && fileNames.length > 0)),\r\n // this.contactCenterService.getCallFlowMigrationStatuses()\r\n // ]).pipe(takeUntil(this.destroy$))\r\n // .subscribe(([fileNames, statuses]) => {\r\n // this.state.fileNames = fileNames;\r\n // this.state.uccxIp = fileNames[0].host;\r\n // this.state.selectedFileName = fileNames[0].fileName;\r\n\r\n // this.state.statuses = statuses.filter(status => status.uccxIp === this.state.uccxIp);\r\n // this.state.selectedFileStatus = this.getStatus(this.state.selectedFileName, this.state.uccxIp);\r\n\r\n // this.loadWxCCFlowData();\r\n // });\r\n }\r\n\r\n private loadWxCCFlowData(): void {\r\n forkJoin([\r\n this.api.fetchWxCCFlowData(this.baseParams, this.state.selectedFileStatus),\r\n this.api.fetchWxCCFlowDataIR(this.baseParams, this.state.selectedFileStatus),\r\n ]).pipe(\r\n mergeMap(([nonIrDoc, irDoc]) =>\r\n irDoc !== null ?\r\n of({ nonIrDoc, irDoc }) :\r\n throwError(() => new Error('No wxcc flow diagram available for this script'))\r\n ),\r\n takeUntil(this.destroy$),\r\n finalize(() => this.setLoading(false))\r\n ).subscribe({\r\n next: ({ nonIrDoc, irDoc }) => {\r\n this.wxcc2graph.setSourceDocuments(irDoc, nonIrDoc);\r\n this.state.irDoc = irDoc;\r\n this.state.nonIrDoc = nonIrDoc;\r\n this.state.flowchart = this.wxcc2graph.parseWxCC(irDoc, nonIrDoc);\r\n },\r\n error: (error) => {\r\n this.state.flowchart = null;\r\n this.setError('No wxcc flow diagram available for this script');\r\n }\r\n });\r\n }\r\n\r\n onSave() {\r\n this.setLoading(true);\r\n\r\n forkJoin([\r\n this.api.saveWxCCFlowData(this.baseParams, this.wxcc2graph.wxccNonIRJSON),\r\n this.api.saveWxCCFlowDataIR(this.baseParams, this.wxcc2graph.wxccJSON)\r\n ]).pipe(\r\n takeUntil(this.destroy$),\r\n finalize(() => this.setLoading(false)),\r\n tap(() => {\r\n this.state.flowchart = this.wxcc2graph.parseWxCC(\r\n this.wxcc2graph.wxccJSON,\r\n this.wxcc2graph.wxccNonIRJSON\r\n );\r\n })\r\n ).subscribe({\r\n next: ([regularResponse, irResponse]) => console.log('Flow data saved as DRAFT', regularResponse, irResponse),\r\n error: (error) => console.error('Error while saving wxcc data: ', error)\r\n });\r\n }\r\n\r\n onExportNonIr() {\r\n if (!this.wxcc2graph.wxccNonIRJSON) {\r\n console.error('Non-IR wxcc document is not loaded');\r\n return;\r\n }\r\n\r\n const fileStem = (this.state.selectedFileName || 'wxcc-flow').replace(/\\.[^/.]+$/, '');\r\n const fileName = fileStem + '-non-ir.json';\r\n const jsonContent = JSON.stringify(this.wxcc2graph.wxccNonIRJSON, null, 2);\r\n const blob = new Blob([jsonContent], { type: 'application/json' });\r\n const url = window.URL.createObjectURL(blob);\r\n\r\n const anchor = document.createElement('a');\r\n anchor.href = url;\r\n anchor.download = fileName;\r\n document.body.appendChild(anchor);\r\n anchor.click();\r\n document.body.removeChild(anchor);\r\n\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n onReset() {\r\n this.setLoading(true);\r\n forkJoin([\r\n this.api.resetWxCCFlowData(this.baseParams),\r\n this.api.resetWxCCFlowDataIR(this.baseParams)\r\n ]).pipe(\r\n takeUntil(this.destroy$),\r\n finalize(() => this.setLoading(false))\r\n ).subscribe({\r\n next: ([nonIrDoc, irDoc]) => {\r\n this.wxcc2graph.setSourceDocuments(irDoc, nonIrDoc);\r\n this.state.irDoc = irDoc;\r\n this.state.nonIrDoc = nonIrDoc;\r\n this.state.flowchart = this.wxcc2graph.parseWxCC(irDoc, nonIrDoc);\r\n console.log('Flow data reset to original');\r\n },\r\n error: (error) => {\r\n console.error('Error while resetting wxcc data: ', error);\r\n }\r\n });\r\n }\r\n\r\n onComplete() {\r\n this.setLoading(true);\r\n\r\n forkJoin([\r\n this.api.completeWxCCFlowData(this.baseParams, this.wxcc2graph.wxccNonIRJSON),\r\n this.api.completeWxCCFlowDataIR(this.baseParams, this.wxcc2graph.wxccJSON)\r\n ]).pipe(\r\n takeUntil(this.destroy$),\r\n finalize(() => this.setLoading(false))\r\n ).subscribe({\r\n next: ([regularResponse, irResponse]) => {\r\n console.log('Flow data saved as COMPLETED', regularResponse, irResponse);\r\n },\r\n error: (error) => {\r\n console.error('Error while completing wxcc data: ', error);\r\n }\r\n });\r\n }\r\n\r\n onFileNameSelectionChange(item: { fileName: string, host: string }) {\r\n const { fileName, host } = item;\r\n this.state.selectedFileName = fileName;\r\n this.state.uccxIp = host;\r\n\r\n this.state.selectedFileStatus = this.getStatus(fileName, this.state.uccxIp);\r\n this.setLoading(true);\r\n this.loadWxCCFlowData();\r\n }\r\n\r\n getStatus(fileName: string, uccxIp: string): any {\r\n if (!this.state.statuses) {\r\n throw Error('File status array is undefined');\r\n }\r\n\r\n const callFlowMigrationStatus = this.state.statuses.find(\r\n status => status.uccxIp === uccxIp && status.scriptName === fileName\r\n );\r\n\r\n // if (callFlowMigrationStatus && callFlowMigrationStatus.status) {\r\n // return CALL_FLOW_MIGRATION_STATUSES_TO_SCRIPT_STATUS[callFlowMigrationStatus.status];\r\n // }\r\n }\r\n\r\n setLoading(loading: boolean): void {\r\n this.state.loading = loading;\r\n }\r\n\r\n setError(error: string): void {\r\n this.state.errorMessage = error;\r\n }\r\n\r\n private get baseParams() {\r\n return {\r\n customerId: this.customerId,\r\n uccxIp: this.state.uccxIp || '',\r\n fileName: this.state.selectedFileName || ''\r\n };\r\n }\r\n\r\n // private get customer() {\r\n // return this.customersService.currentCustomer;\r\n // }\r\n\r\n // private get customerId() {\r\n // return this.customer.id;\r\n // }\r\n}\r\n","<div class=\"wxcc-flowchart-wrapper\">\r\n <header class=\"wxcc-flowchart-header\">\r\n <wxcc-file-selection-bar\r\n *ngIf=\"state.fileNames && state.fileNames.length\"\r\n [fileNames]=\"state.fileNames\"\r\n [selectedHost]=\"state.uccxIp\"\r\n [selectedFileName]=\"state.selectedFileName\"\r\n (fileNameSelectionChange)=\"onFileNameSelectionChange($event)\">\r\n </wxcc-file-selection-bar>\r\n <wxcc-actions-bar\r\n *ngIf=\"state.flowchart\"\r\n (save)=\"onSave()\"\r\n (reset)=\"onReset()\"\r\n (exportNonIr)=\"onExportNonIr()\"\r\n (complete)=\"onComplete()\">\r\n </wxcc-actions-bar>\r\n </header>\r\n <ng-container *ngIf=\"!state.loading; else loadingTemplate\">\r\n <wxcc-flowchart\r\n *ngIf=\"state.flowchart; else errorTemplate\"\r\n [flowchart]=\"state.flowchart\">\r\n </wxcc-flowchart>\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #loadingTemplate>\r\n <div class=\"placeholder-wrapper\">\r\n <mat-spinner diameter=\"40\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #errorTemplate>\r\n <div class=\"placeholder-wrapper\">\r\n Error loading script\r\n </div>\r\n</ng-template>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatProgressSpinner, MatProgressSpinnerModule, MatSpinner } from \"@angular/material/progress-spinner\";\r\n\r\n@NgModule({\r\n imports: [\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule\r\n ],\r\n exports: [\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatProgressSpinnerModule\r\n ]\r\n})\r\nexport class MaterialModule { }","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MaterialModule } from \"./material.module\";\r\nimport { NgApexchartsModule } from \"ng-apexcharts\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n NgApexchartsModule,\r\n HttpClientModule\r\n ],\r\n exports: [\r\n MaterialModule\r\n ]\r\n})\r\nexport class SharedModule {}","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { FloatingToolBarComponent } from \"./floating-toolbar.component\";\r\n\r\n@NgModule({\r\n declarations: [\r\n FloatingToolBarComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatTooltipModule\r\n ],\r\n exports: [\r\n FloatingToolBarComponent\r\n ]\r\n})\r\nexport class FloatingToolbarModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { WxCCFlowchartComponent } from \"./components/wxcc-flowchart/wxcc-flowchart.component\";\r\nimport { NodeDetailsSidebarComponent } from \"./components/node-details-sidebar/node-details-sidebar.component\";\r\nimport { NodeActionToolbarComponent } from \"./components/node-action-toolbar/node-action-toolbar.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { WxCCAPIService } from \"./services/wxcc-flow-api.service\";\r\nimport { WxCC2GraphService } from \"./services/wxcc2graph.service\";\r\nimport { WxCCActivityManageService } from \"./services/wxcc-activity-manage.service\";\r\nimport { WxCCActivityCreationService } from \"./services/wxcc-activity-creation.service\";\r\nimport { WxCCFileSelectionBarComponent } from \"./components/wxcc-file-selection-bar/wxcc-file-selection-bar.component\";\r\nimport { WxCCActionsBarComponent } from \"./components/wxcc-actions-bar/wxcc-actions-bar.component\";\r\nimport { AddNodeDialogComponent } from \"./components/dialogs/add-node-dialog/add-node-dialog.component\";\r\nimport { LinkNodeDialogComponent } from \"./components/dialogs/link-node-dialog/link-node-dialog.component\";\r\nimport { NodeSearchPanelComponent } from \"./components/node-search-panel/node-search-panel.component\";\r\nimport { WxCCFlowchartPageComponent } from \"./cc-script-editor.component\";\r\nimport { SharedModule } from \"../shared/shared.module\";\r\nimport { MaterialModule } from \"../shared/material.module\";\r\nimport { FloatingToolbarModule } from \"./components/floating-toolbar/floating-toolbar.module\";\r\n\r\n@NgModule({\r\n declarations: [\r\n WxCCFlowchartPageComponent,\r\n WxCCFlowchartComponent,\r\n NodeDetailsSidebarComponent,\r\n NodeActionToolbarComponent,\r\n LinkNodeDialogComponent,\r\n WxCCFileSelectionBarComponent,\r\n AddNodeDialogComponent,\r\n WxCCActionsBarComponent,\r\n NodeSearchPanelComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n SharedModule,\r\n MaterialModule,\r\n FloatingToolbarModule\r\n ],\r\n exports: [\r\n WxCCFlowchartPageComponent\r\n ],\r\n providers: [\r\n WxCCAPIService,\r\n WxCC2GraphService,\r\n WxCCActivityManageService,\r\n WxCCActivityCreationService\r\n ],\r\n entryComponents: [\r\n AddNodeDialogComponent,\r\n LinkNodeDialogComponent\r\n ]\r\n})\r\nexport class WxCCFlowchartModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i5.CardComponent","i2.CardComponent","i1.WxCC2GraphService","i2.WxCCActivityManageService","i2","i3","i2.CytoscapeViewportService","i4.WxCCActivityCreationService","i5","i6","i7.FloatingToolBarComponent","i8.NodeDetailsSidebarComponent","i9.NodeActionToolbarComponent","i10.NodeSearchPanelComponent","i1.APIService","finalize","i1.WxCCAPIService","i2.WxCC2GraphService","i4","i5.WxCCFlowchartComponent","i6.WxCCFileSelectionBarComponent","i7.WxCCActionsBarComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tuki-io-tuki-widgets-contact-center.mjs","sources":["../../../../projects/tuki/widgets/contact-center/shared/api.service.ts","../../../../projects/tuki/widgets/contact-center/shared/api.endpoints.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/cc-readiness.service.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/components/card/card.component.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/components/card/card.component.html","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.html","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.ts","../../../../projects/tuki/widgets/contact-center/cc-readiness/widgets/summary-grid/summary-grid.component.html","../../../../projects/tuki/widgets/contact-center/cc-readiness/cc-readiness.module.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/constants/cytoscape.config.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/utils/node-mappings.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/utils/node-html-template.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/add-node-dialog/add-node-dialog.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/dialogs/link-node-dialog/link-node-dialog.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc2graph.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/cystoscape-viewport.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc-activity-manage.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc-activity-creation.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-details-sidebar/node-details-sidebar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-action-toolbar/node-action-toolbar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/node-search-panel/node-search-panel.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-flowchart/wxcc-flowchart.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/constants/wxcc-api.constants.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/services/wxcc-flow-api.service.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-file-selection-bar/wxcc-file-selection-bar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/wxcc-actions-bar/wxcc-actions-bar.component.html","../../../../projects/tuki/widgets/contact-center/cc-script-editor/cc-script-editor.component.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/cc-script-editor.component.html","../../../../projects/tuki/widgets/contact-center/shared/material.module.ts","../../../../projects/tuki/widgets/contact-center/shared/shared.module.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/components/floating-toolbar/floating-toolbar.module.ts","../../../../projects/tuki/widgets/contact-center/cc-script-editor/cc-script-editor.module.ts","../../../../projects/tuki/widgets/contact-center/tuki-io-tuki-widgets-contact-center.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class APIService {\r\ntoken!: string;\r\napiUrl!: string;\r\n\r\nconstructor(\r\n private httpClient: HttpClient\r\n ) { }\r\n\r\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n const headers = this.getHeaders(cache);\r\n params = params || {};\r\n return this.httpClient.get(this.apiUrl + url, {params: this.prepareEncodedParams(params), headers});\r\n }\r\n\r\n post(url: string, body: any, params = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {params: this.prepareEncodedParams(params), headers});\r\n }\r\n\r\n // use when response extended data is necessary:\r\n postExtended(url: string, body = null, params = {}, headers = {}) {\r\n headers = headers || this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {\r\n headers,\r\n observe: 'response',\r\n params: this.prepareEncodedParams(params)\r\n });\r\n }\r\n\r\n put(url: string, body = null, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.put(this.apiUrl + url, body, {headers, params: this.prepareEncodedParams(params)});\r\n }\r\n\r\n delete(url: string, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.delete(this.apiUrl + url, {headers, params: this.prepareEncodedParams(params)});\r\n }\r\n\r\n fetchPagination(url: string, pageSize: number, pageNumber: number, additionalParams = {}, cache?: boolean): Observable<any> {\r\n const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));\r\n const params = Object.assign(copyAdditionalParams, {size: pageSize.toString(), page: pageNumber.toString()});\r\n return this.fetch(url, params, cache) as Observable<any>;\r\n }\r\n\r\n private prepareEncodedParams(params: any) {\r\n const result: any = {};\r\n\r\n if (!params) {\r\n return {};\r\n }\r\n for (const key of Object.keys(params)) {\r\n if (params[key]) {\r\n const stringParam = params[key].toString();\r\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private getHeaders(cache?: boolean): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n if (cache) {\r\n headers = headers.append('_Cache', 'true ');\r\n }\r\n const token = this.token || this.getParameterByName('token');\r\n headers = headers.append('Authorization', 'Bearer '+ token);\r\n return headers;\r\n }\r\n\r\n private getParameterByName(name: any, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n}","export const API = {\r\n READINESS: {\r\n UCCX_SERVER_ENTITY_STATS: (customerId: number) => `/api/uccx/migration/customer/${customerId}/entity-counts`,\r\n LICENSE_USAGE_SUMMARY: (customerId: number) => `/api/uccx/migration/customer/${customerId}/cc-license-stats`,\r\n }\r\n}","import { inject, Inject, Injectable } from '@angular/core';\r\nimport { APIService } from '../shared/api.service';\r\nimport { UccxServerEntityStats, WebexLicenseUsageSummary } from './types/cc-readiness';\r\nimport { API } from '../shared/api.endpoints';\r\nimport { catchError, map, Observable, throwError } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CcReadinessService {\r\n private readonly api = inject(APIService);\r\n\r\n constructor() { }\r\n\r\n fetchUccxServerEntityStats(customerId: number): Observable<UccxServerEntityStats[]> {\r\n return this.api.fetch(API.READINESS.UCCX_SERVER_ENTITY_STATS(customerId))\r\n .pipe(map((stats: UccxServerEntityStats[]) => {\r\n stats.forEach(stat => {\r\n // @ts-ignore\r\n delete stat.counts.reasonCodes;\r\n });\r\n return stats;\r\n }));\r\n }\r\n\r\n fetchWebexLicenseUsageSummary(customerId: number): Observable<WebexLicenseUsageSummary[]> {\r\n return this.api.fetch(API.READINESS.LICENSE_USAGE_SUMMARY(customerId));\r\n }\r\n\r\n setToken(token: string): void {\r\n this.api.token = token;\r\n }\r\n\r\n setHost(host: string): void {\r\n this.api.apiUrl = host;\r\n }\r\n}","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'tk-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class CardComponent {\r\n @Input() title!: string;\r\n}","<article class=\"card\">\r\n <header class=\"card__header\">\r\n <h2>{{ title }}</h2>\r\n <!--<div class=\"card__menu-button\">\r\n <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\r\n </div>-->\r\n </header>\r\n <div class=\"card__content\">\r\n <ng-content select=\"card-content\"></ng-content>\r\n </div>\r\n</article>\r\n","import { Component, Input, OnChanges, OnDestroy, OnInit, SimpleChanges, inject } from '@angular/core';\r\nimport { ApexChart, ApexDataLabels, ApexLegend, ApexNonAxisChartSeries, ApexPlotOptions, ApexTooltip } from 'ng-apexcharts';\r\nimport { catchError, finalize, of, Subscription } from 'rxjs';\r\nimport { CcReadinessService } from '../../cc-readiness.service';\r\nimport { WebexLicenseUsageSummary } from '../../types/cc-readiness';\r\n\r\ninterface LicenseLegendItem {\r\n label: string;\r\n count: number;\r\n percentage: number;\r\n color: string;\r\n}\r\n\r\ninterface LicenseTableRow {\r\n label: string;\r\n value: number;\r\n}\r\n\r\ninterface LicenseChartOptions {\r\n series: ApexNonAxisChartSeries;\r\n chart: ApexChart;\r\n labels: string[];\r\n colors: string[];\r\n legend: ApexLegend;\r\n plotOptions: ApexPlotOptions;\r\n dataLabels: ApexDataLabels;\r\n tooltip: ApexTooltip;\r\n}\r\n\r\ninterface LicenseRequirementViewModel {\r\n chartOptions: LicenseChartOptions;\r\n legendItems: LicenseLegendItem[];\r\n rows: LicenseTableRow[];\r\n totalRequired: number;\r\n}\r\n\r\nconst LEGEND_COLORS = {\r\n existing: '#16A693',\r\n missing: '#808080',\r\n empty: '#E0E0E0'\r\n};\r\n\r\n@Component({\r\n selector: 'cc-licenses-requirement',\r\n templateUrl: './licences-requirement.component.html',\r\n styleUrls: ['./licences-requirement.component.scss']\r\n})\r\nexport class LicencesRequirementComponent implements OnInit, OnDestroy, OnChanges {\r\n @Input() customerId!: number;\r\n @Input() host!: string;\r\n @Input() token!: string;\r\n\r\n private readonly ccReadinessService = inject(CcReadinessService);\r\n private subscription?: Subscription;\r\n\r\n viewModel: LicenseRequirementViewModel | null = null;\r\n loading = false;\r\n error = false;\r\n\r\n filters: string[] = ['All'];\r\n selectedSummaryIndex = 0;\r\n\r\n private summary: WebexLicenseUsageSummary | null = null;\r\n\r\n ngOnInit(): void {\r\n this.loadSummaries();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if ((changes['customerId'] && !changes['customerId'].firstChange) ||\r\n (changes['token'] && !changes['token'].firstChange)) {\r\n this.loadSummaries();\r\n }\r\n }\r\n\r\n onFilterChange(index: number): void {\r\n if (!isNaN(index) && index >= 0 && index < this.filters.length) {\r\n this.selectFilter(index);\r\n }\r\n }\r\n\r\n private loadSummaries(): void {\r\n const numericCustomerId = Number(this.customerId);\r\n if (!numericCustomerId || !this.token) {\r\n return;\r\n }\r\n\r\n this.subscription?.unsubscribe();\r\n this.loading = true;\r\n this.error = false;\r\n this.viewModel = null;\r\n this.selectedSummaryIndex = 0;\r\n\r\n this.ccReadinessService.setHost(this.host);\r\n this.ccReadinessService.setToken(this.token);\r\n\r\n this.subscription = this.ccReadinessService.fetchWebexLicenseUsageSummary(numericCustomerId)\r\n .pipe(\r\n catchError(error => {\r\n console.error('Unable to load Webex license usage summary', error);\r\n this.error = true;\r\n return of<WebexLicenseUsageSummary[]>([]);\r\n }),\r\n finalize(() => this.loading = false)\r\n )\r\n .subscribe(items => {\r\n console.log('Raw API response:', items);\r\n // Handle both array and single object responses\r\n if (Array.isArray(items) && items.length > 0) {\r\n this.summary = items[0];\r\n } else if (items && typeof items === 'object' && !Array.isArray(items)) {\r\n // If single object returned, use it directly\r\n this.summary = items as unknown as WebexLicenseUsageSummary;\r\n } else {\r\n this.summary = null;\r\n }\r\n\r\n // Build filters dynamically from license names\r\n if (this.summary?.licenses?.length) {\r\n this.filters = ['All', ...this.summary.licenses.map(l => l.name)];\r\n } else {\r\n this.filters = ['All'];\r\n }\r\n\r\n console.log('Processed summary:', this.summary);\r\n this.selectFilter(0);\r\n });\r\n }\r\n\r\n private selectFilter(index: number): void {\r\n this.selectedSummaryIndex = index;\r\n if (!this.summary) {\r\n this.viewModel = null;\r\n return;\r\n }\r\n this.viewModel = this.mapSummaryToViewModel(this.summary, index);\r\n console.log('Created viewModel for filter index', index, ':', this.viewModel);\r\n }\r\n\r\n private mapSummaryToViewModel(summary: WebexLicenseUsageSummary, filterIndex: number): LicenseRequirementViewModel {\r\n console.log('Mapping summary to viewModel:', summary, 'filterIndex:', filterIndex);\r\n\r\n const licenses = summary.licenses || [];\r\n\r\n let existingCount: number;\r\n let missingCount: number;\r\n let rows: LicenseTableRow[];\r\n\r\n if (filterIndex === 0) {\r\n // \"All\" filter: show totalExistingLicenses vs total consumedUnits\r\n existingCount = summary.totalExistingLicenses ?? 0;\r\n missingCount = licenses.reduce((acc, l) => acc + l.consumedUnits, 0);\r\n rows = licenses.map(l => ({\r\n label: l.name,\r\n value: l.consumedUnits\r\n }));\r\n } else {\r\n // Specific license filter: show 0 existing vs consumedUnits for that license\r\n const selectedLicense = licenses[filterIndex - 1];\r\n existingCount = 0;\r\n missingCount = selectedLicense?.consumedUnits ?? 0;\r\n rows = selectedLicense ? [{ label: selectedLicense.name, value: selectedLicense.consumedUnits }] : [];\r\n }\r\n\r\n const totalLicenses = existingCount + missingCount;\r\n\r\n const legendItems: LicenseLegendItem[] = [\r\n {\r\n label: 'Existing licenses',\r\n count: existingCount,\r\n percentage: totalLicenses > 0 ? (existingCount / totalLicenses) * 100 : 0,\r\n color: LEGEND_COLORS.existing\r\n },\r\n {\r\n label: 'Missing licenses',\r\n count: missingCount,\r\n percentage: totalLicenses > 0 ? (missingCount / totalLicenses) * 100 : 0,\r\n color: LEGEND_COLORS.missing\r\n }\r\n ];\r\n\r\n console.log('Legend items:', legendItems);\r\n console.log('Table rows:', rows);\r\n\r\n const totalRequired = existingCount + missingCount;\r\n\r\n return {\r\n chartOptions: this.buildChartOptions(legendItems),\r\n legendItems,\r\n rows,\r\n totalRequired\r\n };\r\n }\r\n\r\n private buildChartOptions(legendItems: LicenseLegendItem[]): LicenseChartOptions {\r\n const totalCount = legendItems.reduce((acc, item) => acc + item.count, 0);\r\n const isEmpty = totalCount === 0;\r\n\r\n // For empty chart, show a full light gray donut\r\n const series = isEmpty ? [1] : legendItems.map(item => item.count);\r\n const labels = isEmpty ? ['No data'] : legendItems.map(item => item.label);\r\n const colors = isEmpty ? [LEGEND_COLORS.empty] : legendItems.map(item => item.color);\r\n\r\n return {\r\n series,\r\n chart: {\r\n type: 'donut',\r\n height: 220\r\n },\r\n labels,\r\n colors,\r\n legend: {\r\n show: false\r\n },\r\n plotOptions: {\r\n pie: {\r\n donut: {\r\n size: '75%'\r\n }\r\n }\r\n },\r\n dataLabels: {\r\n enabled: false\r\n },\r\n tooltip: {\r\n enabled: !isEmpty\r\n }\r\n };\r\n }\r\n\r\n private normalizePercentage(value: number): number {\r\n if (!isFinite(value)) {\r\n return 0;\r\n }\r\n // Convert decimal to percentage (0.9487 → 94.9)\r\n const percentage = value * 100;\r\n return Math.round(percentage * 10) / 10;\r\n }\r\n}\r\n","<tk-card title=\"Licenses requirement\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div\r\n class=\"widget-body\"\r\n *ngIf=\"!loading && !error && viewModel; else widgetState\"\r\n >\r\n <div class=\"left-section\">\r\n <mat-select\r\n [(value)]=\"selectedSummaryIndex\"\r\n (selectionChange)=\"onFilterChange($event.value)\"\r\n class=\"filter-select\"\r\n >\r\n <mat-option *ngFor=\"let option of filters; index as i\" [value]=\"i\">\r\n {{ option }}\r\n </mat-option>\r\n </mat-select>\r\n\r\n <div class=\"chart-section\">\r\n <div class=\"chart-wrapper\">\r\n <apx-chart\r\n [series]=\"viewModel.chartOptions.series\"\r\n [chart]=\"viewModel.chartOptions.chart\"\r\n [labels]=\"viewModel.chartOptions.labels\"\r\n [colors]=\"viewModel.chartOptions.colors\"\r\n [legend]=\"viewModel.chartOptions.legend\"\r\n [plotOptions]=\"viewModel.chartOptions.plotOptions\"\r\n [dataLabels]=\"viewModel.chartOptions.dataLabels\"\r\n [tooltip]=\"viewModel.chartOptions.tooltip\"\r\n >\r\n </apx-chart>\r\n </div>\r\n <div class=\"legend\">\r\n <div class=\"legend-item\" *ngFor=\"let item of viewModel.legendItems\">\r\n <span\r\n class=\"legend-marker\"\r\n [style.backgroundColor]=\"item.color\"\r\n ></span>\r\n <span class=\"legend-label\">{{ item.label }}</span>\r\n <span class=\"legend-value\">{{ item.count | number }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"divider\" aria-hidden=\"true\"></div>\r\n\r\n <div class=\"table-section\">\r\n <div class=\"lic-table-header\">\r\n <span>License</span>\r\n <span>Required</span>\r\n </div>\r\n <div class=\"table-row\" *ngFor=\"let row of viewModel.rows\">\r\n <span>{{ row.label }}</span>\r\n <span>{{ row.value | number }}</span>\r\n </div>\r\n <div class=\"table-row total-row\">\r\n <span>Total</span>\r\n <span>{{ viewModel.totalRequired | number }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ng-template #widgetState>\r\n <div class=\"state-message\" *ngIf=\"loading\">\r\n Loading license requirements…\r\n </div>\r\n <div class=\"state-message error\" *ngIf=\"!loading && error\">\r\n Unable to load license requirements.\r\n </div>\r\n <div class=\"state-message\" *ngIf=\"!loading && !error && !viewModel\">\r\n No license data available.\r\n </div>\r\n </ng-template>\r\n </ng-container>\r\n</tk-card>\r\n","import { Component, inject, Input, OnInit } from \"@angular/core\";\r\nimport { CcReadinessService } from \"../../cc-readiness.service\";\r\nimport { map, Observable } from \"rxjs\";\r\nimport { EntityType, UccxServerEntityStats } from \"../../types/cc-readiness\";\r\n\r\ninterface SummaryGridCount {\r\n name: string;\r\n value: number;\r\n}\r\n\r\ninterface SummaryGridItem {\r\n uccxIp: string;\r\n counts: SummaryGridCount[];\r\n}\r\n\r\nconst ENTITY_CONFIG: { [key: string]: { label: string } } = {\r\n applications: { label: 'Applications' },\r\n triggers: { label: 'Triggers' },\r\n contactServiceQueues: { label: 'CSQs' },\r\n resources: { label: 'Resources' },\r\n resourceGroups: { label: 'Resource Groups' },\r\n skills: { label: 'Skills' },\r\n xml: { label: 'XML' },\r\n scripts: { label: 'Scripts' },\r\n audioPrompts: { label: 'Audio Prompts' },\r\n teams: { label: 'Teams' },\r\n wrapUpCodes: { label: 'Wrap-Up Codes' },\r\n phonebooks: { label: 'Phonebooks' }\r\n};\r\n\r\n@Component({\r\n selector: 'cc-summary-grid',\r\n templateUrl: 'summary-grid.component.html',\r\n styleUrls: ['summary-grid.component.scss']\r\n})\r\nexport class SummaryGridComponent implements OnInit {\r\n @Input() customerId!: number;\r\n @Input() host!: string;\r\n @Input() token!: string;\r\n\r\n private readonly ccReadinessService = inject(CcReadinessService);\r\n\r\n readonly ENTITY_CONFIG = ENTITY_CONFIG;\r\n\r\n data$!: Observable<SummaryGridItem[]>;\r\n\r\n ngOnInit(): void {\r\n this.ccReadinessService.setToken(this.token);\r\n this.ccReadinessService.setHost(this.host);\r\n\r\n this.data$ = this.ccReadinessService.fetchUccxServerEntityStats(this.customerId)\r\n .pipe(map(items => {\r\n return items.map(item => ({\r\n uccxIp: item.uccxIp,\r\n counts: Object.entries(item.counts).map(([name, value]) => ({ name, value }))\r\n }));\r\n }));\r\n }\r\n}","<ng-container *ngIf=\"data$ | async as data\">\r\n <div *ngFor=\"let stats of data\">\r\n <tk-card [title]=\"stats.uccxIp\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div class=\"grid-wrapper\">\r\n <div class=\"grid-item\" *ngFor=\"let item of stats.counts\">\r\n <div class=\"item-top\">\r\n <span class=\"item-icon\">\r\n <img width=\"24\" height=\"24\" src=\"assets/icons/{{ item.name }}.svg\" alt=\"{{ item.name }} Icon\">\r\n </span>\r\n <span class=\"item-count\">{{ item.value }}</span>\r\n </div>\r\n <span class=\"item-label\">{{ ENTITY_CONFIG[item.name].label }}</span>\r\n </div>\r\n </div>\r\n </ng-container>\r\n </tk-card>\r\n </div>\r\n</ng-container>","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { LicencesRequirementComponent } from './widgets/licences-requirement/licences-requirement.component';\r\nimport { SummaryGridComponent } from './widgets/summary-grid/summary-grid.component';\r\nimport { CardComponent } from './components/card/card.component';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { MaterialModule } from '../shared/material.module';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTableModule } from '@angular/material/table';\r\n\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n LicencesRequirementComponent,\r\n SummaryGridComponent,\r\n CardComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n NgApexchartsModule,\r\n MatTableModule,\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatSelectModule,\r\n MatProgressSpinnerModule,\r\n MatOptionModule,\r\n MatPaginatorModule,\r\n MatSelectModule\r\n ],\r\n exports: [\r\n LicencesRequirementComponent,\r\n SummaryGridComponent\r\n ]\r\n})\r\nexport class CcReadinessModule { }\r\n","import { StylesheetStyle } from \"cytoscape\";\r\n\r\nexport const StyleConfig: StylesheetStyle[] = [\r\n {\r\n selector: 'node',\r\n style: {\r\n 'background-color': 'transparent',\r\n 'background-opacity': 0,\r\n 'width': 220,\r\n 'height': 100,\r\n 'shape': 'roundrectangle',\r\n 'border-width': 0\r\n }\r\n },\r\n {\r\n selector: 'node:selected',\r\n style: {\r\n 'background-color': 'transparent',\r\n 'background-opacity': 0\r\n }\r\n },\r\n {\r\n selector: 'edge',\r\n style: {\r\n 'width': 1,\r\n 'line-color': '#d4d4d4',\r\n // 'line-color': '#B0BEC5',\r\n 'target-arrow-color': '#d4d4d4',\r\n 'target-arrow-shape': 'triangle',\r\n 'curve-style': 'bezier',\r\n 'control-point-step-size': 40,\r\n 'label': 'data(label)',\r\n 'font-size': '9px',\r\n 'color': '#546E7A',\r\n 'text-background-color': '#fff',\r\n 'text-background-opacity': 1,\r\n 'text-background-padding': '4px',\r\n 'text-border-width': 1,\r\n 'text-border-color': '#E0E0E0',\r\n 'text-border-opacity': 0.8,\r\n 'text-margin-y': -10,\r\n 'z-index': 10\r\n }\r\n },\r\n {\r\n selector: 'edge[label=\"default\"]',\r\n style: {\r\n 'line-color': '#90A4AE',\r\n 'target-arrow-color': '#90A4AE'\r\n }\r\n },\r\n {\r\n selector: 'edge[label=\"queued\"]',\r\n style: {\r\n 'line-color': '#66BB6A',\r\n 'target-arrow-color': '#66BB6A'\r\n }\r\n },\r\n {\r\n selector: 'edge[label=\"failure\"]',\r\n style: {\r\n 'line-color': '#EF5350',\r\n 'target-arrow-color': '#EF5350'\r\n }\r\n },\r\n {\r\n selector: ':selected',\r\n style: {\r\n 'line-color': '#FF6B6B',\r\n 'target-arrow-color': '#FF6B6B'\r\n }\r\n }\r\n];","import { ExtendedActivityType } from \"../types/extended-activity\";\r\nimport { WxCCActivityType, WxCCTemplatedActivityType } from \"../types/wxcc-activity\";\r\n\r\nexport interface IconInfo {\r\n iconSrc: string;\r\n alt: string;\r\n}\r\n\r\nexport interface ActivityDisplayType {\r\n activityName: ExtendedActivityType,\r\n value: ActivityDisplayTypeValue;\r\n label: string;\r\n icon: string;\r\n group: string;\r\n}\r\n\r\nexport interface CreatableActivityDisplayType extends ActivityDisplayType {\r\n activityName: WxCCTemplatedActivityType;\r\n}\r\n\r\nconst CREATABLE_WXCC_ACTIVITY_TYPES: ReadonlySet<WxCCTemplatedActivityType> = new Set<WxCCTemplatedActivityType>([\r\n 'NewPhoneContact',\r\n 'play-message',\r\n 'play-music',\r\n 'ivr-menu',\r\n 'set-variable',\r\n 'blind-transfer',\r\n 'business-hours',\r\n]);\r\n\r\nexport type ActivityDisplayTypeValue =\r\n | 'condition-activity'\r\n | 'queue-contact'\r\n | 'ivr-menu'\r\n | 'blind-transfer'\r\n | 'wait-activity'\r\n | 'newphonecontact'\r\n | 'disconnect-contact'\r\n | 'play-message'\r\n | 'play-music'\r\n | 'unmapped'\r\n | 'business-hours'\r\n | 'set-variable'\r\n | 'end'\r\n\r\n/**\r\n * Map of node icons based on display type or label\r\n */\r\nexport const ICON_MAP: { [key in ActivityDisplayTypeValue]: string } = {\r\n 'condition-activity': 'assets/wxcc/if.svg',\r\n 'queue-contact': 'assets/wxcc/route.svg',\r\n 'ivr-menu': 'assets/wxcc/m1.svg',\r\n 'blind-transfer': 'assets/wxcc/terminate2.svg',\r\n 'wait-activity': 'assets/wxcc/delay.svg',\r\n 'newphonecontact': 'assets/wxcc/p1.svg',\r\n 'disconnect-contact': 'assets/wxcc/terminate2.svg',\r\n 'play-message': 'assets/wxcc/s1.svg',\r\n 'play-music': 'assets/wxcc/delay.svg',\r\n 'unmapped': 'assets/wxcc/unmapped.svg',\r\n 'business-hours': 'assets/wxcc/c2.svg',\r\n 'set-variable': 'assets/wxcc/variable.svg',\r\n 'end': 'assets/wxcc/close1.svg'\r\n};\r\n\r\n/**\r\n * Map of node color classes based on group\r\n */\r\nconst COLOR_CLASS_MAP: { [key: string]: string } = {\r\n 'start': 'node-start',\r\n 'end': 'node-end',\r\n 'terminating-action': 'node-end',\r\n 'set-variable': 'node-action',\r\n 'unmapped': 'node-default',\r\n 'enum-gateway': 'node-gateway',\r\n 'action': 'node-action'\r\n};\r\n\r\n/**\r\n * Map of activity type labels based on group\r\n */\r\nconst ACTIVITY_TYPE_LABELS: { [key: string]: string } = {\r\n 'start': 'Start',\r\n 'end': 'End',\r\n 'terminating-action': 'Terminate',\r\n 'enum-gateway': 'Menu',\r\n 'action': 'Action',\r\n 'unmapped': 'Unmapped'\r\n};\r\n\r\n/**\r\n * All available activity display types for node configuration\r\n * Values match ICON_MAP keys exactly\r\n */\r\nexport const ACTIVITY_DISPLAY_TYPES: ActivityDisplayType[] = [\r\n { activityName: 'NewPhoneContact', value: 'newphonecontact', label: 'Start', icon: ICON_MAP['newphonecontact'], group: 'start' },\r\n { activityName: 'end', value: 'end', label: 'End', icon: ICON_MAP['end'], group: 'end' },\r\n { activityName: 'play-message', value: 'play-message', label: 'Play Message', icon: ICON_MAP['play-message'], group: 'action' },\r\n { activityName: 'ivr-menu', value: 'ivr-menu', label: 'Menu', icon: ICON_MAP['ivr-menu'], group: 'enum-gateway' },\r\n { activityName: 'queue-contact', value: 'queue-contact', label: 'Queue Contact', icon: ICON_MAP['queue-contact'], group: 'action' },\r\n { activityName: 'set-variable', value: 'set-variable', label: 'Set Variable', icon: ICON_MAP['set-variable'], group: 'set-variable' },\r\n { activityName: 'condition-activity', value: 'condition-activity', label: 'Condition', icon: ICON_MAP['condition-activity'], group: 'enum-gateway' },\r\n { activityName: 'business-hours', value: 'business-hours', label: 'Business Hours', icon: ICON_MAP['business-hours'], group: 'enum-gateway' },\r\n { activityName: 'wait-activity', value: 'wait-activity', label: 'Wait', icon: ICON_MAP['wait-activity'], group: 'action' },\r\n { activityName: 'play-music', value: 'play-music', label: 'Play Music', icon: ICON_MAP['play-music'], group: 'action' },\r\n { activityName: 'blind-transfer', value: 'blind-transfer', label: 'Blind Transfer', icon: ICON_MAP['blind-transfer'], group: 'action' },\r\n { activityName: 'disconnect-contact', value: 'disconnect-contact', label: 'Disconnect', icon: ICON_MAP['disconnect-contact'], group: 'terminating-action' },\r\n { activityName: 'unmapped', value: 'unmapped', label: 'Unmapped', icon: ICON_MAP['unmapped'], group: 'unmapped' }\r\n];\r\n\r\nexport const CREATABLE_ACTIVITY_DISPLAY_TYPES: CreatableActivityDisplayType[] = ACTIVITY_DISPLAY_TYPES\r\n .filter(type => CREATABLE_WXCC_ACTIVITY_TYPES.has(type.activityName as WxCCTemplatedActivityType)) as CreatableActivityDisplayType[];\r\n\r\n/**\r\n * Get node icon information based on name or display type\r\n * @param name - The node name or display type\r\n * @returns Icon information with src and alt text\r\n */\r\nexport function getNodeIcon(name: string): IconInfo {\r\n const key = name.toLowerCase() as ActivityDisplayTypeValue;\r\n const iconSrc = ICON_MAP[key] || ICON_MAP['unmapped'];\r\n return { iconSrc, alt: key };\r\n}\r\n\r\n/**\r\n * Get node color class based on group\r\n * @param group - The node group\r\n * @returns CSS class name for node coloring\r\n */\r\nexport function getNodeColorClass(group: string): string {\r\n return COLOR_CLASS_MAP[group] || 'node-default';\r\n}\r\n\r\n/**\r\n * Get activity type label based on group\r\n * @param group - The node group\r\n * @returns Human-readable activity type label\r\n */\r\nexport function getActivityTypeLabel(group: string): string {\r\n return ACTIVITY_TYPE_LABELS[group] || 'Activity';\r\n}\r\n\r\n/**\r\n * Find activity display type by value\r\n * @param value - The display type value\r\n * @returns Display type or unmapped if not found\r\n */\r\nexport function getActivityDisplayTypeByValue(value: string): ActivityDisplayType {\r\n return ACTIVITY_DISPLAY_TYPES.find(dt => dt.value === value) || ACTIVITY_DISPLAY_TYPES[ACTIVITY_DISPLAY_TYPES.length - 1];\r\n}\r\n\r\nexport function getCreatableActivityDisplayTypeByValue(value: string): CreatableActivityDisplayType {\r\n return CREATABLE_ACTIVITY_DISPLAY_TYPES.find(type => type.value === value) || CREATABLE_ACTIVITY_DISPLAY_TYPES[0];\r\n}\r\n","import { ExtendedActivity, Review } from \"../types/extended-activity\";\r\nimport { getNodeIcon, getNodeColorClass, getActivityTypeLabel } from \"./node-mappings\";\r\n\r\nfunction escapeHtml(text: string): string {\r\n if (!text) return '';\r\n return text\r\n .replace(/&/g, '&')\r\n .replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''');\r\n}\r\n\r\nexport function getTranformedActivityName(name: string): string {\r\n return name\r\n .split('-')\r\n .map(s => s.charAt(0).toLocaleUpperCase() + s.slice(1))\r\n .join(' ');\r\n}\r\n\r\nfunction getReviewElement(review?: Review): string {\r\n if (!review)\r\n return `No review is available`;\r\n\r\n const reviewColor = review.color;\r\n const reviewColorLabel = `${reviewColor.charAt(0).toUpperCase()}${reviewColor.slice(1)}`;\r\n\r\n const reviewLevelLabel = review.level.replace('_', ' ');\r\n\r\n return `\r\n <span class=\"review-${reviewColor}\">\r\n ${reviewColorLabel} (${reviewLevelLabel})\r\n </span>\r\n `;\r\n}\r\n\r\nexport function getNodeHtmlTemplate(data: ExtendedActivity): string {\r\n const group = data.wxccGroup || 'unknown';\r\n\r\n const colorClass = getNodeColorClass(group);\r\n const typeLabel = getActivityTypeLabel(group);\r\n\r\n const name = data.name ? data.name.split('\\n')[0] : '';\r\n const detailsHeading =\r\n (data.suggestedProperties && data.suggestedProperties.uccxDescription\r\n ? data.suggestedProperties.uccxDescription\r\n : '').trim();\r\n const activityName = data.wxccActivityName || 'unmapped';\r\n\r\n const iconInfo = data.iconUrl ?\r\n { iconSrc: data.iconUrl, alt: data.iconUrl } :\r\n getNodeIcon(typeLabel === 'Unmapped' ? typeLabel : activityName);\r\n const { iconSrc, alt } = iconInfo;\r\n\r\n const transformedActivityName = getTranformedActivityName(activityName);\r\n\r\n const extraDetails: { [key: string]: string } = {\r\n Review: getReviewElement(data.review)\r\n };\r\n\r\n // Allow highlight class to be toggled by data.highlighted property\r\n const highlightClass = (data as any).highlighted ? 'highlighted' : '';\r\n\r\n return `\r\n <div class=\"node-content ${colorClass} ${highlightClass}\">\r\n <header>\r\n <div class=\"node-icon\">\r\n <img\r\n src=\"${iconSrc}\"\r\n alt=\"${alt}\"\r\n title=\"${typeLabel}\"\r\n />\r\n </div>\r\n <div class=\"node-info\">\r\n <div class=\"node-label\" title=\"${escapeHtml(name)}\">${name}</div>\r\n <div class=\"node-activity-name\" title=\"${escapeHtml(transformedActivityName)}\">\r\n ${transformedActivityName}\r\n </div>\r\n </div>\r\n </header>\r\n <div class=\"node-details\">\r\n <div class=\"node-details-item\" title=\"${escapeHtml(detailsHeading)}\">${detailsHeading}</div>\r\n ${Object.entries(extraDetails).map(([key, value]) => {\r\n const fullText = `${key}: ${value}`;\r\n return `<div>${fullText}</div>`;\r\n })}\r\n </div>\r\n </div>\r\n `;\r\n}","import { ChangeDetectionStrategy, Component, Inject, OnInit } from '@angular/core';\r\nimport {\r\n CREATABLE_ACTIVITY_DISPLAY_TYPES,\r\n CreatableActivityDisplayType,\r\n getCreatableActivityDisplayTypeByValue,\r\n} from '../../../utils/node-mappings';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ReadonlyExtendedActivity } from '../../../types/extended-activity';\r\n\r\nexport interface NewNodeData {\r\n activityTypeName: CreatableActivityDisplayType['activityName'];\r\n name: string;\r\n parentNodeIds: string[];\r\n childNodeIds: string[];\r\n}\r\n\r\n@Component({\r\n selector: 'add-node-dialog',\r\n templateUrl: './add-node-dialog.component.html',\r\n styleUrls: ['./add-node-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class AddNodeDialogComponent implements OnInit {\r\n readonly activityDisplayTypes = CREATABLE_ACTIVITY_DISPLAY_TYPES;\r\n\r\n selectedActivityType: CreatableActivityDisplayType = CREATABLE_ACTIVITY_DISPLAY_TYPES[0];\r\n nodeName = '';\r\n selectedParentIds: string[] = [];\r\n selectedChildIds: string[] = [];\r\n availableNodes: ReadonlyExtendedActivity[] = [];\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: { availableNodes: ReadonlyExtendedActivity[] },\r\n private dialogRef: MatDialogRef<AddNodeDialogComponent>\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.availableNodes = this.data.availableNodes;\r\n }\r\n\r\n private resetForm(): void {\r\n this.selectedActivityType = CREATABLE_ACTIVITY_DISPLAY_TYPES[0];\r\n this.nodeName = '';\r\n this.selectedParentIds = [];\r\n this.selectedChildIds = [];\r\n }\r\n\r\n onActivityTypeChange(value: string): void {\r\n this.selectedActivityType = getCreatableActivityDisplayTypeByValue(value);\r\n }\r\n\r\n onClose(): void {\r\n this.dialogRef.close();\r\n }\r\n\r\n onSubmit(): void {\r\n if (!this.nodeName.trim()) {\r\n return;\r\n }\r\n\r\n const newNodeData: NewNodeData = {\r\n activityTypeName: this.selectedActivityType.activityName,\r\n name: this.nodeName.trim(),\r\n parentNodeIds: this.selectedParentIds,\r\n childNodeIds: this.selectedChildIds\r\n };\r\n\r\n this.dialogRef.close(newNodeData);\r\n }\r\n\r\n trackByValue(index: number, type: CreatableActivityDisplayType): string {\r\n return type.value;\r\n }\r\n\r\n trackByNodeId(index: number, node: ReadonlyExtendedActivity): string {\r\n return node.id;\r\n }\r\n}\r\n","","import { ChangeDetectionStrategy, Component, EventEmitter, Inject, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\nimport { ReadonlyExtendedActivity } from '../../../types/extended-activity';\r\n\r\nexport interface LinkNodeData {\r\n sourceNodeId: string;\r\n targetNodeId: string;\r\n label?: string;\r\n}\r\n\r\n@Component({\r\n selector: 'link-node-dialog',\r\n templateUrl: './link-node-dialog.component.html',\r\n styleUrls: ['./link-node-dialog.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class LinkNodeDialogComponent implements OnInit, OnChanges {\r\n // @Input() isOpen = false;\r\n // @Input() sourceNode: ActivityData | null = null;\r\n \r\n availableNodes: ReadonlyExtendedActivity[] = [];\r\n sourceNode!: ReadonlyExtendedActivity;\r\n\r\n @Output() close = new EventEmitter<void>();\r\n @Output() linkNodes = new EventEmitter<LinkNodeData>();\r\n\r\n selectedTargetId: string | null = null;\r\n linkLabel = '';\r\n searchQuery = '';\r\n\r\n constructor(\r\n @Inject(MAT_DIALOG_DATA) public data: {\r\n sourceNode: ReadonlyExtendedActivity,\r\n availableNodes: ReadonlyExtendedActivity[]\r\n },\r\n private readonly dialogRef: MatDialogRef<LinkNodeDialogComponent>\r\n ) {}\r\n\r\n ngOnInit(): void {\r\n this.availableNodes = this.data.availableNodes;\r\n this.sourceNode = this.data.sourceNode;\r\n }\r\n\r\n get filteredNodes(): ReadonlyExtendedActivity[] {\r\n if (!this.sourceNode) {\r\n return [];\r\n }\r\n \r\n if (!this.searchQuery.trim()) {\r\n return this.availableNodes.filter(n => n && n.id !== this.sourceNode!.id);\r\n }\r\n \r\n const query = this.searchQuery.toLowerCase();\r\n return this.availableNodes.filter(n => \r\n n && n.id !== this.sourceNode!.id && \r\n ((n.name && n.name.toLowerCase().includes(query)) || \r\n (n.wxccActivityName && n.wxccActivityName.toLowerCase().includes(query)))\r\n );\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n // if (changes['isOpen'] && this.isOpen) {\r\n // this.resetForm();\r\n // }\r\n }\r\n\r\n private resetForm(): void {\r\n this.selectedTargetId = null;\r\n this.linkLabel = '';\r\n this.searchQuery = '';\r\n }\r\n\r\n selectNode(nodeId: string): void {\r\n this.selectedTargetId = nodeId;\r\n }\r\n\r\n isSelected(nodeId: string): boolean {\r\n return this.selectedTargetId === nodeId;\r\n }\r\n\r\n onClose(): void {\r\n this.dialogRef.close();\r\n }\r\n \r\n\r\n onSubmit(): void {\r\n if (!this.sourceNode || !this.selectedTargetId) {\r\n return;\r\n }\r\n\r\n const linkData: LinkNodeData = {\r\n sourceNodeId: this.sourceNode.id,\r\n targetNodeId: this.selectedTargetId,\r\n label: this.linkLabel.trim() || undefined\r\n };\r\n\r\n this.dialogRef.close(linkData);\r\n // this.linkNodes.emit(linkData);\r\n // this.onClose();\r\n }\r\n\r\n trackByNodeId(index: number, node: ReadonlyExtendedActivity): string {\r\n return node.id;\r\n }\r\n}\r\n","","import { Injectable } from \"@angular/core\";\r\nimport * as uuid from \"uuid\";\r\nimport { IWxCCFlowchart, IWxCCJSON, IWxCCNonIRJSON, WxCCFlowchartEdge, WxCCFlowchartNode } from \"../types/wxcc\";\r\nimport { ExtendedActivity, ExtendedLink } from \"../types/extended-activity\";\r\n\r\n@Injectable()\r\nexport class WxCC2GraphService {\r\n wxccJSON!: IWxCCJSON;\r\n wxccNonIRJSON!: IWxCCNonIRJSON;\r\n\r\n parseWxCC(wxcc: IWxCCJSON, nonIr?: IWxCCNonIRJSON): IWxCCFlowchart {\r\n this.wxccJSON = wxcc;\r\n if (nonIr) {\r\n this.wxccNonIRJSON = nonIr;\r\n }\r\n\r\n const nodes: WxCCFlowchartNode[] = [];\r\n const edges: WxCCFlowchartEdge[] = [];\r\n\r\n wxcc.activities.forEach(activity => nodes.push(this.toWxCCNode(activity)));\r\n wxcc.links.forEach(link => edges.push(this.toWxCCEdge(link)));\r\n\r\n return {\r\n flowId: wxcc.generatedAt,\r\n flowName: wxcc.prefix,\r\n nodes: nodes,\r\n edges: edges\r\n } as IWxCCFlowchart;\r\n }\r\n\r\n setSourceDocuments(ir: IWxCCJSON, nonIr: IWxCCNonIRJSON): void {\r\n this.wxccJSON = ir;\r\n this.wxccNonIRJSON = nonIr;\r\n }\r\n\r\n updateActivityData(data: ExtendedActivity): boolean {\r\n const { iconUrl, ...dataWithoutIcon } = data;\r\n\r\n const wxccActivityData = this.getActivityById(data.id);\r\n\r\n if (!wxccActivityData) {\r\n console.error(`Activity with id ${data.id} not found`);\r\n return false;\r\n }\r\n\r\n const source = dataWithoutIcon as Record<string, any>;\r\n const target = wxccActivityData as Record<string, any>;\r\n\r\n Object.keys(source).forEach(key => {\r\n if (typeof source[key] === 'object' && source[key] !== null && !Array.isArray(source[key])) {\r\n // For nested objects, merge them recursively\r\n target[key] = { ...target[key], ...source[key] };\r\n } else {\r\n // For primitives and arrays, assign directly\r\n target[key] = source[key];\r\n }\r\n });\r\n\r\n return true;\r\n }\r\n\r\n /**\r\n * Add a new activity to the graph\r\n */\r\n addActivity(activity: ExtendedActivity): WxCCFlowchartNode {\r\n // Add to internal JSON structure\r\n (this.wxccJSON.activities as ExtendedActivity[]).push(activity);\r\n return this.toWxCCNode(activity);\r\n }\r\n\r\n /**\r\n * Remove an activity and all its connected links\r\n */\r\n removeActivity(activityId: string): { removedLinkIds: string[] } {\r\n // Remove the activity\r\n const activityIndex = this.wxccJSON.activities.findIndex(a => a.id === activityId);\r\n if (activityIndex !== -1) {\r\n (this.wxccJSON.activities as ExtendedActivity[]).splice(activityIndex, 1);\r\n }\r\n\r\n // Find and remove all links connected to this activity\r\n const removedLinkIds: string[] = [];\r\n const linksToRemove = this.wxccJSON.links.filter(\r\n link => link.sourceActivityId === activityId || link.targetActivityId === activityId\r\n );\r\n\r\n linksToRemove.forEach(link => {\r\n removedLinkIds.push(link.id);\r\n const linkIndex = this.wxccJSON.links.findIndex(l => l.id === link.id);\r\n if (linkIndex !== -1) {\r\n (this.wxccJSON.links as ExtendedLink[]).splice(linkIndex, 1);\r\n }\r\n });\r\n\r\n return { removedLinkIds };\r\n }\r\n\r\n /**\r\n * Add a new link between two activities\r\n */\r\n addLink(sourceActivityId: string, targetActivityId: string, label?: string): WxCCFlowchartEdge {\r\n const linkId = this.generateId();\r\n\r\n const link: ExtendedLink = {\r\n id: linkId,\r\n sourceActivityId,\r\n targetActivityId,\r\n uccxLabel: label || ''\r\n };\r\n\r\n (this.wxccJSON.links as ExtendedLink[]).push(link);\r\n return this.toWxCCEdge(link);\r\n }\r\n\r\n /**\r\n * Remove a link by its id\r\n */\r\n removeLink(linkId: string): boolean {\r\n const linkIndex = this.wxccJSON.links.findIndex(l => l.id === linkId);\r\n if (linkIndex !== -1) {\r\n (this.wxccJSON.links as ExtendedLink[]).splice(linkIndex, 1);\r\n return true;\r\n }\r\n return false;\r\n }\r\n\r\n /**\r\n * Check if a link already exists between two nodes\r\n */\r\n linkExists(sourceActivityId: string, targetActivityId: string): boolean {\r\n return this.wxccJSON.links.some(\r\n link => link.sourceActivityId === sourceActivityId && link.targetActivityId === targetActivityId\r\n );\r\n }\r\n\r\n /**\r\n * Get all activities for selection purposes\r\n */\r\n getAllActivities(): ExtendedActivity[] {\r\n return [...this.wxccJSON.activities];\r\n }\r\n\r\n getActivityById(id: string): ExtendedActivity | undefined {\r\n return this.wxccJSON.activities.find(a => a.id === id);\r\n }\r\n\r\n generateId() {\r\n return uuid.v4();\r\n }\r\n\r\n private toWxCCNode(activity: ExtendedActivity): WxCCFlowchartNode {\r\n const label = activity.name || activity.wxccActivityName || 'Activity';\r\n return {\r\n data: {\r\n ...activity,\r\n label: label\r\n }\r\n }\r\n }\r\n\r\n private toWxCCEdge(link: ExtendedLink): WxCCFlowchartEdge {\r\n const label = link.uccxLabel || link.conditionExpr || '';\r\n return {\r\n data: {\r\n ...link,\r\n source: link.sourceActivityId,\r\n target: link.targetActivityId,\r\n label: label\r\n }\r\n }\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { CollectionReturnValue, Core, Css } from \"cytoscape\";\r\n\r\ntype ViewportConfig = Readonly<{\r\n minZoomLevel: number,\r\n maxZoomLevel: number,\r\n animateOptions: {\r\n duration: number,\r\n easing: Css.TransitionTimingFunction\r\n }\r\n}>;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CytoscapeViewportService {\r\n \r\n readonly config: ViewportConfig = {\r\n minZoomLevel: 0.8,\r\n maxZoomLevel: 1.2,\r\n animateOptions: {\r\n duration: 400,\r\n easing: 'ease-in-out-cubic'\r\n }\r\n };\r\n\r\n zoomIn(cy: Core): void {\r\n this.handleZoomChange(cy, this.config.maxZoomLevel);\r\n }\r\n\r\n zoomOut(cy: Core): void {\r\n this.handleZoomChange(cy, this.config.minZoomLevel);\r\n }\r\n\r\n resetView(cy: Core, eles: CollectionReturnValue): void {\r\n this.fitToView(cy, eles);\r\n }\r\n\r\n private handleZoomChange(cy: Core, zoomLevel: number): void {\r\n if (cy) {\r\n const currentZoom = cy.zoom();\r\n const newZoom = currentZoom * zoomLevel;\r\n const zoomDelta = newZoom / currentZoom;\r\n\r\n const pan = cy.pan();\r\n const containerWidth = cy.width();\r\n const containerHeight = cy.height();\r\n\r\n const centerX = containerWidth / 2;\r\n const centerY = containerHeight / 2;\r\n\r\n // Adjust pan to zoom toward center\r\n const newPan = {\r\n x: centerX - (centerX - pan.x) * zoomDelta,\r\n y: centerY - (centerY - pan.y) * zoomDelta\r\n };\r\n\r\n cy.viewport({\r\n zoom: newZoom,\r\n pan: newPan\r\n });\r\n }\r\n }\r\n\r\n private fitToView(cy: Core, eles: CollectionReturnValue, padding = 60): void {\r\n if (cy && eles) {\r\n cy.animate({\r\n fit: {\r\n eles: eles,\r\n padding: padding\r\n },\r\n duration: this.config.animateOptions.duration,\r\n easing: this.config.animateOptions.easing\r\n });\r\n }\r\n }\r\n}","\r\nimport { Injectable } from \"@angular/core\";\r\nimport { WxCCActivity, WxCCActivityMap, WxCCTemplatedActivityType } from \"../types/wxcc-activity\";\r\n\r\n@Injectable()\r\nexport class WxCCActivityManageService {\r\n\r\n private readonly ACTIVITY_TEMPLATES: Record<WxCCTemplatedActivityType, WxCCActivity> = {\r\n NewPhoneContact: {\r\n id: '',\r\n type: 'NewPhoneContact',\r\n group: 'start',\r\n name: 'NewPhoneContact',\r\n properties: {\r\n name: 'NewPhoneContact',\r\n event: 'NewPhoneContact',\r\n flowType: {\r\n eventSourceName: 'WebexContactCenter',\r\n eventSpecificationName: 'ContactStartWorkflow',\r\n eventClassificationId: '',\r\n eventClassificationName: '',\r\n eventSpecificationId: '',\r\n eventSourceId: ''\r\n },\r\n activityName: 'NewPhoneContact',\r\n _renderRequestTimestamp: Date.now(),\r\n activityId: 'start'\r\n }\r\n },\r\n \"blind-transfer\": {\r\n id: '',\r\n type: 'blind-transfer',\r\n group: 'terminating-action',\r\n name: 'BlindTransfer',\r\n properties: {\r\n name: 'BlindTransfer',\r\n activityName: 'blind-transfer',\r\n _renderRequestTimestamp: Date.now(),\r\n transfertodn: '',\r\n activityId: '',\r\n transfertodn_radioName: 'dn',\r\n 'transfertodn:radioName': 'dn',\r\n customAttributes: {},\r\n flowDecryptAccess: false,\r\n }\r\n },\r\n \"ivr-menu\": {\r\n id: '',\r\n type: 'ivr-menu',\r\n group: 'enum-gateway',\r\n name: 'Menu',\r\n properties: {\r\n connector_name: null,\r\n name: 'Menu',\r\n menuLinks: [],\r\n toggle: false,\r\n activityName: 'ivr-menu',\r\n prompts: [],\r\n _renderRequestTimestamp: Date.now(),\r\n 'connector:name': null,\r\n activityId: '',\r\n 'menuLinks:input': [],\r\n entryTimeout: 3,\r\n volumeGainDb: 0,\r\n menuLinks_input: [],\r\n voiceLanguage_name: null,\r\n promptsTts: null,\r\n interruptible: false,\r\n connector: null,\r\n speakingRate: 1,\r\n toggleLanguage: null,\r\n voiceLanguage: null,\r\n flowDecryptAccess: false,\r\n 'voiceLanguage:name': null\r\n }\r\n },\r\n \"play-message\": {\r\n id: '',\r\n type: 'play-message',\r\n group: 'action',\r\n name: 'PlayMessage',\r\n properties: {\r\n connector_name: null,\r\n name: 'PlayMessage',\r\n toggle: false,\r\n activityName: 'play-message',\r\n prompts: [],\r\n _renderRequestTimestamp: Date.now(),\r\n 'connector:name': null,\r\n activityId: '',\r\n volumeGainDb: 0,\r\n voiceLanguage_name: null,\r\n promptsTts: null,\r\n connector: null,\r\n speakingRate: 1,\r\n toggleLanguage: null,\r\n voiceLanguage: null,\r\n flowDecryptAccess: false,\r\n 'voiceLanguage:name': null\r\n }\r\n },\r\n \"play-music\": {\r\n id: '',\r\n type: 'play-music',\r\n group: 'action',\r\n name: 'PlayPrompt',\r\n properties: {\r\n connector_name: null,\r\n name: 'PlayPrompt',\r\n toggle: false,\r\n activityName: 'play-music',\r\n prompts: [],\r\n _renderRequestTimestamp: Date.now(),\r\n 'connector:name': null,\r\n activityId: '',\r\n volumeGainDb: 0,\r\n voiceLanguage_name: null,\r\n promptsTts: null,\r\n connector: null,\r\n speakingRate: 1,\r\n toggleLanguage: null,\r\n voiceLanguage: null,\r\n flowDecryptAccess: false,\r\n 'voiceLanguage:name': null\r\n }\r\n },\r\n \"set-variable\": {\r\n id: '',\r\n type: 'set-variable',\r\n group: 'set-variable',\r\n name: 'SetVariable',\r\n properties: {\r\n setTo: 'set-to-literal',\r\n name: 'SetVariable',\r\n literal_invalid_error: false,\r\n activityName: 'set-variable',\r\n _renderRequestTimestamp: Date.now(),\r\n activityId: 'set-variable',\r\n setVariablesArray: [],\r\n flowDecryptAccess: false\r\n }\r\n },\r\n \"business-hours\": {\r\n id: '',\r\n type: 'business-hours',\r\n name: '',\r\n group: '',\r\n properties: {\r\n activityName: 'business-hours',\r\n _renderRequestTimestamp: Date.now(),\r\n activityId: ''\r\n }\r\n }\r\n }\r\n\r\n create<K extends keyof WxCCActivityMap>(type: K): WxCCActivityMap[K] {\r\n return JSON.parse(JSON.stringify(this.ACTIVITY_TEMPLATES[type])) as WxCCActivityMap[K];\r\n }\r\n}","import { Injectable } from \"@angular/core\";\r\nimport { WxCC2GraphService } from \"./wxcc2graph.service\";\r\nimport { WxCCActivityManageService } from \"./wxcc-activity-manage.service\";\r\nimport { WxCCFlowchartNode } from \"../types/wxcc\";\r\nimport { ReadonlyExtendedActivity } from \"../types/extended-activity\";\r\nimport { WxCCActivity, WxCCTemplatedActivityType } from \"../types/wxcc-activity\";\r\nimport { ACTIVITY_DISPLAY_TYPES } from \"../utils/node-mappings\";\r\n\r\nexport interface CreateActivityRequest {\r\n activityTypeName: WxCCTemplatedActivityType;\r\n name: string;\r\n}\r\n\r\n@Injectable()\r\nexport class WxCCActivityCreationService {\r\n constructor(\r\n private readonly wxcc2graph: WxCC2GraphService,\r\n private readonly wxccActivityTemplateService: WxCCActivityManageService,\r\n ) { }\r\n\r\n createAndSync(request: CreateActivityRequest): WxCCFlowchartNode {\r\n const newActivityId = this.wxcc2graph.generateId();\r\n const activityTemplate = this.buildTemplatedActivity(request, newActivityId);\r\n\r\n this.seedNonIrActivity(activityTemplate, newActivityId);\r\n\r\n const activityData = this.buildExtendedActivity(request, activityTemplate, newActivityId);\r\n const node = this.wxcc2graph.addActivity(activityData);\r\n\r\n return node;\r\n }\r\n\r\n private buildTemplatedActivity(request: CreateActivityRequest, newActivityId: string): WxCCActivity {\r\n const activityTemplate = this.wxccActivityTemplateService.create(request.activityTypeName);\r\n const templateProperties = activityTemplate.properties;\r\n const displayType = ACTIVITY_DISPLAY_TYPES.find((type) => type.activityName === request.activityTypeName);\r\n\r\n activityTemplate.id = newActivityId;\r\n activityTemplate.name = request.name;\r\n activityTemplate.group = activityTemplate.group || displayType?.group || \"unmapped\";\r\n activityTemplate.properties.activityId = newActivityId;\r\n activityTemplate.properties._renderRequestTimestamp = Date.now();\r\n // @ts-ignore\r\n templateProperties.name = request.name;\r\n\r\n return activityTemplate;\r\n }\r\n\r\n private seedNonIrActivity(activityTemplate: WxCCActivity, newActivityId: string): void {\r\n const nonIrActivities = this.getNonIrActivitiesMap();\r\n if (!nonIrActivities) {\r\n return;\r\n }\r\n\r\n nonIrActivities[newActivityId] = {\r\n id: newActivityId,\r\n group: activityTemplate.group,\r\n name: activityTemplate.name,\r\n properties: {\r\n ...activityTemplate.properties,\r\n },\r\n };\r\n }\r\n\r\n private getNonIrActivitiesMap(): Record<string, any> | null {\r\n const nonIrDoc = this.wxcc2graph.wxccNonIRJSON;\r\n if (!nonIrDoc) {\r\n return null;\r\n }\r\n\r\n const process = nonIrDoc.process;\r\n if (!process) {\r\n return null;\r\n }\r\n\r\n const activities = process.activities;\r\n if (!activities) {\r\n return null;\r\n }\r\n\r\n return activities as Record<string, any>;\r\n }\r\n\r\n private buildExtendedActivity(request: CreateActivityRequest, activityTemplate: WxCCActivity, newActivityId: string): ReadonlyExtendedActivity {\r\n const displayType = ACTIVITY_DISPLAY_TYPES.find((type) => type.activityName === request.activityTypeName);\r\n\r\n return {\r\n id: newActivityId,\r\n name: request.name,\r\n wxccActivityName: activityTemplate.type,\r\n wxccGroup: activityTemplate.group,\r\n wxccActivityId: activityTemplate.properties.activityId,\r\n // @ts-ignore\r\n iconUrl: displayType.icon || \"assets/wxcc/unmapped.svg\",\r\n suggestedProperties: {\r\n uccxDescription: \"\",\r\n },\r\n };\r\n }\r\n}\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\ntype _ToolbarItem = {\r\n id: string,\r\n label: string,\r\n svg: SafeHtml,\r\n action: () => void\r\n};\r\n\r\nexport interface FloatingToolbarVisibility {\r\n resetView?: boolean;\r\n zoomIn?: boolean;\r\n zoomOut?: boolean;\r\n export?: boolean;\r\n}\r\n\r\nconst DEFAULT_VISIBILITY: FloatingToolbarVisibility = {\r\n resetView: true,\r\n zoomIn: true,\r\n zoomOut: true,\r\n export: true\r\n};\r\n\r\n@Component({\r\n selector: 'graph-floating-toolbar',\r\n templateUrl: './floating-toolbar.component.html',\r\n styleUrls: ['./floating-toolbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class FloatingToolBarComponent implements OnInit {\r\n @Input() visibility: FloatingToolbarVisibility = DEFAULT_VISIBILITY;\r\n\r\n toolbarConfig!: Readonly<_ToolbarItem>[];\r\n\r\n @Output() resetViewChange = new EventEmitter<void>();\r\n @Output() zoomInChange = new EventEmitter<void>();\r\n @Output() zoomOutChange = new EventEmitter<void>();\r\n @Output() exportImageChange = new EventEmitter<void>();\r\n\r\n constructor(\r\n private sanitizer: DomSanitizer\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n const mergedVisibility = { ...DEFAULT_VISIBILITY, ...this.visibility };\r\n \r\n const allItems: (_ToolbarItem & { visibilityKey: keyof FloatingToolbarVisibility })[] = [\r\n {\r\n id: 'reset-view',\r\n visibilityKey: 'resetView',\r\n label: 'UCCX.BUTTONS.RESET_VIEW',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8\"></path>\r\n <path d=\"M21 3v5h-5\"></path>\r\n <path d=\"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16\"></path>\r\n <path d=\"M3 21v-5h5\"></path>\r\n </svg>`),\r\n action: () => this.resetView()\r\n },\r\n {\r\n id: 'zoom-in',\r\n visibilityKey: 'zoomIn',\r\n label: 'UCCX.BUTTONS.ZOOM_IN',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n <path d=\"m21 21-4.35-4.35\"></path>\r\n <path d=\"M11 8v6M8 11h6\"></path>\r\n </svg>`),\r\n action: () => this.zoomIn()\r\n },\r\n {\r\n id: 'zoom-out',\r\n visibilityKey: 'zoomOut',\r\n label: 'UCCX.BUTTONS.ZOOM_OUT',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <circle cx=\"11\" cy=\"11\" r=\"8\"></circle>\r\n <path d=\"m21 21-4.35-4.35\"></path>\r\n <path d=\"M8 11h6\"></path>\r\n </svg>`),\r\n action: () => this.zoomOut()\r\n },\r\n {\r\n id: 'export',\r\n visibilityKey: 'export',\r\n label: 'UCCX.BUTTONS.EXPORT',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`<svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\"></path>\r\n <polyline points=\"7 10 12 15 17 10\"></polyline>\r\n <line x1=\"12\" y1=\"15\" x2=\"12\" y2=\"3\"></line>\r\n </svg>`),\r\n action: () => this.exportImage()\r\n }\r\n ];\r\n\r\n this.toolbarConfig = allItems.filter(item => mergedVisibility[item.visibilityKey] !== false);\r\n }\r\n\r\n resetView(): void {\r\n this.resetViewChange.emit();\r\n }\r\n\r\n zoomIn(): void {\r\n this.zoomInChange.emit();\r\n }\r\n\r\n zoomOut(): void {\r\n this.zoomOutChange.emit();\r\n }\r\n\r\n exportImage(): void {\r\n this.exportImageChange.emit();\r\n }\r\n\r\n trackById(index: number, item: _ToolbarItem): string {\r\n return item.id;\r\n }\r\n}","<div class=\"toolbar-wrapper\" role=\"toolbar\">\r\n <ng-container *ngFor=\"let item of toolbarConfig; trackBy: trackById\">\r\n <button\r\n type=\"button\"\r\n [attr.aria-label]=\"item.label\"\r\n [matTooltip]=\"item.label\"\r\n matTooltipPosition=\"left\"\r\n class=\"toolbar-button\"\r\n (click)=\"item.action()\">\r\n <div [innerHTML]=\"item.svg\"></div>\r\n </button>\r\n </ng-container>\r\n</div>","import { Component, EventEmitter, Input, Output, OnChanges, ChangeDetectionStrategy, SimpleChanges } from '@angular/core';\r\nimport {\r\n ACTIVITY_DISPLAY_TYPES,\r\n ActivityDisplayType,\r\n getNodeColorClass,\r\n getActivityDisplayTypeByValue,\r\n ICON_MAP\r\n} from '../../utils/node-mappings';\r\nimport { getTranformedActivityName } from '../../utils/node-html-template';\r\nimport { ReadonlyExtendedActivity } from '../../types/extended-activity';\r\n\r\n@Component({\r\n selector: 'node-details-sidebar',\r\n templateUrl: './node-details-sidebar.component.html',\r\n styleUrls: ['./node-details-sidebar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NodeDetailsSidebarComponent {\r\n @Input() isOpen = false;\r\n @Input() nodeData: ReadonlyExtendedActivity | null = null;\r\n\r\n @Output() close = new EventEmitter<void>();\r\n @Output() activityTypeChange = new EventEmitter<ActivityDisplayType>();\r\n @Output() descriptionChange = new EventEmitter<string>();\r\n\r\n readonly activityDisplayTypes = ACTIVITY_DISPLAY_TYPES;\r\n\r\n transformedActivityName!: string;\r\n selectedActivityType: ActivityDisplayType | null = null;\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n if (changes['nodeData'] && this.nodeData) {\r\n this.initializeActivityType();\r\n }\r\n }\r\n\r\n private initializeActivityType(): void {\r\n const activityName = this.nodeData && this.nodeData.wxccActivityName;\r\n this.selectedActivityType = getActivityDisplayTypeByValue((activityName || 'unmapped').toLocaleLowerCase());\r\n this.transformedActivityName = getTranformedActivityName(activityName || 'unmapped');\r\n }\r\n\r\n onDescriptionChange(event: Event): void {\r\n const target = event.target as HTMLTextAreaElement | null;\r\n\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const description = target.value.trim();\r\n\r\n if (!description)\r\n return;\r\n\r\n this.descriptionChange.emit(description);\r\n }\r\n\r\n private onActivityTypeChange(type: ActivityDisplayType): void {\r\n this.selectedActivityType = type;\r\n this.activityTypeChange.emit(type);\r\n }\r\n\r\n onActivityTypeSelectChange(event: Event): void {\r\n const target = event.target as HTMLSelectElement | null;\r\n\r\n if (!target) {\r\n return;\r\n }\r\n\r\n const value = target.value;\r\n const type = getActivityDisplayTypeByValue(value);\r\n this.onActivityTypeChange(type);\r\n }\r\n\r\n onClose(): void {\r\n this.close.emit();\r\n }\r\n\r\n getNodeIcon(): string {\r\n return (this.selectedActivityType && this.selectedActivityType.icon) || ICON_MAP['unmapped'];\r\n }\r\n\r\n getNodeColorClass(): string {\r\n const group = (this.selectedActivityType && this.selectedActivityType.group) || 'unmapped';\r\n return getNodeColorClass(group);\r\n }\r\n\r\n getReviewColor(): string {\r\n const color =\r\n (this.nodeData && this.nodeData.review && this.nodeData.review.color) ||\r\n 'green';\r\n const colors: { [key: string]: string } = {\r\n 'green': '#4CAF50',\r\n 'yellow': '#FF9800',\r\n 'red': '#F44336'\r\n };\r\n return colors[color] || colors['green'];\r\n }\r\n\r\n getReviewLabel(): string {\r\n const color =\r\n (this.nodeData && this.nodeData.review && this.nodeData.review.color) ||\r\n 'green';\r\n const level =\r\n (this.nodeData && this.nodeData.review && this.nodeData.review.level) ||\r\n 'confident';\r\n return `${color.charAt(0).toUpperCase() + color.slice(1)} (${level.replace('_', ' ')})`;\r\n }\r\n\r\n trackByValue(index: number, type: ActivityDisplayType): string {\r\n return type.value;\r\n }\r\n}","<!-- <div class=\"sidebar-overlay\" *ngIf=\"isOpen\" (click)=\"onClose()\"></div> -->\r\n\r\n<div class=\"node-details-sidebar\" [class.open]=\"isOpen\">\r\n <div class=\"sidebar-header\">\r\n <h3>Node Details</h3>\r\n <button class=\"close-btn\" (click)=\"onClose()\">\r\n <span>×</span>\r\n </button>\r\n </div>\r\n\r\n <div class=\"sidebar-content\" *ngIf=\"nodeData\">\r\n <!-- Node Preview -->\r\n <div class=\"node-preview\">\r\n <div class=\"node-preview-card\" [ngClass]=\"getNodeColorClass()\">\r\n <div class=\"node-icon\">\r\n <img [src]=\"getNodeIcon()\" alt=\"Node Icon\" />\r\n </div>\r\n <div class=\"node-info\">\r\n <div class=\"node-label\">{{ nodeData.name?.split(\"\\n\")?.[0] }}</div>\r\n <div class=\"node-type\">{{ transformedActivityName }}</div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Activity Type Selector -->\r\n <div class=\"section\">\r\n <label class=\"section-label\">Activity Type</label>\r\n <div class=\"display-type-selector\">\r\n <select\r\n class=\"form-control\"\r\n title=\"Select activity type\"\r\n [value]=\"selectedActivityType?.value\"\r\n (change)=\"onActivityTypeSelectChange($event)\"\r\n >\r\n <option\r\n *ngFor=\"let type of activityDisplayTypes; trackBy: trackByValue\"\r\n [value]=\"type.value\"\r\n >\r\n {{ type.label }}\r\n </option>\r\n </select>\r\n </div>\r\n </div>\r\n\r\n <div class=\"section\">\r\n <label class=\"section-label\">Description</label>\r\n <div class=\"display-type-selector\">\r\n <textarea\r\n class=\"form-control\"\r\n aria-label=\"property-description\"\r\n (input)=\"onDescriptionChange($event)\"\r\n [value]=\"nodeData.suggestedProperties?.uccxDescription\"\r\n rows=\"3\"\r\n ></textarea>\r\n </div>\r\n </div>\r\n\r\n <!-- Node Information -->\r\n <div class=\"section\">\r\n <label class=\"section-label\">Information</label>\r\n <div class=\"info-grid\">\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">UCCX Type:</span>\r\n <span class=\"info-value\" [title]=\"nodeData.uccxTypeName\">{{\r\n nodeData.uccxTypeName\r\n }}</span>\r\n </div>\r\n <div class=\"info-item\">\r\n <span class=\"info-label\">WxCC Activity Name:</span>\r\n <span class=\"info-value\" [title]=\"transformedActivityName\">{{\r\n transformedActivityName\r\n }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Review Status -->\r\n <div class=\"section\" *ngIf=\"nodeData.review\">\r\n <label class=\"section-label\">Review Status</label>\r\n <div class=\"review-status\">\r\n <div class=\"review-badge\" [style.background-color]=\"getReviewColor()\">\r\n {{ getReviewLabel() }}\r\n </div>\r\n <div\r\n class=\"review-reasons\"\r\n *ngIf=\"nodeData.review.reasons && nodeData.review.reasons.length > 0\"\r\n >\r\n <div class=\"reason\" *ngFor=\"let reason of nodeData.review.reasons\">\r\n <span class=\"reason-icon\">⚠</span>\r\n <span>{{ reason }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <!-- Suggested Properties -->\r\n <div class=\"section\" *ngIf=\"nodeData.suggestedProperties\">\r\n <label class=\"section-label\">Migration Information</label>\r\n <div class=\"migration-info\">\r\n <div\r\n class=\"info-card\"\r\n *ngIf=\"nodeData.suggestedProperties.closestWxccActivity\"\r\n >\r\n <div class=\"card-label\">Closest WXCC Activity</div>\r\n <div class=\"card-value\">\r\n {{ nodeData.suggestedProperties.closestWxccActivity }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"info-card\"\r\n *ngIf=\"nodeData.suggestedProperties.mappingNotes\"\r\n >\r\n <div class=\"card-label\">Mapping Notes</div>\r\n <div class=\"card-value\">\r\n {{ nodeData.suggestedProperties.mappingNotes }}\r\n </div>\r\n </div>\r\n <div\r\n class=\"info-card\"\r\n *ngIf=\"nodeData.suggestedProperties.migrationInstructions\"\r\n >\r\n <div class=\"card-label\">Migration Instructions</div>\r\n <div class=\"card-value instructions\">\r\n {{ nodeData.suggestedProperties.migrationInstructions }}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\r\nimport { DomSanitizer, SafeHtml } from '@angular/platform-browser';\r\n\r\nexport interface NodeToolbarPosition {\r\n x: number;\r\n y: number;\r\n}\r\n\r\nexport interface NodeActionToolbarAction {\r\n id: string;\r\n label: string;\r\n svg: SafeHtml;\r\n action: () => void;\r\n}\r\n\r\n@Component({\r\n selector: 'node-action-toolbar',\r\n templateUrl: './node-action-toolbar.component.html',\r\n styleUrls: ['./node-action-toolbar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NodeActionToolbarComponent {\r\n @Input() isVisible = false;\r\n @Input() position: NodeToolbarPosition = { x: 0, y: 0 };\r\n\r\n @Output() deleteNode = new EventEmitter<void>();\r\n @Output() linkNode = new EventEmitter<void>();\r\n\r\n toolbarActions: NodeActionToolbarAction[];\r\n\r\n constructor(private sanitizer: DomSanitizer) {\r\n this.toolbarActions = [\r\n {\r\n id: 'link',\r\n label: 'Link to Node',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71\"></path>\r\n <path d=\"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71\"></path>\r\n </svg>\r\n `),\r\n action: () => this.onLinkNode()\r\n },\r\n {\r\n id: 'delete',\r\n label: 'Delete Node',\r\n svg: this.sanitizer.bypassSecurityTrustHtml(`\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\r\n <path d=\"M3 6h18\"></path>\r\n <path d=\"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6\"></path>\r\n <path d=\"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2\"></path>\r\n <line x1=\"10\" y1=\"11\" x2=\"10\" y2=\"17\"></line>\r\n <line x1=\"14\" y1=\"11\" x2=\"14\" y2=\"17\"></line>\r\n </svg>\r\n `),\r\n action: () => this.onDeleteNode()\r\n }\r\n ];\r\n }\r\n\r\n onDeleteNode(): void {\r\n this.deleteNode.emit();\r\n }\r\n\r\n onLinkNode(): void {\r\n this.linkNode.emit();\r\n }\r\n\r\n trackById(index: number, item: NodeActionToolbarAction): string {\r\n return item.id;\r\n }\r\n}\r\n","<div \r\n class=\"node-action-toolbar\" \r\n [class.visible]=\"isVisible\"\r\n [style.left.px]=\"position.x\"\r\n [style.top.px]=\"position.y\">\r\n <ng-container *ngFor=\"let action of toolbarActions; trackBy: trackById\">\r\n <button\r\n type=\"button\"\r\n class=\"toolbar-action-btn\"\r\n [class.delete-btn]=\"action.id === 'delete'\"\r\n [attr.aria-label]=\"action.label\"\r\n [matTooltip]=\"action.label\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"action.action()\">\r\n <div [innerHTML]=\"action.svg\"></div>\r\n </button>\r\n </ng-container>\r\n</div>\r\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { ReadonlyExtendedActivity } from \"../../types/extended-activity\";\r\n\r\n@Component({\r\n selector: 'node-search-panel',\r\n templateUrl: './node-search-panel.component.html',\r\n styleUrls: ['./node-search-panel.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NodeSearchPanelComponent implements OnInit {\r\n @Input() nodes!: ReadonlyExtendedActivity[];\r\n\r\n @Output() private readonly searchChange = new EventEmitter<string>();\r\n @Output() private readonly selectNodeChange = new EventEmitter<string>();\r\n\r\n filteredNodes!: ReadonlyExtendedActivity[];\r\n\r\n ngOnInit(): void {\r\n this.filteredNodes = this.nodes;\r\n }\r\n\r\n onSearchChange(event: Event): void {\r\n const value = (event.target as HTMLInputElement).value.trim().toLowerCase();\r\n\r\n if (!value) {\r\n this.filteredNodes = this.nodes.slice();\r\n return;\r\n }\r\n\r\n this.filteredNodes = this.nodes\r\n .filter(node =>\r\n node.name?.toLowerCase().includes(value) ||\r\n node.wxccActivityName?.toLowerCase().includes(value) ||\r\n node.uccxTypeName?.toLowerCase().includes(value) ||\r\n node.wxccGroup?.toLowerCase().includes(value) ||\r\n node.uccxDisplayType?.toLowerCase().includes(value)\r\n );\r\n }\r\n\r\n onSelectNodeChange(event: Event): void {\r\n const target = event.target as HTMLElement;\r\n const id = target.id;\r\n\r\n this.selectNodeChange.emit(id);\r\n }\r\n}","<div class=\"search-panel\">\r\n <div class=\"search-input-wrapper\">\r\n <div class=\"search-icon\">\r\n <img src=\"assets/icons/search.svg\" />\r\n </div>\r\n <input (input)=\"onSearchChange($event)\" type=\"text\" name=\"\" id=\"\" placeholder=\"Search nodes by name, type, variables...\" class=\"search-input\">\r\n </div>\r\n <div class=\"search-results-wrapper\" (click)=\"onSelectNodeChange($event)\">\r\n <div class=\"activity-result-wrapper\" *ngFor=\"let act of filteredNodes\" id=\"{{ act.id }}\">\r\n {{ act.wxccActivityName || act.name }}\r\n </div>\r\n </div>\r\n</div>","import {\r\n\tAfterViewInit,\r\n\tChangeDetectionStrategy,\r\n\tChangeDetectorRef,\r\n\tComponent,\r\n\tElementRef,\r\n\tInput,\r\n\tOnChanges,\r\n\tOnDestroy,\r\n\tSimpleChanges,\r\n\tViewChild\r\n} from \"@angular/core\";\r\nimport { IWxCCFlowchart } from \"../../types/wxcc\";\r\nimport cytoscape, {\r\n\tElementDefinition,\r\n\tEdgeSingular,\r\n\tNodeSingular\r\n} from \"cytoscape\";\r\nimport dagre from \"cytoscape-dagre\";\r\nimport nodeHtmlLabel from \"cytoscape-node-html-label\";\r\nimport { StyleConfig } from \"../../constants/cytoscape.config\";\r\nimport { getNodeHtmlTemplate } from \"../../utils/node-html-template\";\r\nimport { ActivityDisplayType } from \"../../utils/node-mappings\";\r\nimport { WxCC2GraphService } from \"../../services/wxcc2graph.service\";\r\nimport { NodeToolbarPosition } from \"../node-action-toolbar/node-action-toolbar.component\";\r\nimport {\r\n\tAddNodeDialogComponent,\r\n\tNewNodeData\r\n} from \"../dialogs/add-node-dialog/add-node-dialog.component\";\r\nimport {\r\n\tLinkNodeData,\r\n\tLinkNodeDialogComponent\r\n} from \"../dialogs/link-node-dialog/link-node-dialog.component\";\r\nimport { MatDialog } from \"@angular/material/dialog\";\r\nimport { ReadonlyExtendedActivity } from \"../../types/extended-activity\";\r\nimport { WxCCActivityCreationService } from \"../../services/wxcc-activity-creation.service\";\r\nimport { CytoscapeViewportService } from \"../../services/cystoscape-viewport.service\";\r\n\r\ncytoscape.use(dagre);\r\ncytoscape.use(nodeHtmlLabel as any);\r\n\r\n@Component({\r\n\tselector: \"wxcc-flowchart\",\r\n\ttemplateUrl: \"./wxcc-flowchart.component.html\",\r\n\tstyleUrls: [\"./wxcc-flowchart.component.scss\"],\r\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\r\n})\r\nexport class WxCCFlowchartComponent implements AfterViewInit, OnChanges, OnDestroy {\r\n\t@Input() flowchart!: IWxCCFlowchart;\r\n\t@ViewChild(\"flowchartContainer\") flowchartContainer!: ElementRef<HTMLElement>;\r\n\r\n\tprivate cy?: cytoscape.Core;\r\n\tprivate viewReady = false;\r\n\tprivate readonly layoutOptions: dagre.DagreLayoutOptions = {\r\n\t\tname: \"dagre\",\r\n\t\trankDir: \"LR\",\r\n\t\tnodeSep: 180,\r\n\t\tedgeSep: 60,\r\n\t\trankSep: 150,\r\n\t\tanimate: true,\r\n\t\tanimationDuration: 500,\r\n\t\tfit: true\r\n\t};\r\n\r\n\t// Sidebar state\r\n\tisSidebarOpen = false;\r\n\tselectedNodeData: ReadonlyExtendedActivity | null = null;\r\n\r\n\t// Search panel state\r\n\tisSearchPanelVisible = false;\r\n\tsearchPanelVisible = false;\r\n\r\n\t// Node action toolbar state\r\n\tisNodeToolbarVisible = false;\r\n\tnodeToolbarPosition: NodeToolbarPosition = { x: 0, y: 0 };\r\n\r\n\t// Add node dialog state\r\n\tavailableNodes: ReadonlyExtendedActivity[] = [];\r\n\r\n\t// Link node dialog state\r\n\tisLinkDialogOpen = false;\r\n\tselectedEdgeId: string | null = null;\r\n\tselectedEdgeDeleteButtonPosition: { x: number; y: number } | null = null;\r\n\r\n\tconstructor(\r\n\t\tprivate readonly wxcc2graph: WxCC2GraphService,\r\n\t\tprivate readonly cytoscapeViewportService: CytoscapeViewportService,\r\n\t\tprivate readonly dialog: MatDialog,\r\n\t\tprivate readonly wxccActivityCreationService: WxCCActivityCreationService,\r\n\t\tprivate cdr: ChangeDetectorRef,\r\n\t) { }\r\n\r\n\tngAfterViewInit(): void {\r\n\t\tthis.viewReady = true;\r\n\t\tthis.tryInit();\r\n\t}\r\n\r\n\tngOnChanges(changes: SimpleChanges): void {\r\n\t\tif (changes[\"flowchart\"]) {\r\n\t\t\tthis.tryInit();\r\n\t\t}\r\n\t}\r\n\r\n\tngOnDestroy(): void {\r\n\t\tthis.cy?.destroy();\r\n\t\tthis.cy = undefined;\r\n\t}\r\n\r\n\tprivate tryInit(): void {\r\n\t\tif (!this.viewReady || !this.flowchartContainer || !this.flowchart) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tthis.init();\r\n\t}\r\n\r\n\tprivate init(): void {\r\n\t\tconst container = this.flowchartContainer.nativeElement;\r\n\r\n\t\tthis.cy?.destroy();\r\n\t\tthis.cy = undefined;\r\n\r\n\t\tconst elements: ElementDefinition[] = [\r\n\t\t\t...this.flowchart.nodes,\r\n\t\t\t...this.flowchart.edges,\r\n\t\t];\r\n\r\n\t\tthis.cy = cytoscape({\r\n\t\t\tcontainer: container,\r\n\t\t\telements: elements,\r\n\t\t\tstyle: this.getStylesheet(),\r\n\t\t});\r\n\r\n\t\t(this.cy as any).nodeHtmlLabel([\r\n\t\t\t{\r\n\t\t\t\tquery: \"node\",\r\n\t\t\t\thalign: \"center\",\r\n\t\t\t\tvalign: \"center\",\r\n\t\t\t\thalignBox: \"center\",\r\n\t\t\t\tvalignBox: \"center\",\r\n\t\t\t\ttpl: (data: ReadonlyExtendedActivity) => getNodeHtmlTemplate(data),\r\n\t\t\t},\r\n\t\t]);\r\n\r\n\t\tconst layout = this.cy?.layout({\r\n\t\t\t...this.layoutOptions,\r\n\t\t}).run();\r\n\r\n\t\tlayout.on(\"layoutstop\", () => {\r\n\t\t\tthis.cytoscapeViewportService.resetView(this.cy as any, this.cy?.elements() as any);\r\n\t\t});\r\n\r\n\t\tthis.setupEventListeners();\r\n\t}\r\n\r\n\tget activities() { return this.wxcc2graph.getAllActivities(); }\r\n\r\n\t// Toggle search panel visibility\r\n\ttoggleSearchPanel(): void {\r\n\t\tthis.isSearchPanelVisible = !this.isSearchPanelVisible;\r\n\t\tthis.cdr.markForCheck();\r\n\t}\r\n\r\n\tprivate setupEventListeners(): void {\r\n\t\t// Single tap on node - show only the toolbar (quick actions)\r\n\t\tthis.cy?.on(\"mouseover\", \"node\", (event) => {\r\n\t\t\tconst node = event.target as NodeSingular;\r\n\t\t\tthis.selectedNodeData = node.data() as ReadonlyExtendedActivity;\r\n\r\n\t\t\t// Calculate toolbar position relative to the container\r\n\t\t\tthis.updateToolbarPosition(node);\r\n\t\t\tthis.isNodeToolbarVisible = true;\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\tthis.cy?.on(\"tap\", \"node\", (event) => {\r\n\t\t\tconst node = event.target as NodeSingular;\r\n\t\t\tthis.clearSelectedEdge();\r\n\t\t\tthis.selectedNodeData = node.data() as ReadonlyExtendedActivity;\r\n\t\t\tthis.isSidebarOpen = true;\r\n\r\n\t\t\t// Hide toolbar when sidebar opens\r\n\t\t\tthis.isNodeToolbarVisible = false;\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\tthis.cy?.on(\"mousemove\", \"node\", (event) => {\r\n\t\t\tconst node = event.target as NodeSingular;\r\n\t\t\tthis.updateToolbarPosition(node);\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\t// Edge tap - select edge for explicit deletion action\r\n\t\tthis.cy?.on(\"tap\", \"edge\", (event) => {\r\n\t\t\tconst edge = event.target as EdgeSingular;\r\n\r\n\t\t\tthis.isSidebarOpen = false;\r\n\t\t\tthis.hideNodeToolbar();\r\n\t\t\tthis.selectedNodeData = null;\r\n\r\n\t\t\tthis.selectedEdgeId = edge.id();\r\n\t\t\tedge.select();\r\n\t\t\tthis.updateSelectedEdgeDeleteButtonPosition();\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\r\n\t\t// Canvas tap - hide toolbar and deselect\r\n\t\tthis.cy?.on(\"tap\", (event) => {\r\n\t\t\tif (event.target === this.cy) {\r\n\t\t\t\tthis.clearSelectedEdge();\r\n\t\t\t\tthis.isSidebarOpen = false;\r\n\t\t\t\tthis.hideNodeToolbar();\r\n\t\t\t\tthis.selectedNodeData = null;\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\t// Pan/zoom events - update toolbar position\r\n\t\tthis.cy?.on(\"pan zoom\", () => {\r\n\t\t\tif (this.isNodeToolbarVisible && this.selectedNodeData) {\r\n\t\t\t\tconst node = this.cy?.getElementById(this.selectedNodeData.id);\r\n\t\t\t\tif (node?.length) {\r\n\t\t\t\t\tthis.updateToolbarPosition(node);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (this.selectedEdgeId) {\r\n\t\t\t\tthis.updateSelectedEdgeDeleteButtonPosition();\r\n\t\t\t}\r\n\r\n\t\t\tthis.cdr.detectChanges();\r\n\t\t});\r\n\t}\r\n\r\n\tprivate updateToolbarPosition(node: NodeSingular): void {\r\n\t\tconst renderedPosition = node.renderedPosition();\r\n\t\tconst renderedWidth = node.renderedWidth();\r\n\t\tconst renderedHeight = node.renderedHeight();\r\n\r\n\t\t// Position toolbar above the node, centered\r\n\t\tthis.nodeToolbarPosition = {\r\n\t\t\tx: renderedPosition.x - 30, // Center the toolbar (approx half toolbar width)\r\n\t\t\ty: renderedPosition.y - renderedHeight / 2 - 40, // Above the node\r\n\t\t};\r\n\t}\r\n\r\n\tprivate hideNodeToolbar(): void {\r\n\t\tthis.isNodeToolbarVisible = false;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate getStylesheet(): cytoscape.StylesheetStyle[] {\r\n\t\treturn StyleConfig;\r\n\t}\r\n\r\n\t// ==================== Sidebar Events ====================\r\n\r\n\tonCloseSidebar(): void {\r\n\t\tthis.isSidebarOpen = false;\r\n\t\tthis.hideNodeToolbar();\r\n\t\tthis.selectedNodeData = null;\r\n\t\t// this.cdr.detectChanges();\r\n\t}\r\n\r\n\tonDescriptionChange(description: string): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst node = this.cy?.getElementById(this.selectedNodeData.id);\r\n\t\tif (node) {\r\n\t\t\tconst updatedData: ReadonlyExtendedActivity = {\r\n\t\t\t\t...this.selectedNodeData,\r\n\t\t\t\tsuggestedProperties: {\r\n\t\t\t\t\t...this.selectedNodeData.suggestedProperties,\r\n\t\t\t\t\tuccxDescription: description,\r\n\t\t\t\t},\r\n\t\t\t};\r\n\r\n\t\t\tthis.wxcc2graph.updateActivityData(updatedData);\r\n\t\t\tnode.data(updatedData);\r\n\r\n\t\t\tthis.selectedNodeData = updatedData;\r\n\t\t}\r\n\t}\r\n\r\n\tonActivityTypeChange(activityType: ActivityDisplayType): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst node = this.cy?.getElementById(this.selectedNodeData.id);\r\n\t\tif (node) {\r\n\t\t\tconst updatedData: ReadonlyExtendedActivity = {\r\n\t\t\t\t...this.selectedNodeData,\r\n\t\t\t\twxccActivityName: activityType.activityName,\r\n\t\t\t\twxccGroup: activityType.group,\r\n\t\t\t\ticonUrl: activityType.icon\r\n\t\t\t};\r\n\r\n\t\t\tthis.wxcc2graph.updateActivityData(updatedData);\r\n\t\t\tnode.data(updatedData);\r\n\r\n\t\t\tthis.selectedNodeData = updatedData;\r\n\t\t}\r\n\t}\r\n\r\n\t// ==================== Node Toolbar Events ====================\r\n\r\n\tonDeleteNode(): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst nodeId = this.selectedNodeData.id;\r\n\r\n\t\t// Remove from service and get affected link IDs\r\n\t\tconst { removedLinkIds } = this.wxcc2graph.removeActivity(nodeId);\r\n\r\n\t\t// Remove edges from cytoscape\r\n\t\tremovedLinkIds.forEach((linkId) => {\r\n\t\t\tthis.cy?.getElementById(linkId).remove();\r\n\t\t});\r\n\r\n\t\t// Remove node from cytoscape\r\n\t\tthis.cy?.getElementById(nodeId).remove();\r\n\r\n\t\t// Close sidebar and toolbar\r\n\t\tthis.onCloseSidebar();\r\n\r\n\t\t// Re-run layout\r\n\t\tthis.runLayout();\r\n\t}\r\n\r\n\tonDeleteSelectedEdge(): void {\r\n\t\tif (!this.selectedEdgeId || !this.cy) return;\r\n\r\n\t\tconst edgeId = this.selectedEdgeId;\r\n\t\tconst removed = this.wxcc2graph.removeLink(edgeId);\r\n\t\tif (!removed) return;\r\n\r\n\t\tthis.cy?.getElementById(edgeId).remove();\r\n\t\tthis.selectedEdgeId = null;\r\n\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tonLinkNodeRequest(): void {\r\n\t\tif (!this.selectedNodeData || !this.cy) return;\r\n\r\n\t\tconst sourceNode = this.selectedNodeData;\r\n\r\n\t\tif (!this.canCreateOutgoingLink(sourceNode.id)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\t// Get the cytoscape node to inspect existing connections\r\n\t\tconst cyNode = this.cy?.getElementById(sourceNode.id);\r\n\r\n\t\t// Collect IDs of nodes already connected as targets from this source\r\n\t\tconst existingTargetIds = new Set<string>(\r\n\t\t\tcyNode.outgoers('node').map((n: NodeSingular) => n.id())\r\n\t\t);\r\n\r\n\t\t// Build the filtered list of linkable targets:\r\n\t\t// - Never allow the start node (NewPhoneContact) as a target\r\n\t\t// - Exclude the source node itself\r\n\t\t// - Exclude nodes already linked as targets from this source\r\n\t\tthis.availableNodes = this.wxcc2graph.getAllActivities().filter(act =>\r\n\t\t\tact.id !== sourceNode.id &&\r\n\t\t\tact.wxccActivityName !== 'NewPhoneContact' &&\r\n\t\t\t!existingTargetIds.has(act.id)\r\n\t\t);\r\n\r\n\t\tconst dialogRef = this.dialog.open(LinkNodeDialogComponent, {\r\n\t\t\tpanelClass: \"no-padding-modal\",\r\n\t\t\twidth: \"550px\",\r\n\t\t\tdata: {\r\n\t\t\t\tavailableNodes: this.availableNodes,\r\n\t\t\t\tsourceNode: this.selectedNodeData,\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tdialogRef.afterClosed().subscribe((result: any) => {\r\n\t\t\tif (result) {\r\n\t\t\t\tthis.onLinkNodes(result);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\t// ==================== Link Dialog Events ====================\r\n\r\n\tonLinkNodes(linkData: LinkNodeData): void {\r\n\t\tif (!this.cy) return;\r\n\r\n\t\tif (!this.canCreateOutgoingLink(linkData.sourceNodeId)) {\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tif (this.wxcc2graph.linkExists(linkData.sourceNodeId, linkData.targetNodeId)) {\r\n\t\t\tconsole.warn(\"Link already exists between these nodes\");\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst edge = this.wxcc2graph.addLink(\r\n\t\t\tlinkData.sourceNodeId,\r\n\t\t\tlinkData.targetNodeId,\r\n\t\t\tlinkData.label,\r\n\t\t);\r\n\r\n\t\tthis.cy?.add(edge);\r\n\t\tthis.runLayout();\r\n\t}\r\n\r\n\t// ==================== Add Node Dialog Events ====================\r\n\r\n\topenAddNodeDialog(): void {\r\n\t\tthis.availableNodes = this.wxcc2graph.getAllActivities();\r\n\r\n\t\tconst dialogRef = this.dialog.open(AddNodeDialogComponent, {\r\n\t\t\tpanelClass: \"no-padding-modal\",\r\n\t\t\twidth: '450px',\r\n\t\t\tdata: {\r\n\t\t\t\tavailableNodes: this.availableNodes,\r\n\t\t\t},\r\n\t\t});\r\n\r\n\t\tdialogRef.afterClosed().subscribe((result: any) => {\r\n\t\t\tif (result) {\r\n\t\t\t\tthis.addActivity(result);\r\n\t\t\t}\r\n\t\t});\r\n\t}\r\n\r\n\taddActivity(newNodeData: NewNodeData): void {\r\n\t\tif (!this.cy) return;\r\n\r\n\t\tconst node = this.wxccActivityCreationService.createAndSync({\r\n\t\t\tactivityTypeName: newNodeData.activityTypeName,\r\n\t\t\tname: newNodeData.name\r\n\t\t});\r\n\r\n\t\t// Add node to cytoscape\r\n\t\tthis.cy?.add({\r\n\t\t\tgroup: \"nodes\",\r\n\t\t\tdata: node.data\r\n\t\t});\r\n\r\n\t\t// Re-run layout to position the new node\r\n\t\tthis.runLayout();\r\n\t}\r\n\r\n\tonNodeSelectChange(id: string): void {\r\n\t\tconst node = this.cy?.getElementById(id) as NodeSingular;\r\n\t\tif (node) {\r\n\t\t\tthis.cy?.center(node);\r\n\r\n\t\t\t// Set highlighted property in node data\r\n\t\t\tconst originalData = node.data();\r\n\t\t\tnode.data({ ...originalData, highlighted: true });\r\n\t\t\tnode.emit('data');\r\n\r\n\t\t\t// Remove highlight after 1s\r\n\t\t\tsetTimeout(() => {\r\n\t\t\t\tconst currentData = node.data();\r\n\t\t\t\tif (currentData.highlighted) {\r\n\t\t\t\t\t// Remove the property completely\r\n\t\t\t\t\tdelete currentData.highlighted;\r\n\t\t\t\t\tnode.data(currentData);\r\n\t\t\t\t\tnode.emit('data');\r\n\t\t\t\t}\r\n\t\t\t}, 1000);\r\n\t\t}\r\n\t}\r\n\r\n\tzoomIn(): void {\r\n\t\tthis.cytoscapeViewportService.zoomIn(this.cy as any);\r\n\t}\r\n\r\n\tzoomOut(): void {\r\n\t\tthis.cytoscapeViewportService.zoomOut(this.cy as any);\r\n\t}\r\n\r\n\tresetView(): void {\r\n\t\tthis.cytoscapeViewportService.resetView(this.cy as any, this.cy?.elements() as any);\r\n\t}\r\n\r\n\tprivate runLayout(): void {\r\n\t\tif (!this.cy) return;\r\n\r\n\t\tconst layout = this.cy?.layout({\r\n\t\t\t...this.layoutOptions,\r\n\t\t}).run();\r\n\r\n\t\tlayout.on(\"layoutstop\", () => {\r\n\t\t\tthis.cytoscapeViewportService.resetView(this.cy as any, this.cy?.elements() as any);\r\n\t\t});\r\n\t}\r\n\r\n\tprivate canCreateOutgoingLink(sourceNodeId: string): boolean {\r\n\t\tif (!this.cy) return false;\r\n\r\n\t\tconst cyNode = this.cy?.getElementById(sourceNodeId);\r\n\t\tif (!cyNode || cyNode.length === 0) return false;\r\n\r\n\t\tconst sourceActivity = (cyNode.data() as ReadonlyExtendedActivity).wxccActivityName;\r\n\t\tconst outgoingEdgeCount = cyNode.outgoers('edge').length;\r\n\r\n\t\t// End-type nodes cannot have outgoing links.\r\n\t\tconst END_NODE_TYPES: string[] = ['end', 'disconnect-contact', 'blind-transfer'];\r\n\t\tif (END_NODE_TYPES.includes(sourceActivity as string)) return false;\r\n\r\n\t\t// Start node can only have one output.\r\n\t\tif (sourceActivity === 'NewPhoneContact' && outgoingEdgeCount >= 1) return false;\r\n\r\n\t\t// Condition node can only have true/false outputs.\r\n\t\tif (sourceActivity === 'condition-activity' && outgoingEdgeCount >= 2) return false;\r\n\r\n\t\treturn true;\r\n\t}\r\n\r\n\tprivate clearSelectedEdge(): void {\r\n\t\tif (!this.selectedEdgeId || !this.cy) return;\r\n\r\n\t\tconst edge = this.cy?.getElementById(this.selectedEdgeId);\r\n\t\tif (edge && edge.length) {\r\n\t\t\tedge.unselect();\r\n\t\t}\r\n\r\n\t\tthis.selectedEdgeId = null;\r\n\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\tthis.cdr.detectChanges();\r\n\t}\r\n\r\n\tprivate updateSelectedEdgeDeleteButtonPosition(): void {\r\n\t\tif (!this.cy || !this.selectedEdgeId) {\r\n\t\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst edge = this.cy?.getElementById(this.selectedEdgeId);\r\n\t\tif (!edge || edge.length === 0) {\r\n\t\t\tthis.selectedEdgeDeleteButtonPosition = null;\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tconst midpoint = (edge as EdgeSingular).renderedMidpoint();\r\n\r\n\t\t// Slight offset so the icon does not sit exactly on top of the edge line.\r\n\t\tthis.selectedEdgeDeleteButtonPosition = {\r\n\t\t\tx: midpoint.x + 12,\r\n\t\t\ty: midpoint.y - 12,\r\n\t\t};\r\n\t}\r\n}\r\n","<div class=\"wxcc-flowchart-container\">\r\n <div #flowchartContainer class=\"flowchart-canvas\"></div>\r\n\r\n <!-- Floating toolbar for viewport controls -->\r\n <graph-floating-toolbar\r\n [visibility]=\"{ export: false }\"\r\n (resetViewChange)=\"resetView()\"\r\n (zoomInChange)=\"zoomIn()\"\r\n (zoomOutChange)=\"zoomOut()\">\r\n </graph-floating-toolbar>\r\n\r\n <!-- Graph Acts -->\r\n <div class=\"graph-actions-wrapper\">\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Search workflow\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"toggleSearchPanel()\"\r\n >\r\n <img src=\"assets/wxcc/search.svg\" width=\"28\" height=\"28\" alt=\"\" />\r\n </button>\r\n <button\r\n class=\"add-node-btn\"\r\n matTooltip=\"Add New Node\"\r\n matTooltipPosition=\"above\"\r\n (click)=\"openAddNodeDialog()\"\r\n >\r\n <svg\r\n width=\"28\"\r\n height=\"28\"\r\n viewBox=\"0 0 24 24\"\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n stroke-width=\"2\"\r\n >\r\n <line x1=\"12\" y1=\"5\" x2=\"12\" y2=\"19\"></line>\r\n <line x1=\"5\" y1=\"12\" x2=\"19\" y2=\"12\"></line>\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <button\r\n *ngIf=\"selectedEdgeId && selectedEdgeDeleteButtonPosition\"\r\n class=\"edge-delete-btn\"\r\n matTooltip=\"Delete this edge\"\r\n matTooltipPosition=\"above\"\r\n [style.left.px]=\"selectedEdgeDeleteButtonPosition.x\"\r\n [style.top.px]=\"selectedEdgeDeleteButtonPosition.y\"\r\n (click)=\"onDeleteSelectedEdge()\"\r\n type=\"button\"\r\n aria-label=\"Delete selected edge\"\r\n >\r\n ×\r\n </button>\r\n\r\n <node-search-panel\r\n class=\"fade-in-search-panel\"\r\n [class.visible]=\"isSearchPanelVisible\"\r\n [nodes]=\"activities\"\r\n (selectNodeChange)=\"onNodeSelectChange($event)\"\r\n (searchChange)=\"openAddNodeDialog()\"\r\n >\r\n </node-search-panel>\r\n\r\n <!-- Node action toolbar (floating near selected node) -->\r\n <node-action-toolbar\r\n [isVisible]=\"isNodeToolbarVisible\"\r\n [position]=\"nodeToolbarPosition\"\r\n (deleteNode)=\"onDeleteNode()\"\r\n (linkNode)=\"onLinkNodeRequest()\"\r\n >\r\n </node-action-toolbar>\r\n\r\n <!-- Node details sidebar -->\r\n <node-details-sidebar\r\n [isOpen]=\"isSidebarOpen\"\r\n [nodeData]=\"selectedNodeData\"\r\n (close)=\"onCloseSidebar()\"\r\n (descriptionChange)=\"onDescriptionChange($event)\"\r\n (activityTypeChange)=\"onActivityTypeChange($event)\"\r\n >\r\n </node-details-sidebar>\r\n</div>\r\n","\r\nexport type WxCCBaseURLParams = {\r\n customerId: number;\r\n uccxIp: string;\r\n fileName: string;\r\n};\r\n\r\nexport type FileState = 'ORIG' | 'DRAFT' | 'COMPLETED';\r\n\r\nconst BASE = '/api/uccx/migration';\r\n\r\nfunction buildUrl(\r\n customerId: number,\r\n uccxIp: string,\r\n fileName: string,\r\n action: 'get' | 'save',\r\n state: FileState,\r\n format?: 'ir' | undefined\r\n): string {\r\n return `${BASE}/customer/${customerId}/uccx/${uccxIp}/filename/${fileName}/${action}/type/${state}/wxcc${format ? '/ir' : ''}/json`;\r\n}\r\n/**\r\n * Any WxCC flowchart api endpoint should go here\r\n */\r\nexport const WXCC_FLOWCHART_API = {\r\n GET_DATA: (params: WxCCBaseURLParams, state: FileState = 'ORIG', format?: 'ir') => buildUrl(\r\n params.customerId,\r\n params.uccxIp,\r\n params.fileName,\r\n 'get',\r\n state,\r\n format\r\n ),\r\n SAVE_DRAFT: (params: WxCCBaseURLParams, format?: 'ir') => buildUrl(\r\n params.customerId,\r\n params.uccxIp,\r\n params.fileName,\r\n 'save',\r\n 'DRAFT',\r\n format\r\n ),\r\n RESET_DRAFT: (params: WxCCBaseURLParams, format?: 'ir') =>\r\n `${BASE}/customer/${params.customerId}/uccx/${params.uccxIp}/filename/${params.fileName}${format ? '' : '/wxcc'}/reset/draft`,\r\n COMPLETE_FLOW: (params: WxCCBaseURLParams, format?: 'ir') => buildUrl(\r\n params.customerId,\r\n params.uccxIp,\r\n params.fileName,\r\n 'save',\r\n 'COMPLETED',\r\n format\r\n )\r\n};","import { Injectable } from \"@angular/core\";\r\nimport { Observable } from \"rxjs\";\r\nimport { IWxCCJSON, IWxCCNonIRJSON } from \"../types/wxcc\";\r\nimport { WxCCBaseURLParams, FileState, WXCC_FLOWCHART_API } from \"../constants/wxcc-api.constants\";\r\nimport { APIService } from \"../../shared/api.service\";\r\n\r\n@Injectable()\r\nexport class WxCCAPIService {\r\n constructor(private readonly api: APIService) { }\r\n /**\r\n * Fetch original WXCC flow data\r\n */\r\n fetchWxCCFlowData(params: WxCCBaseURLParams, state: FileState = 'ORIG'): Observable<IWxCCNonIRJSON> {\r\n const url = WXCC_FLOWCHART_API.GET_DATA(params, state);\r\n // @ts-ignore\r\n return this.api.fetch<IWxCCNonIRJSON>(url);\r\n }\r\n\r\n /**\r\n * Fetch original WXCC flow data as IR format\r\n */\r\n fetchWxCCFlowDataIR(params: WxCCBaseURLParams, state: FileState = 'ORIG'): Observable<IWxCCJSON> {\r\n const url = WXCC_FLOWCHART_API.GET_DATA(params, state, 'ir');\r\n // @ts-ignore\r\n return this.api.fetch<IWxCCJSON>(url);\r\n }\r\n\r\n /**\r\n * Save WXCC flow data as DRAFT\r\n */\r\n saveWxCCFlowData(params: WxCCBaseURLParams, data: IWxCCNonIRJSON): Observable<string> {\r\n const url = WXCC_FLOWCHART_API.SAVE_DRAFT(params);\r\n // @ts-ignore\r\n return this.api.post<string>(url, data);\r\n }\r\n\r\n /**\r\n * Save WXCC flow data as DRAFT in IR format\r\n */\r\n saveWxCCFlowDataIR(params: WxCCBaseURLParams, data: IWxCCJSON): Observable<string> {\r\n const url = WXCC_FLOWCHART_API.SAVE_DRAFT(params, 'ir');\r\n // @ts-ignore\r\n return this.api.post<string>(url, data);\r\n }\r\n\r\n /**\r\n * Reset to original WXCC flow data\r\n */\r\n resetWxCCFlowData(params: WxCCBaseURLParams): Observable<IWxCCNonIRJSON> {\r\n const url = WXCC_FLOWCHART_API.RESET_DRAFT(params);\r\n // @ts-ignore\r\n return this.api.post<IWxCCNonIRJSON>(url);\r\n }\r\n\r\n /**\r\n * Reset to original WXCC flow data in IR format\r\n */\r\n resetWxCCFlowDataIR(params: WxCCBaseURLParams): Observable<IWxCCJSON> {\r\n const url = WXCC_FLOWCHART_API.RESET_DRAFT(params, 'ir');\r\n // @ts-ignore\r\n return this.api.post<IWxCCJSON>(url);\r\n }\r\n\r\n /**\r\n * Save WXCC flow data as COMPLETED\r\n */\r\n completeWxCCFlowData(params: WxCCBaseURLParams, data: IWxCCNonIRJSON): Observable<string> {\r\n const url = WXCC_FLOWCHART_API.COMPLETE_FLOW(params);\r\n // @ts-ignore\r\n return this.api.post<string>(url, data);\r\n }\r\n\r\n /**\r\n * Save WXCC flow data as COMPLETED in IR format\r\n */\r\n completeWxCCFlowDataIR(params: WxCCBaseURLParams, data: IWxCCJSON): Observable<string> {\r\n const url = WXCC_FLOWCHART_API.COMPLETE_FLOW(params, 'ir');\r\n // @ts-ignore\r\n return this.api.post<string>(url, data);\r\n }\r\n}","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'wxcc-file-selection-bar',\r\n templateUrl: './wxcc-file-selection-bar.component.html',\r\n styleUrls: ['./wxcc-file-selection-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class WxCCFileSelectionBarComponent implements OnInit {\r\n @Input() fileNames!: { fileName: string; host: string }[];\r\n @Input() selectedFileName!: string;\r\n @Input() selectedHost!: string;\r\n\r\n @Output() fileNameSelectionChange = new EventEmitter<{ host: string, fileName: string }>();\r\n\r\n readonly hostFileNames = new Map<string, string[]>();\r\n\r\n ngOnInit(): void {\r\n this.fileNames.forEach(({ fileName, host }) => {\r\n if (!this.hostFileNames.has(host)) {\r\n this.hostFileNames.set(host, []);\r\n }\r\n this.hostFileNames.get(host)?.push(fileName);\r\n });\r\n }\r\n\r\n get fileNamesByHost(): string[] {\r\n return this.hostFileNames.get(this.selectedHost) as string[];\r\n }\r\n\r\n get hosts(): string[] | null {\r\n if (!this.fileNames.length) {\r\n return null;\r\n }\r\n const hostsSet = new Set(this.fileNames.map((file) => file.host));\r\n return Array.from(hostsSet).filter(host => host);\r\n }\r\n\r\n onFileSelectionChange(fileName: string): void {\r\n this.fileNameSelectionChange.emit({ fileName: fileName, host: this.selectedHost });\r\n }\r\n\r\n onHostSelectionChange(host: string): void {\r\n this.selectedHost = host;\r\n this.fileNameSelectionChange.emit({\r\n host: host,\r\n fileName: this.fileNamesByHost[0]\r\n });\r\n }\r\n\r\n trackByFileName(_index: number, fileName: string): string {\r\n return fileName;\r\n }\r\n\r\n trackByHost(_index: number, host: string): string {\r\n return host;\r\n }\r\n}","<div class=\"file-selection-bar\">\r\n <mat-form-field appearance=\"outline\" class=\"host-selection\" *ngIf=\"hosts?.length\">\r\n <!-- <mat-label>Host</mat-label> -->\r\n <mat-select\r\n [value]=\"selectedHost\"\r\n (selectionChange)=\"onHostSelectionChange($event.value)\">\r\n <mat-option\r\n *ngFor=\"let host of hosts; trackBy: trackByHost\"\r\n title=\"{{ host }}\"\r\n [value]=\"host\">\r\n {{ host }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-form-field appearance=\"outline\" class=\"file-selection\">\r\n <!-- <mat-label>Script file</mat-label> -->\r\n <mat-select\r\n [value]=\"selectedFileName\"\r\n (selectionChange)=\"onFileSelectionChange($event.value)\">\r\n <mat-option\r\n *ngFor=\"let name of fileNamesByHost; trackBy: trackByFileName\"\r\n title=\"{{ name }}\"\r\n [value]=\"name\">\r\n {{ name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n</div>","import { ChangeDetectionStrategy, Component, EventEmitter, OnInit, Output } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'wxcc-actions-bar',\r\n templateUrl: './wxcc-actions-bar.component.html',\r\n styleUrls: ['./wxcc-actions-bar.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class WxCCActionsBarComponent implements OnInit {\r\n @Output() save = new EventEmitter<void>();\r\n @Output() reset = new EventEmitter<void>();\r\n @Output() complete = new EventEmitter<void>();\r\n @Output() exportNonIr = new EventEmitter<void>();\r\n\r\n ngOnInit(): void { }\r\n}","<div class=\"actions-wrapper\">\r\n <button\r\n type=\"button\"\r\n mat-button\r\n class=\"outline-button\"\r\n (click)=\"exportNonIr.emit()\">\r\n Export JSON\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-button\r\n class=\"outline-button\"\r\n (click)=\"reset.emit()\">\r\n Reset\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-button\r\n class=\"outline-button\"\r\n (click)=\"save.emit()\">\r\n Save\r\n </button>\r\n <button\r\n type=\"button\"\r\n mat-button\r\n color=\"primary\"\r\n (click)=\"complete.emit()\">\r\n Complete\r\n </button>\r\n</div>","import { Component, Input, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { WxCCAPIService } from \"./services/wxcc-flow-api.service\";\r\nimport { forkJoin, of, Subject, throwError } from \"rxjs\";\r\nimport { IWxCCFlowchart, IWxCCJSON, IWxCCNonIRJSON } from \"./types/wxcc\";\r\nimport { WxCC2GraphService } from \"./services/wxcc2graph.service\";\r\nimport { filter, finalize, mergeMap, takeUntil, tap } from \"rxjs/operators\";\r\nimport irData from \"./mock/data/QWC_ir.json\";\r\n// import { UCCXWorkflowAPIService } from \"../../uccx-workflow/services/uccx-workflow-api.service\";\r\n// import { CustomersService } from \"../../../services/customers.service\";\r\n// import { ContactCenterService } from \"../contact-center.service\";\r\n// import {\r\n// CALL_FLOW_MIGRATION_STATUSES_TO_SCRIPT_STATUS,\r\n// CallFlowMigrationStatus\r\n// } from \"../interfaces/call-flow-migration-status.interface\";\r\nimport { FileState } from \"./constants/wxcc-api.constants\";\r\n\r\ntype WxCCFlowchartState = {\r\n fileNames: { fileName: string; host: string }[];\r\n uccxIp: string;\r\n selectedFileName: string;\r\n selectedFileStatus: FileState;\r\n loading: boolean;\r\n flowchart: IWxCCFlowchart | null;\r\n irDoc: IWxCCJSON;\r\n nonIrDoc: IWxCCNonIRJSON;\r\n errorMessage: string;\r\n statuses: any[];\r\n};\r\n\r\n@Component({\r\n selector: 'cc-script-editor',\r\n templateUrl: './cc-script-editor.component.html',\r\n styleUrls: ['./cc-script-editor.component.scss']\r\n})\r\nexport class WxCCFlowchartPageComponent implements OnInit, OnDestroy {\r\n @Input() customerId = 0;\r\n @Input() host = \"\";\r\n @Input() token = \"\";\r\n\r\n private readonly destroy$ = new Subject<void>();\r\n\r\n readonly state: WxCCFlowchartState = {\r\n loading: true\r\n } as any;\r\n\r\n constructor(\r\n private readonly api: WxCCAPIService,\r\n private readonly wxcc2graph: WxCC2GraphService,\r\n // private readonly customersService: CustomersService,\r\n // private readonly uccxWorkflowApi: UCCXWorkflowAPIService,\r\n // private readonly contactCenterService: ContactCenterService\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.subscribeToCustomerChanges();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n private init(): void {\r\n this.loadMockFlowchart();\r\n }\r\n\r\n private subscribeToCustomerChanges(): void {\r\n // if (!this.customer) {\r\n // this.customersService.customer$\r\n // .pipe(takeUntil(this.destroy$))\r\n // .subscribe((customer) => {\r\n // if (customer) {\r\n this.init();\r\n // }\r\n // });\r\n // } else {\r\n // this.init();\r\n // }\r\n }\r\n\r\n private loadMockFlowchart(): void {\r\n const irDoc = irData as unknown as IWxCCJSON;\r\n this.state.irDoc = irDoc;\r\n this.state.flowchart = this.wxcc2graph.parseWxCC(irDoc);\r\n this.setLoading(false);\r\n }\r\n\r\n private loadFileNames(): void {\r\n // forkJoin([\r\n // this.uccxWorkflowApi.fetchFileNames(this.customerId)\r\n // .pipe(filter(fileNames => fileNames && fileNames.length > 0)),\r\n // this.contactCenterService.getCallFlowMigrationStatuses()\r\n // ]).pipe(takeUntil(this.destroy$))\r\n // .subscribe(([fileNames, statuses]) => {\r\n // this.state.fileNames = fileNames;\r\n // this.state.uccxIp = fileNames[0].host;\r\n // this.state.selectedFileName = fileNames[0].fileName;\r\n\r\n // this.state.statuses = statuses.filter(status => status.uccxIp === this.state.uccxIp);\r\n // this.state.selectedFileStatus = this.getStatus(this.state.selectedFileName, this.state.uccxIp);\r\n\r\n // this.loadWxCCFlowData();\r\n // });\r\n }\r\n\r\n private loadWxCCFlowData(): void {\r\n forkJoin([\r\n this.api.fetchWxCCFlowData(this.baseParams, this.state.selectedFileStatus),\r\n this.api.fetchWxCCFlowDataIR(this.baseParams, this.state.selectedFileStatus),\r\n ]).pipe(\r\n mergeMap(([nonIrDoc, irDoc]) =>\r\n irDoc !== null ?\r\n of({ nonIrDoc, irDoc }) :\r\n throwError(() => new Error('No wxcc flow diagram available for this script'))\r\n ),\r\n takeUntil(this.destroy$),\r\n finalize(() => this.setLoading(false))\r\n ).subscribe({\r\n next: ({ nonIrDoc, irDoc }) => {\r\n this.wxcc2graph.setSourceDocuments(irDoc, nonIrDoc);\r\n this.state.irDoc = irDoc;\r\n this.state.nonIrDoc = nonIrDoc;\r\n this.state.flowchart = this.wxcc2graph.parseWxCC(irDoc, nonIrDoc);\r\n },\r\n error: (error) => {\r\n this.state.flowchart = null;\r\n this.setError('No wxcc flow diagram available for this script');\r\n }\r\n });\r\n }\r\n\r\n onSave() {\r\n this.setLoading(true);\r\n\r\n forkJoin([\r\n this.api.saveWxCCFlowData(this.baseParams, this.wxcc2graph.wxccNonIRJSON),\r\n this.api.saveWxCCFlowDataIR(this.baseParams, this.wxcc2graph.wxccJSON)\r\n ]).pipe(\r\n takeUntil(this.destroy$),\r\n finalize(() => this.setLoading(false)),\r\n tap(() => {\r\n this.state.flowchart = this.wxcc2graph.parseWxCC(\r\n this.wxcc2graph.wxccJSON,\r\n this.wxcc2graph.wxccNonIRJSON\r\n );\r\n })\r\n ).subscribe({\r\n next: ([regularResponse, irResponse]) => console.log('Flow data saved as DRAFT', regularResponse, irResponse),\r\n error: (error) => console.error('Error while saving wxcc data: ', error)\r\n });\r\n }\r\n\r\n onExportNonIr() {\r\n if (!this.wxcc2graph.wxccNonIRJSON) {\r\n console.error('Non-IR wxcc document is not loaded');\r\n return;\r\n }\r\n\r\n const fileStem = (this.state.selectedFileName || 'wxcc-flow').replace(/\\.[^/.]+$/, '');\r\n const fileName = fileStem + '-non-ir.json';\r\n const jsonContent = JSON.stringify(this.wxcc2graph.wxccNonIRJSON, null, 2);\r\n const blob = new Blob([jsonContent], { type: 'application/json' });\r\n const url = window.URL.createObjectURL(blob);\r\n\r\n const anchor = document.createElement('a');\r\n anchor.href = url;\r\n anchor.download = fileName;\r\n document.body.appendChild(anchor);\r\n anchor.click();\r\n document.body.removeChild(anchor);\r\n\r\n window.URL.revokeObjectURL(url);\r\n }\r\n\r\n onReset() {\r\n this.setLoading(true);\r\n forkJoin([\r\n this.api.resetWxCCFlowData(this.baseParams),\r\n this.api.resetWxCCFlowDataIR(this.baseParams)\r\n ]).pipe(\r\n takeUntil(this.destroy$),\r\n finalize(() => this.setLoading(false))\r\n ).subscribe({\r\n next: ([nonIrDoc, irDoc]) => {\r\n this.wxcc2graph.setSourceDocuments(irDoc, nonIrDoc);\r\n this.state.irDoc = irDoc;\r\n this.state.nonIrDoc = nonIrDoc;\r\n this.state.flowchart = this.wxcc2graph.parseWxCC(irDoc, nonIrDoc);\r\n console.log('Flow data reset to original');\r\n },\r\n error: (error) => {\r\n console.error('Error while resetting wxcc data: ', error);\r\n }\r\n });\r\n }\r\n\r\n onComplete() {\r\n this.setLoading(true);\r\n\r\n forkJoin([\r\n this.api.completeWxCCFlowData(this.baseParams, this.wxcc2graph.wxccNonIRJSON),\r\n this.api.completeWxCCFlowDataIR(this.baseParams, this.wxcc2graph.wxccJSON)\r\n ]).pipe(\r\n takeUntil(this.destroy$),\r\n finalize(() => this.setLoading(false))\r\n ).subscribe({\r\n next: ([regularResponse, irResponse]) => {\r\n console.log('Flow data saved as COMPLETED', regularResponse, irResponse);\r\n },\r\n error: (error) => {\r\n console.error('Error while completing wxcc data: ', error);\r\n }\r\n });\r\n }\r\n\r\n onFileNameSelectionChange(item: { fileName: string, host: string }) {\r\n const { fileName, host } = item;\r\n this.state.selectedFileName = fileName;\r\n this.state.uccxIp = host;\r\n\r\n this.state.selectedFileStatus = this.getStatus(fileName, this.state.uccxIp);\r\n this.setLoading(true);\r\n this.loadWxCCFlowData();\r\n }\r\n\r\n getStatus(fileName: string, uccxIp: string): any {\r\n if (!this.state.statuses) {\r\n throw Error('File status array is undefined');\r\n }\r\n\r\n const callFlowMigrationStatus = this.state.statuses.find(\r\n status => status.uccxIp === uccxIp && status.scriptName === fileName\r\n );\r\n\r\n // if (callFlowMigrationStatus && callFlowMigrationStatus.status) {\r\n // return CALL_FLOW_MIGRATION_STATUSES_TO_SCRIPT_STATUS[callFlowMigrationStatus.status];\r\n // }\r\n }\r\n\r\n setLoading(loading: boolean): void {\r\n this.state.loading = loading;\r\n }\r\n\r\n setError(error: string): void {\r\n this.state.errorMessage = error;\r\n }\r\n\r\n private get baseParams() {\r\n return {\r\n customerId: this.customerId,\r\n uccxIp: this.state.uccxIp || '',\r\n fileName: this.state.selectedFileName || ''\r\n };\r\n }\r\n\r\n // private get customer() {\r\n // return this.customersService.currentCustomer;\r\n // }\r\n\r\n // private get customerId() {\r\n // return this.customer.id;\r\n // }\r\n}\r\n","<div class=\"wxcc-flowchart-wrapper\">\r\n <header class=\"wxcc-flowchart-header\">\r\n <wxcc-file-selection-bar\r\n *ngIf=\"state.fileNames && state.fileNames.length\"\r\n [fileNames]=\"state.fileNames\"\r\n [selectedHost]=\"state.uccxIp\"\r\n [selectedFileName]=\"state.selectedFileName\"\r\n (fileNameSelectionChange)=\"onFileNameSelectionChange($event)\">\r\n </wxcc-file-selection-bar>\r\n <wxcc-actions-bar\r\n *ngIf=\"state.flowchart\"\r\n (save)=\"onSave()\"\r\n (reset)=\"onReset()\"\r\n (exportNonIr)=\"onExportNonIr()\"\r\n (complete)=\"onComplete()\">\r\n </wxcc-actions-bar>\r\n </header>\r\n <ng-container *ngIf=\"!state.loading; else loadingTemplate\">\r\n <wxcc-flowchart\r\n *ngIf=\"state.flowchart; else errorTemplate\"\r\n [flowchart]=\"state.flowchart\">\r\n </wxcc-flowchart>\r\n </ng-container>\r\n</div>\r\n\r\n<ng-template #loadingTemplate>\r\n <div class=\"placeholder-wrapper\">\r\n <mat-spinner diameter=\"40\"></mat-spinner>\r\n </div>\r\n</ng-template>\r\n\r\n<ng-template #errorTemplate>\r\n <div class=\"placeholder-wrapper\">\r\n Error loading script\r\n </div>\r\n</ng-template>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatProgressSpinner, MatProgressSpinnerModule, MatSpinner } from \"@angular/material/progress-spinner\";\r\n\r\n@NgModule({\r\n imports: [\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule\r\n ],\r\n exports: [\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatProgressSpinnerModule\r\n ]\r\n})\r\nexport class MaterialModule { }","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MaterialModule } from \"./material.module\";\r\nimport { NgApexchartsModule } from \"ng-apexcharts\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n NgApexchartsModule,\r\n HttpClientModule\r\n ],\r\n exports: [\r\n MaterialModule\r\n ]\r\n})\r\nexport class SharedModule {}","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { FloatingToolBarComponent } from \"./floating-toolbar.component\";\r\n\r\n@NgModule({\r\n declarations: [\r\n FloatingToolBarComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MatTooltipModule\r\n ],\r\n exports: [\r\n FloatingToolBarComponent\r\n ]\r\n})\r\nexport class FloatingToolbarModule { }\r\n","import { NgModule } from \"@angular/core\";\r\nimport { WxCCFlowchartComponent } from \"./components/wxcc-flowchart/wxcc-flowchart.component\";\r\nimport { NodeDetailsSidebarComponent } from \"./components/node-details-sidebar/node-details-sidebar.component\";\r\nimport { NodeActionToolbarComponent } from \"./components/node-action-toolbar/node-action-toolbar.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { FormsModule } from \"@angular/forms\";\r\nimport { WxCCAPIService } from \"./services/wxcc-flow-api.service\";\r\nimport { WxCC2GraphService } from \"./services/wxcc2graph.service\";\r\nimport { WxCCActivityManageService } from \"./services/wxcc-activity-manage.service\";\r\nimport { WxCCActivityCreationService } from \"./services/wxcc-activity-creation.service\";\r\nimport { WxCCFileSelectionBarComponent } from \"./components/wxcc-file-selection-bar/wxcc-file-selection-bar.component\";\r\nimport { WxCCActionsBarComponent } from \"./components/wxcc-actions-bar/wxcc-actions-bar.component\";\r\nimport { AddNodeDialogComponent } from \"./components/dialogs/add-node-dialog/add-node-dialog.component\";\r\nimport { LinkNodeDialogComponent } from \"./components/dialogs/link-node-dialog/link-node-dialog.component\";\r\nimport { NodeSearchPanelComponent } from \"./components/node-search-panel/node-search-panel.component\";\r\nimport { WxCCFlowchartPageComponent } from \"./cc-script-editor.component\";\r\nimport { SharedModule } from \"../shared/shared.module\";\r\nimport { MaterialModule } from \"../shared/material.module\";\r\nimport { FloatingToolbarModule } from \"./components/floating-toolbar/floating-toolbar.module\";\r\n\r\n@NgModule({\r\n declarations: [\r\n WxCCFlowchartPageComponent,\r\n WxCCFlowchartComponent,\r\n NodeDetailsSidebarComponent,\r\n NodeActionToolbarComponent,\r\n LinkNodeDialogComponent,\r\n WxCCFileSelectionBarComponent,\r\n AddNodeDialogComponent,\r\n WxCCActionsBarComponent,\r\n NodeSearchPanelComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n SharedModule,\r\n MaterialModule,\r\n FloatingToolbarModule\r\n ],\r\n exports: [\r\n WxCCFlowchartPageComponent\r\n ],\r\n providers: [\r\n WxCCAPIService,\r\n WxCC2GraphService,\r\n WxCCActivityManageService,\r\n WxCCActivityCreationService\r\n ],\r\n entryComponents: [\r\n AddNodeDialogComponent,\r\n LinkNodeDialogComponent\r\n ]\r\n})\r\nexport class WxCCFlowchartModule { }","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i5.CardComponent","i2.CardComponent","i1.WxCC2GraphService","i2.WxCCActivityManageService","i2","i3","i2.CytoscapeViewportService","i4.WxCCActivityCreationService","i5","i6","i7.FloatingToolBarComponent","i8.NodeDetailsSidebarComponent","i9.NodeActionToolbarComponent","i10.NodeSearchPanelComponent","i1.APIService","finalize","i1.WxCCAPIService","i2.WxCC2GraphService","i4","i5.WxCCFlowchartComponent","i6.WxCCFileSelectionBarComponent","i7.WxCCActionsBarComponent"],"mappings":"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"}
|