@tuki-io/tuki-widgets 0.0.219-dev.55 → 0.0.219-dev.56
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-import/cc-import.module.mjs +1 -1
- package/esm2020/contact-center/cc-import/cc-import.service.mjs +1 -1
- package/esm2020/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.mjs +3 -3
- package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.mjs +3 -3
- package/esm2020/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.mjs +1 -1
- package/esm2020/contact-center/cc-import/constants/cc-import.constants.mjs +1 -1
- package/esm2020/contact-center/cc-import/mock/cc-import.mock.mjs +1 -1
- package/esm2020/contact-center/cc-import/types/cc-import.mjs +1 -1
- package/esm2020/contact-center/cc-import/types/uccx.mjs +1 -1
- 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/contact-center/public-api.mjs +1 -1
- package/esm2020/contact-center/shared/api.endpoints.mjs +1 -1
- package/esm2020/contact-center/shared/components/card/card.component.mjs +3 -3
- package/esm2020/contact-center/shared/dcp-api.service.mjs +1 -1
- package/esm2020/contact-center/shared/shared.module.mjs +1 -1
- 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/locations/public-api.mjs +1 -1
- package/esm2020/locations/src/app.constants.mjs +1 -1
- package/esm2020/locations/src/location-confirm-dialog/location-confirm-dialog.component.mjs +3 -3
- package/esm2020/locations/src/locations.component.mjs +3 -3
- package/esm2020/locations/src/locations.module.mjs +1 -1
- package/esm2020/locations/src/material.module.mjs +1 -1
- package/esm2020/locations/src/services/api.service.mjs +1 -1
- package/esm2020/locations/src/services/locations.service.mjs +1 -1
- package/esm2020/locations/src/types/location.mjs +1 -1
- package/esm2020/locations/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/meetings/src/app.constants.mjs +1 -1
- package/esm2020/meetings/src/components/live-meetings/live-meetings.component.mjs +3 -3
- package/esm2020/meetings/src/components/meeting-spaces/meeting-spaces.component.mjs +3 -3
- package/esm2020/meetings/src/meetings.component.mjs +3 -3
- package/esm2020/meetings/src/meetings.module.mjs +1 -1
- package/esm2020/meetings/src/services/live-meetings.service.mjs +1 -1
- package/esm2020/meetings/src/services/meeting-spaces.service.mjs +1 -1
- package/esm2020/meetings/src/types/live-meeting.mjs +1 -1
- package/esm2020/meetings/src/types/meeting-space.mjs +1 -1
- package/esm2020/meetings/src/utils/app-loader/app-loader.mjs +3 -3
- 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-dynamic-tokens.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/associate-lines/associate-lines.component.mjs +3 -3
- 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/device-settings/device-settings.component.mjs +3 -3
- 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/line-key-config/line-key-config.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/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/dcp-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 +2 -2
- 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 +1 -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 +1 -1
- package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
- 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/esm2020/workspaces/public-api.mjs +1 -1
- package/esm2020/workspaces/src/app.constants.mjs +1 -1
- package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +3 -3
- package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +3 -3
- package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +3 -3
- package/esm2020/workspaces/src/material.module.mjs +1 -1
- package/esm2020/workspaces/src/services/api.service.mjs +1 -1
- package/esm2020/workspaces/src/services/workspace-detail.service.mjs +1 -1
- package/esm2020/workspaces/src/services/workspaces-migration.service.mjs +1 -1
- package/esm2020/workspaces/src/services/workspaces.service.mjs +1 -1
- package/esm2020/workspaces/src/types/workspace.mjs +1 -1
- package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +3 -3
- package/esm2020/workspaces/src/utils/device-icon.mjs +1 -1
- package/esm2020/workspaces/src/workspaces.component.mjs +8 -8
- package/esm2020/workspaces/src/workspaces.module.mjs +1 -1
- package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +8 -8
- 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-locations.mjs +6 -6
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-meetings.mjs +8 -8
- package/fesm2015/tuki-io-tuki-widgets-meetings.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 +24 -24
- package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +18 -18
- package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +12 -12
- package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +15 -15
- package/fesm2015/tuki-io-tuki-widgets-workspaces.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 +8 -8
- 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-locations.mjs +6 -6
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-meetings.mjs +8 -8
- package/fesm2020/tuki-io-tuki-widgets-meetings.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 +24 -24
- package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +18 -18
- package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +12 -12
- package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +15 -15
- package/fesm2020/tuki-io-tuki-widgets-workspaces.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
|
@@ -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/shared/components/card/card.component.ts","../../../../projects/tuki/widgets/contact-center/shared/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/shared/material.module.ts","../../../../projects/tuki/widgets/contact-center/shared/shared.module.ts","../../../../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/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/shared/dcp-api.service.ts","../../../../projects/tuki/widgets/contact-center/cc-import/types/uccx.ts","../../../../projects/tuki/widgets/contact-center/cc-import/constants/cc-import.constants.ts","../../../../projects/tuki/widgets/contact-center/cc-import/mock/cc-import.mock.ts","../../../../projects/tuki/widgets/contact-center/cc-import/cc-import.service.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.html","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.html","../../../../projects/tuki/widgets/contact-center/cc-import/cc-import.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 = {}, options: { responseType?: 'json' | 'blob' } = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {\r\n params: this.prepareEncodedParams(params),\r\n headers,\r\n // Some migration endpoints answer with a file rather than JSON.\r\n responseType: (options.responseType || 'json') as 'json'\r\n });\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 /**\r\n * The application-centric UCCX migration endpoints, as used by webex-ops-client\r\n * (`ContactCenterService` / `constants.json`). There is no dedicated\r\n * \"contact center\" API - a contact center *is* a UCCX application, and its\r\n * entities are reached through the e2emigration batches that carry it.\r\n */\r\n UCCX: {\r\n /** Every UCCX application known for the customer. Served by the **dcp** host. */\r\n APPLICATION_NAMES: (customerId: number) =>\r\n `/api/cache/uccx/application/customer/${customerId}/getall`,\r\n /** All UCCX batches for the customer, one per entity type. */\r\n BATCHES: (customerId: number) =>\r\n `/api/e2emigration/batch/${customerId}/UCCX`,\r\n /**\r\n * The entities of one batch.\r\n *\r\n * It also takes an `applicationName` param, but on dev2 that filter answers\r\n * `[]` for every application - including ones whose items *do* carry a\r\n * matching `applicationName` - so the widget reads the batch unfiltered and\r\n * narrows on the item field itself.\r\n */\r\n BATCH_ITEMS: (customerId: number, batchId: string | number) =>\r\n `/api/e2emigration/batch/${batchId}/customer/${customerId}/uccx/filter`,\r\n /** Per-AEF-script migration state (NEW / MIGRATED / MIGRATION_FAILED / ...). */\r\n CALL_FLOW_MIGRATION_STATUSES: (customerId: number) =>\r\n `/api/uccx/migration/customer/${customerId}/callflow/getAll`,\r\n /** Runs the UCCX -> Webex Contact Center migration. Responds with an XLSX tracker. */\r\n MIGRATE: (customerId: number) =>\r\n `/api/migration/webex/customer/${customerId}/uccx/migrate`,\r\n }\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/**\r\n * Standard contact-center panel chrome. Content goes into the `card-content` slot;\r\n * `card-title-adornment` takes a small element rendered next to the title (info icon,\r\n * badge).\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 /** Tightens the padding and inner spacing for compact panels. */\r\n @Input() dense = false;\r\n}\r\n","<article class=\"card\" [class.card--dense]=\"dense\">\r\n <header class=\"card__header\">\r\n <div class=\"card__title-group\">\r\n <h2>{{ title }}</h2>\r\n <ng-content select=\"card-title-adornment\"></ng-content>\r\n </div>\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 { 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 { HttpClientModule } from \"@angular/common/http\";\r\nimport { CardComponent } from \"./components/card/card.component\";\r\n\r\n/**\r\n * Presentational building blocks shared by the contact-center widgets.\r\n * Widget modules import this to pick up the standard card chrome plus the\r\n * Material/Apex modules they all need.\r\n */\r\n@NgModule({\r\n declarations: [\r\n CardComponent\r\n ],\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 CardComponent\r\n ]\r\n})\r\nexport class SharedModule {}\r\n","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 { 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 ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\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 { 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 { }","import { Injectable } from '@angular/core';\r\nimport { APIService } from './api.service';\r\n\r\n/**\r\n * Same contract as {@link APIService}, pointed at the **dcp** host instead of the\r\n * main API host. A handful of UCCX endpoints (application names, file downloads,\r\n * dependency analysis) are only served there - webex-ops-client does the same thing\r\n * with its `ContactCenterService.customUrl`.\r\n *\r\n * Registered separately from `APIService` so each keeps its own `apiUrl`/`token`.\r\n */\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class DcpApiService extends APIService {\r\n override apiUrl = window.location.protocol + '//' + window.location.hostname + '/dcp';\r\n}\r\n","/**\r\n * The UCCX migration payloads as the backend returns them, mirroring\r\n * webex-ops-client's `pages/contact-center/interfaces/uccx-batch.interface.ts`.\r\n * Only the fields this widget reads are declared.\r\n */\r\n\r\n/** The UCCX server a batch/application was collected from. */\r\nexport interface UccxHost {\r\n id?: number;\r\n host?: string;\r\n name?: string;\r\n}\r\n\r\n/**\r\n * One UCCX application, as the dcp application cache returns it. Note this is a\r\n * different shape from {@link UccxBatch} - webex-ops-client types the same endpoint\r\n * as `UccxBatch[]` but only ever reads `.name` and `.uccx.host` off it.\r\n */\r\nexport interface UccxApplication {\r\n id: number;\r\n name: string;\r\n /** Wrapped by UCCX as `SCRIPT[Foo.aef]`; see `CcImportService.toScriptName`. */\r\n scriptName?: string | null;\r\n description?: string;\r\n type?: string;\r\n enabled?: boolean;\r\n /** Present on the payload, null throughout dev2 - see `resolveMigrationState`. */\r\n migrationStatus?: string | null;\r\n aefFiles?: string[] | null;\r\n uccx?: UccxHost;\r\n}\r\n\r\n/** One migratable UCCX entity: a CSQ, a prompt, an agent, a script, ... */\r\nexport interface UccxItem {\r\n id: number | null;\r\n name: string;\r\n files: string[];\r\n /** One of {@link UCCX_ITEM_TYPE}. */\r\n type: string;\r\n /**\r\n * The application this entity belongs to - the application-centric link.\r\n * Populated per entity type by the backend's dependency analysis; on dev2 only\r\n * Trigger items carry it, everything else is null.\r\n */\r\n applicationName?: string | null;\r\n batchId?: number;\r\n sourceUCCXIp: string;\r\n destination: string;\r\n customerId: number;\r\n migrate?: boolean;\r\n}\r\n\r\n/** The request/response envelope the migrate endpoint expects. */\r\nexport interface UccxItemsWrapper {\r\n /** Items grouped by batch - the backend takes a list of lists. */\r\n uccxItemsList: UccxItem[][];\r\n}\r\n\r\n/**\r\n * A batch groups UCCX entities of one type. A single application is therefore\r\n * spread across several batches, which is why the entity overview has to fan out.\r\n */\r\nexport interface UccxBatch {\r\n /** A number on the wire, despite webex-ops-client typing it as a string. */\r\n id: number | string;\r\n name: string;\r\n /**\r\n * Everything below is optional on purpose: the same shape is returned by the\r\n * batch endpoints and by the dcp application cache, and the latter fills in\r\n * far fewer fields.\r\n */\r\n type?: string;\r\n applicationName?: string;\r\n applicationNames?: string;\r\n sourceUccxIp?: string;\r\n size?: number;\r\n destination?: string;\r\n customerId?: number;\r\n aefFiles?: string[];\r\n uccx?: UccxHost;\r\n /**\r\n * Compatibility score for the application's AEF script, 0-100.\r\n * Not served yet - see `CcImportService.resolveCompatibility`.\r\n */\r\n compatibilityScore?: number;\r\n}\r\n\r\n/** Per-AEF-script migration state, keyed by `scriptName` + `uccxIp`. */\r\nexport interface CallFlowMigrationStatus {\r\n id: number;\r\n scriptName: string;\r\n /** NEW | EDITING | READY_FOR_MIGRATION | MIGRATED | MIGRATION_FAILED | CONVERTING */\r\n status: string;\r\n type: string;\r\n uccxIp: string;\r\n customerId: number;\r\n}\r\n\r\n/** The `type` values a {@link UccxItem} can carry. */\r\nexport const UCCX_ITEM_TYPE = {\r\n RESOURCE_GROUP: 'Resource Group',\r\n TRIGGER: 'Trigger',\r\n SCRIPT: 'Script',\r\n APPLICATION: 'Application',\r\n CSQ: 'CSQ',\r\n DOCUMENT: 'Document',\r\n PHONE_BOOK: 'Phone Book',\r\n PROMPT: 'Prompt',\r\n REASON_CODE: 'Reason Code',\r\n RESOURCE: 'Resource',\r\n SKILL: 'Skill',\r\n TEAM: 'Team',\r\n WRAP_UP_CODE: 'Wrap Up Code'\r\n} as const;\r\n\r\n/** The only call-flow state that counts as imported. */\r\nexport const CALL_FLOW_MIGRATED = 'MIGRATED';\r\n","import { ImportPanelSlice } from '../types/cc-import';\r\nimport { UCCX_ITEM_TYPE } from '../types/uccx';\r\n\r\nexport const CHART_COLORS = {\r\n customerAssist: '#177A5C',\r\n webexContactCenter: '#D0D0D0',\r\n requiresReview: '#1268E3'\r\n} as const;\r\n\r\n/** Compatibility score thresholds, per the ticket's scoring table. */\r\nexport const COMPATIBILITY_THRESHOLDS = {\r\n /** 80-100 - migrates to Customer Assist with no functional loss. */\r\n migratable: 80,\r\n /** 60-79 - migrates to Customer Assist, minor unsupported steps dropped. */\r\n requiresReview: 60\r\n} as const;\r\n\r\n/**\r\n * Slices of the panel's pie chart, in order: the recommended destination for every\r\n * contact center detected in the connected UCCX environment.\r\n *\r\n * The panel is slice-driven, so re-cutting the chart when the design changes means\r\n * editing this array - no component change.\r\n */\r\nexport const IMPORT_PANEL_SLICES: ImportPanelSlice[] = [\r\n {\r\n label: 'To Customer Assist',\r\n color: CHART_COLORS.customerAssist,\r\n tooltip: 'Fully supported by Customer Assist.',\r\n match: contactCenter => contactCenter.compatibilityStatus === 'migratable'\r\n },\r\n {\r\n label: 'Requires Review',\r\n color: CHART_COLORS.requiresReview,\r\n tooltip: 'Supported by Customer Assist, but a few unsupported steps would change. '\r\n + 'Can also go to Webex Contact Center for full feature coverage.',\r\n match: contactCenter => contactCenter.compatibilityStatus === 'requires-review'\r\n },\r\n {\r\n label: 'To Webex Contact Center',\r\n color: CHART_COLORS.webexContactCenter,\r\n tooltip: 'Not supported by Customer Assist - migrate to Webex Contact Center.',\r\n match: contactCenter => contactCenter.compatibilityStatus === 'unsupported'\r\n }\r\n];\r\n\r\n/**\r\n * How UCCX entity types roll up into the groups the Overview step shows, in display\r\n * order. Types not listed here get a group of their own under their raw type name,\r\n * so nothing the backend returns is silently dropped.\r\n */\r\nexport const OVERVIEW_ENTITY_GROUPS: { label: string; types: string[] }[] = [\r\n { label: 'Channel', types: [UCCX_ITEM_TYPE.TRIGGER] },\r\n { label: 'Queues', types: [UCCX_ITEM_TYPE.CSQ] },\r\n { label: 'Audio files', types: [UCCX_ITEM_TYPE.PROMPT, UCCX_ITEM_TYPE.DOCUMENT] },\r\n { label: 'Flows', types: [UCCX_ITEM_TYPE.SCRIPT] },\r\n { label: 'Skill', types: [UCCX_ITEM_TYPE.SKILL] },\r\n { label: 'Contact center users', types: [UCCX_ITEM_TYPE.RESOURCE] }\r\n];\r\n\r\nexport const IMPORT_PANEL_TITLE = 'Import Contact center';\r\n\r\nexport const IMPORT_PANEL_TOOLTIP =\r\n 'Contact centers detected in the connected UCCX environment, and where each one can migrate to.';\r\n\r\nexport const IMPORT_WIZARD_TITLE = 'Contact Center';\r\n\r\n/** Shown once a \"requires review\" contact center is picked. Dismissible. */\r\nexport const CUSTOMER_ASSIST_NOTICE =\r\n 'This contact center may also be supported by Customer Assist. Check compatibility before continuing.';\r\n\r\n/** Tooltip on the marker the picker puts next to those same contact centers. */\r\nexport const CUSTOMER_ASSIST_MARKER_TOOLTIP = 'May also be supported by Customer Assist.';\r\n","import { ContactCenter, ContactCenterCompatibilityStatus, ContactCenterEntities } from '../types/cc-import';\r\n\r\n/**\r\n * Stand-in data used when `CcImportService.useMockData` is on.\r\n *\r\n * Shapes here mirror exactly what `CcImportService` produces from the real backend,\r\n * so switching over is a matter of flipping `useMockData` to false.\r\n */\r\n\r\nconst APPLICATION_NAMES = [\r\n 'Operations', 'Sales', 'Support', 'Billing', 'Reception', 'Helpdesk', 'Retention',\r\n 'Onboarding', 'Escalations', 'Emergency', 'Pharmacy', 'Appointments', 'Claims',\r\n 'Collections', 'Dispatch', 'Front Desk', 'IT Service Desk', 'Loyalty', 'Orders', 'Returns'\r\n];\r\n\r\n/** One tab per group on the wizard's Overview step, in the order they are shown. */\r\nconst ENTITY_GROUP_TEMPLATE: { label: string; suffixes: string[] }[] = [\r\n { label: 'Channel', suffixes: ['_CC'] },\r\n { label: 'Queues', suffixes: ['_Queue'] },\r\n { label: 'Audio files', suffixes: [' Welcome', ' Music On Hold', ' Closed Message'] },\r\n { label: 'Flows', suffixes: ['_Flow'] },\r\n { label: 'Skill', suffixes: ['_Skill'] },\r\n { label: 'Contact center users', suffixes: [' Supervisor', ' Agent 1', ' Agent 2'] }\r\n];\r\n\r\n/**\r\n * The ten contact centers that still need a decision - the only ones the wizard\r\n * offers, so these are exactly the rows the picker shows, in this order. The flagged\r\n * three are \"requires review\" and carry the marker plus the advisory notice.\r\n */\r\nconst REVIEW_CONTACT_CENTERS: { name: string; requiresReview?: boolean }[] = [\r\n { name: 'Operations', requiresReview: true },\r\n { name: 'Sales_inquiry' },\r\n { name: 'Tech Support' },\r\n { name: 'Tech_Info' },\r\n { name: 'Finance', requiresReview: true },\r\n { name: 'Innovation', requiresReview: true },\r\n { name: 'Marketing' },\r\n { name: 'Gen_Support' },\r\n { name: 'Legal' },\r\n { name: 'Sales Support' }\r\n];\r\n\r\n/** 100 contact centers: 70 migratable, 20 unsupported, 10 still to be imported. */\r\nexport function mockContactCenters(): ContactCenter[] {\r\n const contactCenters: ContactCenter[] = [];\r\n\r\n // 90 already-imported ones, split across the two destinations.\r\n for (let i = 0; i < 90; i++) {\r\n const name = `${APPLICATION_NAMES[i % APPLICATION_NAMES.length]}_${Math.floor(i / APPLICATION_NAMES.length) + 1}`;\r\n const compatibilityStatus: ContactCenterCompatibilityStatus = i < 70 ? 'migratable' : 'unsupported';\r\n\r\n contactCenters.push({\r\n applicationId: `app-${i + 1}`,\r\n applicationName: name,\r\n scriptName: `${name}_AA_Queue.aef`,\r\n compatibilityStatus,\r\n compatibilityScore: compatibilityStatus === 'migratable' ? 92 : 41,\r\n migrationState: 'migrated'\r\n });\r\n }\r\n\r\n REVIEW_CONTACT_CENTERS.forEach((contactCenter, i) => {\r\n const compatibilityStatus: ContactCenterCompatibilityStatus =\r\n contactCenter.requiresReview ? 'requires-review' : 'unsupported';\r\n\r\n contactCenters.push({\r\n applicationId: `app-${91 + i}`,\r\n applicationName: contactCenter.name,\r\n scriptName: `${contactCenter.name}_AA_Queue.aef`,\r\n compatibilityStatus,\r\n compatibilityScore: contactCenter.requiresReview ? 68 : 44,\r\n migrationState: 'not-migrated',\r\n customerAssistCapable: compatibilityStatus === 'requires-review'\r\n });\r\n });\r\n\r\n return contactCenters;\r\n}\r\n\r\nexport function mockContactCenterEntities(contactCenter: ContactCenter): ContactCenterEntities {\r\n const base = contactCenter.applicationName;\r\n\r\n return {\r\n applicationId: contactCenter.applicationId,\r\n groups: ENTITY_GROUP_TEMPLATE.map(group => ({\r\n label: group.label,\r\n items: group.suffixes.map(suffix => `${base}${suffix}`)\r\n }))\r\n };\r\n}\r\n","import { inject, Injectable } from '@angular/core';\r\nimport { Observable, delay, forkJoin, map, of, switchMap } from 'rxjs';\r\nimport { API } from '../shared/api.endpoints';\r\nimport { APIService } from '../shared/api.service';\r\nimport { DcpApiService } from '../shared/dcp-api.service';\r\nimport { COMPATIBILITY_THRESHOLDS, OVERVIEW_ENTITY_GROUPS } from './constants/cc-import.constants';\r\nimport { mockContactCenterEntities, mockContactCenters } from './mock/cc-import.mock';\r\nimport {\r\n ContactCenter,\r\n ContactCenterCompatibilityStatus,\r\n ContactCenterEntities,\r\n ContactCenterEntityGroup,\r\n ImportResult\r\n} from './types/cc-import';\r\nimport {\r\n CALL_FLOW_MIGRATED,\r\n CallFlowMigrationStatus,\r\n UccxApplication,\r\n UccxBatch,\r\n UccxItem,\r\n UccxItemsWrapper\r\n} from './types/uccx';\r\n\r\n/** Simulated network latency for the mock responses, so loading states are exercised. */\r\nconst MOCK_LATENCY_MS = 300;\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class CcImportService {\r\n private readonly api = inject(APIService);\r\n private readonly dcpApi = inject(DcpApiService);\r\n\r\n /**\r\n * Answer everything from `mock/cc-import.mock.ts` instead of calling the backend.\r\n *\r\n * Note this is all-or-nothing: with it off, the contact-center list, the entity\r\n * overview and the import all hit real endpoints. Compatibility scoring is the\r\n * exception - see {@link resolveCompatibility}.\r\n */\r\n useMockData = true;\r\n\r\n setToken(token: string): void {\r\n this.api.token = token;\r\n this.dcpApi.token = token;\r\n }\r\n\r\n setHost(host: string): void {\r\n this.api.apiUrl = host;\r\n }\r\n\r\n /** Base URL of the dcp host, which serves the UCCX application list. */\r\n setDcpHost(dcpHost: string): void {\r\n this.dcpApi.apiUrl = dcpHost;\r\n }\r\n\r\n /**\r\n * Every UCCX contact center Tuki can import.\r\n *\r\n * A \"contact center\" is a UCCX application. The list comes from the dcp\r\n * application cache; whether each one has already been imported is joined on from\r\n * the per-AEF-script call-flow migration states.\r\n */\r\n fetchContactCenters(customerId: number): Observable<ContactCenter[]> {\r\n if (this.useMockData) {\r\n return of(mockContactCenters()).pipe(delay(MOCK_LATENCY_MS));\r\n }\r\n\r\n return forkJoin({\r\n applications: this.dcpApi.fetch(API.UCCX.APPLICATION_NAMES(customerId)),\r\n callFlows: this.api.fetch(API.UCCX.CALL_FLOW_MIGRATION_STATUSES(customerId))\r\n }).pipe(\r\n map(({ applications, callFlows }) => this.toContactCenters(\r\n this.asArray<UccxApplication>(applications),\r\n this.asArray<CallFlowMigrationStatus>(callFlows)\r\n ))\r\n );\r\n }\r\n\r\n /**\r\n * Application-centric entity breakdown: everything Tuki will create on import.\r\n *\r\n * Note this only ever returns entities the backend has actually linked to the\r\n * application. Where that linkage is missing the groups come back empty rather\r\n * than padded with unrelated entities of the right type.\r\n */\r\n fetchContactCenterEntities(customerId: number, contactCenter: ContactCenter): Observable<ContactCenterEntities> {\r\n if (this.useMockData) {\r\n return of(mockContactCenterEntities(contactCenter)).pipe(delay(MOCK_LATENCY_MS));\r\n }\r\n\r\n return this.fetchApplicationItems(customerId, contactCenter.applicationName).pipe(\r\n map(items => ({\r\n applicationId: contactCenter.applicationId,\r\n groups: this.groupEntities(items)\r\n }))\r\n );\r\n }\r\n\r\n /**\r\n * Kicks off the UCCX -> Webex Contact Center import of one contact center, as a\r\n * single migration unit: every entity of the application goes in one request.\r\n *\r\n * The endpoint is synchronous and answers with an XLSX tracker rather than a job\r\n * id - execution and progress tracking are defined in a separate ticket.\r\n *\r\n * @param siteId required by the backend when a Resource Group is in scope.\r\n * @param locationId required by the backend when a Trigger is in scope.\r\n */\r\n importContactCenter(\r\n customerId: number,\r\n applicationId: string,\r\n siteId?: string,\r\n locationId?: string\r\n ): Observable<ImportResult> {\r\n if (this.useMockData) {\r\n return of<ImportResult>({ applicationId, accepted: true }).pipe(delay(MOCK_LATENCY_MS));\r\n }\r\n\r\n return this.fetchApplicationItems(customerId, applicationId).pipe(\r\n switchMap(items => {\r\n const payload: UccxItemsWrapper = {\r\n uccxItemsList: items.length ? [items.map(item => ({ ...item, migrate: true }))] : []\r\n };\r\n\r\n return this.api.post(\r\n API.UCCX.MIGRATE(customerId),\r\n payload,\r\n { siteId, locationId },\r\n { responseType: 'blob' }\r\n );\r\n }),\r\n map((report: Blob) => ({\r\n applicationId,\r\n accepted: true,\r\n report: report instanceof Blob ? report : undefined\r\n }))\r\n );\r\n }\r\n\r\n /**\r\n * Every UCCX entity belonging to one application, gathered across the batches.\r\n *\r\n * UCCX batches hold one entity type each, so this reads them all and keeps the\r\n * items whose `applicationName` matches. The narrowing is done here rather than\r\n * through the endpoint's own `applicationName` param because that param answers\r\n * `[]` on dev2 even for items that plainly carry the name.\r\n */\r\n private fetchApplicationItems(customerId: number, applicationName: string): Observable<UccxItem[]> {\r\n return this.api.fetch(API.UCCX.BATCHES(customerId)).pipe(\r\n switchMap(response => {\r\n const batches = this.asArray<UccxBatch>(response);\r\n if (!batches.length) {\r\n return of<UccxItem[]>([]);\r\n }\r\n\r\n return forkJoin(batches.map(batch =>\r\n this.api.fetch(API.UCCX.BATCH_ITEMS(customerId, batch.id))\r\n .pipe(map((wrapper: UccxItemsWrapper) => this.flattenItems(wrapper)))\r\n )).pipe(map(perBatch => this.dedupeItems(\r\n perBatch.flat().filter(item => item.applicationName === applicationName)\r\n )));\r\n })\r\n );\r\n }\r\n\r\n /** The items endpoint nests items one level; older responses come back flat. */\r\n private flattenItems(wrapper: UccxItemsWrapper | null): UccxItem[] {\r\n const items = wrapper?.uccxItemsList ?? [];\r\n const flattened = Array.isArray(items[0])\r\n ? (items as UccxItem[][]).flat()\r\n : (items as unknown as UccxItem[]);\r\n return flattened.filter(Boolean);\r\n }\r\n\r\n /** The same entity can be carried by more than one batch. */\r\n private dedupeItems(items: UccxItem[]): UccxItem[] {\r\n const seen = new Set<string>();\r\n return items.filter(item => {\r\n const key = `${item.type}::${item.name}::${item.sourceUCCXIp}`;\r\n if (seen.has(key)) {\r\n return false;\r\n }\r\n seen.add(key);\r\n return true;\r\n });\r\n }\r\n\r\n private groupEntities(items: UccxItem[]): ContactCenterEntityGroup[] {\r\n const remaining = new Map<string, string[]>();\r\n items.forEach(item => {\r\n const names = remaining.get(item.type) ?? [];\r\n names.push(item.name);\r\n remaining.set(item.type, names);\r\n });\r\n\r\n const groups: ContactCenterEntityGroup[] = OVERVIEW_ENTITY_GROUPS.map(group => {\r\n const collected: string[] = [];\r\n group.types.forEach(type => {\r\n collected.push(...(remaining.get(type) ?? []));\r\n remaining.delete(type);\r\n });\r\n return { label: group.label, items: collected };\r\n });\r\n\r\n // Anything the backend returned that has no group of its own keeps its raw\r\n // type as a label, rather than being dropped from the overview.\r\n remaining.forEach((names, type) => groups.push({ label: type, items: names }));\r\n\r\n return groups;\r\n }\r\n\r\n private toContactCenters(\r\n applications: UccxApplication[],\r\n callFlows: CallFlowMigrationStatus[]\r\n ): ContactCenter[] {\r\n return applications\r\n .filter(application => !!application?.name)\r\n .map(application => {\r\n const uccxIp = application.uccx?.host;\r\n const scriptName = this.toScriptName(application);\r\n const compatibilityStatus = this.resolveCompatibility(application);\r\n\r\n const contactCenter: ContactCenter = {\r\n // UCCX identifies an application by name - it is what the entity\r\n // records link back to - so it doubles as the widget's key.\r\n applicationId: application.name,\r\n applicationName: application.name,\r\n scriptName,\r\n uccxIp,\r\n compatibilityStatus,\r\n migrationState: this.resolveMigrationState(application, scriptName, uccxIp, callFlows),\r\n // Per the ticket, \"requires review\" is exactly the set that can go\r\n // to either destination.\r\n customerAssistCapable: compatibilityStatus === 'requires-review'\r\n };\r\n\r\n return contactCenter;\r\n });\r\n }\r\n\r\n /** UCCX wraps the backing script as `SCRIPT[Foo.aef]`; the widget shows `Foo.aef`. */\r\n private toScriptName(application: UccxApplication): string {\r\n const raw = application.scriptName ?? application.aefFiles?.[0] ?? '';\r\n return raw.replace(/^SCRIPT\\[(.*)\\]$/, '$1');\r\n }\r\n\r\n /**\r\n * Whether Tuki has already imported this contact center.\r\n *\r\n * The application record carries its own `migrationStatus`, but it is null\r\n * throughout dev2, so this falls back to the per-AEF-script call-flow state.\r\n */\r\n private resolveMigrationState(\r\n application: UccxApplication,\r\n scriptName: string,\r\n uccxIp: string | undefined,\r\n callFlows: CallFlowMigrationStatus[]\r\n ): ContactCenter['migrationState'] {\r\n if (application.migrationStatus) {\r\n return application.migrationStatus === CALL_FLOW_MIGRATED ? 'migrated' : 'not-migrated';\r\n }\r\n\r\n const callFlow = callFlows.find(flow =>\r\n flow.scriptName === scriptName && (!uccxIp || flow.uccxIp === uccxIp));\r\n\r\n return callFlow?.status === CALL_FLOW_MIGRATED ? 'migrated' : 'not-migrated';\r\n }\r\n\r\n /**\r\n * Turns an AEF compatibility score into a status.\r\n *\r\n * The scoring API does not exist yet - the AEF step mapping is still a pending\r\n * input on the ticket - so when the backend sends no score every contact center\r\n * falls back to \"requires review\": the status that offers both destinations and\r\n * claims nothing about compatibility we have not actually measured.\r\n *\r\n * Once the backend returns `compatibilityScore`, the thresholds below take over\r\n * with no further change here.\r\n */\r\n private resolveCompatibility(application: UccxApplication): ContactCenterCompatibilityStatus {\r\n const score = (application as { compatibilityScore?: number }).compatibilityScore;\r\n\r\n if (typeof score !== 'number') {\r\n return 'requires-review';\r\n }\r\n if (score >= COMPATIBILITY_THRESHOLDS.migratable) {\r\n return 'migratable';\r\n }\r\n if (score >= COMPATIBILITY_THRESHOLDS.requiresReview) {\r\n return 'requires-review';\r\n }\r\n return 'unsupported';\r\n }\r\n\r\n private asArray<T>(value: unknown): T[] {\r\n return Array.isArray(value) ? value as T[] : [];\r\n }\r\n}\r\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, inject } from '@angular/core';\r\nimport { ApexChart, ApexDataLabels, ApexLegend, ApexNonAxisChartSeries, ApexPlotOptions, ApexStates, ApexTooltip } from 'ng-apexcharts';\r\nimport { Subscription, catchError, finalize, of } from 'rxjs';\r\nimport { CcImportService } from '../../cc-import.service';\r\nimport { CHART_COLORS, IMPORT_PANEL_SLICES, IMPORT_PANEL_TITLE, IMPORT_PANEL_TOOLTIP } from '../../constants/cc-import.constants';\r\nimport { ContactCenter, ImportPanelSegment } from '../../types/cc-import';\r\n\r\ninterface PanelChartOptions {\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 states: ApexStates;\r\n}\r\n\r\n/**\r\n * \"Import Contact center\" panel: how many UCCX contact centers were detected, how many\r\n * have been imported, and an Import button that asks the host to open the import wizard.\r\n */\r\n@Component({\r\n selector: 'cc-import-contact-center-panel',\r\n templateUrl: './import-contact-center-panel.component.html',\r\n styleUrls: ['./import-contact-center-panel.component.scss']\r\n})\r\nexport class ImportContactCenterPanelComponent implements OnInit, OnChanges, OnDestroy {\r\n @Input() customerId!: number;\r\n @Input() host!: string;\r\n /** Base URL of the dcp host, which serves the UCCX application list. */\r\n @Input() dcpHost!: string;\r\n @Input() token!: string;\r\n /** Serve mock data instead of calling the UCCX migration API. */\r\n @Input() useMockData = true;\r\n\r\n /**\r\n * Asked for the import wizard, carrying the contact centers already loaded here so\r\n * the wizard opens without refetching them. The host renders\r\n * `cc-import-contact-center-wizard` as a page in response.\r\n */\r\n @Output() importRequested = new EventEmitter<ContactCenter[]>();\r\n\r\n private readonly ccImportService = inject(CcImportService);\r\n private subscription?: Subscription;\r\n\r\n readonly title = IMPORT_PANEL_TITLE;\r\n readonly tooltip = IMPORT_PANEL_TOOLTIP;\r\n\r\n segments: ImportPanelSegment[] = [];\r\n chartOptions!: PanelChartOptions;\r\n total = 0;\r\n loading = false;\r\n error = false;\r\n\r\n private contactCenters: ContactCenter[] = [];\r\n\r\n ngOnInit(): void {\r\n // Render an empty donut up front so the template never reads unset chart options,\r\n // including when load() bails out because the widget has no credentials yet.\r\n this.buildViewModel();\r\n this.load();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const reloadTriggers = ['customerId', 'host', 'dcpHost', 'token', 'useMockData'];\r\n if (reloadTriggers.some(input => changes[input] && !changes[input].firstChange)) {\r\n this.load();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscription?.unsubscribe();\r\n }\r\n\r\n onImport(): void {\r\n this.importRequested.emit(this.contactCenters);\r\n }\r\n\r\n /** Call after an import has run so the donut picks up the new counts. */\r\n refresh(): void {\r\n this.load();\r\n }\r\n\r\n private load(): void {\r\n const customerId = Number(this.customerId);\r\n this.ccImportService.useMockData = this.useMockData;\r\n\r\n if (!this.useMockData && (!customerId || !this.token)) {\r\n return;\r\n }\r\n\r\n if (this.host) {\r\n this.ccImportService.setHost(this.host);\r\n }\r\n if (this.dcpHost) {\r\n this.ccImportService.setDcpHost(this.dcpHost);\r\n }\r\n if (this.token) {\r\n this.ccImportService.setToken(this.token);\r\n }\r\n\r\n this.subscription?.unsubscribe();\r\n this.loading = true;\r\n this.error = false;\r\n\r\n this.subscription = this.ccImportService.fetchContactCenters(customerId)\r\n .pipe(\r\n catchError(error => {\r\n console.error('Unable to load the contact centers', error);\r\n this.error = true;\r\n return of<ContactCenter[]>([]);\r\n }),\r\n finalize(() => this.loading = false)\r\n )\r\n .subscribe(contactCenters => {\r\n this.contactCenters = contactCenters;\r\n this.buildViewModel();\r\n });\r\n }\r\n\r\n private buildViewModel(): void {\r\n this.total = this.contactCenters.length;\r\n\r\n this.segments = IMPORT_PANEL_SLICES.map(slice => {\r\n const count = this.contactCenters.filter(slice.match).length;\r\n return {\r\n label: slice.label,\r\n color: slice.color,\r\n tooltip: slice.tooltip,\r\n count,\r\n percentage: this.total > 0 ? Math.round((count / this.total) * 100) : 0\r\n };\r\n });\r\n\r\n this.chartOptions = this.buildChartOptions();\r\n }\r\n\r\n private buildChartOptions(): PanelChartOptions {\r\n const charted = this.segments.filter(segment => segment.count > 0);\r\n const isEmpty = charted.length === 0;\r\n\r\n return {\r\n series: isEmpty ? [1] : charted.map(segment => segment.count),\r\n labels: isEmpty ? ['No contact centers'] : charted.map(segment => segment.label),\r\n colors: isEmpty ? [CHART_COLORS.webexContactCenter] : charted.map(segment => segment.color),\r\n chart: {\r\n type: 'donut',\r\n height: 150,\r\n width: 150,\r\n sparkline: { enabled: true }\r\n },\r\n legend: { show: false },\r\n plotOptions: {\r\n pie: {\r\n expandOnClick: false,\r\n donut: { size: '72%' }\r\n }\r\n },\r\n dataLabels: { enabled: false },\r\n tooltip: { enabled: !isEmpty },\r\n states: {\r\n active: { filter: { type: 'none', value: 0 } }\r\n }\r\n };\r\n }\r\n}\r\n","<tk-card [title]=\"title\" [dense]=\"true\">\r\n <ng-container ngProjectAs=\"card-title-adornment\">\r\n <span class=\"cc-import-panel__info\" [matTooltip]=\"tooltip\">\r\n <ng-container *ngTemplateOutlet=\"infoIcon\"></ng-container>\r\n </span>\r\n </ng-container>\r\n\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div class=\"cc-import-panel__body\" *ngIf=\"!loading && !error; else panelState\">\r\n <div class=\"cc-import-panel__chart\">\r\n <apx-chart\r\n [series]=\"chartOptions.series\"\r\n [chart]=\"chartOptions.chart\"\r\n [labels]=\"chartOptions.labels\"\r\n [colors]=\"chartOptions.colors\"\r\n [legend]=\"chartOptions.legend\"\r\n [plotOptions]=\"chartOptions.plotOptions\"\r\n [dataLabels]=\"chartOptions.dataLabels\"\r\n [tooltip]=\"chartOptions.tooltip\"\r\n [states]=\"chartOptions.states\"\r\n ></apx-chart>\r\n <div class=\"cc-import-panel__chart-center\">\r\n <span class=\"cc-import-panel__chart-total\">{{ total | number }}</span>\r\n <span class=\"cc-import-panel__chart-caption\">Contact Center</span>\r\n </div>\r\n </div>\r\n\r\n <ul class=\"cc-import-panel__legend\">\r\n <li class=\"cc-import-panel__legend-item\" *ngFor=\"let segment of segments\">\r\n <span class=\"cc-import-panel__legend-marker\" [style.backgroundColor]=\"segment.color\"></span>\r\n <span class=\"cc-import-panel__legend-label\">{{ segment.label }}</span>\r\n <span class=\"cc-import-panel__info\" [matTooltip]=\"segment.tooltip\">\r\n <ng-container *ngTemplateOutlet=\"infoIcon\"></ng-container>\r\n </span>\r\n <span class=\"cc-import-panel__legend-value\">{{ segment.count | number }} ({{ segment.percentage }}%)</span>\r\n </li>\r\n </ul>\r\n </div>\r\n\r\n <ng-template #panelState>\r\n <div class=\"cc-import-panel__state\" *ngIf=\"loading\">Loading contact centers…</div>\r\n <div class=\"cc-import-panel__state cc-import-panel__state--error\" *ngIf=\"!loading && error\">\r\n Unable to load contact centers.\r\n </div>\r\n </ng-template>\r\n\r\n <div class=\"cc-import-panel__actions\">\r\n <button\r\n type=\"button\"\r\n class=\"cc-import-panel__button\"\r\n [disabled]=\"loading || error\"\r\n (click)=\"onImport()\"\r\n >\r\n Import\r\n </button>\r\n </div>\r\n </ng-container>\r\n</tk-card>\r\n\r\n<ng-template #infoIcon>\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\r\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\r\n <path d=\"M8 7.2v4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\r\n <circle cx=\"8\" cy=\"5\" r=\"0.85\" fill=\"currentColor\" />\r\n </svg>\r\n</ng-template>\r\n","/** The wizard's steps, in order. Index-aligned with the `mat-stepper` steps. */\r\nexport const IMPORT_WIZARD_STEPS = ['select', 'overview'] as const;\r\n\r\nexport type ImportWizardStepId = typeof IMPORT_WIZARD_STEPS[number];\r\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\r\nimport { StepperSelectionEvent } from '@angular/cdk/stepper';\r\nimport { MatStepper } from '@angular/material/stepper';\r\nimport { Subscription, catchError, finalize, of } from 'rxjs';\r\nimport { CcImportService } from '../../cc-import.service';\r\nimport { CUSTOMER_ASSIST_MARKER_TOOLTIP, CUSTOMER_ASSIST_NOTICE, IMPORT_WIZARD_TITLE } from '../../constants/cc-import.constants';\r\nimport { ContactCenter, ContactCenterEntityGroup, ImportResult } from '../../types/cc-import';\r\nimport { IMPORT_WIZARD_STEPS, ImportWizardStepId } from './import-contact-center-wizard.types';\r\n\r\n/**\r\n * Full-page \"Import contact center\" wizard: pick a UCCX contact center, review the\r\n * entities Tuki will create for it, then start the import.\r\n *\r\n * Rendered as a page by the host app (like `tk-user-creation-wizard`), not as a dialog -\r\n * the host swaps it in when the panel's Import button is pressed and swaps it back out\r\n * on `cancel` / `imported`.\r\n */\r\n@Component({\r\n selector: 'cc-import-contact-center-wizard',\r\n templateUrl: './import-contact-center-wizard.component.html',\r\n styleUrls: ['./import-contact-center-wizard.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class ImportContactCenterWizardComponent implements OnInit, OnChanges, OnDestroy {\r\n @Input() title = IMPORT_WIZARD_TITLE;\r\n @Input() customerId!: number;\r\n @Input() host!: string;\r\n /** Base URL of the dcp host, which serves the UCCX application list. */\r\n @Input() dcpHost!: string;\r\n @Input() token!: string;\r\n /** Serve mock data instead of calling the UCCX migration API. */\r\n @Input() useMockData = true;\r\n /**\r\n * Contact centers the caller has already loaded (the panel has them), so the wizard\r\n * opens without a second round trip. Left unset, the wizard fetches them itself.\r\n */\r\n @Input() contactCenters: ContactCenter[] | null = null;\r\n\r\n @Output() cancel = new EventEmitter<void>();\r\n @Output() imported = new EventEmitter<ImportResult>();\r\n\r\n private readonly ccImportService = inject(CcImportService);\r\n private subscriptions = new Subscription();\r\n\r\n readonly customerAssistNotice = CUSTOMER_ASSIST_NOTICE;\r\n readonly customerAssistMarkerTooltip = CUSTOMER_ASSIST_MARKER_TOOLTIP;\r\n\r\n selectedIndex = 0;\r\n\r\n /** Contact centers awaiting review - the ones there is something to import. */\r\n options: ContactCenter[] = [];\r\n /** `options` narrowed by the picker's search box. */\r\n filteredOptions: ContactCenter[] = [];\r\n searchTerm = '';\r\n selected: ContactCenter | null = null;\r\n noticeDismissed = false;\r\n loading = false;\r\n error = false;\r\n\r\n entityGroups: ContactCenterEntityGroup[] = [];\r\n /** Which entity group the Overview step's tab bar is showing. */\r\n activeGroupIndex = 0;\r\n entitiesLoading = false;\r\n entitiesError = false;\r\n\r\n importing = false;\r\n importError = false;\r\n\r\n ngOnInit(): void {\r\n this.load();\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges): void {\r\n const reloadTriggers = ['customerId', 'host', 'dcpHost', 'token', 'useMockData', 'contactCenters'];\r\n if (reloadTriggers.some(input => changes[input] && !changes[input].firstChange)) {\r\n this.load();\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.subscriptions.unsubscribe();\r\n }\r\n\r\n get canGoNext(): boolean {\r\n return !!this.selected;\r\n }\r\n\r\n /** The Customer Assist advisory, until the user dismisses it or picks something else. */\r\n get showCustomerAssistNotice(): boolean {\r\n return !!this.selected?.customerAssistCapable && !this.noticeDismissed;\r\n }\r\n\r\n get canImport(): boolean {\r\n return !!this.selected && !this.importing && !this.entitiesLoading && !this.entitiesError;\r\n }\r\n\r\n onCancel(): void {\r\n this.cancel.emit();\r\n }\r\n\r\n onSelect(applicationId: string): void {\r\n const selected = this.options.find(option => option.applicationId === applicationId) ?? null;\r\n if (selected === this.selected) {\r\n return;\r\n }\r\n\r\n this.selected = selected;\r\n this.noticeDismissed = false;\r\n // Entities belong to the previously selected contact center - drop them so the\r\n // overview step refetches for the new one.\r\n this.entityGroups = [];\r\n this.activeGroupIndex = 0;\r\n this.entitiesError = false;\r\n }\r\n\r\n get activeGroup(): ContactCenterEntityGroup | undefined {\r\n return this.entityGroups[this.activeGroupIndex];\r\n }\r\n\r\n selectGroup(index: number): void {\r\n this.activeGroupIndex = index;\r\n }\r\n\r\n dismissNotice(): void {\r\n this.noticeDismissed = true;\r\n }\r\n\r\n onSearch(event: Event): void {\r\n this.searchTerm = (event.target as HTMLInputElement).value;\r\n this.filter();\r\n }\r\n\r\n /** Resets the search box each time the picker's panel is closed. */\r\n onPanelToggle(opened: boolean): void {\r\n if (!opened && this.searchTerm) {\r\n this.searchTerm = '';\r\n this.filter();\r\n }\r\n }\r\n\r\n onStepSelectionChange(event: StepperSelectionEvent): void {\r\n this.selectedIndex = event.selectedIndex;\r\n\r\n if (this.stepIdAt(event.selectedIndex) === 'overview') {\r\n this.loadEntities();\r\n }\r\n }\r\n\r\n onNext(stepper: MatStepper): void {\r\n if (this.canGoNext) {\r\n stepper.next();\r\n }\r\n }\r\n\r\n onPrevious(stepper: MatStepper): void {\r\n stepper.previous();\r\n }\r\n\r\n runImport(): void {\r\n if (!this.selected || this.importing) {\r\n return;\r\n }\r\n\r\n this.importing = true;\r\n this.importError = false;\r\n\r\n this.subscriptions.add(\r\n this.ccImportService.importContactCenter(Number(this.customerId), this.selected.applicationId)\r\n .pipe(\r\n catchError(error => {\r\n console.error('Unable to start the contact-center import', error);\r\n this.importError = true;\r\n return of<ImportResult | null>(null);\r\n }),\r\n finalize(() => this.importing = false)\r\n )\r\n .subscribe(result => {\r\n if (result) {\r\n this.imported.emit(result);\r\n }\r\n })\r\n );\r\n }\r\n\r\n private stepIdAt(index: number): ImportWizardStepId | undefined {\r\n return IMPORT_WIZARD_STEPS[index];\r\n }\r\n\r\n private load(): void {\r\n this.ccImportService.useMockData = this.useMockData;\r\n\r\n if (this.host) {\r\n this.ccImportService.setHost(this.host);\r\n }\r\n if (this.dcpHost) {\r\n this.ccImportService.setDcpHost(this.dcpHost);\r\n }\r\n if (this.token) {\r\n this.ccImportService.setToken(this.token);\r\n }\r\n\r\n if (this.contactCenters) {\r\n this.setOptions(this.contactCenters);\r\n return;\r\n }\r\n\r\n const customerId = Number(this.customerId);\r\n if (!this.useMockData && (!customerId || !this.token)) {\r\n return;\r\n }\r\n\r\n this.loading = true;\r\n this.error = false;\r\n\r\n this.subscriptions.add(\r\n this.ccImportService.fetchContactCenters(customerId)\r\n .pipe(\r\n catchError(error => {\r\n console.error('Unable to load the contact centers', error);\r\n this.error = true;\r\n return of<ContactCenter[]>([]);\r\n }),\r\n finalize(() => this.loading = false)\r\n )\r\n .subscribe(contactCenters => this.setOptions(contactCenters))\r\n );\r\n }\r\n\r\n private setOptions(contactCenters: ContactCenter[]): void {\r\n // Left in source order on purpose - the picker shows them the way the backend\r\n // (and the mock) hands them over, not alphabetically.\r\n //\r\n // Eligible for a Webex Contact Center import: not imported yet, and either\r\n // unsupported on Customer Assist or reviewable for full feature coverage.\r\n this.options = contactCenters.filter(contactCenter =>\r\n contactCenter.migrationState !== 'migrated'\r\n && (contactCenter.compatibilityStatus === 'unsupported'\r\n || contactCenter.compatibilityStatus === 'requires-review'));\r\n\r\n // A contact center selected before a reload may no longer be importable.\r\n if (this.selected && !this.options.some(option => option.applicationId === this.selected?.applicationId)) {\r\n this.selected = null;\r\n this.entityGroups = [];\r\n this.activeGroupIndex = 0;\r\n }\r\n\r\n this.filter();\r\n }\r\n\r\n private filter(): void {\r\n const needle = this.searchTerm.trim().toLowerCase();\r\n this.filteredOptions = needle\r\n ? this.options.filter(option => option.applicationName.toLowerCase().includes(needle))\r\n : this.options;\r\n }\r\n\r\n private loadEntities(): void {\r\n if (!this.selected || this.entityGroups.length || this.entitiesLoading) {\r\n return;\r\n }\r\n\r\n this.entitiesLoading = true;\r\n this.entitiesError = false;\r\n\r\n this.subscriptions.add(\r\n this.ccImportService.fetchContactCenterEntities(Number(this.customerId), this.selected)\r\n .pipe(\r\n catchError(error => {\r\n console.error('Unable to load the contact-center entities', error);\r\n this.entitiesError = true;\r\n return of(null);\r\n }),\r\n finalize(() => this.entitiesLoading = false)\r\n )\r\n .subscribe(entities => {\r\n this.entityGroups = entities ? entities.groups : [];\r\n this.activeGroupIndex = 0;\r\n })\r\n );\r\n }\r\n}\r\n","<div class=\"move-user-stepper-container\" [attr.aria-busy]=\"importing\">\r\n <header class=\"move-user-header\">\r\n <div class=\"move-user-header__title\">{{ title }}</div>\r\n <div class=\"move-user-header__close\">\r\n <span class=\"app-icon cc-import-close-icon\" (click)=\"onCancel()\" role=\"button\" aria-label=\"Close\">\r\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </header>\r\n\r\n <div id=\"cc-import-stepper\">\r\n <mat-stepper\r\n #stepper\r\n [linear]=\"true\"\r\n labelPosition=\"bottom\"\r\n [selectedIndex]=\"selectedIndex\"\r\n (selectionChange)=\"onStepSelectionChange($event)\"\r\n >\r\n\r\n <!-- Step 1: pick the UCCX contact center -->\r\n <mat-step [completed]=\"canGoNext\">\r\n <ng-template matStepLabel>Select</ng-template>\r\n\r\n <div class=\"cc-import-notice\" *ngIf=\"showCustomerAssistNotice\" role=\"status\">\r\n <span class=\"cc-import-notice__icon\" aria-hidden=\"true\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"currentColor\" />\r\n <path d=\"M8 7.1v4.2\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\r\n <circle cx=\"8\" cy=\"4.8\" r=\"0.9\" fill=\"#fff\" />\r\n </svg>\r\n </span>\r\n <span class=\"cc-import-notice__text\">{{ customerAssistNotice }}</span>\r\n <button type=\"button\" class=\"cc-import-notice__close\" aria-label=\"Dismiss\" (click)=\"dismissNotice()\">\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\r\n <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\r\n </svg>\r\n </button>\r\n </div>\r\n\r\n <div class=\"step-title\">Step 1: Select contact center</div>\r\n\r\n <div class=\"move-user-tab-content-box\">\r\n <div class=\"cc-import-state\" *ngIf=\"loading\">Loading contact centers…</div>\r\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"!loading && error\">\r\n Unable to load contact centers.\r\n </div>\r\n\r\n <section class=\"cc-import-step-content\" *ngIf=\"!loading && !error\">\r\n <div class=\"cc-import-field\">\r\n <label class=\"cc-import-label\" for=\"cc-import-contact-center\">Contact center</label>\r\n\r\n <mat-form-field class=\"cc-import-select\" appearance=\"outline\">\r\n <mat-select\r\n id=\"cc-import-contact-center\"\r\n panelClass=\"cc-import-select-panel\"\r\n placeholder=\"Select contact center\"\r\n [disableOptionCentering]=\"true\"\r\n [value]=\"selected?.applicationId ?? null\"\r\n (selectionChange)=\"onSelect($event.value)\"\r\n (openedChange)=\"onPanelToggle($event)\"\r\n >\r\n <mat-select-trigger>{{ selected?.applicationName }}</mat-select-trigger>\r\n\r\n <!-- Search box pinned above the options. Keystrokes are stopped here so\r\n mat-select's own typeahead does not steal them. -->\r\n <div class=\"cc-import-select-search\" (click)=\"$event.stopPropagation()\">\r\n <span class=\"cc-import-select-search__icon\" aria-hidden=\"true\">\r\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <circle cx=\"7\" cy=\"7\" r=\"4.6\" stroke=\"currentColor\" stroke-width=\"1.4\" />\r\n <path d=\"M10.6 10.6L14 14\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\r\n </svg>\r\n </span>\r\n <input\r\n class=\"cc-import-select-search__input\"\r\n type=\"text\"\r\n autocomplete=\"off\"\r\n placeholder=\"Search\"\r\n aria-label=\"Search contact centers\"\r\n [value]=\"searchTerm\"\r\n (input)=\"onSearch($event)\"\r\n (keydown)=\"$event.stopPropagation()\"\r\n />\r\n </div>\r\n\r\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option.applicationId\">\r\n <div class=\"option-row\">\r\n <span class=\"name\">{{ option.applicationName }}</span>\r\n <span\r\n class=\"cc-import-option-marker\"\r\n *ngIf=\"option.customerAssistCapable\"\r\n [matTooltip]=\"customerAssistMarkerTooltip\"\r\n aria-hidden=\"true\"\r\n >\r\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\r\n <path d=\"M8 2.2 14.6 13.4H1.4L8 2.2Z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linejoin=\"round\" />\r\n <path d=\"M8 6.5v3\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\r\n <circle cx=\"8\" cy=\"11.3\" r=\"0.7\" fill=\"currentColor\" />\r\n </svg>\r\n </span>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <p class=\"cc-import-empty\" *ngIf=\"!options.length\">\r\n Every detected contact center has already been imported.\r\n </p>\r\n </div>\r\n </section>\r\n </div>\r\n </mat-step>\r\n\r\n <!-- Step 2: the entities Tuki will create for it -->\r\n <mat-step>\r\n <ng-template matStepLabel>Overview</ng-template>\r\n\r\n <div class=\"step-title\">Overview</div>\r\n\r\n <div class=\"move-user-tab-content-box\">\r\n <h3 class=\"cc-import-card-title\">Review Contact Center Settings</h3>\r\n <p class=\"cc-import-card-text\">\r\n Review the settings for your new Contact center to make sure everything is correct.<br />\r\n You can make changes at any time by clicking on the name of the contact center on the dedicated page.\r\n </p>\r\n\r\n <div class=\"cc-import-state\" *ngIf=\"entitiesLoading\">Loading entities…</div>\r\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"entitiesError\">\r\n Unable to load the related entities.\r\n </div>\r\n\r\n <ng-container *ngIf=\"!entitiesLoading && !entitiesError && entityGroups.length\">\r\n <div class=\"cc-import-tabs\" role=\"tablist\">\r\n <button\r\n type=\"button\"\r\n class=\"cc-import-tab\"\r\n *ngFor=\"let group of entityGroups; index as i\"\r\n role=\"tab\"\r\n [attr.aria-selected]=\"i === activeGroupIndex\"\r\n [class.cc-import-tab--active]=\"i === activeGroupIndex\"\r\n (click)=\"selectGroup(i)\"\r\n >\r\n {{ group.label }}\r\n </button>\r\n </div>\r\n\r\n <ul class=\"cc-import-items\" role=\"tabpanel\">\r\n <li class=\"cc-import-item\" *ngFor=\"let item of activeGroup?.items\">{{ item }}</li>\r\n <li class=\"cc-import-item cc-import-item--empty\" *ngIf=\"!activeGroup?.items?.length\">\r\n Nothing to create for {{ activeGroup?.label }}.\r\n </li>\r\n </ul>\r\n </ng-container>\r\n\r\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"importError\">\r\n Unable to start the import. Please try again.\r\n </div>\r\n </div>\r\n </mat-step>\r\n </mat-stepper>\r\n\r\n <div class=\"wizard-actions\">\r\n <ng-container [ngSwitch]=\"stepper.selectedIndex\">\r\n <ng-container *ngSwitchCase=\"0\">\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-primary\"\r\n type=\"button\"\r\n [disabled]=\"!canGoNext\"\r\n (click)=\"onNext(stepper)\"\r\n >\r\n Next\r\n </button>\r\n <button mat-button class=\"uc-btn uc-btn-secondary\" type=\"button\" (click)=\"onCancel()\">\r\n Cancel\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"1\">\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-primary\"\r\n type=\"button\"\r\n [disabled]=\"!canImport\"\r\n (click)=\"runImport()\"\r\n >\r\n <span class=\"uc-btn__inline-content\">\r\n <span class=\"uc-btn__spinner\" *ngIf=\"importing\" aria-hidden=\"true\"></span>\r\n <span>{{ importing ? 'Importing...' : 'Import' }}</span>\r\n </span>\r\n </button>\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-secondary\"\r\n type=\"button\"\r\n [disabled]=\"importing\"\r\n (click)=\"onPrevious(stepper)\"\r\n >\r\n Previous\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"wizard-loading-overlay\" [class.wizard-loading-overlay--visible]=\"importing\" aria-hidden=\"true\"></div>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { NgModule } from '@angular/core';\r\nimport { MatStepperModule } from '@angular/material/stepper';\r\nimport { NgApexchartsModule } from 'ng-apexcharts';\r\nimport { SharedModule } from '../shared/shared.module';\r\nimport { ImportContactCenterPanelComponent } from './components/import-contact-center-panel/import-contact-center-panel.component';\r\nimport { ImportContactCenterWizardComponent } from './components/import-contact-center-wizard/import-contact-center-wizard.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n ImportContactCenterPanelComponent,\r\n ImportContactCenterWizardComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n NgApexchartsModule,\r\n MatStepperModule,\r\n SharedModule\r\n ],\r\n exports: [\r\n ImportContactCenterPanelComponent,\r\n ImportContactCenterWizardComponent\r\n ]\r\n})\r\nexport class CcImportModule { }\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4.CardComponent","i2.CardComponent","i1.WxCC2GraphService","i2.WxCCActivityManageService","i3","i2.CytoscapeViewportService","i4.WxCCActivityCreationService","i5","i6","i7.FloatingToolBarComponent","i8.NodeDetailsSidebarComponent","i9.NodeActionToolbarComponent","i10.NodeSearchPanelComponent","i1.APIService","i4","finalize","i1.WxCCAPIService","i2.WxCC2GraphService","i5.WxCCFlowchartComponent","i6.WxCCFileSelectionBarComponent","i7.WxCCActionsBarComponent","i7"],"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/shared/components/card/card.component.ts","../../../../projects/tuki/widgets/contact-center/shared/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/shared/material.module.ts","../../../../projects/tuki/widgets/contact-center/shared/shared.module.ts","../../../../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/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/shared/dcp-api.service.ts","../../../../projects/tuki/widgets/contact-center/cc-import/types/uccx.ts","../../../../projects/tuki/widgets/contact-center/cc-import/constants/cc-import.constants.ts","../../../../projects/tuki/widgets/contact-center/cc-import/mock/cc-import.mock.ts","../../../../projects/tuki/widgets/contact-center/cc-import/cc-import.service.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-panel/import-contact-center-panel.component.html","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.types.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.ts","../../../../projects/tuki/widgets/contact-center/cc-import/components/import-contact-center-wizard/import-contact-center-wizard.component.html","../../../../projects/tuki/widgets/contact-center/cc-import/cc-import.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 = {}, options: { responseType?: 'json' | 'blob' } = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {\r\n params: this.prepareEncodedParams(params),\r\n headers,\r\n // Some migration endpoints answer with a file rather than JSON.\r\n responseType: (options.responseType || 'json') as 'json'\r\n });\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 = {\n READINESS: {\n UCCX_SERVER_ENTITY_STATS: (customerId: number) => `/api/uccx/migration/customer/${customerId}/entity-counts`,\n LICENSE_USAGE_SUMMARY: (customerId: number) => `/api/uccx/migration/customer/${customerId}/cc-license-stats`,\n },\n /**\n * The application-centric UCCX migration endpoints, as used by webex-ops-client\n * (`ContactCenterService` / `constants.json`). There is no dedicated\n * \"contact center\" API - a contact center *is* a UCCX application, and its\n * entities are reached through the e2emigration batches that carry it.\n */\n UCCX: {\n /** Every UCCX application known for the customer. Served by the **dcp** host. */\n APPLICATION_NAMES: (customerId: number) =>\n `/api/cache/uccx/application/customer/${customerId}/getall`,\n /** All UCCX batches for the customer, one per entity type. */\n BATCHES: (customerId: number) =>\n `/api/e2emigration/batch/${customerId}/UCCX`,\n /**\n * The entities of one batch.\n *\n * It also takes an `applicationName` param, but on dev2 that filter answers\n * `[]` for every application - including ones whose items *do* carry a\n * matching `applicationName` - so the widget reads the batch unfiltered and\n * narrows on the item field itself.\n */\n BATCH_ITEMS: (customerId: number, batchId: string | number) =>\n `/api/e2emigration/batch/${batchId}/customer/${customerId}/uccx/filter`,\n /** Per-AEF-script migration state (NEW / MIGRATED / MIGRATION_FAILED / ...). */\n CALL_FLOW_MIGRATION_STATUSES: (customerId: number) =>\n `/api/uccx/migration/customer/${customerId}/callflow/getAll`,\n /** Runs the UCCX -> Webex Contact Center migration. Responds with an XLSX tracker. */\n MIGRATE: (customerId: number) =>\n `/api/migration/webex/customer/${customerId}/uccx/migrate`,\n }\n}\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\";\n\n/**\n * Standard contact-center panel chrome. Content goes into the `card-content` slot;\n * `card-title-adornment` takes a small element rendered next to the title (info icon,\n * badge).\n */\n@Component({\n selector: 'tk-card',\n templateUrl: './card.component.html',\n styleUrls: ['./card.component.scss']\n})\nexport class CardComponent {\n @Input() title!: string;\n /** Tightens the padding and inner spacing for compact panels. */\n @Input() dense = false;\n}\n","<article class=\"card\" [class.card--dense]=\"dense\">\n <header class=\"card__header\">\n <div class=\"card__title-group\">\n <h2>{{ title }}</h2>\n <ng-content select=\"card-title-adornment\"></ng-content>\n </div>\n <!--<div class=\"card__menu-button\">\n <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\n </div>-->\n </header>\n <div class=\"card__content\">\n <ng-content select=\"card-content\"></ng-content>\n </div>\n</article>\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\";\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\";\nimport { CommonModule } from \"@angular/common\";\nimport { MaterialModule } from \"./material.module\";\nimport { NgApexchartsModule } from \"ng-apexcharts\"\nimport { HttpClientModule } from \"@angular/common/http\";\nimport { CardComponent } from \"./components/card/card.component\";\n\n/**\n * Presentational building blocks shared by the contact-center widgets.\n * Widget modules import this to pick up the standard card chrome plus the\n * Material/Apex modules they all need.\n */\n@NgModule({\n declarations: [\n CardComponent\n ],\n imports: [\n CommonModule,\n MaterialModule,\n NgApexchartsModule,\n HttpClientModule\n ],\n exports: [\n MaterialModule,\n CardComponent\n ]\n})\nexport class SharedModule {}\n","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 { 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 ],\n imports: [\n CommonModule,\n SharedModule,\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 { 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 { }","import { Injectable } from '@angular/core';\nimport { APIService } from './api.service';\n\n/**\n * Same contract as {@link APIService}, pointed at the **dcp** host instead of the\n * main API host. A handful of UCCX endpoints (application names, file downloads,\n * dependency analysis) are only served there - webex-ops-client does the same thing\n * with its `ContactCenterService.customUrl`.\n *\n * Registered separately from `APIService` so each keeps its own `apiUrl`/`token`.\n */\n@Injectable({\n providedIn: 'root'\n})\nexport class DcpApiService extends APIService {\n override apiUrl = window.location.protocol + '//' + window.location.hostname + '/dcp';\n}\n","/**\n * The UCCX migration payloads as the backend returns them, mirroring\n * webex-ops-client's `pages/contact-center/interfaces/uccx-batch.interface.ts`.\n * Only the fields this widget reads are declared.\n */\n\n/** The UCCX server a batch/application was collected from. */\nexport interface UccxHost {\n id?: number;\n host?: string;\n name?: string;\n}\n\n/**\n * One UCCX application, as the dcp application cache returns it. Note this is a\n * different shape from {@link UccxBatch} - webex-ops-client types the same endpoint\n * as `UccxBatch[]` but only ever reads `.name` and `.uccx.host` off it.\n */\nexport interface UccxApplication {\n id: number;\n name: string;\n /** Wrapped by UCCX as `SCRIPT[Foo.aef]`; see `CcImportService.toScriptName`. */\n scriptName?: string | null;\n description?: string;\n type?: string;\n enabled?: boolean;\n /** Present on the payload, null throughout dev2 - see `resolveMigrationState`. */\n migrationStatus?: string | null;\n aefFiles?: string[] | null;\n uccx?: UccxHost;\n}\n\n/** One migratable UCCX entity: a CSQ, a prompt, an agent, a script, ... */\nexport interface UccxItem {\n id: number | null;\n name: string;\n files: string[];\n /** One of {@link UCCX_ITEM_TYPE}. */\n type: string;\n /**\n * The application this entity belongs to - the application-centric link.\n * Populated per entity type by the backend's dependency analysis; on dev2 only\n * Trigger items carry it, everything else is null.\n */\n applicationName?: string | null;\n batchId?: number;\n sourceUCCXIp: string;\n destination: string;\n customerId: number;\n migrate?: boolean;\n}\n\n/** The request/response envelope the migrate endpoint expects. */\nexport interface UccxItemsWrapper {\n /** Items grouped by batch - the backend takes a list of lists. */\n uccxItemsList: UccxItem[][];\n}\n\n/**\n * A batch groups UCCX entities of one type. A single application is therefore\n * spread across several batches, which is why the entity overview has to fan out.\n */\nexport interface UccxBatch {\n /** A number on the wire, despite webex-ops-client typing it as a string. */\n id: number | string;\n name: string;\n /**\n * Everything below is optional on purpose: the same shape is returned by the\n * batch endpoints and by the dcp application cache, and the latter fills in\n * far fewer fields.\n */\n type?: string;\n applicationName?: string;\n applicationNames?: string;\n sourceUccxIp?: string;\n size?: number;\n destination?: string;\n customerId?: number;\n aefFiles?: string[];\n uccx?: UccxHost;\n /**\n * Compatibility score for the application's AEF script, 0-100.\n * Not served yet - see `CcImportService.resolveCompatibility`.\n */\n compatibilityScore?: number;\n}\n\n/** Per-AEF-script migration state, keyed by `scriptName` + `uccxIp`. */\nexport interface CallFlowMigrationStatus {\n id: number;\n scriptName: string;\n /** NEW | EDITING | READY_FOR_MIGRATION | MIGRATED | MIGRATION_FAILED | CONVERTING */\n status: string;\n type: string;\n uccxIp: string;\n customerId: number;\n}\n\n/** The `type` values a {@link UccxItem} can carry. */\nexport const UCCX_ITEM_TYPE = {\n RESOURCE_GROUP: 'Resource Group',\n TRIGGER: 'Trigger',\n SCRIPT: 'Script',\n APPLICATION: 'Application',\n CSQ: 'CSQ',\n DOCUMENT: 'Document',\n PHONE_BOOK: 'Phone Book',\n PROMPT: 'Prompt',\n REASON_CODE: 'Reason Code',\n RESOURCE: 'Resource',\n SKILL: 'Skill',\n TEAM: 'Team',\n WRAP_UP_CODE: 'Wrap Up Code'\n} as const;\n\n/** The only call-flow state that counts as imported. */\nexport const CALL_FLOW_MIGRATED = 'MIGRATED';\n","import { ImportPanelSlice } from '../types/cc-import';\nimport { UCCX_ITEM_TYPE } from '../types/uccx';\n\nexport const CHART_COLORS = {\n customerAssist: '#177A5C',\n webexContactCenter: '#D0D0D0',\n requiresReview: '#1268E3'\n} as const;\n\n/** Compatibility score thresholds, per the ticket's scoring table. */\nexport const COMPATIBILITY_THRESHOLDS = {\n /** 80-100 - migrates to Customer Assist with no functional loss. */\n migratable: 80,\n /** 60-79 - migrates to Customer Assist, minor unsupported steps dropped. */\n requiresReview: 60\n} as const;\n\n/**\n * Slices of the panel's pie chart, in order: the recommended destination for every\n * contact center detected in the connected UCCX environment.\n *\n * The panel is slice-driven, so re-cutting the chart when the design changes means\n * editing this array - no component change.\n */\nexport const IMPORT_PANEL_SLICES: ImportPanelSlice[] = [\n {\n label: 'To Customer Assist',\n color: CHART_COLORS.customerAssist,\n tooltip: 'Fully supported by Customer Assist.',\n match: contactCenter => contactCenter.compatibilityStatus === 'migratable'\n },\n {\n label: 'Requires Review',\n color: CHART_COLORS.requiresReview,\n tooltip: 'Supported by Customer Assist, but a few unsupported steps would change. '\n + 'Can also go to Webex Contact Center for full feature coverage.',\n match: contactCenter => contactCenter.compatibilityStatus === 'requires-review'\n },\n {\n label: 'To Webex Contact Center',\n color: CHART_COLORS.webexContactCenter,\n tooltip: 'Not supported by Customer Assist - migrate to Webex Contact Center.',\n match: contactCenter => contactCenter.compatibilityStatus === 'unsupported'\n }\n];\n\n/**\n * How UCCX entity types roll up into the groups the Overview step shows, in display\n * order. Types not listed here get a group of their own under their raw type name,\n * so nothing the backend returns is silently dropped.\n */\nexport const OVERVIEW_ENTITY_GROUPS: { label: string; types: string[] }[] = [\n { label: 'Channel', types: [UCCX_ITEM_TYPE.TRIGGER] },\n { label: 'Queues', types: [UCCX_ITEM_TYPE.CSQ] },\n { label: 'Audio files', types: [UCCX_ITEM_TYPE.PROMPT, UCCX_ITEM_TYPE.DOCUMENT] },\n { label: 'Flows', types: [UCCX_ITEM_TYPE.SCRIPT] },\n { label: 'Skill', types: [UCCX_ITEM_TYPE.SKILL] },\n { label: 'Contact center users', types: [UCCX_ITEM_TYPE.RESOURCE] }\n];\n\nexport const IMPORT_PANEL_TITLE = 'Import Contact center';\n\nexport const IMPORT_PANEL_TOOLTIP =\n 'Contact centers detected in the connected UCCX environment, and where each one can migrate to.';\n\nexport const IMPORT_WIZARD_TITLE = 'Contact Center';\n\n/** Shown once a \"requires review\" contact center is picked. Dismissible. */\nexport const CUSTOMER_ASSIST_NOTICE =\n 'This contact center may also be supported by Customer Assist. Check compatibility before continuing.';\n\n/** Tooltip on the marker the picker puts next to those same contact centers. */\nexport const CUSTOMER_ASSIST_MARKER_TOOLTIP = 'May also be supported by Customer Assist.';\n","import { ContactCenter, ContactCenterCompatibilityStatus, ContactCenterEntities } from '../types/cc-import';\n\n/**\n * Stand-in data used when `CcImportService.useMockData` is on.\n *\n * Shapes here mirror exactly what `CcImportService` produces from the real backend,\n * so switching over is a matter of flipping `useMockData` to false.\n */\n\nconst APPLICATION_NAMES = [\n 'Operations', 'Sales', 'Support', 'Billing', 'Reception', 'Helpdesk', 'Retention',\n 'Onboarding', 'Escalations', 'Emergency', 'Pharmacy', 'Appointments', 'Claims',\n 'Collections', 'Dispatch', 'Front Desk', 'IT Service Desk', 'Loyalty', 'Orders', 'Returns'\n];\n\n/** One tab per group on the wizard's Overview step, in the order they are shown. */\nconst ENTITY_GROUP_TEMPLATE: { label: string; suffixes: string[] }[] = [\n { label: 'Channel', suffixes: ['_CC'] },\n { label: 'Queues', suffixes: ['_Queue'] },\n { label: 'Audio files', suffixes: [' Welcome', ' Music On Hold', ' Closed Message'] },\n { label: 'Flows', suffixes: ['_Flow'] },\n { label: 'Skill', suffixes: ['_Skill'] },\n { label: 'Contact center users', suffixes: [' Supervisor', ' Agent 1', ' Agent 2'] }\n];\n\n/**\n * The ten contact centers that still need a decision - the only ones the wizard\n * offers, so these are exactly the rows the picker shows, in this order. The flagged\n * three are \"requires review\" and carry the marker plus the advisory notice.\n */\nconst REVIEW_CONTACT_CENTERS: { name: string; requiresReview?: boolean }[] = [\n { name: 'Operations', requiresReview: true },\n { name: 'Sales_inquiry' },\n { name: 'Tech Support' },\n { name: 'Tech_Info' },\n { name: 'Finance', requiresReview: true },\n { name: 'Innovation', requiresReview: true },\n { name: 'Marketing' },\n { name: 'Gen_Support' },\n { name: 'Legal' },\n { name: 'Sales Support' }\n];\n\n/** 100 contact centers: 70 migratable, 20 unsupported, 10 still to be imported. */\nexport function mockContactCenters(): ContactCenter[] {\n const contactCenters: ContactCenter[] = [];\n\n // 90 already-imported ones, split across the two destinations.\n for (let i = 0; i < 90; i++) {\n const name = `${APPLICATION_NAMES[i % APPLICATION_NAMES.length]}_${Math.floor(i / APPLICATION_NAMES.length) + 1}`;\n const compatibilityStatus: ContactCenterCompatibilityStatus = i < 70 ? 'migratable' : 'unsupported';\n\n contactCenters.push({\n applicationId: `app-${i + 1}`,\n applicationName: name,\n scriptName: `${name}_AA_Queue.aef`,\n compatibilityStatus,\n compatibilityScore: compatibilityStatus === 'migratable' ? 92 : 41,\n migrationState: 'migrated'\n });\n }\n\n REVIEW_CONTACT_CENTERS.forEach((contactCenter, i) => {\n const compatibilityStatus: ContactCenterCompatibilityStatus =\n contactCenter.requiresReview ? 'requires-review' : 'unsupported';\n\n contactCenters.push({\n applicationId: `app-${91 + i}`,\n applicationName: contactCenter.name,\n scriptName: `${contactCenter.name}_AA_Queue.aef`,\n compatibilityStatus,\n compatibilityScore: contactCenter.requiresReview ? 68 : 44,\n migrationState: 'not-migrated',\n customerAssistCapable: compatibilityStatus === 'requires-review'\n });\n });\n\n return contactCenters;\n}\n\nexport function mockContactCenterEntities(contactCenter: ContactCenter): ContactCenterEntities {\n const base = contactCenter.applicationName;\n\n return {\n applicationId: contactCenter.applicationId,\n groups: ENTITY_GROUP_TEMPLATE.map(group => ({\n label: group.label,\n items: group.suffixes.map(suffix => `${base}${suffix}`)\n }))\n };\n}\n","import { inject, Injectable } from '@angular/core';\nimport { Observable, delay, forkJoin, map, of, switchMap } from 'rxjs';\nimport { API } from '../shared/api.endpoints';\nimport { APIService } from '../shared/api.service';\nimport { DcpApiService } from '../shared/dcp-api.service';\nimport { COMPATIBILITY_THRESHOLDS, OVERVIEW_ENTITY_GROUPS } from './constants/cc-import.constants';\nimport { mockContactCenterEntities, mockContactCenters } from './mock/cc-import.mock';\nimport {\n ContactCenter,\n ContactCenterCompatibilityStatus,\n ContactCenterEntities,\n ContactCenterEntityGroup,\n ImportResult\n} from './types/cc-import';\nimport {\n CALL_FLOW_MIGRATED,\n CallFlowMigrationStatus,\n UccxApplication,\n UccxBatch,\n UccxItem,\n UccxItemsWrapper\n} from './types/uccx';\n\n/** Simulated network latency for the mock responses, so loading states are exercised. */\nconst MOCK_LATENCY_MS = 300;\n\n@Injectable({\n providedIn: 'root'\n})\nexport class CcImportService {\n private readonly api = inject(APIService);\n private readonly dcpApi = inject(DcpApiService);\n\n /**\n * Answer everything from `mock/cc-import.mock.ts` instead of calling the backend.\n *\n * Note this is all-or-nothing: with it off, the contact-center list, the entity\n * overview and the import all hit real endpoints. Compatibility scoring is the\n * exception - see {@link resolveCompatibility}.\n */\n useMockData = true;\n\n setToken(token: string): void {\n this.api.token = token;\n this.dcpApi.token = token;\n }\n\n setHost(host: string): void {\n this.api.apiUrl = host;\n }\n\n /** Base URL of the dcp host, which serves the UCCX application list. */\n setDcpHost(dcpHost: string): void {\n this.dcpApi.apiUrl = dcpHost;\n }\n\n /**\n * Every UCCX contact center Tuki can import.\n *\n * A \"contact center\" is a UCCX application. The list comes from the dcp\n * application cache; whether each one has already been imported is joined on from\n * the per-AEF-script call-flow migration states.\n */\n fetchContactCenters(customerId: number): Observable<ContactCenter[]> {\n if (this.useMockData) {\n return of(mockContactCenters()).pipe(delay(MOCK_LATENCY_MS));\n }\n\n return forkJoin({\n applications: this.dcpApi.fetch(API.UCCX.APPLICATION_NAMES(customerId)),\n callFlows: this.api.fetch(API.UCCX.CALL_FLOW_MIGRATION_STATUSES(customerId))\n }).pipe(\n map(({ applications, callFlows }) => this.toContactCenters(\n this.asArray<UccxApplication>(applications),\n this.asArray<CallFlowMigrationStatus>(callFlows)\n ))\n );\n }\n\n /**\n * Application-centric entity breakdown: everything Tuki will create on import.\n *\n * Note this only ever returns entities the backend has actually linked to the\n * application. Where that linkage is missing the groups come back empty rather\n * than padded with unrelated entities of the right type.\n */\n fetchContactCenterEntities(customerId: number, contactCenter: ContactCenter): Observable<ContactCenterEntities> {\n if (this.useMockData) {\n return of(mockContactCenterEntities(contactCenter)).pipe(delay(MOCK_LATENCY_MS));\n }\n\n return this.fetchApplicationItems(customerId, contactCenter.applicationName).pipe(\n map(items => ({\n applicationId: contactCenter.applicationId,\n groups: this.groupEntities(items)\n }))\n );\n }\n\n /**\n * Kicks off the UCCX -> Webex Contact Center import of one contact center, as a\n * single migration unit: every entity of the application goes in one request.\n *\n * The endpoint is synchronous and answers with an XLSX tracker rather than a job\n * id - execution and progress tracking are defined in a separate ticket.\n *\n * @param siteId required by the backend when a Resource Group is in scope.\n * @param locationId required by the backend when a Trigger is in scope.\n */\n importContactCenter(\n customerId: number,\n applicationId: string,\n siteId?: string,\n locationId?: string\n ): Observable<ImportResult> {\n if (this.useMockData) {\n return of<ImportResult>({ applicationId, accepted: true }).pipe(delay(MOCK_LATENCY_MS));\n }\n\n return this.fetchApplicationItems(customerId, applicationId).pipe(\n switchMap(items => {\n const payload: UccxItemsWrapper = {\n uccxItemsList: items.length ? [items.map(item => ({ ...item, migrate: true }))] : []\n };\n\n return this.api.post(\n API.UCCX.MIGRATE(customerId),\n payload,\n { siteId, locationId },\n { responseType: 'blob' }\n );\n }),\n map((report: Blob) => ({\n applicationId,\n accepted: true,\n report: report instanceof Blob ? report : undefined\n }))\n );\n }\n\n /**\n * Every UCCX entity belonging to one application, gathered across the batches.\n *\n * UCCX batches hold one entity type each, so this reads them all and keeps the\n * items whose `applicationName` matches. The narrowing is done here rather than\n * through the endpoint's own `applicationName` param because that param answers\n * `[]` on dev2 even for items that plainly carry the name.\n */\n private fetchApplicationItems(customerId: number, applicationName: string): Observable<UccxItem[]> {\n return this.api.fetch(API.UCCX.BATCHES(customerId)).pipe(\n switchMap(response => {\n const batches = this.asArray<UccxBatch>(response);\n if (!batches.length) {\n return of<UccxItem[]>([]);\n }\n\n return forkJoin(batches.map(batch =>\n this.api.fetch(API.UCCX.BATCH_ITEMS(customerId, batch.id))\n .pipe(map((wrapper: UccxItemsWrapper) => this.flattenItems(wrapper)))\n )).pipe(map(perBatch => this.dedupeItems(\n perBatch.flat().filter(item => item.applicationName === applicationName)\n )));\n })\n );\n }\n\n /** The items endpoint nests items one level; older responses come back flat. */\n private flattenItems(wrapper: UccxItemsWrapper | null): UccxItem[] {\n const items = wrapper?.uccxItemsList ?? [];\n const flattened = Array.isArray(items[0])\n ? (items as UccxItem[][]).flat()\n : (items as unknown as UccxItem[]);\n return flattened.filter(Boolean);\n }\n\n /** The same entity can be carried by more than one batch. */\n private dedupeItems(items: UccxItem[]): UccxItem[] {\n const seen = new Set<string>();\n return items.filter(item => {\n const key = `${item.type}::${item.name}::${item.sourceUCCXIp}`;\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n }\n\n private groupEntities(items: UccxItem[]): ContactCenterEntityGroup[] {\n const remaining = new Map<string, string[]>();\n items.forEach(item => {\n const names = remaining.get(item.type) ?? [];\n names.push(item.name);\n remaining.set(item.type, names);\n });\n\n const groups: ContactCenterEntityGroup[] = OVERVIEW_ENTITY_GROUPS.map(group => {\n const collected: string[] = [];\n group.types.forEach(type => {\n collected.push(...(remaining.get(type) ?? []));\n remaining.delete(type);\n });\n return { label: group.label, items: collected };\n });\n\n // Anything the backend returned that has no group of its own keeps its raw\n // type as a label, rather than being dropped from the overview.\n remaining.forEach((names, type) => groups.push({ label: type, items: names }));\n\n return groups;\n }\n\n private toContactCenters(\n applications: UccxApplication[],\n callFlows: CallFlowMigrationStatus[]\n ): ContactCenter[] {\n return applications\n .filter(application => !!application?.name)\n .map(application => {\n const uccxIp = application.uccx?.host;\n const scriptName = this.toScriptName(application);\n const compatibilityStatus = this.resolveCompatibility(application);\n\n const contactCenter: ContactCenter = {\n // UCCX identifies an application by name - it is what the entity\n // records link back to - so it doubles as the widget's key.\n applicationId: application.name,\n applicationName: application.name,\n scriptName,\n uccxIp,\n compatibilityStatus,\n migrationState: this.resolveMigrationState(application, scriptName, uccxIp, callFlows),\n // Per the ticket, \"requires review\" is exactly the set that can go\n // to either destination.\n customerAssistCapable: compatibilityStatus === 'requires-review'\n };\n\n return contactCenter;\n });\n }\n\n /** UCCX wraps the backing script as `SCRIPT[Foo.aef]`; the widget shows `Foo.aef`. */\n private toScriptName(application: UccxApplication): string {\n const raw = application.scriptName ?? application.aefFiles?.[0] ?? '';\n return raw.replace(/^SCRIPT\\[(.*)\\]$/, '$1');\n }\n\n /**\n * Whether Tuki has already imported this contact center.\n *\n * The application record carries its own `migrationStatus`, but it is null\n * throughout dev2, so this falls back to the per-AEF-script call-flow state.\n */\n private resolveMigrationState(\n application: UccxApplication,\n scriptName: string,\n uccxIp: string | undefined,\n callFlows: CallFlowMigrationStatus[]\n ): ContactCenter['migrationState'] {\n if (application.migrationStatus) {\n return application.migrationStatus === CALL_FLOW_MIGRATED ? 'migrated' : 'not-migrated';\n }\n\n const callFlow = callFlows.find(flow =>\n flow.scriptName === scriptName && (!uccxIp || flow.uccxIp === uccxIp));\n\n return callFlow?.status === CALL_FLOW_MIGRATED ? 'migrated' : 'not-migrated';\n }\n\n /**\n * Turns an AEF compatibility score into a status.\n *\n * The scoring API does not exist yet - the AEF step mapping is still a pending\n * input on the ticket - so when the backend sends no score every contact center\n * falls back to \"requires review\": the status that offers both destinations and\n * claims nothing about compatibility we have not actually measured.\n *\n * Once the backend returns `compatibilityScore`, the thresholds below take over\n * with no further change here.\n */\n private resolveCompatibility(application: UccxApplication): ContactCenterCompatibilityStatus {\n const score = (application as { compatibilityScore?: number }).compatibilityScore;\n\n if (typeof score !== 'number') {\n return 'requires-review';\n }\n if (score >= COMPATIBILITY_THRESHOLDS.migratable) {\n return 'migratable';\n }\n if (score >= COMPATIBILITY_THRESHOLDS.requiresReview) {\n return 'requires-review';\n }\n return 'unsupported';\n }\n\n private asArray<T>(value: unknown): T[] {\n return Array.isArray(value) ? value as T[] : [];\n }\n}\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, inject } from '@angular/core';\nimport { ApexChart, ApexDataLabels, ApexLegend, ApexNonAxisChartSeries, ApexPlotOptions, ApexStates, ApexTooltip } from 'ng-apexcharts';\nimport { Subscription, catchError, finalize, of } from 'rxjs';\nimport { CcImportService } from '../../cc-import.service';\nimport { CHART_COLORS, IMPORT_PANEL_SLICES, IMPORT_PANEL_TITLE, IMPORT_PANEL_TOOLTIP } from '../../constants/cc-import.constants';\nimport { ContactCenter, ImportPanelSegment } from '../../types/cc-import';\n\ninterface PanelChartOptions {\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 states: ApexStates;\n}\n\n/**\n * \"Import Contact center\" panel: how many UCCX contact centers were detected, how many\n * have been imported, and an Import button that asks the host to open the import wizard.\n */\n@Component({\n selector: 'cc-import-contact-center-panel',\n templateUrl: './import-contact-center-panel.component.html',\n styleUrls: ['./import-contact-center-panel.component.scss']\n})\nexport class ImportContactCenterPanelComponent implements OnInit, OnChanges, OnDestroy {\n @Input() customerId!: number;\n @Input() host!: string;\n /** Base URL of the dcp host, which serves the UCCX application list. */\n @Input() dcpHost!: string;\n @Input() token!: string;\n /** Serve mock data instead of calling the UCCX migration API. */\n @Input() useMockData = true;\n\n /**\n * Asked for the import wizard, carrying the contact centers already loaded here so\n * the wizard opens without refetching them. The host renders\n * `cc-import-contact-center-wizard` as a page in response.\n */\n @Output() importRequested = new EventEmitter<ContactCenter[]>();\n\n private readonly ccImportService = inject(CcImportService);\n private subscription?: Subscription;\n\n readonly title = IMPORT_PANEL_TITLE;\n readonly tooltip = IMPORT_PANEL_TOOLTIP;\n\n segments: ImportPanelSegment[] = [];\n chartOptions!: PanelChartOptions;\n total = 0;\n loading = false;\n error = false;\n\n private contactCenters: ContactCenter[] = [];\n\n ngOnInit(): void {\n // Render an empty donut up front so the template never reads unset chart options,\n // including when load() bails out because the widget has no credentials yet.\n this.buildViewModel();\n this.load();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const reloadTriggers = ['customerId', 'host', 'dcpHost', 'token', 'useMockData'];\n if (reloadTriggers.some(input => changes[input] && !changes[input].firstChange)) {\n this.load();\n }\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n }\n\n onImport(): void {\n this.importRequested.emit(this.contactCenters);\n }\n\n /** Call after an import has run so the donut picks up the new counts. */\n refresh(): void {\n this.load();\n }\n\n private load(): void {\n const customerId = Number(this.customerId);\n this.ccImportService.useMockData = this.useMockData;\n\n if (!this.useMockData && (!customerId || !this.token)) {\n return;\n }\n\n if (this.host) {\n this.ccImportService.setHost(this.host);\n }\n if (this.dcpHost) {\n this.ccImportService.setDcpHost(this.dcpHost);\n }\n if (this.token) {\n this.ccImportService.setToken(this.token);\n }\n\n this.subscription?.unsubscribe();\n this.loading = true;\n this.error = false;\n\n this.subscription = this.ccImportService.fetchContactCenters(customerId)\n .pipe(\n catchError(error => {\n console.error('Unable to load the contact centers', error);\n this.error = true;\n return of<ContactCenter[]>([]);\n }),\n finalize(() => this.loading = false)\n )\n .subscribe(contactCenters => {\n this.contactCenters = contactCenters;\n this.buildViewModel();\n });\n }\n\n private buildViewModel(): void {\n this.total = this.contactCenters.length;\n\n this.segments = IMPORT_PANEL_SLICES.map(slice => {\n const count = this.contactCenters.filter(slice.match).length;\n return {\n label: slice.label,\n color: slice.color,\n tooltip: slice.tooltip,\n count,\n percentage: this.total > 0 ? Math.round((count / this.total) * 100) : 0\n };\n });\n\n this.chartOptions = this.buildChartOptions();\n }\n\n private buildChartOptions(): PanelChartOptions {\n const charted = this.segments.filter(segment => segment.count > 0);\n const isEmpty = charted.length === 0;\n\n return {\n series: isEmpty ? [1] : charted.map(segment => segment.count),\n labels: isEmpty ? ['No contact centers'] : charted.map(segment => segment.label),\n colors: isEmpty ? [CHART_COLORS.webexContactCenter] : charted.map(segment => segment.color),\n chart: {\n type: 'donut',\n height: 150,\n width: 150,\n sparkline: { enabled: true }\n },\n legend: { show: false },\n plotOptions: {\n pie: {\n expandOnClick: false,\n donut: { size: '72%' }\n }\n },\n dataLabels: { enabled: false },\n tooltip: { enabled: !isEmpty },\n states: {\n active: { filter: { type: 'none', value: 0 } }\n }\n };\n }\n}\n","<tk-card [title]=\"title\" [dense]=\"true\">\n <ng-container ngProjectAs=\"card-title-adornment\">\n <span class=\"cc-import-panel__info\" [matTooltip]=\"tooltip\">\n <ng-container *ngTemplateOutlet=\"infoIcon\"></ng-container>\n </span>\n </ng-container>\n\n <ng-container ngProjectAs=\"card-content\">\n <div class=\"cc-import-panel__body\" *ngIf=\"!loading && !error; else panelState\">\n <div class=\"cc-import-panel__chart\">\n <apx-chart\n [series]=\"chartOptions.series\"\n [chart]=\"chartOptions.chart\"\n [labels]=\"chartOptions.labels\"\n [colors]=\"chartOptions.colors\"\n [legend]=\"chartOptions.legend\"\n [plotOptions]=\"chartOptions.plotOptions\"\n [dataLabels]=\"chartOptions.dataLabels\"\n [tooltip]=\"chartOptions.tooltip\"\n [states]=\"chartOptions.states\"\n ></apx-chart>\n <div class=\"cc-import-panel__chart-center\">\n <span class=\"cc-import-panel__chart-total\">{{ total | number }}</span>\n <span class=\"cc-import-panel__chart-caption\">Contact Center</span>\n </div>\n </div>\n\n <ul class=\"cc-import-panel__legend\">\n <li class=\"cc-import-panel__legend-item\" *ngFor=\"let segment of segments\">\n <span class=\"cc-import-panel__legend-marker\" [style.backgroundColor]=\"segment.color\"></span>\n <span class=\"cc-import-panel__legend-label\">{{ segment.label }}</span>\n <span class=\"cc-import-panel__info\" [matTooltip]=\"segment.tooltip\">\n <ng-container *ngTemplateOutlet=\"infoIcon\"></ng-container>\n </span>\n <span class=\"cc-import-panel__legend-value\">{{ segment.count | number }} ({{ segment.percentage }}%)</span>\n </li>\n </ul>\n </div>\n\n <ng-template #panelState>\n <div class=\"cc-import-panel__state\" *ngIf=\"loading\">Loading contact centers…</div>\n <div class=\"cc-import-panel__state cc-import-panel__state--error\" *ngIf=\"!loading && error\">\n Unable to load contact centers.\n </div>\n </ng-template>\n\n <div class=\"cc-import-panel__actions\">\n <button\n type=\"button\"\n class=\"cc-import-panel__button\"\n [disabled]=\"loading || error\"\n (click)=\"onImport()\"\n >\n Import\n </button>\n </div>\n </ng-container>\n</tk-card>\n\n<ng-template #infoIcon>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"6.5\" stroke=\"currentColor\" stroke-width=\"1.2\" />\n <path d=\"M8 7.2v4\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n <circle cx=\"8\" cy=\"5\" r=\"0.85\" fill=\"currentColor\" />\n </svg>\n</ng-template>\n","/** The wizard's steps, in order. Index-aligned with the `mat-stepper` steps. */\nexport const IMPORT_WIZARD_STEPS = ['select', 'overview'] as const;\n\nexport type ImportWizardStepId = typeof IMPORT_WIZARD_STEPS[number];\n","import { Component, EventEmitter, Input, OnChanges, OnDestroy, OnInit, Output, SimpleChanges, ViewEncapsulation, inject } from '@angular/core';\nimport { StepperSelectionEvent } from '@angular/cdk/stepper';\nimport { MatStepper } from '@angular/material/stepper';\nimport { Subscription, catchError, finalize, of } from 'rxjs';\nimport { CcImportService } from '../../cc-import.service';\nimport { CUSTOMER_ASSIST_MARKER_TOOLTIP, CUSTOMER_ASSIST_NOTICE, IMPORT_WIZARD_TITLE } from '../../constants/cc-import.constants';\nimport { ContactCenter, ContactCenterEntityGroup, ImportResult } from '../../types/cc-import';\nimport { IMPORT_WIZARD_STEPS, ImportWizardStepId } from './import-contact-center-wizard.types';\n\n/**\n * Full-page \"Import contact center\" wizard: pick a UCCX contact center, review the\n * entities Tuki will create for it, then start the import.\n *\n * Rendered as a page by the host app (like `tk-user-creation-wizard`), not as a dialog -\n * the host swaps it in when the panel's Import button is pressed and swaps it back out\n * on `cancel` / `imported`.\n */\n@Component({\n selector: 'cc-import-contact-center-wizard',\n templateUrl: './import-contact-center-wizard.component.html',\n styleUrls: ['./import-contact-center-wizard.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class ImportContactCenterWizardComponent implements OnInit, OnChanges, OnDestroy {\n @Input() title = IMPORT_WIZARD_TITLE;\n @Input() customerId!: number;\n @Input() host!: string;\n /** Base URL of the dcp host, which serves the UCCX application list. */\n @Input() dcpHost!: string;\n @Input() token!: string;\n /** Serve mock data instead of calling the UCCX migration API. */\n @Input() useMockData = true;\n /**\n * Contact centers the caller has already loaded (the panel has them), so the wizard\n * opens without a second round trip. Left unset, the wizard fetches them itself.\n */\n @Input() contactCenters: ContactCenter[] | null = null;\n\n @Output() cancel = new EventEmitter<void>();\n @Output() imported = new EventEmitter<ImportResult>();\n\n private readonly ccImportService = inject(CcImportService);\n private subscriptions = new Subscription();\n\n readonly customerAssistNotice = CUSTOMER_ASSIST_NOTICE;\n readonly customerAssistMarkerTooltip = CUSTOMER_ASSIST_MARKER_TOOLTIP;\n\n selectedIndex = 0;\n\n /** Contact centers awaiting review - the ones there is something to import. */\n options: ContactCenter[] = [];\n /** `options` narrowed by the picker's search box. */\n filteredOptions: ContactCenter[] = [];\n searchTerm = '';\n selected: ContactCenter | null = null;\n noticeDismissed = false;\n loading = false;\n error = false;\n\n entityGroups: ContactCenterEntityGroup[] = [];\n /** Which entity group the Overview step's tab bar is showing. */\n activeGroupIndex = 0;\n entitiesLoading = false;\n entitiesError = false;\n\n importing = false;\n importError = false;\n\n ngOnInit(): void {\n this.load();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n const reloadTriggers = ['customerId', 'host', 'dcpHost', 'token', 'useMockData', 'contactCenters'];\n if (reloadTriggers.some(input => changes[input] && !changes[input].firstChange)) {\n this.load();\n }\n }\n\n ngOnDestroy(): void {\n this.subscriptions.unsubscribe();\n }\n\n get canGoNext(): boolean {\n return !!this.selected;\n }\n\n /** The Customer Assist advisory, until the user dismisses it or picks something else. */\n get showCustomerAssistNotice(): boolean {\n return !!this.selected?.customerAssistCapable && !this.noticeDismissed;\n }\n\n get canImport(): boolean {\n return !!this.selected && !this.importing && !this.entitiesLoading && !this.entitiesError;\n }\n\n onCancel(): void {\n this.cancel.emit();\n }\n\n onSelect(applicationId: string): void {\n const selected = this.options.find(option => option.applicationId === applicationId) ?? null;\n if (selected === this.selected) {\n return;\n }\n\n this.selected = selected;\n this.noticeDismissed = false;\n // Entities belong to the previously selected contact center - drop them so the\n // overview step refetches for the new one.\n this.entityGroups = [];\n this.activeGroupIndex = 0;\n this.entitiesError = false;\n }\n\n get activeGroup(): ContactCenterEntityGroup | undefined {\n return this.entityGroups[this.activeGroupIndex];\n }\n\n selectGroup(index: number): void {\n this.activeGroupIndex = index;\n }\n\n dismissNotice(): void {\n this.noticeDismissed = true;\n }\n\n onSearch(event: Event): void {\n this.searchTerm = (event.target as HTMLInputElement).value;\n this.filter();\n }\n\n /** Resets the search box each time the picker's panel is closed. */\n onPanelToggle(opened: boolean): void {\n if (!opened && this.searchTerm) {\n this.searchTerm = '';\n this.filter();\n }\n }\n\n onStepSelectionChange(event: StepperSelectionEvent): void {\n this.selectedIndex = event.selectedIndex;\n\n if (this.stepIdAt(event.selectedIndex) === 'overview') {\n this.loadEntities();\n }\n }\n\n onNext(stepper: MatStepper): void {\n if (this.canGoNext) {\n stepper.next();\n }\n }\n\n onPrevious(stepper: MatStepper): void {\n stepper.previous();\n }\n\n runImport(): void {\n if (!this.selected || this.importing) {\n return;\n }\n\n this.importing = true;\n this.importError = false;\n\n this.subscriptions.add(\n this.ccImportService.importContactCenter(Number(this.customerId), this.selected.applicationId)\n .pipe(\n catchError(error => {\n console.error('Unable to start the contact-center import', error);\n this.importError = true;\n return of<ImportResult | null>(null);\n }),\n finalize(() => this.importing = false)\n )\n .subscribe(result => {\n if (result) {\n this.imported.emit(result);\n }\n })\n );\n }\n\n private stepIdAt(index: number): ImportWizardStepId | undefined {\n return IMPORT_WIZARD_STEPS[index];\n }\n\n private load(): void {\n this.ccImportService.useMockData = this.useMockData;\n\n if (this.host) {\n this.ccImportService.setHost(this.host);\n }\n if (this.dcpHost) {\n this.ccImportService.setDcpHost(this.dcpHost);\n }\n if (this.token) {\n this.ccImportService.setToken(this.token);\n }\n\n if (this.contactCenters) {\n this.setOptions(this.contactCenters);\n return;\n }\n\n const customerId = Number(this.customerId);\n if (!this.useMockData && (!customerId || !this.token)) {\n return;\n }\n\n this.loading = true;\n this.error = false;\n\n this.subscriptions.add(\n this.ccImportService.fetchContactCenters(customerId)\n .pipe(\n catchError(error => {\n console.error('Unable to load the contact centers', error);\n this.error = true;\n return of<ContactCenter[]>([]);\n }),\n finalize(() => this.loading = false)\n )\n .subscribe(contactCenters => this.setOptions(contactCenters))\n );\n }\n\n private setOptions(contactCenters: ContactCenter[]): void {\n // Left in source order on purpose - the picker shows them the way the backend\n // (and the mock) hands them over, not alphabetically.\n //\n // Eligible for a Webex Contact Center import: not imported yet, and either\n // unsupported on Customer Assist or reviewable for full feature coverage.\n this.options = contactCenters.filter(contactCenter =>\n contactCenter.migrationState !== 'migrated'\n && (contactCenter.compatibilityStatus === 'unsupported'\n || contactCenter.compatibilityStatus === 'requires-review'));\n\n // A contact center selected before a reload may no longer be importable.\n if (this.selected && !this.options.some(option => option.applicationId === this.selected?.applicationId)) {\n this.selected = null;\n this.entityGroups = [];\n this.activeGroupIndex = 0;\n }\n\n this.filter();\n }\n\n private filter(): void {\n const needle = this.searchTerm.trim().toLowerCase();\n this.filteredOptions = needle\n ? this.options.filter(option => option.applicationName.toLowerCase().includes(needle))\n : this.options;\n }\n\n private loadEntities(): void {\n if (!this.selected || this.entityGroups.length || this.entitiesLoading) {\n return;\n }\n\n this.entitiesLoading = true;\n this.entitiesError = false;\n\n this.subscriptions.add(\n this.ccImportService.fetchContactCenterEntities(Number(this.customerId), this.selected)\n .pipe(\n catchError(error => {\n console.error('Unable to load the contact-center entities', error);\n this.entitiesError = true;\n return of(null);\n }),\n finalize(() => this.entitiesLoading = false)\n )\n .subscribe(entities => {\n this.entityGroups = entities ? entities.groups : [];\n this.activeGroupIndex = 0;\n })\n );\n }\n}\n","<div class=\"move-user-stepper-container\" [attr.aria-busy]=\"importing\">\n <header class=\"move-user-header\">\n <div class=\"move-user-header__title\">{{ title }}</div>\n <div class=\"move-user-header__close\">\n <span class=\"app-icon cc-import-close-icon\" (click)=\"onCancel()\" role=\"button\" aria-label=\"Close\">\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"1.7\" stroke-linecap=\"round\" />\n </svg>\n </span>\n </div>\n </header>\n\n <div id=\"cc-import-stepper\">\n <mat-stepper\n #stepper\n [linear]=\"true\"\n labelPosition=\"bottom\"\n [selectedIndex]=\"selectedIndex\"\n (selectionChange)=\"onStepSelectionChange($event)\"\n >\n\n <!-- Step 1: pick the UCCX contact center -->\n <mat-step [completed]=\"canGoNext\">\n <ng-template matStepLabel>Select</ng-template>\n\n <div class=\"cc-import-notice\" *ngIf=\"showCustomerAssistNotice\" role=\"status\">\n <span class=\"cc-import-notice__icon\" aria-hidden=\"true\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" fill=\"currentColor\" />\n <path d=\"M8 7.1v4.2\" stroke=\"#fff\" stroke-width=\"1.5\" stroke-linecap=\"round\" />\n <circle cx=\"8\" cy=\"4.8\" r=\"0.9\" fill=\"#fff\" />\n </svg>\n </span>\n <span class=\"cc-import-notice__text\">{{ customerAssistNotice }}</span>\n <button type=\"button\" class=\"cc-import-notice__close\" aria-label=\"Dismiss\" (click)=\"dismissNotice()\">\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 24 24\" fill=\"none\" aria-hidden=\"true\">\n <path d=\"M5 5L19 19M19 5L5 19\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" />\n </svg>\n </button>\n </div>\n\n <div class=\"step-title\">Step 1: Select contact center</div>\n\n <div class=\"move-user-tab-content-box\">\n <div class=\"cc-import-state\" *ngIf=\"loading\">Loading contact centers…</div>\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"!loading && error\">\n Unable to load contact centers.\n </div>\n\n <section class=\"cc-import-step-content\" *ngIf=\"!loading && !error\">\n <div class=\"cc-import-field\">\n <label class=\"cc-import-label\" for=\"cc-import-contact-center\">Contact center</label>\n\n <mat-form-field class=\"cc-import-select\" appearance=\"outline\">\n <mat-select\n id=\"cc-import-contact-center\"\n panelClass=\"cc-import-select-panel\"\n placeholder=\"Select contact center\"\n [disableOptionCentering]=\"true\"\n [value]=\"selected?.applicationId ?? null\"\n (selectionChange)=\"onSelect($event.value)\"\n (openedChange)=\"onPanelToggle($event)\"\n >\n <mat-select-trigger>{{ selected?.applicationName }}</mat-select-trigger>\n\n <!-- Search box pinned above the options. Keystrokes are stopped here so\n mat-select's own typeahead does not steal them. -->\n <div class=\"cc-import-select-search\" (click)=\"$event.stopPropagation()\">\n <span class=\"cc-import-select-search__icon\" aria-hidden=\"true\">\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"7\" cy=\"7\" r=\"4.6\" stroke=\"currentColor\" stroke-width=\"1.4\" />\n <path d=\"M10.6 10.6L14 14\" stroke=\"currentColor\" stroke-width=\"1.4\" stroke-linecap=\"round\" />\n </svg>\n </span>\n <input\n class=\"cc-import-select-search__input\"\n type=\"text\"\n autocomplete=\"off\"\n placeholder=\"Search\"\n aria-label=\"Search contact centers\"\n [value]=\"searchTerm\"\n (input)=\"onSearch($event)\"\n (keydown)=\"$event.stopPropagation()\"\n />\n </div>\n\n <mat-option *ngFor=\"let option of filteredOptions\" [value]=\"option.applicationId\">\n <div class=\"option-row\">\n <span class=\"name\">{{ option.applicationName }}</span>\n <span\n class=\"cc-import-option-marker\"\n *ngIf=\"option.customerAssistCapable\"\n [matTooltip]=\"customerAssistMarkerTooltip\"\n aria-hidden=\"true\"\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 16 16\" fill=\"none\">\n <path d=\"M8 2.2 14.6 13.4H1.4L8 2.2Z\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linejoin=\"round\" />\n <path d=\"M8 6.5v3\" stroke=\"currentColor\" stroke-width=\"1.2\" stroke-linecap=\"round\" />\n <circle cx=\"8\" cy=\"11.3\" r=\"0.7\" fill=\"currentColor\" />\n </svg>\n </span>\n </div>\n </mat-option>\n </mat-select>\n </mat-form-field>\n\n <p class=\"cc-import-empty\" *ngIf=\"!options.length\">\n Every detected contact center has already been imported.\n </p>\n </div>\n </section>\n </div>\n </mat-step>\n\n <!-- Step 2: the entities Tuki will create for it -->\n <mat-step>\n <ng-template matStepLabel>Overview</ng-template>\n\n <div class=\"step-title\">Overview</div>\n\n <div class=\"move-user-tab-content-box\">\n <h3 class=\"cc-import-card-title\">Review Contact Center Settings</h3>\n <p class=\"cc-import-card-text\">\n Review the settings for your new Contact center to make sure everything is correct.<br />\n You can make changes at any time by clicking on the name of the contact center on the dedicated page.\n </p>\n\n <div class=\"cc-import-state\" *ngIf=\"entitiesLoading\">Loading entities…</div>\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"entitiesError\">\n Unable to load the related entities.\n </div>\n\n <ng-container *ngIf=\"!entitiesLoading && !entitiesError && entityGroups.length\">\n <div class=\"cc-import-tabs\" role=\"tablist\">\n <button\n type=\"button\"\n class=\"cc-import-tab\"\n *ngFor=\"let group of entityGroups; index as i\"\n role=\"tab\"\n [attr.aria-selected]=\"i === activeGroupIndex\"\n [class.cc-import-tab--active]=\"i === activeGroupIndex\"\n (click)=\"selectGroup(i)\"\n >\n {{ group.label }}\n </button>\n </div>\n\n <ul class=\"cc-import-items\" role=\"tabpanel\">\n <li class=\"cc-import-item\" *ngFor=\"let item of activeGroup?.items\">{{ item }}</li>\n <li class=\"cc-import-item cc-import-item--empty\" *ngIf=\"!activeGroup?.items?.length\">\n Nothing to create for {{ activeGroup?.label }}.\n </li>\n </ul>\n </ng-container>\n\n <div class=\"cc-import-state cc-import-state--error\" *ngIf=\"importError\">\n Unable to start the import. Please try again.\n </div>\n </div>\n </mat-step>\n </mat-stepper>\n\n <div class=\"wizard-actions\">\n <ng-container [ngSwitch]=\"stepper.selectedIndex\">\n <ng-container *ngSwitchCase=\"0\">\n <button\n mat-button\n class=\"uc-btn uc-btn-primary\"\n type=\"button\"\n [disabled]=\"!canGoNext\"\n (click)=\"onNext(stepper)\"\n >\n Next\n </button>\n <button mat-button class=\"uc-btn uc-btn-secondary\" type=\"button\" (click)=\"onCancel()\">\n Cancel\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"1\">\n <button\n mat-button\n class=\"uc-btn uc-btn-primary\"\n type=\"button\"\n [disabled]=\"!canImport\"\n (click)=\"runImport()\"\n >\n <span class=\"uc-btn__inline-content\">\n <span class=\"uc-btn__spinner\" *ngIf=\"importing\" aria-hidden=\"true\"></span>\n <span>{{ importing ? 'Importing...' : 'Import' }}</span>\n </span>\n </button>\n <button\n mat-button\n class=\"uc-btn uc-btn-secondary\"\n type=\"button\"\n [disabled]=\"importing\"\n (click)=\"onPrevious(stepper)\"\n >\n Previous\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"wizard-loading-overlay\" [class.wizard-loading-overlay--visible]=\"importing\" aria-hidden=\"true\"></div>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { HttpClientModule } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { NgApexchartsModule } from 'ng-apexcharts';\nimport { SharedModule } from '../shared/shared.module';\nimport { ImportContactCenterPanelComponent } from './components/import-contact-center-panel/import-contact-center-panel.component';\nimport { ImportContactCenterWizardComponent } from './components/import-contact-center-wizard/import-contact-center-wizard.component';\n\n@NgModule({\n declarations: [\n ImportContactCenterPanelComponent,\n ImportContactCenterWizardComponent\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n NgApexchartsModule,\n MatStepperModule,\n SharedModule\n ],\n exports: [\n ImportContactCenterPanelComponent,\n ImportContactCenterWizardComponent\n ]\n})\nexport class CcImportModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i2","i4.CardComponent","i2.CardComponent","i1.WxCC2GraphService","i2.WxCCActivityManageService","i3","i2.CytoscapeViewportService","i4.WxCCActivityCreationService","i5","i6","i7.FloatingToolBarComponent","i8.NodeDetailsSidebarComponent","i9.NodeActionToolbarComponent","i10.NodeSearchPanelComponent","i1.APIService","i4","finalize","i1.WxCCAPIService","i2.WxCC2GraphService","i5.WxCCFlowchartComponent","i6.WxCCFileSelectionBarComponent","i7.WxCCActionsBarComponent","i7"],"mappings":"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"}
|