@tuki-io/tuki-widgets 0.0.80 → 0.0.82
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/di2mt/shared/components/chart-card/chart-card.component.d.ts +1 -0
- package/esm2020/di2mt/shared/components/chart-card/chart-card.component.mjs +7 -3
- package/esm2020/di2mt/shared/components/table-filters/table-filters.component.mjs +2 -2
- 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/site-infrastructure-status-list/site-infrastructure-status-list-card.component.mjs +3 -3
- package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +14 -10
- package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +14 -10
- package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuki-io-tuki-widgets-di2mt.mjs","sources":["../../../../projects/tuki/widgets/di2mt/api/api.endpoints.ts","../../../../projects/tuki/widgets/di2mt/shared/services/api.service.ts","../../../../projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.service.ts","../../../../projects/tuki/widgets/di2mt/shared/types/constants.ts","../../../../projects/tuki/widgets/di2mt/shared/constants/app.constants.ts","../../../../projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.html","../../../../projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.html","../../../../projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.html","../../../../projects/tuki/widgets/di2mt/shared/components/card/card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/card/card.component.html","../../../../projects/tuki/widgets/di2mt/shared/material.module.ts","../../../../projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.html","../../../../projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.html","../../../../projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.html","../../../../projects/tuki/widgets/di2mt/shared/shared.module.ts","../../../../projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.module.ts","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.service.ts","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.html","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.html","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.module.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.service.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.html","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.html","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.module.ts","../../../../projects/tuki/widgets/di2mt/public-api.ts","../../../../projects/tuki/widgets/di2mt/tuki-io-tuki-widgets-di2mt.ts"],"sourcesContent":["export const API = {\r\n OVERVIEW: {\r\n GET_UPGRADE_PRECONDITIONS: '/api/webex-upgrade/customers/:customerId/preconditions/fetch',\r\n GET_SITE_INFRASTRUCTURE: '/api/webex-upgrade/customers/:customerId/infra/fetch',\r\n GET_USERS_UPGRADE_SUMMARY: '/api/webex-upgrade/customers/:customerId/users/upgrade/fetch',\r\n GET_SITES_UPGRADE_SUMMARY: '/api/webex-upgrade/customers/:customerId/sites/upgrade/fetch',\r\n GET_USERS_UPGRADE_READINESS: '/api/webex-upgrade/customers/:customerId/users/readiness/fetch',\r\n GET_SITES_UPGRADE_READINESS: '/api/webex-upgrade/customers/:customerId/sites/readiness/fetch'\r\n },\r\n USER_UPGRADE: {\r\n GET_USERS_UPGRADE_DATA: '/api/webex-upgrade/customers/:customerId/user-upgrade',\r\n GET_USERS_UPGRADE_STATUS_COUNTS: '/api/webex-upgrade/customers/:customerId/user-upgrades/status-counts',\r\n UPGRADE_USER: '/api/migration/webex/sites/:siteId/users/:userId',\r\n SINGLE_COLLECT: '/api/migration/webex/singlecollect/features/:featureName',\r\n SINGLE_MIGRATION: '/api/migration/webex/singlemigration/features/:featureName',\r\n UPGRADE_STATUS: '/api/webex-upgrade/customers/:customerId/users/upgrade-status'\r\n },\r\n SITE_UPGRADE: {\r\n GET_SITES_UPGRADE_DATA: '/api/webex-upgrade/customers/:customerId/site-upgrades',\r\n GET_SITES_UPGRADE_STATUS_COUNTS: '/api/webex-upgrade/customers/:customerId/site-upgrades/status-counts',\r\n WEBEX_CACHE_COLLECTION: '/api/migration/:migrationType/sites/:siteId/collectbuildwebexcache',\r\n UPGRADE_SITE: '/api/migration/webex/sites/:siteId',\r\n WEBEX_BATCH_STATUS: \"/api/migration/webex/customer/:customerId/batchesstatus\",\r\n MIGRATE_SITE: \"/api/migration/webex/sites/:siteId/migrate\",\r\n BATCH_STATUS: \"/api/e2emigration/batches-status/:customerId\",\r\n GET_BATCH_SITES: \"/api/e2emigration/batch/:customerId/Sites\",\r\n WEBEX_CACHE_COLLECTION_SITE_LIST: \"/api/migration/webex/customers/:customerId/sitelistforcollectbuildwebexcache\",\r\n WEBEX_CACHE_COLLECTION_CUCM_LIST: \"/api/migration/webex/customers/:customerId/cucmlistforcollectbuildwebexcache\",\r\n MIGRATION_STATUS: \"/api/migration/state/webex/customers/:customerId/migrationstatus\"\r\n }\r\n};\r\n","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\n public token: any;\r\n apiUrl = window.location.protocol + '//' + window.location.hostname + '/dcp';\r\n constructor(\r\n private httpClient: HttpClient\r\n ) {\r\n this.token = 'eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbkBjb3JyZW5ldC5jb20iLCJyb2xlcyI6IlNVUEVSX1VTRVIiLCJpYXQiOjE3NTUwODUyMzgsImV4cCI6MTc1NTEwMzIzOH0.X1CKx-OBZvSs7Bzr_4SWW2ulBgHNkYZrmVuv6V7FZyo'\r\n // this.apiUrl = window.location.protocol + '//' + window.location.host + '/dcp';\r\n this.apiUrl = 'https://dev.tuki.io/webex';\r\n // this.apiUrl = 'http://localhost:8088/dcp';\r\n }\r\n\r\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n const headers = this.getHeaders(cache);\r\n params = params || {};\r\n return this.httpClient.get(this.apiUrl + url, {params: this.prepareEncodedParams(params), headers});\r\n }\r\n\r\n post(url: string, body: any, params = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {params: this.prepareEncodedParams(params), headers});\r\n }\r\n\r\n // use when response extended data is necessary:\r\n postExtended(url: string, body = null, params = {}, headers = {}) {\r\n headers = headers || this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {\r\n headers,\r\n observe: 'response',\r\n params: this.prepareEncodedParams(params)\r\n });\r\n }\r\n\r\n put(url: string, body = null, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.put(this.apiUrl + url, body, {headers, params: this.prepareEncodedParams(params)});\r\n }\r\n\r\n delete(url: string, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.delete(this.apiUrl + url, {headers, params: this.prepareEncodedParams(params)});\r\n }\r\n\r\n fetchPagination(url: string, pageSize: number, pageNumber: number, additionalParams = {}, cache?: boolean): Observable<any> {\r\n const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));\r\n const params = Object.assign(copyAdditionalParams, {size: pageSize.toString(), page: pageNumber.toString()});\r\n return this.fetch(url, params, cache) as Observable<any>;\r\n }\r\n\r\n private prepareEncodedParams(params: any) {\r\n const result: any = {};\r\n\r\n if (!params) {\r\n return {};\r\n }\r\n for (const key of Object.keys(params)) {\r\n if (params[key]) {\r\n const stringParam = params[key].toString();\r\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private getHeaders(cache?: boolean): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n if (cache) {\r\n headers = headers.append('_Cache', 'true ');\r\n }\r\n const token = this.token || this.getParameterByName('token');\r\n headers = headers.append('Authorization', 'Bearer '+ token);\r\n return headers;\r\n }\r\n\r\n private getParameterByName(name: any, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { UserUpgradeRecord } from \"./types/user-upgrade\";\r\nimport { catchError, map, Observable, of, throwError } from \"rxjs\";\r\nimport { API } from \"../../api/api.endpoints\";\r\nimport { APIService } from \"../../shared/services/api.service\";\r\nimport { Status, UpgradeStatus } from '../../shared/types/constants';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserUpgradeService {\r\n private apiService = inject(APIService);\r\n\r\n customerId!: string;\r\n\r\n usersDataSource!: UserUpgradeRecord[];\r\n filteredUsersDataSource!: UserUpgradeRecord[];\r\n\r\n // TODO: Impl the user upgrade logic here\r\n bulkUpgrade(users: UserUpgradeRecord[]): Observable<unknown> {\r\n const body = this.generateUserUpgradeBody(users);\r\n console.log('bulkUpgrade', users);\r\n\r\n console.log(body);\r\n\r\n // This is not done yet...\r\n return this.apiService.post(\r\n API.USER_UPGRADE.SINGLE_MIGRATION.replace(':featureName', \"PERSON\"),\r\n body,\r\n {}\r\n ).pipe(catchError((err) => of(err)));\r\n }\r\n\r\n collectUsers(users: UserUpgradeRecord[]): Observable<unknown> {\r\n const body = this.generateUserUpgradeBody(users);\r\n\r\n console.log('collectUsers', body);\r\n\r\n // This is not done yet...\r\n return this.apiService.post(\r\n API.USER_UPGRADE.SINGLE_COLLECT.replace(':featureName', 'PERSON'),\r\n body,\r\n {}\r\n ).pipe(catchError((err) => of(err)));\r\n }\r\n\r\n getUsersUpgradeStatuses(users: UserUpgradeRecord[]): Observable<User2UpgradeStatusDTO[]> {\r\n const body = this.generateUserUpgradeStatusBody(users);\r\n\r\n console.log('getUsersUpgradeStatuses', body);\r\n\r\n // This is not done yet...\r\n return this.apiService.post(\r\n API.USER_UPGRADE.UPGRADE_STATUS.replace(':customerId', this.customerId),\r\n body,\r\n {}\r\n ).pipe(catchError((err) => of(err)));\r\n }\r\n\r\n\r\n generateUserUpgradeBody(users: UserUpgradeRecord[]): UserUpgradeBody {\r\n const entities = users.map(record => ({cucmId: record.cucmId, entityId: record.userId}));\r\n const customerId = users[0].customerId;\r\n\r\n return {\r\n customerId,\r\n entities: {\r\n PERSON: entities\r\n }\r\n };\r\n }\r\n\r\n generateUserUpgradeStatusBody(users: UserUpgradeRecord[]): Record<string, string[]> {\r\n const body: Record<string, string[]> = {};\r\n body[String(users[0].cucmId)] = users.map(user => String(user.userId));\r\n return body;\r\n }\r\n\r\n getUserUpgradeStatusCounts(): Observable<any> {\r\n return this.apiService.fetch(\r\n API.USER_UPGRADE.GET_USERS_UPGRADE_STATUS_COUNTS.replace(':customerId', this.customerId)\r\n );\r\n }\r\n\r\n getUserUpgradeRecords(pageSize: number, pageIndex: number): Observable<any> {\r\n return this.apiService.fetchPagination(\r\n API.USER_UPGRADE.GET_USERS_UPGRADE_DATA.replace(':customerId', this.customerId),\r\n pageSize,\r\n pageIndex\r\n );\r\n }\r\n}\r\n\r\nexport type UserUpgradeBody = {\r\n customerId: string;\r\n entities: {\r\n PERSON: { cucmId: number; entityId: string }[];\r\n };\r\n};\r\n\r\nexport class User2UpgradeStatusDTO {\r\n userId!: string;\r\n cucmId!: string;\r\n upgradeStatus!: Status | UpgradeStatus;\r\n\r\n}\r\n","export type Status = 'Ready' | 'Not Ready' | 'Partial Ready' | 'Failed' | 'Completed';\r\nexport type UpgradeStatus = 'READY' | 'NOT_READY' | 'PARTIAL_READY' | 'FAILED' | 'COMPLETED';\r\n\r\nexport const STATUS_ENTRIES: { [key: string]: Status } = {\r\n READY: 'Ready',\r\n NOT_READY: 'Not Ready',\r\n PARTIAL_READY: 'Partial Ready',\r\n FAILED: 'Failed',\r\n COMPLETED: 'Completed'\r\n};\r\n\r\nexport const DEPENDENCIES_STATUS: { [key: string]: string } = {\r\n DEPENDENCIES_FOUND: 'Dependencies found',\r\n NO_DEPENDENCIES: 'No dependencies',\r\n};\r\nexport enum UPGRADE_STATUS {\r\n NOT_READY = 'not_ready',\r\n READY = 'ready',\r\n COMPLETED = 'completed',\r\n IN_PROGRESS = 'in progress',\r\n FAILED = 'failed'\r\n}\r\n","export const API = {\r\n USER_TOKEN: '/api/provision/:siteId/users/:userId/token',\r\n UPDATE_USER_FIELDS: '/api/provision/:siteId/userFields/:token',\r\n PERSIST_USER_CACHE: '/api/provision/:siteId/saveUser/:token',\r\n USER_BY_ID: '/api/provision/:siteId/users/:userId',\r\n QUICK_USERS_SEARCH: \"/api/search/quickusers\",\r\n LOCATION: \"/api/provision/options/:siteId/locations\",\r\n USER_LOCALES: \"/api/provision/options/:siteId/userlocales\",\r\n USER_PROFILES: \"/api/provision/options/:siteId/userprofiles\",\r\n RECORDING_PROFILE: \"/api/provision/options/:siteId/recordingprofiles\",\r\n AVAILABLE_DN_IN_RANGES: \"/api/sites/:siteId/available-dn-in-ranges\",\r\n DELETE_LINE: \"/api/provision/:siteId/deleteLine/:pkid/:token\",\r\n DISASSOCIATE_LINE: \"/api/provision/:siteId/:deviceName/deleteLineAssociation/:linePkid/:token\",\r\n CHECK_DELETE_LINE: \"/api/provision/:siteId/checklinedeletion\",\r\n ASSOCIATE_LINE: \"/api/provision/:siteId/:deviceName/createLineAssociation/:token\",\r\n CHECK_DESTINATION_NUMBER: \"/api/provision/:siteId/check-dn\",\r\n UPDATE_LINE_FIELDS: \"/api/provision/:siteId/lineFields/:pkid/:token\",\r\n UPDATE_DEVICE_FIELDS: \"/api/provision/:siteId/deviceFields/:deviceName/:token\",\r\n SOFTKEY_TEMPLATES: \"/api/provision/options/:siteId/softkeytemplates\",\r\n SITE_SETTINGS: \"/api/sites/:siteId/settings\",\r\n LINE_SLOTS: \"/api/provision/:siteId/buttontemplate\",\r\n LEAN_USER_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/leanUserDetailsToken\",\r\n LEAN_USER_DEVICES_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/leanUserDevicesToken\",\r\n LEAN_USER_LINES_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/:leanUserDevicesToken/leanUserLinesToken\",\r\n LEAN_USER_SNR_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/leanUserSNRToken\",\r\n DEVICE_LINE_MONITOR_CSS: \"/api/provision/options/:siteId/callingSearchSpace\"\r\n};\r\nexport const REGEX_PATTERN = {\r\n EMAIL: '^(([^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\"]+)*)|(\".+\"))' +\r\n '@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,62}[a-zA-Z0-9])' +\r\n '?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?)*$'\r\n};\r\n\r\nexport const PAGINATION_DEFAULTS = {\r\n SIZE: 10,\r\n INDEX: 0\r\n}\r\nexport const PAGINATION_SIZE_OPTIONS = [\r\n 10,\r\n 50,\r\n 100,\r\n 500\r\n];\r\nexport const CUCS_TO_IGNORE = [\r\n 189,\r\n 194,\r\n 191,\r\n 190\r\n];\r\nexport const CUCMS_TO_IGNORE = [\r\n 249,\r\n 255,\r\n 251,\r\n 250\r\n];\r\nexport const RECORDING_MEDIA_SOURCE = [\r\n \"Gateway Preferred\",\r\n \"Phone Preferred\"\r\n];\r\nexport const STATIC_OPTIONS = {\r\n CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_ACTIVE: ['Use System Default', 'Disable', 'Beep Only'],\r\n CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_IDLE: ['Use System Default', 'Disable', 'Ring Once'],\r\n CONF_ACCESS_MODE: ['Fixed', 'Variable'],\r\n DEFAULT_ON_OFF: ['Default', 'On', 'Off'],\r\n DEFAULT_EN_DIS: ['Default', 'Enabled', 'Disabled'],\r\n DND: ['Use Common Phone Profile Setting', 'Call Reject', 'Ringer Off'],\r\n DND_INCOMING_CALL_ALLERT: ['Disable', 'Flash Only', 'Beep Only'],\r\n LATENT_CAPABILITY: ['Gateway Controlled', 'Modem Relay', 'Modem Passthrough', 'Modem Relay and Passthrough', 'None'],\r\n LINE_MODE: ['Session Line mode', 'Enhanced Line mode'],\r\n ACTIONABLE_ALERT: ['Disabled', 'Show for all Incoming Call', 'Show for Invisible Incoming Call'],\r\n MLPP_PREEMPTION: ['Default', 'Forceful', 'Disabled'],\r\n PACKET_CAPTURE_MODE: ['None', 'Batch Processing Mode'],\r\n RING_VOLUME: ['0-Silent', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'],\r\n PORT_DIRECTION: ['Bothways', 'Inbound', 'Outbound'],\r\n RING_SETTING_IDLE: ['Use System Default', 'Disable' , 'Flash Only' , 'Ring Once' , 'Ring'],\r\n RING_SETTING_ACTIVE: ['Use System Default', 'Disable' , 'Flash Only' , 'Ring Once' , 'Ring', 'Beep Only'],\r\n SERVICE_PROVISIONING: ['Default', 'Internal', 'External URL', 'Both'],\r\n SETTINGS_ACCES: ['Enabled', 'Disabled', 'Restricted'],\r\n VISUAL_MWI: ['Use System Policy', 'Light and Prompt' , 'Prompt Only' , 'Light Only' , 'None'],\r\n WEEKDAYS: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n BUILD_BRIDGE: ['None', 'On', 'Off', 'Default'],\r\n TRANSFER_TYPES: ['Release to Switch', 'Supervise Transfer'],\r\n EXTENSION_IS_BUSY_TYPES: ['Send Callers to Voicemail', 'Put Callers on Hold Without Asking', 'Ask Callers to Hold'],\r\n CALL_ACTIONS: ['Hang Up', 'Restart Greeting', 'Route From Next Call Routing Rule', 'Take Message'],\r\n AUTHENTICATION_802: ['User controlled', 'Disabled', 'Enabled'],\r\n CERTIFICATE_OPERATION: ['No Pending Operation', 'Install/Upgrade', 'Delete', 'Troubleshoot' ],\r\n AUTHENTICATION_MODE: ['By Authentication String', 'By Null String', 'By Existing Certificate (precedence to LSC)', 'By Existing Certificate (precedence to MIC)'],\r\n KEY_ORDER: ['RSA Only', 'EC Only', 'EC Preferred, RSA Backup'],\r\n RSA_KEY_SIZE: ['512', '1024', '2048'],\r\n RSA_KEY_SIZE_SPECIFIC_DEVICE: ['512', '1024', '2048', '3072', '4096']\r\n};\r\n\r\nexport const TOGGLE_TYPES = {\r\n TABS: 'TABS',\r\n ASSOCIATED_LINE_ONLY: 'ASSOCIATED_LINE_ONLY'\r\n}\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'tk-summary-card',\r\n templateUrl: './summary-card.component.html',\r\n styleUrls: ['./summary-card.component.scss']\r\n})\r\nexport class SummaryCardComponent {\r\n @Input() value: number = 41;\r\n @Input() status: string = 'Ready';\r\n @Input() description!: string;\r\n\r\n getStatusClass(status: string): string {\r\n switch (status?.toLowerCase()) {\r\n case 'ready':\r\n return 'ready';\r\n case 'not ready':\r\n return 'not-ready';\r\n case 'failed':\r\n return 'failed';\r\n case 'completed':\r\n return 'completed';\r\n default:\r\n return 'not-ready';\r\n }\r\n }\r\n}","<article class=\"summary-card\">\r\n <header class=\"summary-card__header\">\r\n <h2>{{ value }}</h2>\r\n </header>\r\n <div class=\"summary__card-description\">\r\n <span>{{ description }}</span>\r\n <div class=\"summary__card-status-wrapper\">\r\n <span class=\"summary__card-status-indicator\" [ngClass]=\"getStatusClass(status)\"></span>\r\n <span [ngClass]=\"{'status-ready': status === 'ready'}\">{{ status }}</span>\r\n </div>\r\n </div>\r\n</article>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { FilterKind, TableFilter } from \"../../types/table/filter\";\r\n\r\n@Component({\r\n selector: 'tk-table-filters',\r\n templateUrl: './table-filters.component.html',\r\n styleUrls: ['./table-filters.component.scss']\r\n})\r\nexport class TableFiltersComponent implements OnInit {\r\n @Input() filters!: TableFilter[];\r\n\r\n @Output() filter = new EventEmitter<{ key: string, value: any }>()\r\n\r\n ngOnInit(): void {\r\n if (this.filters) {\r\n this.filters.forEach(filter => {\r\n if (filter.type === 'select' && !filter.options.some(opt => opt.value === 'all')) {\r\n filter.options.unshift({ label: 'All', value: 'all' });\r\n }\r\n });\r\n }\r\n }\r\n\r\n onFilter(key: string, value: any): void {\r\n const val = { key, value };\r\n this.filter.emit(val);\r\n }\r\n}","<div class=\"filters-wrapper\">\r\n <ng-container *ngFor=\"let filter of filters\">\r\n <div class=\"filter\">\r\n <ng-container [ngSwitch]=\"filter.type\">\r\n <!-- Search Input with Material Design -->\r\n <mat-form-field *ngSwitchCase=\"'search'\" appearance=\"outline\" class=\"search-field custom-mat-form-field\">\r\n<!-- <mat-label>{{ filter.placeholder }}</mat-label>-->\r\n <input matInput\r\n [placeholder]=\"filter.placeholder\"\r\n (input)=\"onFilter(filter.columnKey, $event)\">\r\n <mat-icon matPrefix class=\"search-icon\">\r\n <img src=\"assets/icons/search_icon.png\" alt=\"Search\" />\r\n </mat-icon>\r\n </mat-form-field>\r\n\r\n <!-- Select Dropdown with Material Design -->\r\n <mat-form-field *ngSwitchCase=\"'select'\" appearance=\"outline\" class=\"select-field custom-mat-form-field\">\r\n <mat-label>{{ filter.placeholder }}</mat-label>\r\n <mat-select (selectionChange)=\"onFilter(filter.columnKey, $event)\">\r\n <mat-option *ngFor=\"let option of filter.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</div>\r\n","import { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { Component, OnInit, OnDestroy, inject, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { TableColumn } from \"../../../shared/types/data-table\";\r\nimport { TableFilter } from \"../../../shared/types/table/filter\";\r\nimport { catchError, of, Subject, Subscription } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { User2UpgradeStatusDTO, UserUpgradeService } from \"../user-upgrade.service\";\r\nimport { DEPENDENCIES_STATUS, Status, STATUS_ENTRIES } from \"../../../shared/types/constants\";\r\nimport { UserUpgradeRecord } from \"../types/user-upgrade\";\r\nimport { APIService } from \"../../../shared/services/api.service\";\r\nimport { PAGINATION_SIZE_OPTIONS } from \"../../../shared/constants/app.constants\";\r\nimport { PageEvent } from '@angular/material/paginator';\r\n\r\n@Component({\r\n selector: 'tk-user-upgrade-data-table',\r\n templateUrl: './user-upgrade-data-table.component.html',\r\n styleUrls: ['./user-upgrade-data-table.component.scss'],\r\n // encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class UserUpgradeDataTableComponent implements OnInit, OnDestroy {\r\n private destroy$ = new Subject<void>();\r\n private userUpgradeService = inject(UserUpgradeService);\r\n private apiService = inject(APIService);\r\n readonly STATUS_ENTRIES = STATUS_ENTRIES;\r\n readonly DEPENDENCIES_STATUS = DEPENDENCIES_STATUS;\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n columns!: TableColumn[];\r\n dataPending = false;\r\n data!: MatTableDataSource<UserUpgradeRecord>;\r\n displayedColumns: string[] = ['select', 'user', 'site', 'device', 'dialPlanStatus', 'dependencies', 'userUpgradeStatus', 'userUpgradeLoader'];\r\n selection = new SelectionModel<UserUpgradeRecord>(true, []);\r\n filters: TableFilter[] = [];\r\n pagination = new PaginationDataDto();\r\n users: UserUpgradeRecord[] = [];\r\n private subscriptions = new Subscription();\r\n\r\n statusCounts: any = {};\r\n\r\n private activeFilters: { [key: string]: any } = {};\r\n\r\n ngOnInit(): void {\r\n this.dataPending = true;\r\n this.apiService.token = this.token;\r\n this.userUpgradeService.customerId = this.customerId;\r\n\r\n const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((results: any) => {\r\n const records = results.content as UserUpgradeRecord[]\r\n this.data = new MatTableDataSource(records);\r\n this.pagination.total = results.totalElements;\r\n this.dataPending = false;\r\n this.setupCustomFilter();\r\n this.initializeFilters(records);\r\n });\r\n this.subscriptions.add(subsc1);\r\n\r\n const subsc2 = this.userUpgradeService.getUserUpgradeStatusCounts()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((statusCounts) => {\r\n this.statusCounts['Ready'] = statusCounts['READY'] || 0;\r\n this.statusCounts['Not Ready'] = statusCounts['NOT_READY'] || 0;\r\n this.statusCounts['Completed'] = statusCounts['COMPLETED'] || 0;\r\n this.statusCounts['Failed'] = statusCounts['FAILED'] || 0;\r\n });\r\n this.subscriptions.add(subsc2);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.dataPending = false;\r\n\r\n if (this.subscriptions) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n\r\n onMultipleDevices(user: UserUpgradeRecord): void {\r\n user.showDevices = !user.showDevices;\r\n }\r\n\r\n pageEvent (event: PageEvent): void {\r\n this.pagination.pageIndex = event.pageIndex;\r\n this.pagination.pageSize = event.pageSize;\r\n this.getData();\r\n }\r\n\r\n changePerPageNumber(pageSizeEvent: any): void {\r\n this.pagination.pageSize = pageSizeEvent.value;\r\n this.pagination.pageIndex = 0;\r\n this.getData();\r\n }\r\n\r\n private getData(): void {\r\n this.dataPending = true;\r\n const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n\r\n this.data = new MatTableDataSource(result.content);\r\n this.pagination.total = result.totalElements;\r\n this.dataPending = false;\r\n });\r\n this.subscriptions.add(subsc1);\r\n }\r\n\r\n private initializeFilters(records: any[]): void {\r\n if (records?.length) {\r\n // Extract unique sites from actual data\r\n const uniqueSites = [...new Set(records.map(record => record.siteName))];\r\n const siteOptions = uniqueSites.map(site => ({\r\n label: site,\r\n value: site.toLowerCase().replace(/\\s+/g, '-')\r\n }));\r\n\r\n // Extract unique statuses from actual data\r\n const uniqueStatuses = [...new Set(records.map(record => record.upgradeStatus))];\r\n const statusOptions = uniqueStatuses.map(status => ({\r\n label: STATUS_ENTRIES[status],\r\n value: status.toLowerCase().replace(/\\s+/g, '-')\r\n }));\r\n\r\n this.filters = [\r\n {\r\n id: 'userName',\r\n type: 'search',\r\n columnKey: 'User',\r\n placeholder: 'Search users...',\r\n options: []\r\n },\r\n {\r\n id: 'sites',\r\n type: 'select',\r\n columnKey: 'Site',\r\n placeholder: 'Sites',\r\n options: siteOptions\r\n },\r\n {\r\n id: 'status',\r\n type: 'select',\r\n columnKey: 'User Upgrade Status',\r\n placeholder: 'Upgrade Status',\r\n options: statusOptions\r\n }\r\n ];\r\n }\r\n }\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.data?.data.length ?? 0;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n // this.isAllSelected() ?\r\n // this.selection.clear() :\r\n // this.data?.data.forEach(row => this.selection.select(row));\r\n if (this.isAllSelected()) {\r\n this.selection.clear();\r\n } else {\r\n this.data?.data.forEach(row => {\r\n if (row.upgradeStatus === 'READY') {\r\n this.selection.select(row)\r\n }\r\n });\r\n }\r\n }\r\n\r\n upgradeUser(user: UserUpgradeRecord): void {\r\n if (user?.upgradeStatus === 'READY')\r\n user.pending = true;\r\n\r\n this.userUpgradeService.collectUsers([user])\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.userUpgradeService.bulkUpgrade([user])\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.updateUsersStatusAfterUpgrade([user]);\r\n })\r\n });\r\n }\r\n\r\n updateUsersStatusAfterUpgrade(users: UserUpgradeRecord[]): void {\r\n this.userUpgradeService.getUsersUpgradeStatuses(users)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((upgradedStatuses: User2UpgradeStatusDTO[]) => {\r\n upgradedStatuses.forEach(statusItem => {\r\n const ind = this.getUserIndex(statusItem.userId);\r\n if (ind > -1) {\r\n this.data.data[ind].upgradeStatus = statusItem.upgradeStatus;\r\n this.data.data[ind].pending = false;\r\n }\r\n });\r\n this.dataPending = false;\r\n });\r\n }\r\n\r\n getUserIndex(userId: string): number {\r\n return this.data.data.findIndex((record: UserUpgradeRecord) => record.userId === userId);\r\n }\r\n\r\n upgradeSelectedUsers(): void {\r\n if (this.selection.selected && this.selection.selected.length) {\r\n this.dataPending = true;\r\n\r\n this.userUpgradeService.collectUsers(this.selection.selected)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.userUpgradeService.bulkUpgrade(this.selection.selected)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.updateUsersStatusAfterUpgrade(this.selection.selected);\r\n })\r\n });\r\n\r\n }\r\n this.userUpgradeService.bulkUpgrade(this.selection.selected);\r\n }\r\n\r\n onFilter(filterEvent: { key: string, value: any }) {\r\n const {key, value} = filterEvent;\r\n\r\n let filterValue: any;\r\n if (value && value.value !== undefined) {\r\n filterValue = value.value;\r\n } else if (value && value.target) {\r\n filterValue = value.target.value;\r\n } else {\r\n filterValue = value;\r\n }\r\n\r\n // Handle \"All\" option or empty values - remove the filter\r\n if (filterValue === 'all' || !filterValue || filterValue === '') {\r\n delete this.activeFilters[key];\r\n } else {\r\n this.activeFilters[key] = filterValue;\r\n }\r\n\r\n this.applyFilters();\r\n }\r\n\r\n private setupCustomFilter() {\r\n this.data.filterPredicate = (data: any, filter: string) => {\r\n const filters = JSON.parse(filter || '{}');\r\n\r\n for (const [key, value] of Object.entries(filters)) {\r\n if (!value) continue;\r\n\r\n switch (key) {\r\n case 'User':\r\n const searchTerm = (value as string).toLowerCase();\r\n if (!data.userName.toLowerCase().includes(searchTerm)) {\r\n return false;\r\n }\r\n break;\r\n case 'Site':\r\n if (data.siteName !== this.getSiteNameFromValue(value as string)) {\r\n return false;\r\n }\r\n break;\r\n case 'User Upgrade Status':\r\n if (!this.matchesUpgradeStatus(data.upgradeStatus, value as string)) {\r\n return false;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n\r\n private applyFilters() {\r\n this.data.filter = JSON.stringify(this.activeFilters);\r\n }\r\n\r\n get filteredDataCount(): number {\r\n return this.data?.filteredData?.length || 0;\r\n }\r\n\r\n private getSiteNameFromValue(value: string): string {\r\n // Since we're now using actual site names, just convert back from slug format\r\n return value.split('-').map(word =>\r\n word.charAt(0).toUpperCase() + word.slice(1)\r\n ).join(' ');\r\n }\r\n\r\n private matchesUpgradeStatus(status: string, filterValue: string): boolean {\r\n // Handle direct status matching for cleaner implementation\r\n return status.toLowerCase().replace(/\\s+/g, '-') === filterValue.toLowerCase();\r\n }\r\n\r\n getStatusClass(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case 'ready':\r\n return 'ready';\r\n case 'not ready':\r\n return 'not-ready';\r\n case 'partial ready':\r\n return 'partial-ready';\r\n case 'completed':\r\n return 'completed';\r\n case 'failed':\r\n return 'failed';\r\n default:\r\n return 'not-ready';\r\n }\r\n }\r\n\r\n protected readonly pageSizeOptions = PAGINATION_SIZE_OPTIONS;\r\n}\r\n\r\ninterface PaginationDataDtoInterface {\r\n total: number;\r\n pageSizeOptions: number[];\r\n pageSize: number;\r\n pageIndex: number;\r\n}\r\nclass PaginationDataDto {\r\n total!: number;\r\n pageSizeOptions!: number[];\r\n pageSize!: number;\r\n pageIndex!: number;\r\n\r\n constructor(data?: PaginationDataDtoInterface) {\r\n this.pageSizeOptions = data?.pageSizeOptions || PAGINATION_DATA_DEFAULTS.OPTIONS;\r\n this.pageSize = data?.pageSize || PAGINATION_DATA_DEFAULTS.SIZE;\r\n this.pageIndex = data?.pageIndex || PAGINATION_DATA_DEFAULTS.PAGE_INDEX;\r\n this.total = data?.total || 0;\r\n }\r\n}\r\n\r\nconst PAGINATION_DATA_DEFAULTS = {\r\n OPTIONS: [10, 20, 50, 100],\r\n SIZE: 10,\r\n PAGE_INDEX: 0\r\n};\r\n","<div *ngIf=\"dataPending\" class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"120\"></mat-progress-spinner>\r\n</div>\r\n\r\n<div id=\"userUpgradeDataTable\" class=\"wrapper\">\r\n <div class=\"user-upgrade-status-wrapper\">\r\n <tk-summary-card [description]=\"'Users are ready to upgrade'\" [value]=\"statusCounts['Ready']\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users are not ready'\" [value]=\"statusCounts['Not Ready']\" [status]=\"'Not Ready'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users failed to upgrade'\" [value]=\"statusCounts['Failed']\" [status]=\"'Failed'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Successfully upgraded'\" [value]=\"statusCounts['Completed']\" [status]=\"'Completed'\"></tk-summary-card>\r\n </div>\r\n <div class=\"table-action-panel\">\r\n <tk-table-filters *ngIf=\"filters.length > 0\" [filters]=\"filters\" (filter)=\"onFilter($event)\"></tk-table-filters>\r\n <div class=\"action-wrapper\">\r\n <span>{{filteredDataCount}} Users</span>\r\n <button\r\n mat-button\r\n class=\"upgrade-bulk-button\"\r\n color=\"primary\"\r\n [disabled]=\"selection.selected.length === 0\"\r\n (click)=\"upgradeSelectedUsers()\">\r\n Upgrade {{ selection.selected.length === 0 ? '' : '(' + selection.selected.length + ')' }}\r\n </button>\r\n </div>\r\n </div>\r\n <table mat-table [dataSource]=\"data\" class=\"user-upgrade-table\">\r\n\r\n <!-- Checkbox Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"\r\n [disabled]=\"STATUS_ENTRIES[row.upgradeStatus] !== 'Ready' || row.pending\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Column -->\r\n <ng-container matColumnDef=\"user\">\r\n <th mat-header-cell *matHeaderCellDef>User</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-info\">\r\n <div class=\"user-name\">{{element.userName}}</div>\r\n <div class=\"user-email\">{{element.userName}}</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Site Column -->\r\n <ng-container matColumnDef=\"site\">\r\n <th mat-header-cell *matHeaderCellDef>Site</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"site-info\">\r\n <span class=\"site-indicator\"></span>\r\n <span [ngClass]=\"{'status-ready': element.dialPlanStatus === 'READY'}\">{{element.siteName}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Device Column -->\r\n <ng-container matColumnDef=\"device\">\r\n <th mat-header-cell *matHeaderCellDef>Device</th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"multi-dev-box\">\r\n <div *ngIf=\"element.showDevices\" class=\"device-list show-dev-list\">\r\n <div *ngFor=\"let device of element.devices; let last = last\"\r\n class=\"device-item\"\r\n [class.no-border]=\"last\">\r\n <span class=\"device-indicator\" [ngClass]=\"{'device-indicator-ready': element.deviceStatus === 'READY'}\"></span>\r\n <span class=\"device-name\">{{ device.name || device }}</span>\r\n <span class=\"device-model\">{{ element.primaryExtension || 'No Extension' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"device-info\">\r\n <div *ngIf=\"element.devices.length > 1\">\r\n <div class=\"device-name-wrapper clickable\"\r\n (mouseenter)=\"onMultipleDevices(element)\"\r\n (mouseleave)=\"onMultipleDevices(element)\">\r\n\r\n <span class=\"device-name\">Multiple devices ></span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"element.devices.length === 1\">\r\n <div class=\"device-name-wrapper\">\r\n <span class=\"device-indicator\"></span>\r\n <span class=\"device-name\">{{element.devices[0]}}</span>\r\n </div>\r\n <span class=\"device-model\">{{ element.primaryExtension || 'No Extension' }}</span>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dial Plan Status Column -->\r\n <ng-container matColumnDef=\"dialPlanStatus\">\r\n <th mat-header-cell *matHeaderCellDef>Dial Plan Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.dialPlanStatus)\"></span>\r\n <span [ngClass]=\"{'status-ready': element.dialPlanStatus === 'READY'}\">{{STATUS_ENTRIES[element.dialPlanStatus]}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dependencies Column -->\r\n <ng-container matColumnDef=\"dependencies\">\r\n <th mat-header-cell *matHeaderCellDef>Dependencies</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'Dependencies found'\" class=\"dependencies-text\">{{DEPENDENCIES_STATUS[element.dependenciesStatus]}}</span>\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'No dependencies'\">—</span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Upgrade Status Column -->\r\n <ng-container matColumnDef=\"userUpgradeStatus\">\r\n <th mat-header-cell *matHeaderCellDef>User Upgrade Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"upgrade-status-cell\">\r\n <ng-container *ngIf=\"STATUS_ENTRIES[element.upgradeStatus] === 'Ready'; else statusBlock\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"upgradeUser(element)\">Upgrade</button>\r\n </ng-container>\r\n <ng-template #statusBlock>\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{STATUS_ENTRIES[element.upgradeStatus]}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"userUpgradeLoader\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td class=\"mat-progress-spinner-td\" mat-cell *matCellDef=\"let element\">\r\n\r\n <mat-progress-spinner\r\n *ngIf=\"element.pending\"\r\n class=\"field-spinner\"\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\r\n [class.selected-row]=\"selection.isSelected(row)\"></tr>\r\n </table>\r\n</div>\r\n\r\n<div class=\"app-pagination\">\r\n <mat-paginator\r\n [length]=\"pagination.total\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n (page)=\"pageEvent($event)\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n <!--<div class=\"page-indexes-box\">\r\n <mat-paginator\r\n [id]=\"'commonPagination'\"\r\n [hidePageSize]=\"true\"\r\n [length]=\"pagination.total\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n (page)=\"pageEvent($event)\">\r\n </mat-paginator>\r\n </div>\r\n\r\n <div class=\"per-page-block\">\r\n <div class=\"item_per_page\">Items per page:</div>\r\n <div class=\"select-box select-page-size\">\r\n <mat-select (selectionChange)=\"changePerPageNumber($event)\" #page\r\n [id]=\"'commonPaginationSelect'\">\r\n <mat-option *ngFor=\"let option of pageSizeOptions; let i = index;\" [id]=\"'paginationSelectOpt_' + i\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-select>\r\n </div>\r\n\r\n </div>-->\r\n</div>\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'tk-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class CardComponent {\r\n @Input() title!: string;\r\n}","<article class=\"card\">\r\n <header class=\"card__header\">\r\n <h2>{{ title }}</h2>\r\n <!--<div class=\"card__menu-button\">\r\n <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\r\n </div>-->\r\n </header>\r\n <div class=\"card__content\">\r\n <ng-content select=\"card-content\"></ng-content>\r\n </div>\r\n</article>\r\n","import { 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\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 ]\r\n})\r\nexport class MaterialModule { }","import { Component, Input, OnInit } from \"@angular/core\";\r\nimport { SitesUpgradeReadiness, SitesUpgradeSummary, UsersUpgradeReadiness, UsersUpgradeSummary } from \"../../../widgets/upgrade-overview/types/upgrade-overview\";\r\n\r\n@Component({\r\n selector: 'tk-stat-card',\r\n templateUrl: './stat-card.component.html',\r\n styleUrls: ['./stat-card.component.scss']\r\n})\r\nexport class StatCardComponent implements OnInit {\r\n @Input() title!: string;\r\n @Input() type!: 'site' | 'user';\r\n @Input() readinessStats: any;\r\n @Input() upgradeStatus!: 'ready' | 'already';\r\n\r\n stats: any;\r\n\r\n ngOnInit() { \r\n if (this.type === 'user') {\r\n this.stats = {\r\n id: this.readinessStats?.id,\r\n customerId: this.readinessStats?.customerId,\r\n total: this.readinessStats?.['totalUsers'],\r\n totalReady: this.readinessStats?.['totalReadyUsers'],\r\n totalUpgraded: this.readinessStats?.['totalUpgradedUsers'],\r\n }\r\n } else {\r\n this.stats = {\r\n id: this.readinessStats?.id,\r\n customerId: this.readinessStats?.customerId,\r\n total: this.readinessStats?.['totalSites'],\r\n totalReady: this.readinessStats?.['totalReadySites'],\r\n totalUpgraded: this.readinessStats?.['totalUpgradedSites'],\r\n }\r\n }\r\n }\r\n\r\n get readyPercentage() {\r\n return (this.stats?.totalReady / this.stats?.total * 100) >> 0;\r\n }\r\n\r\n get upgradedPercentage() {\r\n return (this.stats?.totalUpgraded / this.stats?.total * 100) >> 0;\r\n }\r\n}","<tk-card [title]=\"title\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div class=\"card__content-info\">\r\n <div class=\"card__content-wrapper\">\r\n <img width=\"42\" [src]=\"'assets/icons/' + type + '.png'\" alt=\"\" />\r\n <div class=\"card__content-text\">\r\n <div class=\"card__content-label\">\r\n {{ upgradeStatus === 'ready' ? stats?.totalReady : stats?.totalUpgraded }}\r\n {{ type === 'user' ? 'Users' : 'Sites' }}</div>\r\n <div class=\"card__content-description\">{{ upgradeStatus === 'ready' ? 'Ready to Upgrade' : 'Already Upgraded' }}</div>\r\n </div>\r\n </div>\r\n <div class=\"card__content-wrapper\">\r\n <img\r\n *ngIf=\"upgradeStatus === 'ready'\"\r\n height=\"48\"\r\n src=\"assets/icons/ready_to_upgrade.png\"\r\n alt=\"\"\r\n />\r\n <img\r\n *ngIf=\"upgradeStatus === 'already'\"\r\n height=\"48\"\r\n src=\"assets/icons/already_upgraded.png\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"card__content-progress-wrapper\">\r\n <div class=\"card__content-progress\">\r\n <div class=\"card__content-progress-label\">\r\n <span>{{ readyPercentage }}%</span>\r\n <span>From all {{ stats?.total }} {{ type === 'user' ? 'users' : 'sites' }}</span>\r\n </div>\r\n <div class=\"card__content-progress-bar\">\r\n <div\r\n class=\"card__content-progress-bar-fill ready\"\r\n [class.already]=\"upgradeStatus === 'already'\"\r\n [style.width.%]=\"readyPercentage\"\r\n ></div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"upgradeStatus === 'already'\" class=\"card__content-progress\">\r\n <div class=\"card__content-progress-label\">\r\n <span>{{ upgradedPercentage }}%</span>\r\n <span>From all {{ stats?.totalReady }} ready {{ type === 'user' ? 'users' : 'sites' }}</span>\r\n </div>\r\n <div class=\"card__content-progress-bar\">\r\n <div\r\n class=\"card__content-progress-bar-fill ready\"\r\n [class.already]=\"upgradeStatus === 'already'\"\r\n [style.width.%]=\"upgradedPercentage\"\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</tk-card>\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"tk-status-list-card\",\r\n templateUrl: \"./status-list-card.component.html\",\r\n styleUrls: [\"./status-list-card.component.scss\"]\r\n})\r\nexport class StatusListCardComponent {\r\n @Input() title!: string;\r\n @Input() items!: any;\r\n}","<tk-card [title]=\"title\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div class=\"card__list-wrapper\">\r\n <div class=\"card__list-item\" *ngFor=\"let item of items\">\r\n <img *ngIf=\"item.status\" src=\"{{ 'assets/icons/check_icon.png' }}\" alt=\"\">\r\n <img *ngIf=\"!item.status\" src=\"{{ 'assets/icons/warning_icon.png' }}\" alt=\"\">\r\n <div class=\"card__item-info\">\r\n <div class=\"card__item-text\">\r\n <div class=\"card__item-label\">\r\n {{ item.label }}\r\n </div>\r\n <div class=\"card__item-description\">\r\n {{ item.description }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"title.includes('Site')\" class=\"card__item-stats\">\r\n <div class=\"card__item-numbers\">\r\n {{ item.value }}/{{ item.totalSites }}\r\n </div>\r\n <div class=\"card__item-numbers-description\">\r\n Ready/All\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</tk-card>","import { Component, Input, OnInit } from \"@angular/core\";\r\nimport { ApexChart, ApexPlotOptions, ApexLegend, ApexDataLabels, ApexNonAxisChartSeries } from \"ng-apexcharts\";\r\n\r\nexport type ChartOptions = {\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};\r\n\r\n@Component({\r\n selector: 'tk-chart-card',\r\n templateUrl: './chart-card.component.html',\r\n styleUrls: ['./chart-card.component.scss']\r\n})\r\nexport class ChartCardComponent implements OnInit {\r\n @Input() title!: string;\r\n @Input() totalUpgraded!: number;\r\n @Input() totalNotUpgraded!: number;\r\n\r\n public chartOptions!: ChartOptions;\r\n\r\n ngOnInit() {\r\n this.initChartOptions();\r\n }\r\n\r\n private initChartOptions(): void {\r\n if (this.totalUpgraded === 0)\r\n this.totalNotUpgraded = 100;\r\n\r\n this.chartOptions = {\r\n series: [this.totalUpgraded, this.totalNotUpgraded],\r\n chart: {\r\n type: \"donut\",\r\n height: 250\r\n },\r\n labels: [\"MT\", \"DI\"],\r\n colors: [\"#808080\", \"#2E8B57\"],\r\n legend: {\r\n position: \"right\",\r\n offsetY: 0,\r\n fontSize: \"14px\",\r\n markers: {\r\n width: 16,\r\n height: 16,\r\n radius: 2\r\n },\r\n itemMargin: {\r\n horizontal: 20,\r\n vertical: 2\r\n },\r\n formatter: function (seriesName, opts) {\r\n return seriesName + \" \" + ((opts.w.globals.series[opts.seriesIndex] / (opts.w.globals.series[0] + opts.w.globals.series[1]) * 100) >> 0) + \"%\";\r\n }\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 };\r\n }\r\n}","<tk-card [title]=\"title\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div class=\"chart-container\">\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 </apx-chart>\r\n </div>\r\n </ng-container>\r\n</tk-card>","import { NgModule } from \"@angular/core\";\r\nimport { CardComponent } from \"./components/card/card.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MaterialModule } from \"./material.module\";\r\nimport { StatCardComponent } from \"./components/stat-card/stat-card.component\";\r\nimport { StatusListCardComponent } from \"./components/status-list-card/status-list-card.component\";\r\nimport { ChartCardComponent } from \"./components/chart-card/chart-card.component\";\r\nimport { NgApexchartsModule } from \"ng-apexcharts\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { TableFiltersComponent } from \"./components/table-filters/table-filters.component\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { SummaryCardComponent } from \"./components/summary-card/summary-card.component\";\r\n\r\n@NgModule({\r\n declarations: [\r\n CardComponent,\r\n StatCardComponent,\r\n StatusListCardComponent,\r\n ChartCardComponent,\r\n SummaryCardComponent,\r\n TableFiltersComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n NgApexchartsModule,\r\n HttpClientModule\r\n ],\r\n exports: [\r\n CardComponent,\r\n StatCardComponent,\r\n StatusListCardComponent,\r\n ChartCardComponent,\r\n SummaryCardComponent,\r\n TableFiltersComponent\r\n ]\r\n})\r\nexport class SharedModule {}","import { NgModule } from \"@angular/core\";\r\nimport { UserUpgradeDataTableComponent } from \"./user-upgrade-data-table/user-upgrade-data-table.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { SharedModule } from \"../../shared/shared.module\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\n@NgModule({\r\n declarations: [\r\n UserUpgradeDataTableComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\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 UserUpgradeDataTableComponent\r\n ]\r\n})\r\nexport class UserUpgradeModule {\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { map, Observable, Subject } from \"rxjs\";\r\nimport { SiteUpgradeRecord } from \"./types/user-upgrade\";\r\nimport { API } from \"../../api/api.endpoints\";\r\nimport { UserUpgradeRecord } from \"../user-upgrade/types/user-upgrade\";\r\nimport { APIService } from \"../../shared/services/api.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SiteUpgradeService {\r\n siteSetForCollectAndBuildWebexCache: number[] | undefined;\r\n cucmSetInCollectAndBuildWebexCache: number[] | undefined;\r\n siteUpdateStatusEvent = new Subject<BatchStatusDTO[]>();\r\n private apiService = inject(APIService);\r\n customerId!: string;\r\n\r\n getSiteUpgradeStatusCounts(): Observable<any> {\r\n return this.apiService.fetch(\r\n API.SITE_UPGRADE.GET_SITES_UPGRADE_STATUS_COUNTS.replace(':customerId', this.customerId)\r\n );\r\n }\r\n\r\n getSiteUpgradeRecords(): Observable<SiteUpgradeRecord[]> {\r\n return this.apiService.fetch(\r\n API.SITE_UPGRADE.GET_SITES_UPGRADE_DATA.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return resp.content.map((record: any) => ({\r\n siteId: record.siteId,\r\n siteName: record.siteName,\r\n totalUsers: record.totalUsers,\r\n totalReadyUsers: record.readyUsers,\r\n totalNotReadyUsers: record.notReadyUsers,\r\n totalUpgradedUsers: record.totalUpgradedUsers,\r\n totalFailedUsers: record.totalFailedToUpgradeUsers,\r\n locationMapping: record.locationMappingStatus,\r\n PSTNTrunk: record.pstnTrunkStatus,\r\n upgradeStatus: record.siteUpgradeStatus\r\n } as SiteUpgradeRecord));\r\n }));\r\n }\r\n\r\n getBatchSites(): Observable<MigrationBatch[]> {\r\n return this.apiService.fetch(\r\n API.SITE_UPGRADE.GET_BATCH_SITES.replace(':customerId', this.customerId)\r\n );\r\n }\r\n\r\n collectSiteCache(siteId: number, migrationType: string = 'webex') {\r\n return this.apiService.post(\r\n API.SITE_UPGRADE.WEBEX_CACHE_COLLECTION\r\n .replace(':siteId', String(siteId))\r\n .replace(':migrationType', migrationType),\r\n {}\r\n )\r\n }\r\n\r\n migrateSite(siteId: string, batchId: string): Observable<any> {\r\n return this.apiService.post(\r\n API.SITE_UPGRADE.MIGRATE_SITE.replace(':siteId', String(siteId)),\r\n {},\r\n {batchId: batchId || ''}\r\n )\r\n }\r\n\r\n getBatchesStatuses(batchIds: string[]): Observable<BatchStatusDTO[]> {\r\n return this.apiService.post(\r\n API.SITE_UPGRADE.WEBEX_BATCH_STATUS\r\n .replace(':customerId', this.customerId),\r\n batchIds,\r\n false\r\n )\r\n .pipe(map((result: BatchStatusDTO[]) => {\r\n this.siteUpdateStatusEvent.next(result);\r\n return result;\r\n }))\r\n }\r\n\r\n getSiteListForCollectAndBuildWebexCache(): Observable<number[]> {\r\n return this.apiService.fetch(API.SITE_UPGRADE.WEBEX_CACHE_COLLECTION_SITE_LIST.replace(':customerId', this.customerId))\r\n .pipe(map((siteSet: number[]) => this.siteSetForCollectAndBuildWebexCache = siteSet))\r\n }\r\n\r\n getCUCMListCurrentlyInCollectAndBuildWebexCache(): Observable<number[]> {\r\n return this.apiService.fetch(API.SITE_UPGRADE.WEBEX_CACHE_COLLECTION_CUCM_LIST.replace(':customerId', this.customerId))\r\n .pipe(\r\n map((cucmSet: number[]) => this.cucmSetInCollectAndBuildWebexCache = cucmSet),\r\n );\r\n }\r\n\r\n getMigrationBatchesStatuses(): Observable<BatchStatusDTO[]> {\r\n return this.apiService.fetch(API.SITE_UPGRADE.BATCH_STATUS.replace(':customerId', this.customerId))\r\n /*.pipe(map((result: BatchStatusDTO[]) => {\r\n this.siteUpdateStatusEvent.next(result);\r\n return result;\r\n }))*/\r\n }\r\n\r\n getMigratedSiteStatus(pageSize: number, page: number): Observable<WebexMigratedSiteStatusInterface[]> {\r\n return this.apiService.fetchPagination(\r\n API.SITE_UPGRADE.MIGRATION_STATUS.replace(':customerId', this.customerId),\r\n pageSize, page, {}, false\r\n )\r\n }\r\n\r\n // TODO: Impl the site upgrade logic here\r\n upgradeSite(site: SiteUpgradeRecord): void {\r\n const customerId = site.customerId;\r\n const siteId = site.siteId;\r\n }\r\n}\r\n\r\nexport interface BatchStatusDTO {\r\n id: number;\r\n status: string;\r\n progress: number;\r\n migErrorsCount: string;\r\n}\r\n\r\nexport const STATUSES = {\r\n COMPLETED: 'Completed',\r\n NEW: 'New',\r\n IN_PROGRESS: 'In Progress',\r\n FAILED_IN_ERROR: 'Failed-in error',\r\n FAILED: 'Failed',\r\n FAILED_WITH_RETRY: 'Failed with Retry',\r\n COLLECTING: 'Collecting',\r\n FAILED_COLLECTING: 'Failed on collecting',\r\n WAITING_FOR_REVIEW: 'Waiting for review'\r\n};\r\nexport interface WebexMigratedSiteStatusInterface {\r\n site?: {id: number, name: string};\r\n migrationFormStatus: string;\r\n}\r\nexport interface SiteMigrationProgressInterface {\r\n id: number;\r\n status: string;\r\n progress: number;\r\n migErrorsCount: number | null;\r\n}\r\n\r\nexport interface MigrationBatch {\r\n id: number;\r\n sourceId: number;\r\n targetId: number;\r\n name: string;\r\n sourceIp: string;\r\n sourceCucIp: string | null;\r\n targetIp: string | null;\r\n size: number;\r\n status: string;\r\n suggestedDestination: string | null;\r\n destination: string | null;\r\n regionName: string | null;\r\n progress: number;\r\n migrationProcessUUID: string | null;\r\n customerId: number;\r\n owner: string | null;\r\n date: string | null;\r\n comments: string | null;\r\n siteId: number;\r\n planUUID: string;\r\n comparisonProcessUUID: string | null;\r\n type: string;\r\n migErrorsCount: number | null;\r\n sourceCucId: number | null;\r\n targetCucId: number | null;\r\n sites: unknown | null;\r\n serverType: string;\r\n migrationFormId: number;\r\n hasValidationErrors: boolean;\r\n}\r\n","import { Component, Input } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-progress-bar',\r\n templateUrl: './progress-bar.component.html',\r\n styleUrls: ['./progress-bar.component.scss']\r\n})\r\nexport class ProgressBarComponent {\r\n @Input() isAvailable = false;\r\n\r\n private _progress = 0;\r\n @Input() set progress(value: number) {\r\n this._progress = Math.max(0, Math.min(100, Number(value) || 0));\r\n this.setColor(this._progress);\r\n }\r\n get progress() { return this._progress; }\r\n\r\n color: string = 'grey';\r\n\r\n private setColor(p: number): void {\r\n if (p <= 20) this.color = 'red';\r\n else if (p <= 40) this.color = 'yellow';\r\n else if (p <= 60) this.color = 'darkblue';\r\n else if (p <= 80) this.color = 'lightblue';\r\n else this.color = 'green';\r\n }\r\n}\r\n","<!--<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\r\n <div class=\"progress-bar {{color}}\" [ngStyle]=\"{'width': progress + '%'}\"></div>\r\n</div>-->\r\n<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\r\n <div class=\"progress-bar\" [ngClass]=\"color\" [style.width.%]=\"progress\"></div>\r\n</div>\r\n","import { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { Component, OnInit, OnDestroy, inject, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { TableColumn } from \"../../../shared/types/data-table\";\r\nimport { TableFilter } from \"../../../shared/types/table/filter\";\r\nimport { SiteUpgradeRecord } from \"../types/user-upgrade\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview/upgrade-overview.service\";\r\nimport { forkJoin, of, Subject, Subscription } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport {\r\n BatchStatusDTO, MigrationBatch,\r\n SiteUpgradeService,\r\n STATUSES,\r\n WebexMigratedSiteStatusInterface\r\n} from \"../site-upgrade.service\";\r\nimport { STATUS_ENTRIES } from \"../../../shared/types/constants\";\r\nimport { APIService } from \"../../../shared/services/api.service\";\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nconst MAX_INTEGER = 2147483647;\r\n@Component({\r\n selector: 'tk-site-upgrade-data-table',\r\n templateUrl: './site-upgrade-data-table.component.html',\r\n styleUrls: ['./site-upgrade-data-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class SiteUpgradeDataTableComponent implements OnInit, OnDestroy {\r\n readonly siteUpgradeService = inject(SiteUpgradeService);\r\n private readonly apiService = inject(APIService);\r\n readonly destroy$ = new Subject<void>();\r\n readonly STATUS_ENTRIES = STATUS_ENTRIES;\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n columns!: TableColumn[];\r\n dataPending = false;\r\n data!: MatTableDataSource<any>;\r\n displayedColumns: string[] = ['site', 'ready users', 'upgraded users', 'location mapping', 'pstn trunk', 'site upgrade status', 'progressBar', 'actions', 'userUpgradeLoader'];\r\n selection = new SelectionModel<any>(true, []);\r\n filters: TableFilter[] = [];\r\n private activeFilters: { [key: string]: any } = {};\r\n private subscriptions = new Subscription();\r\n private collectingBatchInterval: any;\r\n\r\n statusCounts: any = {};\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dataPending = true;\r\n this.apiService.token = this.token;\r\n this.siteUpgradeService.customerId = this.customerId;\r\n\r\n const subsc1 = forkJoin([\r\n this.siteUpgradeService.getSiteUpgradeRecords(),\r\n this.siteUpgradeService.getMigratedSiteStatus(MAX_INTEGER, 0),\r\n this.siteUpgradeService.getSiteListForCollectAndBuildWebexCache(),\r\n this.siteUpgradeService.getCUCMListCurrentlyInCollectAndBuildWebexCache(),\r\n this.siteUpgradeService.getBatchSites()\r\n ]).pipe(takeUntil(this.destroy$))\r\n .subscribe((results: [SiteUpgradeRecord[], WebexMigratedSiteStatusInterface[], number[], number[], MigrationBatch[]]) => {\r\n const records = results[0].map(site => ({\r\n ...site,\r\n siteId: Number(site.siteId)\r\n }));\r\n this.data = new MatTableDataSource<SiteUpgradeRecord>(records);\r\n this.dataPending = false;\r\n this.setupCustomFilter();\r\n this.initializeFilters(records);\r\n\r\n this.setMigratedStatus(results[1]);\r\n\r\n if (this.data?.data.length && results[2]?.length) {\r\n this.initCollectProgress(results[2]);\r\n }\r\n if (this.data?.data.length && results[4]?.length) {\r\n this.setBatchIdToSites(results[4]);\r\n }\r\n });\r\n this.subscriptions.add(subsc1);\r\n\r\n const subsc2 = this.siteUpgradeService.getSiteUpgradeStatusCounts()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((statusCounts) => {\r\n this.statusCounts['Ready'] = statusCounts['READY'] || 0;\r\n this.statusCounts['Not Ready'] = statusCounts['NOT_READY'] || 0;\r\n this.statusCounts['Completed'] = statusCounts['COMPLETED'] || 0;\r\n this.statusCounts['Failed'] = statusCounts['FAILED'] || 0;\r\n });\r\n this.subscriptions.add(subsc2);\r\n\r\n const subsc3 = this.siteUpgradeService.siteUpdateStatusEvent\r\n .subscribe((updatedStatuses: BatchStatusDTO[]) => {\r\n this.handleCheckBatchStatusResponse(updatedStatuses);\r\n });\r\n this.subscriptions.add(subsc3);\r\n }\r\n\r\n onSiteMigration(site: SiteUpgradeRecord): void {\r\n site.pending = true;\r\n site.isProgressBarAvailable = true;\r\n site.isMigrationInProgress = true;\r\n const subsc = this.siteUpgradeService.migrateSite(String(site.siteId), String(site.batchId))\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((migrationFormId: number) => {\r\n site.migrationFormId = migrationFormId;\r\n site.progress = 1;\r\n this.runMigrationProgress(site);\r\n });\r\n this.subscriptions.add(subsc);\r\n\r\n }\r\n\r\n private runMigrationProgress(site: SiteUpgradeRecord): void {\r\n this.updateMigrationProgress(site);\r\n\r\n site.interval = setInterval(() => {\r\n this.updateMigrationProgress(site);\r\n }, 10000);\r\n\r\n }\r\n\r\n private updateMigrationProgress(site: SiteUpgradeRecord): void {\r\n if (!site || !site.isMigrationInProgress) {\r\n return;\r\n }\r\n this.siteUpgradeService.getMigrationBatchesStatuses()\r\n .subscribe(\r\n (statuses: BatchStatusDTO[]) => {\r\n if (statuses?.length) {\r\n statuses.forEach((statusItem: BatchStatusDTO) => {\r\n const ind = this.getSiteIndex(statusItem.id);\r\n if (ind > -1) {\r\n this.data.data[ind].progress = statusItem.progress;\r\n this.data.data[ind].status = statusItem.status;\r\n if (statusItem.status !== 'In Progress') {\r\n this.data.data[ind].pending = false;\r\n this.data.data[ind].isMigrationInProgress = false;\r\n this.data.data[ind].isProgressBarAvailable = false;\r\n }\r\n }\r\n });\r\n if (statuses.filter(statusItem => statusItem.status === 'In Progress').length < 1) {\r\n this.data.data.forEach(site => {\r\n site.pending = false;\r\n site.isMigrationInProgress = false;\r\n site.isProgressBarAvailable = false;\r\n })\r\n }\r\n }\r\n\r\n },\r\n () => {\r\n this.resetMigrationProgress(site, 'FAILED');\r\n }\r\n );\r\n }\r\n\r\n private resetMigrationProgress(site: SiteUpgradeRecord, status?: string): void {\r\n site.isMigrationInProgress = false;\r\n site.pending = false;\r\n site.isProgressBarAvailable = false;\r\n if (site.interval) {\r\n clearInterval(site.interval);\r\n }\r\n if (status) {\r\n site.status = status;\r\n }\r\n }\r\n\r\n public onCollect(site: SiteUpgradeRecord): void {\r\n site.pending = true;\r\n site.status = STATUSES.COLLECTING;\r\n // const ind =\r\n const subscription =\r\n this.siteUpgradeService.collectSiteCache(Number(site.siteId), 'webex')\r\n .subscribe({\r\n error: () => site.pending = false\r\n });\r\n this.subscriptions.add(subscription);\r\n /*setTimeout(() => {\r\n this.runBatchCheckStatus();\r\n }, 700);*/\r\n setTimeout(() => {\r\n this.initCollectInterval(site);\r\n }, 700);\r\n }\r\n\r\n private initCollectInterval(site: SiteUpgradeRecord): void {\r\n if (!site.interval && !site.initPending) {\r\n site.initPending = true;\r\n\r\n this.getCUCMListAlreadyInCollectWebexCache(site);\r\n this.getSiteListForCollectAndBuildWebexCache(site);\r\n\r\n site.interval = setInterval(() => {\r\n this.getCUCMListAlreadyInCollectWebexCache(site);\r\n this.getSiteListForCollectAndBuildWebexCache(site);\r\n\r\n }, 10000);\r\n }\r\n }\r\n\r\n private getSiteListForCollectAndBuildWebexCache(site: SiteUpgradeRecord): void {\r\n this.siteUpgradeService.getSiteListForCollectAndBuildWebexCache()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((siteSet: number[]) => {\r\n if (!siteSet || !siteSet.length) {\r\n site.pending = false;\r\n this.removeInterval(site);\r\n site.isCollected = true;\r\n }\r\n }, () => {\r\n site.pending = false;\r\n this.removeInterval(site);\r\n });\r\n }\r\n\r\n private removeInterval(site: SiteUpgradeRecord): void {\r\n if (site.interval) {\r\n clearInterval(site.interval);\r\n }\r\n }\r\n\r\n private handleBatchCUCMAlreadyInCollectCache(): void {\r\n this.data.data.forEach(site => {\r\n site.isCUCMInCollectCache =\r\n this.siteUpgradeService?.cucmSetInCollectAndBuildWebexCache?.includes(Number(site.sourceId));\r\n });\r\n }\r\n\r\n private getCUCMListAlreadyInCollectWebexCache(site: SiteUpgradeRecord): void {\r\n this.siteUpgradeService.getCUCMListCurrentlyInCollectAndBuildWebexCache()\r\n .pipe(takeUntil(this.destroy$))\r\n .pipe(map((cucmList: any) => {\r\n this.handleBatchCUCMAlreadyInCollectCache();\r\n if (!cucmList || !cucmList.length) {\r\n site.pending = false;\r\n this.removeInterval(site);\r\n site.isCollected = true;\r\n }\r\n return cucmList;\r\n })\r\n ).subscribe({\r\n error: () => {\r\n site.pending = false;\r\n site.initPending = true;\r\n this.removeInterval(site);\r\n }\r\n });\r\n }\r\n\r\n private checkBatchStatus(batchIds: string[]): void {\r\n const subsc = this.siteUpgradeService.getBatchesStatuses(batchIds)\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n catchError(() => {\r\n clearInterval(this.collectingBatchInterval);\r\n return of([]);\r\n })\r\n ).subscribe((updatedStatuses: BatchStatusDTO[]) => {\r\n this.handleCheckBatchStatusResponse(updatedStatuses);\r\n });\r\n this.subscriptions.add(subsc);\r\n }\r\n\r\n private handleCheckBatchStatusResponse(updatedStatuses: BatchStatusDTO[]): void {\r\n if (updatedStatuses && updatedStatuses.length && this.data?.data?.length) {\r\n updatedStatuses.forEach(updatedStatus => {\r\n const ind = this.data?.data.findIndex(batch => batch.siteId === updatedStatus.id);\r\n if (ind > -1 && this.data?.data[ind] && updatedStatus.status) {\r\n this.data.data[ind].upgradeStatus = updatedStatus.status;\r\n }\r\n });\r\n } else {\r\n if (this.collectingBatchInterval) {\r\n clearInterval(this.collectingBatchInterval);\r\n }\r\n }\r\n }\r\n\r\n private getSiteIndex(batchId: number): number {\r\n if (this.data.data.length) {\r\n return this.data.data.findIndex(siteItem => siteItem.batchId === batchId);\r\n }\r\n return -1;\r\n }\r\n\r\n private initializeFilters(records: SiteUpgradeRecord[]): void {\r\n // Extract unique sites from actual data\r\n const uniqueSites = [...new Set(records.map(record => record.siteName))];\r\n const siteOptions = uniqueSites.map(site => ({\r\n label: site,\r\n value: site.toLowerCase().replace(/\\s+/g, '-')\r\n }));\r\n\r\n // Extract unique statuses from actual data\r\n const uniqueStatuses = [...new Set(records.map(record => record.upgradeStatus))];\r\n const statusOptions = uniqueStatuses.map(status => ({\r\n label: STATUS_ENTRIES[status],\r\n value: status.toLowerCase().replace(/\\s+/g, '-')\r\n }));\r\n\r\n this.filters = [\r\n {\r\n id: 'sites',\r\n type: 'select',\r\n columnKey: 'Site',\r\n placeholder: 'Sites',\r\n options: siteOptions\r\n },\r\n {\r\n id: 'status',\r\n type: 'select',\r\n columnKey: 'Site Upgrade Status',\r\n placeholder: 'Upgrade Status',\r\n options: statusOptions\r\n }\r\n ];\r\n }\r\n\r\n onFilter(filterEvent: { key: string, value: any }) {\r\n const {key, value} = filterEvent;\r\n\r\n let filterValue: any;\r\n if (value && value.value !== undefined) {\r\n filterValue = value.value;\r\n } else if (value && value.target) {\r\n filterValue = value.target.value;\r\n } else {\r\n filterValue = value;\r\n }\r\n\r\n // Handle \"All\" option or empty values - remove the filter\r\n if (filterValue === 'all' || !filterValue || filterValue === '') {\r\n delete this.activeFilters[key];\r\n } else {\r\n this.activeFilters[key] = filterValue;\r\n }\r\n\r\n this.applyFilters();\r\n }\r\n\r\n private setupCustomFilter() {\r\n this.data.filterPredicate = (data: any, filter: string) => {\r\n const filters = JSON.parse(filter || '{}');\r\n\r\n for (const [key, value] of Object.entries(filters)) {\r\n if (!value) continue;\r\n\r\n switch (key) {\r\n case 'Site':\r\n if (data.siteName !== this.getSiteNameFromValue(value as string)) {\r\n return false;\r\n }\r\n break;\r\n case 'Site Upgrade Status':\r\n if (!this.matchesUpgradeStatus(data.upgradeStatus, value as string)) {\r\n return false;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n\r\n private applyFilters() {\r\n this.data.filter = JSON.stringify(this.activeFilters);\r\n }\r\n\r\n private getSiteNameFromValue(value: string): string {\r\n // Since we're now using actual site names, just convert back from slug format\r\n return value.split('-').map(word =>\r\n word.charAt(0).toUpperCase() + word.slice(1)\r\n ).join(' ');\r\n }\r\n\r\n private matchesUpgradeStatus(status: string, filterValue: string): boolean {\r\n // Handle direct status matching for cleaner implementation\r\n return status.toLowerCase().replace(/\\s+/g, '-') === filterValue.toLowerCase();\r\n }\r\n\r\n get filteredDataCount(): number {\r\n return this.data?.filteredData?.length || 0;\r\n }\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.data?.data.length || 0;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n this.isAllSelected() ?\r\n this.selection.clear() :\r\n this.data?.data.forEach(row => this.selection.select(row));\r\n }\r\n\r\n getLocationMappingClass(locationMapping: boolean): string {\r\n return locationMapping ? 'success' : 'error';\r\n }\r\n\r\n getSiteUpgradeStatusClass(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case 'ready':\r\n return 'ready';\r\n case 'partial ready':\r\n return 'partial-ready';\r\n case 'completed':\r\n return 'completed';\r\n case 'failed':\r\n return 'failed';\r\n case 'not ready':\r\n return 'not-ready';\r\n default:\r\n return 'not-ready';\r\n }\r\n }\r\n\r\n upgradeSite(site: SiteUpgradeRecord) {\r\n this.siteUpgradeService.upgradeSite(site);\r\n }\r\n\r\n private setMigratedStatus(webexMigratedSites: WebexMigratedSiteStatusInterface[]): void {\r\n if (webexMigratedSites && webexMigratedSites.length && this.data?.data?.length) {\r\n const statusObj = this.getSiteStatusMappingObj(webexMigratedSites);\r\n this.data.data.forEach(site => site.migrationFormStatus = statusObj[site.siteId] || '');\r\n }\r\n }\r\n\r\n private getSiteStatusMappingObj(webexMigratedSites: WebexMigratedSiteStatusInterface[]): any {\r\n const statusObj: any = {};\r\n webexMigratedSites.forEach(item => {\r\n if (item.site?.id) {\r\n statusObj[String(item.site.id)] = item.migrationFormStatus;\r\n }\r\n });\r\n return statusObj;\r\n }\r\n\r\n private setBatchIdToSites(batches: MigrationBatch[]): void {\r\n if (this.data?.data?.length) {\r\n this.data.data.forEach(site => {\r\n site.batchId = this.getBatchId(batches, site.siteId);\r\n });\r\n }\r\n }\r\n\r\n private getBatchId(batches: MigrationBatch[], siteId: number): number | null {\r\n const ind = batches.findIndex(batch => batch.siteId === siteId);\r\n return ind > -1 ? batches[ind].id : null;\r\n }\r\n\r\n private initCollectProgress(sitesInProgress: number[]): void {\r\n this.data?.data.forEach(site => {\r\n if (sitesInProgress.includes(site.siteId)) {\r\n site.pending = true;\r\n this.initCollectInterval(site);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.dataPending = false;\r\n\r\n if (this.collectingBatchInterval) {\r\n clearInterval(this.collectingBatchInterval);\r\n }\r\n if (this.subscriptions) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div *ngIf=\"dataPending\" class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"120\"></mat-progress-spinner>\r\n</div>\r\n\r\n<div id=\"siteUpgradeTable\" class=\"wrapper\">\r\n <div class=\"site-upgrade-status-wrapper\">\r\n <tk-summary-card [description]=\"'Sites are ready to upgrade'\" [value]=\"statusCounts['Ready']\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Sites are not ready'\" [value]=\"statusCounts['Not Ready']\"\r\n [status]=\"'Not Ready'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Sites failed to upgrade'\" [value]=\"statusCounts['Failed']\"\r\n [status]=\"'Failed'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Successfully upgraded'\" [value]=\"statusCounts['Completed']\"\r\n [status]=\"'Completed'\"></tk-summary-card>\r\n </div>\r\n <div class=\"table-action-panel\">\r\n <tk-table-filters *ngIf=\"filters.length > 0\" [filters]=\"filters\" (filter)=\"onFilter($event)\"></tk-table-filters>\r\n <div class=\"action-wrapper\">\r\n <span>{{ filteredDataCount }} Sites</span>\r\n </div>\r\n </div>\r\n <table mat-table [dataSource]=\"data\" class=\"site-upgrade-table\">\r\n\r\n <!-- Site Column -->\r\n <ng-container matColumnDef=\"site\">\r\n <th mat-header-cell *matHeaderCellDef>Site</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"site-info\">\r\n {{ element.siteName }}\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Ready Users Column -->\r\n <ng-container matColumnDef=\"ready users\">\r\n <th mat-header-cell *matHeaderCellDef>Ready Users</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-count-info\">\r\n <div class=\"user-count\">{{ element.totalReadyUsers }}/{{ element.totalUsers }}</div>\r\n <div class=\"user-label\">Ready/Total</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Upgraded Users Column -->\r\n <ng-container matColumnDef=\"upgraded users\">\r\n <th mat-header-cell *matHeaderCellDef>Upgraded Users</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-count-info\">\r\n <div class=\"user-count\">{{ element.totalUpgradedUsers }}/{{ element.totalUsers }}</div>\r\n <div class=\"user-label\">Upgraded/Total</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Location Mapping Column -->\r\n <ng-container matColumnDef=\"location mapping\">\r\n <th mat-header-cell *matHeaderCellDef>Location Mapping</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-icon-cell\">\r\n <img *ngIf=\"element.locationMapping\" src=\"assets/icons/check2_icon.png\" alt=\"Location Mapping Enabled\"/>\r\n <img *ngIf=\"!element.locationMapping\" src=\"assets/icons/issue_icon.png\" alt=\"Location Mapping Disabled\"/>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- PSTN Trunk Column -->\r\n <ng-container matColumnDef=\"pstn trunk\">\r\n <th mat-header-cell *matHeaderCellDef>PSTN Trunk</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-icon-cell\">\r\n <img *ngIf=\"element.PSTNTrunk\" src=\"assets/icons/check2_icon.png\" alt=\"PSTN Trunk Enabled\"/>\r\n <img *ngIf=\"!element.PSTNTrunk\" src=\"assets/icons/issue_icon.png\" alt=\"PSTN Trunk Disabled\"/>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Site Upgrade Status Column -->\r\n <ng-container matColumnDef=\"site upgrade status\">\r\n <th mat-header-cell *matHeaderCellDef>Site Upgrade Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"upgrade-status-cell\">\r\n <ng-container *ngIf=\"element.upgradeStatus === 'READY'; else statusBlock\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"upgradeSite(element)\">Upgrade</button>\r\n </ng-container>\r\n <ng-template #statusBlock>\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getSiteUpgradeStatusClass(element.upgradeStatus)\"></span>\r\n <span [ngClass]=\"{'status-ready': element.upgradeStatus === 'READY'}\">{{ STATUS_ENTRIES[element.upgradeStatus] }}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"progressBar\">\r\n <th class=\"header\" mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"app-progress-bar-container\">\r\n <app-progress-bar\r\n [isAvailable]=\"element.isProgressBarAvailable\"\r\n [progress]=\"element.progress\"\r\n #progressBars>\r\n </app-progress-bar>\r\n </div>\r\n <span *ngIf=\"element.isProgressBarAvailable\" class=\"progress-percents\">\r\n {{ element.progress }} %\r\n </span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Action Column -->\r\n <ng-container matColumnDef=\"actions\">\r\n <th mat-header-cell *matHeaderCellDef>Actions</th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"progress-spinner-td\">\r\n <div class=\"flex-container\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"onSiteMigration(element)\">Upgrade</button>\r\n <button mat-icon-button [matMenuTriggerFor]=\"defaultBatchMenu\">\r\n <span style=\"font-size: 17px;\">⋮</span>\r\n </button>\r\n </div>\r\n\r\n <mat-menu\r\n #defaultBatchMenu=\"matMenu\"\r\n xPosition=\"after\"\r\n class=\"webex-action-menu\">\r\n\r\n <div class=\"webex-action-menu-row\"\r\n [ngClass]=\"{ 'webex-action-menu-row-disabled': element.pending || element.migrationFormStatus === 'NOT_PREPARED' }\"\r\n (click)=\"element.pending || element.migrationFormStatus === 'NOT_PREPARED' ? $event.stopPropagation() : onCollect(element)\">\r\n <span\r\n class=\"webex-details-icon webex-icon\"\r\n [ngClass]=\"{ 'migration-action-disabled': element.pending || element.migrationFormStatus === 'NOT_PREPARED'}\">\r\n </span>\r\n <span class=\"webex-action-menu-title\">Collect</span>\r\n </div>\r\n </mat-menu>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"userUpgradeLoader\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td class=\"mat-progress-spinner-td\" mat-cell *matCellDef=\"let element\">\r\n\r\n <mat-progress-spinner\r\n *ngIf=\"element.pending\"\r\n class=\"field-spinner\"\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n </table>\r\n</div>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { SiteUpgradeDataTableComponent } from \"./site-upgrade-data-table/site-upgrade-data-table.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { SharedModule } from \"../../shared/shared.module\";\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { ProgressBarComponent } from './progress-bar/progress-bar.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n SiteUpgradeDataTableComponent,\r\n ProgressBarComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n MatTableModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatProgressSpinnerModule\r\n\r\n ],\r\n exports: [\r\n SiteUpgradeDataTableComponent,\r\n ProgressBarComponent\r\n ]\r\n})\r\nexport class SiteUpgradeModule {\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { APIService } from \"../../shared/services/api.service\";\r\nimport { SiteInfrastructureSummary, SitesUpgradeReadiness, SitesUpgradeSummary, UpgradePreconditions, UsersUpgradeReadiness, UsersUpgradeSummary } from \"./types/upgrade-overview\";\r\nimport { map, Observable } from \"rxjs\";\r\nimport { API } from \"../../api/api.endpoints\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UpgradeOverviewService {\r\n customerId!: string;\r\n\r\n constructor(private apiService: APIService) { }\r\n\r\n getUpgradePreconditions(): Observable<UpgradePreconditions> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_UPGRADE_PRECONDITIONS.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n controlHubIntegration: resp.controlHubIntegration,\r\n numberOfAvailableLicences: resp.availableLicences\r\n };\r\n }));\r\n }\r\n\r\n getSiteInfrastructureSummary(): Observable<SiteInfrastructureSummary> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_SITE_INFRASTRUCTURE.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalSites: resp.totalSites,\r\n totalLocations: resp.totalLocations,\r\n totalPSTNs: resp.totalPSTNS\r\n };\r\n }));\r\n }\r\n\r\n getUsersUpgradeSummary(): Observable<UsersUpgradeSummary> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_USERS_UPGRADE_SUMMARY.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalUsers: resp.totalUsers,\r\n totalReadyUsers: resp.totalUsersReady,\r\n totalUpgradedUsers: resp.totalUsersUpgraded\r\n };\r\n }));\r\n }\r\n\r\n getSitesUpgradeSummary(): Observable<SitesUpgradeSummary> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_SITES_UPGRADE_SUMMARY.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalSites: resp.totalSites,\r\n totalReadySites: resp.totalSitesReady,\r\n totalUpgradedSites: resp.totalSitesUpgraded\r\n };\r\n }));\r\n }\r\n\r\n getUsersUpgradeReadiness(): Observable<UsersUpgradeReadiness> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_USERS_UPGRADE_READINESS.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalUsers: resp.totalUsers,\r\n totalReadyUsers: resp.totalUsersReady\r\n };\r\n }));\r\n }\r\n\r\n getSitesUpgradeReadiness(): Observable<SitesUpgradeReadiness> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_SITES_UPGRADE_READINESS.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalSites: resp.totalSites,\r\n totalReadySites: resp.totalSitesReady\r\n };\r\n }));\r\n }\r\n}","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { UsersUpgradeReadiness } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: 'tk-ready-to-upgrade-users-card',\r\n templateUrl: './ready-to-upgrade-users-card.component.html',\r\n styleUrls: ['./ready-to-upgrade-users-card.component.scss']\r\n})\r\nexport class ReadyToUpgradeUsersCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Ready Users';\r\n type: any = 'user';\r\n readinessStats!: UsersUpgradeReadiness;\r\n upgradeStatus: any = 'ready';\r\n\r\n loading: boolean = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n \r\n this.loading = true;\r\n this.upgradeOverviewService.getUsersUpgradeReadiness()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats) => {\r\n this.readinessStats = stats;\r\n this.loading = false;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}"," <tk-stat-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [type]=\"type\"\r\n [readinessStats]=\"readinessStats\"\r\n [upgradeStatus]=\"upgradeStatus\">\r\n </tk-stat-card>","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { SitesUpgradeReadiness } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: 'tk-ready-to-upgrade-sites-card',\r\n templateUrl: './ready-to-upgrade-sites-card.component.html',\r\n styleUrls: ['./ready-to-upgrade-sites-card.component.scss']\r\n})\r\nexport class ReadyToUpgradeSitesCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Ready Sites';\r\n type: any = 'site';\r\n readinessStats!: SitesUpgradeReadiness;\r\n upgradeStatus: any = 'ready';\r\n\r\n loading: boolean = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n \r\n this.loading = true;\r\n this.upgradeOverviewService.getSitesUpgradeReadiness()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats) => {\r\n this.readinessStats = stats;\r\n this.loading = false;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}"," <tk-stat-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [type]=\"type\"\r\n [readinessStats]=\"readinessStats\"\r\n [upgradeStatus]=\"upgradeStatus\">\r\n </tk-stat-card>","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { UsersUpgradeSummary } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n\r\n@Component({\r\n selector: 'tk-already-upgraded-users-card',\r\n template: `\r\n <tk-stat-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [type]=\"type\"\r\n [readinessStats]=\"readinessStats\"\r\n [upgradeStatus]=\"upgradeStatus\"\r\n ></tk-stat-card>\r\n `\r\n})\r\nexport class AlreadyUpgradedUsersCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Upgraded Users';\r\n type: any = 'user';\r\n readinessStats!: UsersUpgradeSummary;\r\n upgradeStatus: any = 'already';\r\n\r\n loading: boolean = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n\r\n this.loading = true;\r\n this.upgradeOverviewService.getUsersUpgradeSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats) => {\r\n this.readinessStats = stats;\r\n this.loading = false;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { SitesUpgradeSummary } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: 'tk-already-upgraded-sites-card',\r\n template: `\r\n <tk-stat-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [type]=\"type\"\r\n [readinessStats]=\"readinessStats\"\r\n [upgradeStatus]=\"upgradeStatus\"\r\n ></tk-stat-card>\r\n `\r\n})\r\nexport class AlreadyUpgradedSitesCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Upgraded Sites';\r\n type: 'site' | 'user' = 'site';\r\n readinessStats!: SitesUpgradeSummary;\r\n upgradeStatus: any = 'already';\r\n\r\n loading: boolean = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n\r\n this.loading = true;\r\n this.upgradeOverviewService.getSitesUpgradeSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats) => {\r\n this.readinessStats = stats;\r\n this.loading = false;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","import { Component, inject, Input, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { UpgradePreconditions } from \"../../types/upgrade-overview\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n\r\n@Component({\r\n selector: 'tk-preconditions-status-list-card',\r\n template: `\r\n <tk-status-list-card \r\n [title]=\"title\"\r\n [items]=\"items\"\r\n ></tk-status-list-card>\r\n `,\r\n styles: [` :host { width: 100%; } `]\r\n})\r\nexport class PreconditionsStatusListCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private destroy$ = new Subject<void>();\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Preconditions';\r\n preconditions!: UpgradePreconditions;\r\n\r\n items: any;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n \r\n this.upgradeOverviewService.getUpgradePreconditions()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((resp) => {\r\n this.preconditions = resp;\r\n this.init();\r\n });\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.items = [\r\n {\r\n label: 'Control Hub Integration',\r\n description: 'Control Hub Connectivity',\r\n status: this.preconditions.controlHubIntegration === 'CONNECTED'\r\n },\r\n {\r\n label: 'SIP Trunk (Local Gateway)',\r\n description: 'CUCM trunk connectivity estabilished',\r\n status: false\r\n },\r\n {\r\n label: `${this.preconditions.numberOfAvailableLicences} Available User Licences`,\r\n description: 'Webex calling licences provisioned and assgined',\r\n status: this.preconditions.numberOfAvailableLicences > 0\r\n }\r\n ];\r\n }\r\n}","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { SiteInfrastructureSummary } from \"../../types/upgrade-overview\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: 'tk-site-infrastructure-status-list-card',\r\n template: `\r\n <tk-status-list-card \r\n [title]=\"title\"\r\n [items]=\"items\"\r\n ></tk-status-list-card>\r\n `,\r\n styles: [` :host { width: 100%; } `]\r\n})\r\nexport class SiteInfrastructureStatusListCardComponent implements OnInit {\r\n title: string = 'Site Infrastructure';\r\n items: any;\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n\r\n this.upgradeOverviewService.getSiteInfrastructureSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((siteInfrastructure) => {\r\n this.items = [\r\n {\r\n label: 'PSTN Trunk',\r\n description: 'Public network connectivity',\r\n status: false,\r\n totalSites: siteInfrastructure.totalSites,\r\n value: siteInfrastructure.totalPSTNs\r\n },\r\n {\r\n label: 'Location Mapping',\r\n description: 'Sites defined in Control Hub with proper configuration',\r\n status: false,\r\n totalSites: siteInfrastructure.totalSites,\r\n value: siteInfrastructure.totalLocations\r\n }\r\n ];\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { UsersUpgradeSummary, SitesUpgradeSummary } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: \"tk-upgrade-state-comparison-chart-card\",\r\n template: `\r\n <tk-chart-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [totalUpgraded]=\"totalUpgraded\"\r\n [totalNotUpgraded]=\"totalNotUpgraded\"\r\n ></tk-chart-card>\r\n `,\r\n styles: [`\r\n :host {\r\n width: 100%\r\n } \r\n `]\r\n})\r\nexport class UpgradeStateComparisonChartCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n \r\n @Input() type: 'Users' | 'Sites' = 'Users';\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title!: string;\r\n totalUpgraded!: number;\r\n totalNotUpgraded!: number;\r\n\r\n loading = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n\r\n this.totalUpgraded = 0;\r\n this.totalNotUpgraded = 0;\r\n this.loading = true;\r\n this.title = `Upgraded vs. Not Upgraded ${this.type}`;\r\n if (this.type === 'Sites') {\r\n this.upgradeOverviewService.getSitesUpgradeSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats: any) => {\r\n this.totalUpgraded = parseInt(stats.totalUpgradedSites);\r\n this.totalNotUpgraded = parseInt(stats.totalReadySites);\r\n this.loading = false;\r\n });\r\n } else {\r\n this.upgradeOverviewService.getUsersUpgradeSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats: any) => {\r\n this.totalUpgraded = parseInt(stats.totalUpgradedUsers);\r\n this.totalNotUpgraded = parseInt(stats.totalReadyUsers);\r\n this.loading = false;\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","import { NgModule } from \"@angular/core\";\r\nimport { ReadyToUpgradeUsersCardComponent } from \"./cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { SharedModule } from \"../../shared/shared.module\";\r\nimport { ReadyToUpgradeSitesCardComponent } from \"./cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component\";\r\nimport { AlreadyUpgradedUsersCardComponent } from \"./cards/already-upgraded-users/already-upgraded-users-card.component\";\r\nimport { AlreadyUpgradedSitesCardComponent } from \"./cards/already-upgraded-sites/already-upgraded-sites-card.component\";\r\nimport { PreconditionsStatusListCardComponent } from \"./cards/preconditions-status-list/preconditions-status-list-card.component\";\r\nimport { SiteInfrastructureStatusListCardComponent } from \"./cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component\";\r\nimport { UpgradeStateComparisonChartCardComponent } from \"./cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component\";\r\nimport { APIService } from \"../../shared/services/api.service\";\r\nimport { UserUpgradeService } from \"../user-upgrade/user-upgrade.service\";\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n ReadyToUpgradeUsersCardComponent,\r\n ReadyToUpgradeSitesCardComponent,\r\n AlreadyUpgradedUsersCardComponent,\r\n AlreadyUpgradedSitesCardComponent,\r\n PreconditionsStatusListCardComponent,\r\n SiteInfrastructureStatusListCardComponent,\r\n UpgradeStateComparisonChartCardComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule\r\n ],\r\n exports: [\r\n ReadyToUpgradeUsersCardComponent,\r\n ReadyToUpgradeSitesCardComponent,\r\n AlreadyUpgradedUsersCardComponent,\r\n AlreadyUpgradedSitesCardComponent,\r\n PreconditionsStatusListCardComponent,\r\n SiteInfrastructureStatusListCardComponent,\r\n UpgradeStateComparisonChartCardComponent\r\n ],\r\n providers: [\r\n \r\n ]\r\n})\r\nexport class UpgradeOverviewModule {}","/*\r\n * Public API Surface of @tuki-io/tuki-widgets\r\n */\r\n\r\n// Shared Components\r\n// export * from './shared/shared.module';\r\n\r\n// Widget Modules\r\nexport * from './widgets/user-upgrade/user-upgrade.module';\r\nexport * from './widgets/site-upgrade/site-upgrade.module';\r\nexport * from './widgets/upgrade-overview/upgrade-overview.module';\r\n\r\n// Components\r\n// export * from './shared/components/index';\r\nexport * from './widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component';\r\nexport * from './widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component';\r\nexport * from './widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component';\r\nexport * from './widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component';\r\nexport * from './widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component';\r\nexport * from './widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component';\r\nexport * from './widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component';\r\nexport * from './widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component';\r\nexport * from './widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component';\r\nexport * from './widgets/site-upgrade/progress-bar/progress-bar.component';\r\n\r\n// Types\r\n// export * from './shared/types/data-table';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["API","i1","i2.SummaryCardComponent","i3.TableFiltersComponent","i4","i5","i6","i2.CardComponent","map","catchError","i8.ProgressBarComponent","i1.APIService","i2.StatCardComponent","i1.StatusListCardComponent","i2.ChartCardComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tuki-io-tuki-widgets-di2mt.mjs","sources":["../../../../projects/tuki/widgets/di2mt/api/api.endpoints.ts","../../../../projects/tuki/widgets/di2mt/shared/services/api.service.ts","../../../../projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.service.ts","../../../../projects/tuki/widgets/di2mt/shared/types/constants.ts","../../../../projects/tuki/widgets/di2mt/shared/constants/app.constants.ts","../../../../projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/summary-card/summary-card.component.html","../../../../projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/table-filters/table-filters.component.html","../../../../projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component.html","../../../../projects/tuki/widgets/di2mt/shared/components/card/card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/card/card.component.html","../../../../projects/tuki/widgets/di2mt/shared/material.module.ts","../../../../projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/stat-card/stat-card.component.html","../../../../projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/status-list-card/status-list-card.component.html","../../../../projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.ts","../../../../projects/tuki/widgets/di2mt/shared/components/chart-card/chart-card.component.html","../../../../projects/tuki/widgets/di2mt/shared/shared.module.ts","../../../../projects/tuki/widgets/di2mt/widgets/user-upgrade/user-upgrade.module.ts","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.service.ts","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.html","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.html","../../../../projects/tuki/widgets/di2mt/widgets/site-upgrade/site-upgrade.module.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.service.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component.html","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component.html","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component.ts","../../../../projects/tuki/widgets/di2mt/widgets/upgrade-overview/upgrade-overview.module.ts","../../../../projects/tuki/widgets/di2mt/public-api.ts","../../../../projects/tuki/widgets/di2mt/tuki-io-tuki-widgets-di2mt.ts"],"sourcesContent":["export const API = {\r\n OVERVIEW: {\r\n GET_UPGRADE_PRECONDITIONS: '/api/webex-upgrade/customers/:customerId/preconditions/fetch',\r\n GET_SITE_INFRASTRUCTURE: '/api/webex-upgrade/customers/:customerId/infra/fetch',\r\n GET_USERS_UPGRADE_SUMMARY: '/api/webex-upgrade/customers/:customerId/users/upgrade/fetch',\r\n GET_SITES_UPGRADE_SUMMARY: '/api/webex-upgrade/customers/:customerId/sites/upgrade/fetch',\r\n GET_USERS_UPGRADE_READINESS: '/api/webex-upgrade/customers/:customerId/users/readiness/fetch',\r\n GET_SITES_UPGRADE_READINESS: '/api/webex-upgrade/customers/:customerId/sites/readiness/fetch'\r\n },\r\n USER_UPGRADE: {\r\n GET_USERS_UPGRADE_DATA: '/api/webex-upgrade/customers/:customerId/user-upgrade',\r\n GET_USERS_UPGRADE_STATUS_COUNTS: '/api/webex-upgrade/customers/:customerId/user-upgrades/status-counts',\r\n UPGRADE_USER: '/api/migration/webex/sites/:siteId/users/:userId',\r\n SINGLE_COLLECT: '/api/migration/webex/singlecollect/features/:featureName',\r\n SINGLE_MIGRATION: '/api/migration/webex/singlemigration/features/:featureName',\r\n UPGRADE_STATUS: '/api/webex-upgrade/customers/:customerId/users/upgrade-status'\r\n },\r\n SITE_UPGRADE: {\r\n GET_SITES_UPGRADE_DATA: '/api/webex-upgrade/customers/:customerId/site-upgrades',\r\n GET_SITES_UPGRADE_STATUS_COUNTS: '/api/webex-upgrade/customers/:customerId/site-upgrades/status-counts',\r\n WEBEX_CACHE_COLLECTION: '/api/migration/:migrationType/sites/:siteId/collectbuildwebexcache',\r\n UPGRADE_SITE: '/api/migration/webex/sites/:siteId',\r\n WEBEX_BATCH_STATUS: \"/api/migration/webex/customer/:customerId/batchesstatus\",\r\n MIGRATE_SITE: \"/api/migration/webex/sites/:siteId/migrate\",\r\n BATCH_STATUS: \"/api/e2emigration/batches-status/:customerId\",\r\n GET_BATCH_SITES: \"/api/e2emigration/batch/:customerId/Sites\",\r\n WEBEX_CACHE_COLLECTION_SITE_LIST: \"/api/migration/webex/customers/:customerId/sitelistforcollectbuildwebexcache\",\r\n WEBEX_CACHE_COLLECTION_CUCM_LIST: \"/api/migration/webex/customers/:customerId/cucmlistforcollectbuildwebexcache\",\r\n MIGRATION_STATUS: \"/api/migration/state/webex/customers/:customerId/migrationstatus\"\r\n }\r\n};\r\n","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\n public token: any;\r\n apiUrl = window.location.protocol + '//' + window.location.hostname + '/dcp';\r\n constructor(\r\n private httpClient: HttpClient\r\n ) {\r\n this.token = 'eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbkBjb3JyZW5ldC5jb20iLCJyb2xlcyI6IlNVUEVSX1VTRVIiLCJpYXQiOjE3NTUwODUyMzgsImV4cCI6MTc1NTEwMzIzOH0.X1CKx-OBZvSs7Bzr_4SWW2ulBgHNkYZrmVuv6V7FZyo'\r\n // this.apiUrl = window.location.protocol + '//' + window.location.host + '/dcp';\r\n this.apiUrl = 'https://dev.tuki.io/webex';\r\n // this.apiUrl = 'http://localhost:8088/dcp';\r\n }\r\n\r\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n const headers = this.getHeaders(cache);\r\n params = params || {};\r\n return this.httpClient.get(this.apiUrl + url, {params: this.prepareEncodedParams(params), headers});\r\n }\r\n\r\n post(url: string, body: any, params = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {params: this.prepareEncodedParams(params), headers});\r\n }\r\n\r\n // use when response extended data is necessary:\r\n postExtended(url: string, body = null, params = {}, headers = {}) {\r\n headers = headers || this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {\r\n headers,\r\n observe: 'response',\r\n params: this.prepareEncodedParams(params)\r\n });\r\n }\r\n\r\n put(url: string, body = null, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.put(this.apiUrl + url, body, {headers, params: this.prepareEncodedParams(params)});\r\n }\r\n\r\n delete(url: string, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.delete(this.apiUrl + url, {headers, params: this.prepareEncodedParams(params)});\r\n }\r\n\r\n fetchPagination(url: string, pageSize: number, pageNumber: number, additionalParams = {}, cache?: boolean): Observable<any> {\r\n const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));\r\n const params = Object.assign(copyAdditionalParams, {size: pageSize.toString(), page: pageNumber.toString()});\r\n return this.fetch(url, params, cache) as Observable<any>;\r\n }\r\n\r\n private prepareEncodedParams(params: any) {\r\n const result: any = {};\r\n\r\n if (!params) {\r\n return {};\r\n }\r\n for (const key of Object.keys(params)) {\r\n if (params[key]) {\r\n const stringParam = params[key].toString();\r\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private getHeaders(cache?: boolean): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n if (cache) {\r\n headers = headers.append('_Cache', 'true ');\r\n }\r\n const token = this.token || this.getParameterByName('token');\r\n headers = headers.append('Authorization', 'Bearer '+ token);\r\n return headers;\r\n }\r\n\r\n private getParameterByName(name: any, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { UserUpgradeRecord } from \"./types/user-upgrade\";\r\nimport { catchError, map, Observable, of, throwError } from \"rxjs\";\r\nimport { API } from \"../../api/api.endpoints\";\r\nimport { APIService } from \"../../shared/services/api.service\";\r\nimport { Status, UpgradeStatus } from '../../shared/types/constants';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UserUpgradeService {\r\n private apiService = inject(APIService);\r\n\r\n customerId!: string;\r\n\r\n usersDataSource!: UserUpgradeRecord[];\r\n filteredUsersDataSource!: UserUpgradeRecord[];\r\n\r\n // TODO: Impl the user upgrade logic here\r\n bulkUpgrade(users: UserUpgradeRecord[]): Observable<unknown> {\r\n const body = this.generateUserUpgradeBody(users);\r\n console.log('bulkUpgrade', users);\r\n\r\n console.log(body);\r\n\r\n // This is not done yet...\r\n return this.apiService.post(\r\n API.USER_UPGRADE.SINGLE_MIGRATION.replace(':featureName', \"PERSON\"),\r\n body,\r\n {}\r\n ).pipe(catchError((err) => of(err)));\r\n }\r\n\r\n collectUsers(users: UserUpgradeRecord[]): Observable<unknown> {\r\n const body = this.generateUserUpgradeBody(users);\r\n\r\n console.log('collectUsers', body);\r\n\r\n // This is not done yet...\r\n return this.apiService.post(\r\n API.USER_UPGRADE.SINGLE_COLLECT.replace(':featureName', 'PERSON'),\r\n body,\r\n {}\r\n ).pipe(catchError((err) => of(err)));\r\n }\r\n\r\n getUsersUpgradeStatuses(users: UserUpgradeRecord[]): Observable<User2UpgradeStatusDTO[]> {\r\n const body = this.generateUserUpgradeStatusBody(users);\r\n\r\n console.log('getUsersUpgradeStatuses', body);\r\n\r\n // This is not done yet...\r\n return this.apiService.post(\r\n API.USER_UPGRADE.UPGRADE_STATUS.replace(':customerId', this.customerId),\r\n body,\r\n {}\r\n ).pipe(catchError((err) => of(err)));\r\n }\r\n\r\n\r\n generateUserUpgradeBody(users: UserUpgradeRecord[]): UserUpgradeBody {\r\n const entities = users.map(record => ({cucmId: record.cucmId, entityId: record.userId}));\r\n const customerId = users[0].customerId;\r\n\r\n return {\r\n customerId,\r\n entities: {\r\n PERSON: entities\r\n }\r\n };\r\n }\r\n\r\n generateUserUpgradeStatusBody(users: UserUpgradeRecord[]): Record<string, string[]> {\r\n const body: Record<string, string[]> = {};\r\n body[String(users[0].cucmId)] = users.map(user => String(user.userId));\r\n return body;\r\n }\r\n\r\n getUserUpgradeStatusCounts(): Observable<any> {\r\n return this.apiService.fetch(\r\n API.USER_UPGRADE.GET_USERS_UPGRADE_STATUS_COUNTS.replace(':customerId', this.customerId)\r\n );\r\n }\r\n\r\n getUserUpgradeRecords(pageSize: number, pageIndex: number): Observable<any> {\r\n return this.apiService.fetchPagination(\r\n API.USER_UPGRADE.GET_USERS_UPGRADE_DATA.replace(':customerId', this.customerId),\r\n pageSize,\r\n pageIndex\r\n );\r\n }\r\n}\r\n\r\nexport type UserUpgradeBody = {\r\n customerId: string;\r\n entities: {\r\n PERSON: { cucmId: number; entityId: string }[];\r\n };\r\n};\r\n\r\nexport class User2UpgradeStatusDTO {\r\n userId!: string;\r\n cucmId!: string;\r\n upgradeStatus!: Status | UpgradeStatus;\r\n\r\n}\r\n","export type Status = 'Ready' | 'Not Ready' | 'Partial Ready' | 'Failed' | 'Completed';\r\nexport type UpgradeStatus = 'READY' | 'NOT_READY' | 'PARTIAL_READY' | 'FAILED' | 'COMPLETED';\r\n\r\nexport const STATUS_ENTRIES: { [key: string]: Status } = {\r\n READY: 'Ready',\r\n NOT_READY: 'Not Ready',\r\n PARTIAL_READY: 'Partial Ready',\r\n FAILED: 'Failed',\r\n COMPLETED: 'Completed'\r\n};\r\n\r\nexport const DEPENDENCIES_STATUS: { [key: string]: string } = {\r\n DEPENDENCIES_FOUND: 'Dependencies found',\r\n NO_DEPENDENCIES: 'No dependencies',\r\n};\r\nexport enum UPGRADE_STATUS {\r\n NOT_READY = 'not_ready',\r\n READY = 'ready',\r\n COMPLETED = 'completed',\r\n IN_PROGRESS = 'in progress',\r\n FAILED = 'failed'\r\n}\r\n","export const API = {\r\n USER_TOKEN: '/api/provision/:siteId/users/:userId/token',\r\n UPDATE_USER_FIELDS: '/api/provision/:siteId/userFields/:token',\r\n PERSIST_USER_CACHE: '/api/provision/:siteId/saveUser/:token',\r\n USER_BY_ID: '/api/provision/:siteId/users/:userId',\r\n QUICK_USERS_SEARCH: \"/api/search/quickusers\",\r\n LOCATION: \"/api/provision/options/:siteId/locations\",\r\n USER_LOCALES: \"/api/provision/options/:siteId/userlocales\",\r\n USER_PROFILES: \"/api/provision/options/:siteId/userprofiles\",\r\n RECORDING_PROFILE: \"/api/provision/options/:siteId/recordingprofiles\",\r\n AVAILABLE_DN_IN_RANGES: \"/api/sites/:siteId/available-dn-in-ranges\",\r\n DELETE_LINE: \"/api/provision/:siteId/deleteLine/:pkid/:token\",\r\n DISASSOCIATE_LINE: \"/api/provision/:siteId/:deviceName/deleteLineAssociation/:linePkid/:token\",\r\n CHECK_DELETE_LINE: \"/api/provision/:siteId/checklinedeletion\",\r\n ASSOCIATE_LINE: \"/api/provision/:siteId/:deviceName/createLineAssociation/:token\",\r\n CHECK_DESTINATION_NUMBER: \"/api/provision/:siteId/check-dn\",\r\n UPDATE_LINE_FIELDS: \"/api/provision/:siteId/lineFields/:pkid/:token\",\r\n UPDATE_DEVICE_FIELDS: \"/api/provision/:siteId/deviceFields/:deviceName/:token\",\r\n SOFTKEY_TEMPLATES: \"/api/provision/options/:siteId/softkeytemplates\",\r\n SITE_SETTINGS: \"/api/sites/:siteId/settings\",\r\n LINE_SLOTS: \"/api/provision/:siteId/buttontemplate\",\r\n LEAN_USER_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/leanUserDetailsToken\",\r\n LEAN_USER_DEVICES_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/leanUserDevicesToken\",\r\n LEAN_USER_LINES_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/:leanUserDevicesToken/leanUserLinesToken\",\r\n LEAN_USER_SNR_CONVERSATION_START: \"/api/provision/:siteId/leanUsers/:userId/leanUserSNRToken\",\r\n DEVICE_LINE_MONITOR_CSS: \"/api/provision/options/:siteId/callingSearchSpace\"\r\n};\r\nexport const REGEX_PATTERN = {\r\n EMAIL: '^(([^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\"]+(\\\\.[^<>()\\\\[\\\\]\\\\\\\\.,;:\\\\s@\"]+)*)|(\".+\"))' +\r\n '@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,62}[a-zA-Z0-9])' +\r\n '?(?:\\\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?)*$'\r\n};\r\n\r\nexport const PAGINATION_DEFAULTS = {\r\n SIZE: 10,\r\n INDEX: 0\r\n}\r\nexport const PAGINATION_SIZE_OPTIONS = [\r\n 10,\r\n 50,\r\n 100,\r\n 500\r\n];\r\nexport const CUCS_TO_IGNORE = [\r\n 189,\r\n 194,\r\n 191,\r\n 190\r\n];\r\nexport const CUCMS_TO_IGNORE = [\r\n 249,\r\n 255,\r\n 251,\r\n 250\r\n];\r\nexport const RECORDING_MEDIA_SOURCE = [\r\n \"Gateway Preferred\",\r\n \"Phone Preferred\"\r\n];\r\nexport const STATIC_OPTIONS = {\r\n CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_ACTIVE: ['Use System Default', 'Disable', 'Beep Only'],\r\n CALL_PICKUP_GROUP_AUDIO_SETTING_PHONE_IDLE: ['Use System Default', 'Disable', 'Ring Once'],\r\n CONF_ACCESS_MODE: ['Fixed', 'Variable'],\r\n DEFAULT_ON_OFF: ['Default', 'On', 'Off'],\r\n DEFAULT_EN_DIS: ['Default', 'Enabled', 'Disabled'],\r\n DND: ['Use Common Phone Profile Setting', 'Call Reject', 'Ringer Off'],\r\n DND_INCOMING_CALL_ALLERT: ['Disable', 'Flash Only', 'Beep Only'],\r\n LATENT_CAPABILITY: ['Gateway Controlled', 'Modem Relay', 'Modem Passthrough', 'Modem Relay and Passthrough', 'None'],\r\n LINE_MODE: ['Session Line mode', 'Enhanced Line mode'],\r\n ACTIONABLE_ALERT: ['Disabled', 'Show for all Incoming Call', 'Show for Invisible Incoming Call'],\r\n MLPP_PREEMPTION: ['Default', 'Forceful', 'Disabled'],\r\n PACKET_CAPTURE_MODE: ['None', 'Batch Processing Mode'],\r\n RING_VOLUME: ['0-Silent', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'],\r\n PORT_DIRECTION: ['Bothways', 'Inbound', 'Outbound'],\r\n RING_SETTING_IDLE: ['Use System Default', 'Disable' , 'Flash Only' , 'Ring Once' , 'Ring'],\r\n RING_SETTING_ACTIVE: ['Use System Default', 'Disable' , 'Flash Only' , 'Ring Once' , 'Ring', 'Beep Only'],\r\n SERVICE_PROVISIONING: ['Default', 'Internal', 'External URL', 'Both'],\r\n SETTINGS_ACCES: ['Enabled', 'Disabled', 'Restricted'],\r\n VISUAL_MWI: ['Use System Policy', 'Light and Prompt' , 'Prompt Only' , 'Light Only' , 'None'],\r\n WEEKDAYS: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n BUILD_BRIDGE: ['None', 'On', 'Off', 'Default'],\r\n TRANSFER_TYPES: ['Release to Switch', 'Supervise Transfer'],\r\n EXTENSION_IS_BUSY_TYPES: ['Send Callers to Voicemail', 'Put Callers on Hold Without Asking', 'Ask Callers to Hold'],\r\n CALL_ACTIONS: ['Hang Up', 'Restart Greeting', 'Route From Next Call Routing Rule', 'Take Message'],\r\n AUTHENTICATION_802: ['User controlled', 'Disabled', 'Enabled'],\r\n CERTIFICATE_OPERATION: ['No Pending Operation', 'Install/Upgrade', 'Delete', 'Troubleshoot' ],\r\n AUTHENTICATION_MODE: ['By Authentication String', 'By Null String', 'By Existing Certificate (precedence to LSC)', 'By Existing Certificate (precedence to MIC)'],\r\n KEY_ORDER: ['RSA Only', 'EC Only', 'EC Preferred, RSA Backup'],\r\n RSA_KEY_SIZE: ['512', '1024', '2048'],\r\n RSA_KEY_SIZE_SPECIFIC_DEVICE: ['512', '1024', '2048', '3072', '4096']\r\n};\r\n\r\nexport const TOGGLE_TYPES = {\r\n TABS: 'TABS',\r\n ASSOCIATED_LINE_ONLY: 'ASSOCIATED_LINE_ONLY'\r\n}\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'tk-summary-card',\r\n templateUrl: './summary-card.component.html',\r\n styleUrls: ['./summary-card.component.scss']\r\n})\r\nexport class SummaryCardComponent {\r\n @Input() value: number = 41;\r\n @Input() status: string = 'Ready';\r\n @Input() description!: string;\r\n\r\n getStatusClass(status: string): string {\r\n switch (status?.toLowerCase()) {\r\n case 'ready':\r\n return 'ready';\r\n case 'not ready':\r\n return 'not-ready';\r\n case 'failed':\r\n return 'failed';\r\n case 'completed':\r\n return 'completed';\r\n default:\r\n return 'not-ready';\r\n }\r\n }\r\n}","<article class=\"summary-card\">\r\n <header class=\"summary-card__header\">\r\n <h2>{{ value }}</h2>\r\n </header>\r\n <div class=\"summary__card-description\">\r\n <span>{{ description }}</span>\r\n <div class=\"summary__card-status-wrapper\">\r\n <span class=\"summary__card-status-indicator\" [ngClass]=\"getStatusClass(status)\"></span>\r\n <span [ngClass]=\"{'status-ready': status === 'ready'}\">{{ status }}</span>\r\n </div>\r\n </div>\r\n</article>\r\n","import { Component, EventEmitter, Input, OnInit, Output } from \"@angular/core\";\r\nimport { FilterKind, TableFilter } from \"../../types/table/filter\";\r\n\r\n@Component({\r\n selector: 'tk-table-filters',\r\n templateUrl: './table-filters.component.html',\r\n styleUrls: ['./table-filters.component.scss']\r\n})\r\nexport class TableFiltersComponent implements OnInit {\r\n @Input() filters!: TableFilter[];\r\n\r\n @Output() filter = new EventEmitter<{ key: string, value: any }>()\r\n\r\n ngOnInit(): void {\r\n if (this.filters) {\r\n this.filters.forEach(filter => {\r\n if (filter.type === 'select' && !filter.options.some(opt => opt.value === 'all')) {\r\n filter.options.unshift({ label: 'All', value: 'all' });\r\n }\r\n });\r\n }\r\n }\r\n\r\n onFilter(key: string, value: any): void {\r\n const val = { key, value };\r\n this.filter.emit(val);\r\n }\r\n}","<div class=\"filters-wrapper\">\r\n <ng-container *ngFor=\"let filter of filters\">\r\n <div class=\"filter\">\r\n <ng-container [ngSwitch]=\"filter.type\">\r\n <!-- Search Input with Material Design -->\r\n <mat-form-field *ngSwitchCase=\"'search'\" appearance=\"outline\" class=\"search-field custom-mat-form-field\">\r\n<!-- <mat-label>{{ filter.placeholder }}</mat-label>-->\r\n <input matInput\r\n [placeholder]=\"filter.placeholder\"\r\n (input)=\"onFilter(filter.columnKey, $event)\">\r\n <mat-icon matPrefix class=\"search-icon\">\r\n <img src=\"assets/icons/search_icon.png\" alt=\"Search\" />\r\n </mat-icon>\r\n </mat-form-field>\r\n\r\n <!-- Select Dropdown with Material Design -->\r\n <mat-form-field *ngSwitchCase=\"'select'\" appearance=\"outline\" class=\"select-field custom-mat-form-field\">\r\n <mat-label>{{ filter.placeholder }}</mat-label>\r\n <mat-select (selectionChange)=\"onFilter(filter.columnKey, $event)\">\r\n <mat-option *ngFor=\"let option of filter.options\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </ng-container>\r\n </div>\r\n </ng-container>\r\n</div>\r\n","import { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { Component, OnInit, OnDestroy, inject, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { TableColumn } from \"../../../shared/types/data-table\";\r\nimport { TableFilter } from \"../../../shared/types/table/filter\";\r\nimport { catchError, of, Subject, Subscription } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { User2UpgradeStatusDTO, UserUpgradeService } from \"../user-upgrade.service\";\r\nimport { DEPENDENCIES_STATUS, Status, STATUS_ENTRIES } from \"../../../shared/types/constants\";\r\nimport { UserUpgradeRecord } from \"../types/user-upgrade\";\r\nimport { APIService } from \"../../../shared/services/api.service\";\r\nimport { PAGINATION_SIZE_OPTIONS } from \"../../../shared/constants/app.constants\";\r\nimport { PageEvent } from '@angular/material/paginator';\r\n\r\n@Component({\r\n selector: 'tk-user-upgrade-data-table',\r\n templateUrl: './user-upgrade-data-table.component.html',\r\n styleUrls: ['./user-upgrade-data-table.component.scss'],\r\n // encapsulation: ViewEncapsulation.ShadowDom\r\n})\r\nexport class UserUpgradeDataTableComponent implements OnInit, OnDestroy {\r\n private destroy$ = new Subject<void>();\r\n private userUpgradeService = inject(UserUpgradeService);\r\n private apiService = inject(APIService);\r\n readonly STATUS_ENTRIES = STATUS_ENTRIES;\r\n readonly DEPENDENCIES_STATUS = DEPENDENCIES_STATUS;\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n columns!: TableColumn[];\r\n dataPending = false;\r\n data!: MatTableDataSource<UserUpgradeRecord>;\r\n displayedColumns: string[] = ['select', 'user', 'site', 'device', 'dialPlanStatus', 'dependencies', 'userUpgradeStatus', 'userUpgradeLoader'];\r\n selection = new SelectionModel<UserUpgradeRecord>(true, []);\r\n filters: TableFilter[] = [];\r\n pagination = new PaginationDataDto();\r\n users: UserUpgradeRecord[] = [];\r\n private subscriptions = new Subscription();\r\n\r\n statusCounts: any = {};\r\n\r\n private activeFilters: { [key: string]: any } = {};\r\n\r\n ngOnInit(): void {\r\n this.dataPending = true;\r\n this.apiService.token = this.token;\r\n this.userUpgradeService.customerId = this.customerId;\r\n\r\n const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((results: any) => {\r\n const records = results.content as UserUpgradeRecord[]\r\n this.data = new MatTableDataSource(records);\r\n this.pagination.total = results.totalElements;\r\n this.dataPending = false;\r\n this.setupCustomFilter();\r\n this.initializeFilters(records);\r\n });\r\n this.subscriptions.add(subsc1);\r\n\r\n const subsc2 = this.userUpgradeService.getUserUpgradeStatusCounts()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((statusCounts) => {\r\n this.statusCounts['Ready'] = statusCounts['READY'] || 0;\r\n this.statusCounts['Not Ready'] = statusCounts['NOT_READY'] || 0;\r\n this.statusCounts['Completed'] = statusCounts['COMPLETED'] || 0;\r\n this.statusCounts['Failed'] = statusCounts['FAILED'] || 0;\r\n });\r\n this.subscriptions.add(subsc2);\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.dataPending = false;\r\n\r\n if (this.subscriptions) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n\r\n onMultipleDevices(user: UserUpgradeRecord): void {\r\n user.showDevices = !user.showDevices;\r\n }\r\n\r\n pageEvent (event: PageEvent): void {\r\n this.pagination.pageIndex = event.pageIndex;\r\n this.pagination.pageSize = event.pageSize;\r\n this.getData();\r\n }\r\n\r\n changePerPageNumber(pageSizeEvent: any): void {\r\n this.pagination.pageSize = pageSizeEvent.value;\r\n this.pagination.pageIndex = 0;\r\n this.getData();\r\n }\r\n\r\n private getData(): void {\r\n this.dataPending = true;\r\n const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((result) => {\r\n\r\n this.data = new MatTableDataSource(result.content);\r\n this.pagination.total = result.totalElements;\r\n this.dataPending = false;\r\n });\r\n this.subscriptions.add(subsc1);\r\n }\r\n\r\n private initializeFilters(records: any[]): void {\r\n if (records?.length) {\r\n // Extract unique sites from actual data\r\n const uniqueSites = [...new Set(records.map(record => record.siteName))];\r\n const siteOptions = uniqueSites.map(site => ({\r\n label: site,\r\n value: site.toLowerCase().replace(/\\s+/g, '-')\r\n }));\r\n\r\n // Extract unique statuses from actual data\r\n const uniqueStatuses = [...new Set(records.map(record => record.upgradeStatus))];\r\n const statusOptions = uniqueStatuses.map(status => ({\r\n label: STATUS_ENTRIES[status],\r\n value: status.toLowerCase().replace(/\\s+/g, '-')\r\n }));\r\n\r\n this.filters = [\r\n {\r\n id: 'userName',\r\n type: 'search',\r\n columnKey: 'User',\r\n placeholder: 'Search users...',\r\n options: []\r\n },\r\n {\r\n id: 'sites',\r\n type: 'select',\r\n columnKey: 'Site',\r\n placeholder: 'Sites',\r\n options: siteOptions\r\n },\r\n {\r\n id: 'status',\r\n type: 'select',\r\n columnKey: 'User Upgrade Status',\r\n placeholder: 'Upgrade Status',\r\n options: statusOptions\r\n }\r\n ];\r\n }\r\n }\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.data?.data.length ?? 0;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n // this.isAllSelected() ?\r\n // this.selection.clear() :\r\n // this.data?.data.forEach(row => this.selection.select(row));\r\n if (this.isAllSelected()) {\r\n this.selection.clear();\r\n } else {\r\n this.data?.data.forEach(row => {\r\n if (row.upgradeStatus === 'READY') {\r\n this.selection.select(row)\r\n }\r\n });\r\n }\r\n }\r\n\r\n upgradeUser(user: UserUpgradeRecord): void {\r\n if (user?.upgradeStatus === 'READY')\r\n user.pending = true;\r\n\r\n this.userUpgradeService.collectUsers([user])\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.userUpgradeService.bulkUpgrade([user])\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.updateUsersStatusAfterUpgrade([user]);\r\n })\r\n });\r\n }\r\n\r\n updateUsersStatusAfterUpgrade(users: UserUpgradeRecord[]): void {\r\n this.userUpgradeService.getUsersUpgradeStatuses(users)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((upgradedStatuses: User2UpgradeStatusDTO[]) => {\r\n upgradedStatuses.forEach(statusItem => {\r\n const ind = this.getUserIndex(statusItem.userId);\r\n if (ind > -1) {\r\n this.data.data[ind].upgradeStatus = statusItem.upgradeStatus;\r\n this.data.data[ind].pending = false;\r\n }\r\n });\r\n this.dataPending = false;\r\n });\r\n }\r\n\r\n getUserIndex(userId: string): number {\r\n return this.data.data.findIndex((record: UserUpgradeRecord) => record.userId === userId);\r\n }\r\n\r\n upgradeSelectedUsers(): void {\r\n if (this.selection.selected && this.selection.selected.length) {\r\n this.dataPending = true;\r\n\r\n this.userUpgradeService.collectUsers(this.selection.selected)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.userUpgradeService.bulkUpgrade(this.selection.selected)\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.updateUsersStatusAfterUpgrade(this.selection.selected);\r\n })\r\n });\r\n\r\n }\r\n this.userUpgradeService.bulkUpgrade(this.selection.selected);\r\n }\r\n\r\n onFilter(filterEvent: { key: string, value: any }) {\r\n const {key, value} = filterEvent;\r\n\r\n let filterValue: any;\r\n if (value && value.value !== undefined) {\r\n filterValue = value.value;\r\n } else if (value && value.target) {\r\n filterValue = value.target.value;\r\n } else {\r\n filterValue = value;\r\n }\r\n\r\n // Handle \"All\" option or empty values - remove the filter\r\n if (filterValue === 'all' || !filterValue || filterValue === '') {\r\n delete this.activeFilters[key];\r\n } else {\r\n this.activeFilters[key] = filterValue;\r\n }\r\n\r\n this.applyFilters();\r\n }\r\n\r\n private setupCustomFilter() {\r\n this.data.filterPredicate = (data: any, filter: string) => {\r\n const filters = JSON.parse(filter || '{}');\r\n\r\n for (const [key, value] of Object.entries(filters)) {\r\n if (!value) continue;\r\n\r\n switch (key) {\r\n case 'User':\r\n const searchTerm = (value as string).toLowerCase();\r\n if (!data.userName.toLowerCase().includes(searchTerm)) {\r\n return false;\r\n }\r\n break;\r\n case 'Site':\r\n if (data.siteName !== this.getSiteNameFromValue(value as string)) {\r\n return false;\r\n }\r\n break;\r\n case 'User Upgrade Status':\r\n if (!this.matchesUpgradeStatus(data.upgradeStatus, value as string)) {\r\n return false;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n\r\n private applyFilters() {\r\n this.data.filter = JSON.stringify(this.activeFilters);\r\n }\r\n\r\n get filteredDataCount(): number {\r\n return this.data?.filteredData?.length || 0;\r\n }\r\n\r\n private getSiteNameFromValue(value: string): string {\r\n // Since we're now using actual site names, just convert back from slug format\r\n return value.split('-').map(word =>\r\n word.charAt(0).toUpperCase() + word.slice(1)\r\n ).join(' ');\r\n }\r\n\r\n private matchesUpgradeStatus(status: string, filterValue: string): boolean {\r\n // Handle direct status matching for cleaner implementation\r\n return status.toLowerCase().replace(/\\s+/g, '-') === filterValue.toLowerCase();\r\n }\r\n\r\n getStatusClass(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case 'ready':\r\n return 'ready';\r\n case 'not ready':\r\n return 'not-ready';\r\n case 'partial ready':\r\n return 'partial-ready';\r\n case 'completed':\r\n return 'completed';\r\n case 'failed':\r\n return 'failed';\r\n default:\r\n return 'not-ready';\r\n }\r\n }\r\n\r\n protected readonly pageSizeOptions = PAGINATION_SIZE_OPTIONS;\r\n}\r\n\r\ninterface PaginationDataDtoInterface {\r\n total: number;\r\n pageSizeOptions: number[];\r\n pageSize: number;\r\n pageIndex: number;\r\n}\r\nclass PaginationDataDto {\r\n total!: number;\r\n pageSizeOptions!: number[];\r\n pageSize!: number;\r\n pageIndex!: number;\r\n\r\n constructor(data?: PaginationDataDtoInterface) {\r\n this.pageSizeOptions = data?.pageSizeOptions || PAGINATION_DATA_DEFAULTS.OPTIONS;\r\n this.pageSize = data?.pageSize || PAGINATION_DATA_DEFAULTS.SIZE;\r\n this.pageIndex = data?.pageIndex || PAGINATION_DATA_DEFAULTS.PAGE_INDEX;\r\n this.total = data?.total || 0;\r\n }\r\n}\r\n\r\nconst PAGINATION_DATA_DEFAULTS = {\r\n OPTIONS: [10, 20, 50, 100],\r\n SIZE: 10,\r\n PAGE_INDEX: 0\r\n};\r\n","<div *ngIf=\"dataPending\" class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"120\"></mat-progress-spinner>\r\n</div>\r\n\r\n<div id=\"userUpgradeDataTable\" class=\"wrapper\">\r\n <div class=\"user-upgrade-status-wrapper\">\r\n <tk-summary-card [description]=\"'Users are ready to upgrade'\" [value]=\"statusCounts['Ready']\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users are not ready'\" [value]=\"statusCounts['Not Ready']\" [status]=\"'Not Ready'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Users failed to upgrade'\" [value]=\"statusCounts['Failed']\" [status]=\"'Failed'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Successfully upgraded'\" [value]=\"statusCounts['Completed']\" [status]=\"'Completed'\"></tk-summary-card>\r\n </div>\r\n <div class=\"table-action-panel\">\r\n <tk-table-filters *ngIf=\"filters.length > 0\" [filters]=\"filters\" (filter)=\"onFilter($event)\"></tk-table-filters>\r\n <div class=\"action-wrapper\">\r\n <span>{{filteredDataCount}} Users</span>\r\n <button\r\n mat-button\r\n class=\"upgrade-bulk-button\"\r\n color=\"primary\"\r\n [disabled]=\"selection.selected.length === 0\"\r\n (click)=\"upgradeSelectedUsers()\">\r\n Upgrade {{ selection.selected.length === 0 ? '' : '(' + selection.selected.length + ')' }}\r\n </button>\r\n </div>\r\n </div>\r\n <table mat-table [dataSource]=\"data\" class=\"user-upgrade-table\">\r\n\r\n <!-- Checkbox Column -->\r\n <ng-container matColumnDef=\"select\">\r\n <th mat-header-cell *matHeaderCellDef>\r\n <mat-checkbox\r\n (change)=\"$event ? masterToggle() : null\"\r\n [checked]=\"selection.hasValue() && isAllSelected()\"\r\n [indeterminate]=\"selection.hasValue() && !isAllSelected()\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <mat-checkbox\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"$event ? selection.toggle(row) : null\"\r\n [checked]=\"selection.isSelected(row)\"\r\n [disabled]=\"STATUS_ENTRIES[row.upgradeStatus] !== 'Ready' || row.pending\"\r\n class=\"custom-checkbox\">\r\n </mat-checkbox>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Column -->\r\n <ng-container matColumnDef=\"user\">\r\n <th mat-header-cell *matHeaderCellDef>User</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-info\">\r\n <div class=\"user-name\">{{element.userName}}</div>\r\n <div class=\"user-email\">{{element.userName}}</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Site Column -->\r\n <ng-container matColumnDef=\"site\">\r\n <th mat-header-cell *matHeaderCellDef>Site</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"site-info\">\r\n <span class=\"site-indicator\"></span>\r\n <span [ngClass]=\"{'status-ready': element.dialPlanStatus === 'READY'}\">{{element.siteName}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Device Column -->\r\n <ng-container matColumnDef=\"device\">\r\n <th mat-header-cell *matHeaderCellDef>Device</th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"multi-dev-box\">\r\n <div *ngIf=\"element.showDevices\" class=\"device-list show-dev-list\">\r\n <div *ngFor=\"let device of element.devices; let last = last\"\r\n class=\"device-item\"\r\n [class.no-border]=\"last\">\r\n <span class=\"device-indicator\" [ngClass]=\"{'device-indicator-ready': element.deviceStatus === 'READY'}\"></span>\r\n <span class=\"device-name\">{{ device.name || device }}</span>\r\n <span class=\"device-model\">{{ element.primaryExtension || 'No Extension' }}</span>\r\n </div>\r\n </div>\r\n <div class=\"device-info\">\r\n <div *ngIf=\"element.devices.length > 1\">\r\n <div class=\"device-name-wrapper clickable\"\r\n (mouseenter)=\"onMultipleDevices(element)\"\r\n (mouseleave)=\"onMultipleDevices(element)\">\r\n\r\n <span class=\"device-name\">Multiple devices ></span>\r\n </div>\r\n </div>\r\n <div *ngIf=\"element.devices.length === 1\">\r\n <div class=\"device-name-wrapper\">\r\n <span class=\"device-indicator\"></span>\r\n <span class=\"device-name\">{{element.devices[0]}}</span>\r\n </div>\r\n <span class=\"device-model\">{{ element.primaryExtension || 'No Extension' }}</span>\r\n </div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dial Plan Status Column -->\r\n <ng-container matColumnDef=\"dialPlanStatus\">\r\n <th mat-header-cell *matHeaderCellDef>Dial Plan Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.dialPlanStatus)\"></span>\r\n <span [ngClass]=\"{'status-ready': element.dialPlanStatus === 'READY'}\">{{STATUS_ENTRIES[element.dialPlanStatus]}}</span>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Dependencies Column -->\r\n <ng-container matColumnDef=\"dependencies\">\r\n <th mat-header-cell *matHeaderCellDef>Dependencies</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'Dependencies found'\" class=\"dependencies-text\">{{DEPENDENCIES_STATUS[element.dependenciesStatus]}}</span>\r\n <span *ngIf=\"DEPENDENCIES_STATUS[element.dependenciesStatus] === 'No dependencies'\">—</span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- User Upgrade Status Column -->\r\n <ng-container matColumnDef=\"userUpgradeStatus\">\r\n <th mat-header-cell *matHeaderCellDef>User Upgrade Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"upgrade-status-cell\">\r\n <ng-container *ngIf=\"STATUS_ENTRIES[element.upgradeStatus] === 'Ready'; else statusBlock\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"upgradeUser(element)\">Upgrade</button>\r\n </ng-container>\r\n <ng-template #statusBlock>\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getStatusClass(element.upgradeStatus)\"></span>\r\n <span>{{STATUS_ENTRIES[element.upgradeStatus]}}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"userUpgradeLoader\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td class=\"mat-progress-spinner-td\" mat-cell *matCellDef=\"let element\">\r\n\r\n <mat-progress-spinner\r\n *ngIf=\"element.pending\"\r\n class=\"field-spinner\"\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"\r\n [class.selected-row]=\"selection.isSelected(row)\"></tr>\r\n </table>\r\n</div>\r\n\r\n<div class=\"app-pagination\">\r\n <mat-paginator\r\n [length]=\"pagination.total\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n (page)=\"pageEvent($event)\"\r\n showFirstLastButtons>\r\n </mat-paginator>\r\n\r\n <!--<div class=\"page-indexes-box\">\r\n <mat-paginator\r\n [id]=\"'commonPagination'\"\r\n [hidePageSize]=\"true\"\r\n [length]=\"pagination.total\"\r\n [pageIndex]=\"pagination.pageIndex\"\r\n [pageSize]=\"pagination.pageSize\"\r\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\r\n (page)=\"pageEvent($event)\">\r\n </mat-paginator>\r\n </div>\r\n\r\n <div class=\"per-page-block\">\r\n <div class=\"item_per_page\">Items per page:</div>\r\n <div class=\"select-box select-page-size\">\r\n <mat-select (selectionChange)=\"changePerPageNumber($event)\" #page\r\n [id]=\"'commonPaginationSelect'\">\r\n <mat-option *ngFor=\"let option of pageSizeOptions; let i = index;\" [id]=\"'paginationSelectOpt_' + i\" [value]=\"option\">{{option}}</mat-option>\r\n </mat-select>\r\n </div>\r\n\r\n </div>-->\r\n</div>\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: 'tk-card',\r\n templateUrl: './card.component.html',\r\n styleUrls: ['./card.component.scss']\r\n})\r\nexport class CardComponent {\r\n @Input() title!: string;\r\n}","<article class=\"card\">\r\n <header class=\"card__header\">\r\n <h2>{{ title }}</h2>\r\n <!--<div class=\"card__menu-button\">\r\n <img width=\"18\" src=\"assets/icons/menu_icon.png\" alt=\"Menu Icon\">\r\n </div>-->\r\n </header>\r\n <div class=\"card__content\">\r\n <ng-content select=\"card-content\"></ng-content>\r\n </div>\r\n</article>\r\n","import { 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\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 ]\r\n})\r\nexport class MaterialModule { }","import { Component, Input, OnInit } from \"@angular/core\";\r\nimport { SitesUpgradeReadiness, SitesUpgradeSummary, UsersUpgradeReadiness, UsersUpgradeSummary } from \"../../../widgets/upgrade-overview/types/upgrade-overview\";\r\n\r\n@Component({\r\n selector: 'tk-stat-card',\r\n templateUrl: './stat-card.component.html',\r\n styleUrls: ['./stat-card.component.scss']\r\n})\r\nexport class StatCardComponent implements OnInit {\r\n @Input() title!: string;\r\n @Input() type!: 'site' | 'user';\r\n @Input() readinessStats: any;\r\n @Input() upgradeStatus!: 'ready' | 'already';\r\n\r\n stats: any;\r\n\r\n ngOnInit() { \r\n if (this.type === 'user') {\r\n this.stats = {\r\n id: this.readinessStats?.id,\r\n customerId: this.readinessStats?.customerId,\r\n total: this.readinessStats?.['totalUsers'],\r\n totalReady: this.readinessStats?.['totalReadyUsers'],\r\n totalUpgraded: this.readinessStats?.['totalUpgradedUsers'],\r\n }\r\n } else {\r\n this.stats = {\r\n id: this.readinessStats?.id,\r\n customerId: this.readinessStats?.customerId,\r\n total: this.readinessStats?.['totalSites'],\r\n totalReady: this.readinessStats?.['totalReadySites'],\r\n totalUpgraded: this.readinessStats?.['totalUpgradedSites'],\r\n }\r\n }\r\n }\r\n\r\n get readyPercentage() {\r\n return (this.stats?.totalReady / this.stats?.total * 100) >> 0;\r\n }\r\n\r\n get upgradedPercentage() {\r\n return (this.stats?.totalUpgraded / this.stats?.total * 100) >> 0;\r\n }\r\n}","<tk-card [title]=\"title\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div class=\"card__content-info\">\r\n <div class=\"card__content-wrapper\">\r\n <img width=\"42\" [src]=\"'assets/icons/' + type + '.png'\" alt=\"\" />\r\n <div class=\"card__content-text\">\r\n <div class=\"card__content-label\">\r\n {{ upgradeStatus === 'ready' ? stats?.totalReady : stats?.totalUpgraded }}\r\n {{ type === 'user' ? 'Users' : 'Sites' }}</div>\r\n <div class=\"card__content-description\">{{ upgradeStatus === 'ready' ? 'Ready to Upgrade' : 'Already Upgraded' }}</div>\r\n </div>\r\n </div>\r\n <div class=\"card__content-wrapper\">\r\n <img\r\n *ngIf=\"upgradeStatus === 'ready'\"\r\n height=\"48\"\r\n src=\"assets/icons/ready_to_upgrade.png\"\r\n alt=\"\"\r\n />\r\n <img\r\n *ngIf=\"upgradeStatus === 'already'\"\r\n height=\"48\"\r\n src=\"assets/icons/already_upgraded.png\"\r\n alt=\"\"\r\n />\r\n </div>\r\n </div>\r\n <div class=\"card__content-progress-wrapper\">\r\n <div class=\"card__content-progress\">\r\n <div class=\"card__content-progress-label\">\r\n <span>{{ readyPercentage }}%</span>\r\n <span>From all {{ stats?.total }} {{ type === 'user' ? 'users' : 'sites' }}</span>\r\n </div>\r\n <div class=\"card__content-progress-bar\">\r\n <div\r\n class=\"card__content-progress-bar-fill ready\"\r\n [class.already]=\"upgradeStatus === 'already'\"\r\n [style.width.%]=\"readyPercentage\"\r\n ></div>\r\n </div>\r\n </div>\r\n <div *ngIf=\"upgradeStatus === 'already'\" class=\"card__content-progress\">\r\n <div class=\"card__content-progress-label\">\r\n <span>{{ upgradedPercentage }}%</span>\r\n <span>From all {{ stats?.totalReady }} ready {{ type === 'user' ? 'users' : 'sites' }}</span>\r\n </div>\r\n <div class=\"card__content-progress-bar\">\r\n <div\r\n class=\"card__content-progress-bar-fill ready\"\r\n [class.already]=\"upgradeStatus === 'already'\"\r\n [style.width.%]=\"upgradedPercentage\"\r\n ></div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</tk-card>\r\n","import { Component, Input } from \"@angular/core\";\r\n\r\n@Component({\r\n selector: \"tk-status-list-card\",\r\n templateUrl: \"./status-list-card.component.html\",\r\n styleUrls: [\"./status-list-card.component.scss\"]\r\n})\r\nexport class StatusListCardComponent {\r\n @Input() title!: string;\r\n @Input() items!: any;\r\n}","<tk-card [title]=\"title\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div class=\"card__list-wrapper\">\r\n <div class=\"card__list-item\" *ngFor=\"let item of items\">\r\n <img *ngIf=\"item.status\" src=\"{{ 'assets/icons/check_icon.png' }}\" alt=\"\">\r\n <img *ngIf=\"!item.status\" src=\"{{ 'assets/icons/warning_icon.png' }}\" alt=\"\">\r\n <div class=\"card__item-info\">\r\n <div class=\"card__item-text\">\r\n <div class=\"card__item-label\">\r\n {{ item.label }}\r\n </div>\r\n <div class=\"card__item-description\">\r\n {{ item.description }}\r\n </div>\r\n </div>\r\n <div *ngIf=\"title.includes('Site')\" class=\"card__item-stats\">\r\n <div class=\"card__item-numbers\">\r\n {{ item.value }}/{{ item.totalSites }}\r\n </div>\r\n <div class=\"card__item-numbers-description\">\r\n Ready/All\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </ng-container>\r\n</tk-card>","import { Component, Input, OnInit } from \"@angular/core\";\r\nimport { ApexChart, ApexPlotOptions, ApexLegend, ApexDataLabels, ApexNonAxisChartSeries } from \"ng-apexcharts\";\r\n\r\nexport type ChartOptions = {\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};\r\n\r\n@Component({\r\n selector: 'tk-chart-card',\r\n templateUrl: './chart-card.component.html',\r\n styleUrls: ['./chart-card.component.scss']\r\n})\r\nexport class ChartCardComponent implements OnInit {\r\n @Input() title!: string;\r\n @Input() totalUpgraded!: number;\r\n @Input() totalNotUpgraded!: number;\r\n\r\n public chartOptions!: ChartOptions;\r\n\r\n ngOnInit() {\r\n this.initChartOptions();\r\n }\r\n\r\n private initChartOptions(): void {\r\n if (this.totalUpgraded === 0)\r\n this.totalNotUpgraded = 100;\r\n\r\n this.chartOptions = {\r\n series: [this.totalUpgraded, this.totalNotUpgraded],\r\n chart: {\r\n type: \"donut\",\r\n height: 250\r\n },\r\n labels: [\"MT\", \"DI\"],\r\n colors: [\"#808080\", \"#2E8B57\"],\r\n legend: {\r\n position: \"right\",\r\n offsetY: 0,\r\n fontSize: \"14px\",\r\n markers: {\r\n width: 16,\r\n height: 16,\r\n radius: 2\r\n },\r\n itemMargin: {\r\n horizontal: 20,\r\n vertical: 2\r\n },\r\n formatter: (seriesName, opts) => {\r\n const percentage = this.roundPercentage((opts.w.globals.series[opts.seriesIndex] / (opts.w.globals.series[0] + opts.w.globals.series[1])) * 100);\r\n return seriesName + \" \" + percentage + \"%\";\r\n }\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 };\r\n }\r\n\r\n private roundPercentage(value: number): number {\r\n return Math.round(value * 100) / 100;\r\n }\r\n}","<tk-card [title]=\"title\">\r\n <ng-container ngProjectAs=\"card-content\">\r\n <div class=\"chart-container\">\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 </apx-chart>\r\n </div>\r\n </ng-container>\r\n</tk-card>","import { NgModule } from \"@angular/core\";\r\nimport { CardComponent } from \"./components/card/card.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MaterialModule } from \"./material.module\";\r\nimport { StatCardComponent } from \"./components/stat-card/stat-card.component\";\r\nimport { StatusListCardComponent } from \"./components/status-list-card/status-list-card.component\";\r\nimport { ChartCardComponent } from \"./components/chart-card/chart-card.component\";\r\nimport { NgApexchartsModule } from \"ng-apexcharts\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { TableFiltersComponent } from \"./components/table-filters/table-filters.component\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { SummaryCardComponent } from \"./components/summary-card/summary-card.component\";\r\n\r\n@NgModule({\r\n declarations: [\r\n CardComponent,\r\n StatCardComponent,\r\n StatusListCardComponent,\r\n ChartCardComponent,\r\n SummaryCardComponent,\r\n TableFiltersComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n NgApexchartsModule,\r\n HttpClientModule\r\n ],\r\n exports: [\r\n CardComponent,\r\n StatCardComponent,\r\n StatusListCardComponent,\r\n ChartCardComponent,\r\n SummaryCardComponent,\r\n TableFiltersComponent\r\n ]\r\n})\r\nexport class SharedModule {}","import { NgModule } from \"@angular/core\";\r\nimport { UserUpgradeDataTableComponent } from \"./user-upgrade-data-table/user-upgrade-data-table.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { SharedModule } from \"../../shared/shared.module\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatOptionModule } from '@angular/material/core';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatSelectModule } from '@angular/material/select';\r\n\r\n@NgModule({\r\n declarations: [\r\n UserUpgradeDataTableComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\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 UserUpgradeDataTableComponent\r\n ]\r\n})\r\nexport class UserUpgradeModule {\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { map, Observable, Subject } from \"rxjs\";\r\nimport { SiteUpgradeRecord } from \"./types/user-upgrade\";\r\nimport { API } from \"../../api/api.endpoints\";\r\nimport { UserUpgradeRecord } from \"../user-upgrade/types/user-upgrade\";\r\nimport { APIService } from \"../../shared/services/api.service\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class SiteUpgradeService {\r\n siteSetForCollectAndBuildWebexCache: number[] | undefined;\r\n cucmSetInCollectAndBuildWebexCache: number[] | undefined;\r\n siteUpdateStatusEvent = new Subject<BatchStatusDTO[]>();\r\n private apiService = inject(APIService);\r\n customerId!: string;\r\n\r\n getSiteUpgradeStatusCounts(): Observable<any> {\r\n return this.apiService.fetch(\r\n API.SITE_UPGRADE.GET_SITES_UPGRADE_STATUS_COUNTS.replace(':customerId', this.customerId)\r\n );\r\n }\r\n\r\n getSiteUpgradeRecords(): Observable<SiteUpgradeRecord[]> {\r\n return this.apiService.fetch(\r\n API.SITE_UPGRADE.GET_SITES_UPGRADE_DATA.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return resp.content.map((record: any) => ({\r\n siteId: record.siteId,\r\n siteName: record.siteName,\r\n totalUsers: record.totalUsers,\r\n totalReadyUsers: record.readyUsers,\r\n totalNotReadyUsers: record.notReadyUsers,\r\n totalUpgradedUsers: record.totalUpgradedUsers,\r\n totalFailedUsers: record.totalFailedToUpgradeUsers,\r\n locationMapping: record.locationMappingStatus,\r\n PSTNTrunk: record.pstnTrunkStatus,\r\n upgradeStatus: record.siteUpgradeStatus\r\n } as SiteUpgradeRecord));\r\n }));\r\n }\r\n\r\n getBatchSites(): Observable<MigrationBatch[]> {\r\n return this.apiService.fetch(\r\n API.SITE_UPGRADE.GET_BATCH_SITES.replace(':customerId', this.customerId)\r\n );\r\n }\r\n\r\n collectSiteCache(siteId: number, migrationType: string = 'webex') {\r\n return this.apiService.post(\r\n API.SITE_UPGRADE.WEBEX_CACHE_COLLECTION\r\n .replace(':siteId', String(siteId))\r\n .replace(':migrationType', migrationType),\r\n {}\r\n )\r\n }\r\n\r\n migrateSite(siteId: string, batchId: string): Observable<any> {\r\n return this.apiService.post(\r\n API.SITE_UPGRADE.MIGRATE_SITE.replace(':siteId', String(siteId)),\r\n {},\r\n {batchId: batchId || ''}\r\n )\r\n }\r\n\r\n getBatchesStatuses(batchIds: string[]): Observable<BatchStatusDTO[]> {\r\n return this.apiService.post(\r\n API.SITE_UPGRADE.WEBEX_BATCH_STATUS\r\n .replace(':customerId', this.customerId),\r\n batchIds,\r\n false\r\n )\r\n .pipe(map((result: BatchStatusDTO[]) => {\r\n this.siteUpdateStatusEvent.next(result);\r\n return result;\r\n }))\r\n }\r\n\r\n getSiteListForCollectAndBuildWebexCache(): Observable<number[]> {\r\n return this.apiService.fetch(API.SITE_UPGRADE.WEBEX_CACHE_COLLECTION_SITE_LIST.replace(':customerId', this.customerId))\r\n .pipe(map((siteSet: number[]) => this.siteSetForCollectAndBuildWebexCache = siteSet))\r\n }\r\n\r\n getCUCMListCurrentlyInCollectAndBuildWebexCache(): Observable<number[]> {\r\n return this.apiService.fetch(API.SITE_UPGRADE.WEBEX_CACHE_COLLECTION_CUCM_LIST.replace(':customerId', this.customerId))\r\n .pipe(\r\n map((cucmSet: number[]) => this.cucmSetInCollectAndBuildWebexCache = cucmSet),\r\n );\r\n }\r\n\r\n getMigrationBatchesStatuses(): Observable<BatchStatusDTO[]> {\r\n return this.apiService.fetch(API.SITE_UPGRADE.BATCH_STATUS.replace(':customerId', this.customerId))\r\n /*.pipe(map((result: BatchStatusDTO[]) => {\r\n this.siteUpdateStatusEvent.next(result);\r\n return result;\r\n }))*/\r\n }\r\n\r\n getMigratedSiteStatus(pageSize: number, page: number): Observable<WebexMigratedSiteStatusInterface[]> {\r\n return this.apiService.fetchPagination(\r\n API.SITE_UPGRADE.MIGRATION_STATUS.replace(':customerId', this.customerId),\r\n pageSize, page, {}, false\r\n )\r\n }\r\n\r\n // TODO: Impl the site upgrade logic here\r\n upgradeSite(site: SiteUpgradeRecord): void {\r\n const customerId = site.customerId;\r\n const siteId = site.siteId;\r\n }\r\n}\r\n\r\nexport interface BatchStatusDTO {\r\n id: number;\r\n status: string;\r\n progress: number;\r\n migErrorsCount: string;\r\n}\r\n\r\nexport const STATUSES = {\r\n COMPLETED: 'Completed',\r\n NEW: 'New',\r\n IN_PROGRESS: 'In Progress',\r\n FAILED_IN_ERROR: 'Failed-in error',\r\n FAILED: 'Failed',\r\n FAILED_WITH_RETRY: 'Failed with Retry',\r\n COLLECTING: 'Collecting',\r\n FAILED_COLLECTING: 'Failed on collecting',\r\n WAITING_FOR_REVIEW: 'Waiting for review'\r\n};\r\nexport interface WebexMigratedSiteStatusInterface {\r\n site?: {id: number, name: string};\r\n migrationFormStatus: string;\r\n}\r\nexport interface SiteMigrationProgressInterface {\r\n id: number;\r\n status: string;\r\n progress: number;\r\n migErrorsCount: number | null;\r\n}\r\n\r\nexport interface MigrationBatch {\r\n id: number;\r\n sourceId: number;\r\n targetId: number;\r\n name: string;\r\n sourceIp: string;\r\n sourceCucIp: string | null;\r\n targetIp: string | null;\r\n size: number;\r\n status: string;\r\n suggestedDestination: string | null;\r\n destination: string | null;\r\n regionName: string | null;\r\n progress: number;\r\n migrationProcessUUID: string | null;\r\n customerId: number;\r\n owner: string | null;\r\n date: string | null;\r\n comments: string | null;\r\n siteId: number;\r\n planUUID: string;\r\n comparisonProcessUUID: string | null;\r\n type: string;\r\n migErrorsCount: number | null;\r\n sourceCucId: number | null;\r\n targetCucId: number | null;\r\n sites: unknown | null;\r\n serverType: string;\r\n migrationFormId: number;\r\n hasValidationErrors: boolean;\r\n}\r\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'app-progress-bar',\n templateUrl: './progress-bar.component.html',\n styleUrls: ['./progress-bar.component.scss']\n})\nexport class ProgressBarComponent {\n @Input() isAvailable = false;\n\n private _progress = 0;\n @Input() set progress(value: number) {\n this._progress = Math.max(0, Math.min(100, Number(value) || 0));\n this.setColor(this._progress);\n }\n get progress() { return this._progress; }\n\n color: string = 'grey';\n\n private setColor(p: number): void {\n if (p <= 20) this.color = 'red';\n else if (p <= 40) this.color = 'yellow';\n else if (p <= 60) this.color = 'darkblue';\n else if (p <= 80) this.color = 'lightblue';\n else this.color = 'green';\n }\n}\n","<!--<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\n <div class=\"progress-bar {{color}}\" [ngStyle]=\"{'width': progress + '%'}\"></div>\n</div>-->\n<div *ngIf=\"isAvailable\" class=\"progress-bar-container\">\n <div class=\"progress-bar\" [ngClass]=\"color\" [style.width.%]=\"progress\"></div>\n</div>\n","import { SelectionModel } from \"@angular/cdk/collections\";\r\nimport { Component, OnInit, OnDestroy, inject, Input, ViewEncapsulation } from \"@angular/core\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { TableColumn } from \"../../../shared/types/data-table\";\r\nimport { TableFilter } from \"../../../shared/types/table/filter\";\r\nimport { SiteUpgradeRecord } from \"../types/user-upgrade\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview/upgrade-overview.service\";\r\nimport { forkJoin, of, Subject, Subscription } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport {\r\n BatchStatusDTO, MigrationBatch,\r\n SiteUpgradeService,\r\n STATUSES,\r\n WebexMigratedSiteStatusInterface\r\n} from \"../site-upgrade.service\";\r\nimport { STATUS_ENTRIES } from \"../../../shared/types/constants\";\r\nimport { APIService } from \"../../../shared/services/api.service\";\r\nimport { catchError, map } from 'rxjs/operators';\r\n\r\nconst MAX_INTEGER = 2147483647;\r\n@Component({\r\n selector: 'tk-site-upgrade-data-table',\r\n templateUrl: './site-upgrade-data-table.component.html',\r\n styleUrls: ['./site-upgrade-data-table.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class SiteUpgradeDataTableComponent implements OnInit, OnDestroy {\r\n readonly siteUpgradeService = inject(SiteUpgradeService);\r\n private readonly apiService = inject(APIService);\r\n readonly destroy$ = new Subject<void>();\r\n readonly STATUS_ENTRIES = STATUS_ENTRIES;\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n columns!: TableColumn[];\r\n dataPending = false;\r\n data!: MatTableDataSource<any>;\r\n displayedColumns: string[] = ['site', 'ready users', 'upgraded users', 'location mapping', 'pstn trunk', 'site upgrade status', 'progressBar', 'actions', 'userUpgradeLoader'];\r\n selection = new SelectionModel<any>(true, []);\r\n filters: TableFilter[] = [];\r\n private activeFilters: { [key: string]: any } = {};\r\n private subscriptions = new Subscription();\r\n private collectingBatchInterval: any;\r\n\r\n statusCounts: any = {};\r\n\r\n constructor() {\r\n }\r\n\r\n ngOnInit(): void {\r\n this.dataPending = true;\r\n this.apiService.token = this.token;\r\n this.siteUpgradeService.customerId = this.customerId;\r\n\r\n const subsc1 = forkJoin([\r\n this.siteUpgradeService.getSiteUpgradeRecords(),\r\n this.siteUpgradeService.getMigratedSiteStatus(MAX_INTEGER, 0),\r\n this.siteUpgradeService.getSiteListForCollectAndBuildWebexCache(),\r\n this.siteUpgradeService.getCUCMListCurrentlyInCollectAndBuildWebexCache(),\r\n this.siteUpgradeService.getBatchSites()\r\n ]).pipe(takeUntil(this.destroy$))\r\n .subscribe((results: [SiteUpgradeRecord[], WebexMigratedSiteStatusInterface[], number[], number[], MigrationBatch[]]) => {\r\n const records = results[0].map(site => ({\r\n ...site,\r\n siteId: Number(site.siteId)\r\n }));\r\n this.data = new MatTableDataSource<SiteUpgradeRecord>(records);\r\n this.dataPending = false;\r\n this.setupCustomFilter();\r\n this.initializeFilters(records);\r\n\r\n this.setMigratedStatus(results[1]);\r\n\r\n if (this.data?.data.length && results[2]?.length) {\r\n this.initCollectProgress(results[2]);\r\n }\r\n if (this.data?.data.length && results[4]?.length) {\r\n this.setBatchIdToSites(results[4]);\r\n }\r\n });\r\n this.subscriptions.add(subsc1);\r\n\r\n const subsc2 = this.siteUpgradeService.getSiteUpgradeStatusCounts()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((statusCounts) => {\r\n this.statusCounts['Ready'] = statusCounts['READY'] || 0;\r\n this.statusCounts['Not Ready'] = statusCounts['NOT_READY'] || 0;\r\n this.statusCounts['Completed'] = statusCounts['COMPLETED'] || 0;\r\n this.statusCounts['Failed'] = statusCounts['FAILED'] || 0;\r\n });\r\n this.subscriptions.add(subsc2);\r\n\r\n const subsc3 = this.siteUpgradeService.siteUpdateStatusEvent\r\n .subscribe((updatedStatuses: BatchStatusDTO[]) => {\r\n this.handleCheckBatchStatusResponse(updatedStatuses);\r\n });\r\n this.subscriptions.add(subsc3);\r\n }\r\n\r\n onSiteMigration(site: SiteUpgradeRecord): void {\r\n site.pending = true;\r\n site.isProgressBarAvailable = true;\r\n site.isMigrationInProgress = true;\r\n const subsc = this.siteUpgradeService.migrateSite(String(site.siteId), String(site.batchId))\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((migrationFormId: number) => {\r\n site.migrationFormId = migrationFormId;\r\n site.progress = 1;\r\n this.runMigrationProgress(site);\r\n });\r\n this.subscriptions.add(subsc);\r\n\r\n }\r\n\r\n private runMigrationProgress(site: SiteUpgradeRecord): void {\r\n this.updateMigrationProgress(site);\r\n\r\n site.interval = setInterval(() => {\r\n this.updateMigrationProgress(site);\r\n }, 10000);\r\n\r\n }\r\n\r\n private updateMigrationProgress(site: SiteUpgradeRecord): void {\r\n if (!site || !site.isMigrationInProgress) {\r\n return;\r\n }\r\n this.siteUpgradeService.getMigrationBatchesStatuses()\r\n .subscribe(\r\n (statuses: BatchStatusDTO[]) => {\r\n if (statuses?.length) {\r\n statuses.forEach((statusItem: BatchStatusDTO) => {\r\n const ind = this.getSiteIndex(statusItem.id);\r\n if (ind > -1) {\r\n this.data.data[ind].progress = statusItem.progress;\r\n this.data.data[ind].status = statusItem.status;\r\n if (statusItem.status !== 'In Progress') {\r\n this.data.data[ind].pending = false;\r\n this.data.data[ind].isMigrationInProgress = false;\r\n this.data.data[ind].isProgressBarAvailable = false;\r\n }\r\n }\r\n });\r\n if (statuses.filter(statusItem => statusItem.status === 'In Progress').length < 1) {\r\n this.data.data.forEach(site => {\r\n site.pending = false;\r\n site.isMigrationInProgress = false;\r\n site.isProgressBarAvailable = false;\r\n })\r\n }\r\n }\r\n\r\n },\r\n () => {\r\n this.resetMigrationProgress(site, 'FAILED');\r\n }\r\n );\r\n }\r\n\r\n private resetMigrationProgress(site: SiteUpgradeRecord, status?: string): void {\r\n site.isMigrationInProgress = false;\r\n site.pending = false;\r\n site.isProgressBarAvailable = false;\r\n if (site.interval) {\r\n clearInterval(site.interval);\r\n }\r\n if (status) {\r\n site.status = status;\r\n }\r\n }\r\n\r\n public onCollect(site: SiteUpgradeRecord): void {\r\n site.pending = true;\r\n site.status = STATUSES.COLLECTING;\r\n // const ind =\r\n const subscription =\r\n this.siteUpgradeService.collectSiteCache(Number(site.siteId), 'webex')\r\n .subscribe({\r\n error: () => site.pending = false\r\n });\r\n this.subscriptions.add(subscription);\r\n /*setTimeout(() => {\r\n this.runBatchCheckStatus();\r\n }, 700);*/\r\n setTimeout(() => {\r\n this.initCollectInterval(site);\r\n }, 700);\r\n }\r\n\r\n private initCollectInterval(site: SiteUpgradeRecord): void {\r\n if (!site.interval && !site.initPending) {\r\n site.initPending = true;\r\n\r\n this.getCUCMListAlreadyInCollectWebexCache(site);\r\n this.getSiteListForCollectAndBuildWebexCache(site);\r\n\r\n site.interval = setInterval(() => {\r\n this.getCUCMListAlreadyInCollectWebexCache(site);\r\n this.getSiteListForCollectAndBuildWebexCache(site);\r\n\r\n }, 10000);\r\n }\r\n }\r\n\r\n private getSiteListForCollectAndBuildWebexCache(site: SiteUpgradeRecord): void {\r\n this.siteUpgradeService.getSiteListForCollectAndBuildWebexCache()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((siteSet: number[]) => {\r\n if (!siteSet || !siteSet.length) {\r\n site.pending = false;\r\n this.removeInterval(site);\r\n site.isCollected = true;\r\n }\r\n }, () => {\r\n site.pending = false;\r\n this.removeInterval(site);\r\n });\r\n }\r\n\r\n private removeInterval(site: SiteUpgradeRecord): void {\r\n if (site.interval) {\r\n clearInterval(site.interval);\r\n }\r\n }\r\n\r\n private handleBatchCUCMAlreadyInCollectCache(): void {\r\n this.data.data.forEach(site => {\r\n site.isCUCMInCollectCache =\r\n this.siteUpgradeService?.cucmSetInCollectAndBuildWebexCache?.includes(Number(site.sourceId));\r\n });\r\n }\r\n\r\n private getCUCMListAlreadyInCollectWebexCache(site: SiteUpgradeRecord): void {\r\n this.siteUpgradeService.getCUCMListCurrentlyInCollectAndBuildWebexCache()\r\n .pipe(takeUntil(this.destroy$))\r\n .pipe(map((cucmList: any) => {\r\n this.handleBatchCUCMAlreadyInCollectCache();\r\n if (!cucmList || !cucmList.length) {\r\n site.pending = false;\r\n this.removeInterval(site);\r\n site.isCollected = true;\r\n }\r\n return cucmList;\r\n })\r\n ).subscribe({\r\n error: () => {\r\n site.pending = false;\r\n site.initPending = true;\r\n this.removeInterval(site);\r\n }\r\n });\r\n }\r\n\r\n private checkBatchStatus(batchIds: string[]): void {\r\n const subsc = this.siteUpgradeService.getBatchesStatuses(batchIds)\r\n .pipe(\r\n takeUntil(this.destroy$),\r\n catchError(() => {\r\n clearInterval(this.collectingBatchInterval);\r\n return of([]);\r\n })\r\n ).subscribe((updatedStatuses: BatchStatusDTO[]) => {\r\n this.handleCheckBatchStatusResponse(updatedStatuses);\r\n });\r\n this.subscriptions.add(subsc);\r\n }\r\n\r\n private handleCheckBatchStatusResponse(updatedStatuses: BatchStatusDTO[]): void {\r\n if (updatedStatuses && updatedStatuses.length && this.data?.data?.length) {\r\n updatedStatuses.forEach(updatedStatus => {\r\n const ind = this.data?.data.findIndex(batch => batch.siteId === updatedStatus.id);\r\n if (ind > -1 && this.data?.data[ind] && updatedStatus.status) {\r\n this.data.data[ind].upgradeStatus = updatedStatus.status;\r\n }\r\n });\r\n } else {\r\n if (this.collectingBatchInterval) {\r\n clearInterval(this.collectingBatchInterval);\r\n }\r\n }\r\n }\r\n\r\n private getSiteIndex(batchId: number): number {\r\n if (this.data.data.length) {\r\n return this.data.data.findIndex(siteItem => siteItem.batchId === batchId);\r\n }\r\n return -1;\r\n }\r\n\r\n private initializeFilters(records: SiteUpgradeRecord[]): void {\r\n // Extract unique sites from actual data\r\n const uniqueSites = [...new Set(records.map(record => record.siteName))];\r\n const siteOptions = uniqueSites.map(site => ({\r\n label: site,\r\n value: site.toLowerCase().replace(/\\s+/g, '-')\r\n }));\r\n\r\n // Extract unique statuses from actual data\r\n const uniqueStatuses = [...new Set(records.map(record => record.upgradeStatus))];\r\n const statusOptions = uniqueStatuses.map(status => ({\r\n label: STATUS_ENTRIES[status],\r\n value: status.toLowerCase().replace(/\\s+/g, '-')\r\n }));\r\n\r\n this.filters = [\r\n {\r\n id: 'sites',\r\n type: 'select',\r\n columnKey: 'Site',\r\n placeholder: 'Sites',\r\n options: siteOptions\r\n },\r\n {\r\n id: 'status',\r\n type: 'select',\r\n columnKey: 'Site Upgrade Status',\r\n placeholder: 'Upgrade Status',\r\n options: statusOptions\r\n }\r\n ];\r\n }\r\n\r\n onFilter(filterEvent: { key: string, value: any }) {\r\n const {key, value} = filterEvent;\r\n\r\n let filterValue: any;\r\n if (value && value.value !== undefined) {\r\n filterValue = value.value;\r\n } else if (value && value.target) {\r\n filterValue = value.target.value;\r\n } else {\r\n filterValue = value;\r\n }\r\n\r\n // Handle \"All\" option or empty values - remove the filter\r\n if (filterValue === 'all' || !filterValue || filterValue === '') {\r\n delete this.activeFilters[key];\r\n } else {\r\n this.activeFilters[key] = filterValue;\r\n }\r\n\r\n this.applyFilters();\r\n }\r\n\r\n private setupCustomFilter() {\r\n this.data.filterPredicate = (data: any, filter: string) => {\r\n const filters = JSON.parse(filter || '{}');\r\n\r\n for (const [key, value] of Object.entries(filters)) {\r\n if (!value) continue;\r\n\r\n switch (key) {\r\n case 'Site':\r\n if (data.siteName !== this.getSiteNameFromValue(value as string)) {\r\n return false;\r\n }\r\n break;\r\n case 'Site Upgrade Status':\r\n if (!this.matchesUpgradeStatus(data.upgradeStatus, value as string)) {\r\n return false;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n }\r\n\r\n private applyFilters() {\r\n this.data.filter = JSON.stringify(this.activeFilters);\r\n }\r\n\r\n private getSiteNameFromValue(value: string): string {\r\n // Since we're now using actual site names, just convert back from slug format\r\n return value.split('-').map(word =>\r\n word.charAt(0).toUpperCase() + word.slice(1)\r\n ).join(' ');\r\n }\r\n\r\n private matchesUpgradeStatus(status: string, filterValue: string): boolean {\r\n // Handle direct status matching for cleaner implementation\r\n return status.toLowerCase().replace(/\\s+/g, '-') === filterValue.toLowerCase();\r\n }\r\n\r\n get filteredDataCount(): number {\r\n return this.data?.filteredData?.length || 0;\r\n }\r\n\r\n /** Whether the number of selected elements matches the total number of rows. */\r\n isAllSelected() {\r\n const numSelected = this.selection.selected.length;\r\n const numRows = this.data?.data.length || 0;\r\n return numSelected === numRows;\r\n }\r\n\r\n /** Selects all rows if they are not all selected; otherwise clear selection. */\r\n masterToggle() {\r\n this.isAllSelected() ?\r\n this.selection.clear() :\r\n this.data?.data.forEach(row => this.selection.select(row));\r\n }\r\n\r\n getLocationMappingClass(locationMapping: boolean): string {\r\n return locationMapping ? 'success' : 'error';\r\n }\r\n\r\n getSiteUpgradeStatusClass(status: string): string {\r\n switch (status.toLowerCase()) {\r\n case 'ready':\r\n return 'ready';\r\n case 'partial ready':\r\n return 'partial-ready';\r\n case 'completed':\r\n return 'completed';\r\n case 'failed':\r\n return 'failed';\r\n case 'not ready':\r\n return 'not-ready';\r\n default:\r\n return 'not-ready';\r\n }\r\n }\r\n\r\n upgradeSite(site: SiteUpgradeRecord) {\r\n this.siteUpgradeService.upgradeSite(site);\r\n }\r\n\r\n private setMigratedStatus(webexMigratedSites: WebexMigratedSiteStatusInterface[]): void {\r\n if (webexMigratedSites && webexMigratedSites.length && this.data?.data?.length) {\r\n const statusObj = this.getSiteStatusMappingObj(webexMigratedSites);\r\n this.data.data.forEach(site => site.migrationFormStatus = statusObj[site.siteId] || '');\r\n }\r\n }\r\n\r\n private getSiteStatusMappingObj(webexMigratedSites: WebexMigratedSiteStatusInterface[]): any {\r\n const statusObj: any = {};\r\n webexMigratedSites.forEach(item => {\r\n if (item.site?.id) {\r\n statusObj[String(item.site.id)] = item.migrationFormStatus;\r\n }\r\n });\r\n return statusObj;\r\n }\r\n\r\n private setBatchIdToSites(batches: MigrationBatch[]): void {\r\n if (this.data?.data?.length) {\r\n this.data.data.forEach(site => {\r\n site.batchId = this.getBatchId(batches, site.siteId);\r\n });\r\n }\r\n }\r\n\r\n private getBatchId(batches: MigrationBatch[], siteId: number): number | null {\r\n const ind = batches.findIndex(batch => batch.siteId === siteId);\r\n return ind > -1 ? batches[ind].id : null;\r\n }\r\n\r\n private initCollectProgress(sitesInProgress: number[]): void {\r\n this.data?.data.forEach(site => {\r\n if (sitesInProgress.includes(site.siteId)) {\r\n site.pending = true;\r\n this.initCollectInterval(site);\r\n }\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n this.dataPending = false;\r\n\r\n if (this.collectingBatchInterval) {\r\n clearInterval(this.collectingBatchInterval);\r\n }\r\n if (this.subscriptions) {\r\n this.subscriptions.unsubscribe();\r\n }\r\n }\r\n}\r\n","<div *ngIf=\"dataPending\" class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"120\"></mat-progress-spinner>\r\n</div>\r\n\r\n<div id=\"siteUpgradeTable\" class=\"wrapper\">\r\n <div class=\"site-upgrade-status-wrapper\">\r\n <tk-summary-card [description]=\"'Sites are ready to upgrade'\" [value]=\"statusCounts['Ready']\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Sites are not ready'\" [value]=\"statusCounts['Not Ready']\"\r\n [status]=\"'Not Ready'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Sites failed to upgrade'\" [value]=\"statusCounts['Failed']\"\r\n [status]=\"'Failed'\"></tk-summary-card>\r\n <tk-summary-card [description]=\"'Successfully upgraded'\" [value]=\"statusCounts['Completed']\"\r\n [status]=\"'Completed'\"></tk-summary-card>\r\n </div>\r\n <div class=\"table-action-panel\">\r\n <tk-table-filters *ngIf=\"filters.length > 0\" [filters]=\"filters\" (filter)=\"onFilter($event)\"></tk-table-filters>\r\n <div class=\"action-wrapper\">\r\n <span>{{ filteredDataCount }} Sites</span>\r\n </div>\r\n </div>\r\n <table mat-table [dataSource]=\"data\" class=\"site-upgrade-table\">\r\n\r\n <!-- Site Column -->\r\n <ng-container matColumnDef=\"site\">\r\n <th mat-header-cell *matHeaderCellDef>Site</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"site-info\">\r\n {{ element.siteName }}\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Ready Users Column -->\r\n <ng-container matColumnDef=\"ready users\">\r\n <th mat-header-cell *matHeaderCellDef>Ready Users</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-count-info\">\r\n <div class=\"user-count\">{{ element.totalReadyUsers }}/{{ element.totalUsers }}</div>\r\n <div class=\"user-label\">Ready/Total</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Upgraded Users Column -->\r\n <ng-container matColumnDef=\"upgraded users\">\r\n <th mat-header-cell *matHeaderCellDef>Upgraded Users</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"user-count-info\">\r\n <div class=\"user-count\">{{ element.totalUpgradedUsers }}/{{ element.totalUsers }}</div>\r\n <div class=\"user-label\">Upgraded/Total</div>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Location Mapping Column -->\r\n <ng-container matColumnDef=\"location mapping\">\r\n <th mat-header-cell *matHeaderCellDef>Location Mapping</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-icon-cell\">\r\n <img *ngIf=\"element.locationMapping\" src=\"assets/icons/check2_icon.png\" alt=\"Location Mapping Enabled\"/>\r\n <img *ngIf=\"!element.locationMapping\" src=\"assets/icons/issue_icon.png\" alt=\"Location Mapping Disabled\"/>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- PSTN Trunk Column -->\r\n <ng-container matColumnDef=\"pstn trunk\">\r\n <th mat-header-cell *matHeaderCellDef>PSTN Trunk</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"status-icon-cell\">\r\n <img *ngIf=\"element.PSTNTrunk\" src=\"assets/icons/check2_icon.png\" alt=\"PSTN Trunk Enabled\"/>\r\n <img *ngIf=\"!element.PSTNTrunk\" src=\"assets/icons/issue_icon.png\" alt=\"PSTN Trunk Disabled\"/>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Site Upgrade Status Column -->\r\n <ng-container matColumnDef=\"site upgrade status\">\r\n <th mat-header-cell *matHeaderCellDef>Site Upgrade Status</th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"upgrade-status-cell\">\r\n <ng-container *ngIf=\"element.upgradeStatus === 'READY'; else statusBlock\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"upgradeSite(element)\">Upgrade</button>\r\n </ng-container>\r\n <ng-template #statusBlock>\r\n <div class=\"status-info\">\r\n <span class=\"status-indicator\" [ngClass]=\"getSiteUpgradeStatusClass(element.upgradeStatus)\"></span>\r\n <span [ngClass]=\"{'status-ready': element.upgradeStatus === 'READY'}\">{{ STATUS_ENTRIES[element.upgradeStatus] }}</span>\r\n </div>\r\n </ng-template>\r\n </div>\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"progressBar\">\r\n <th class=\"header\" mat-header-cell *matHeaderCellDef></th>\r\n <td mat-cell *matCellDef=\"let element\">\r\n <div class=\"app-progress-bar-container\">\r\n <app-progress-bar\r\n [isAvailable]=\"element.isProgressBarAvailable\"\r\n [progress]=\"element.progress\"\r\n #progressBars>\r\n </app-progress-bar>\r\n </div>\r\n <span *ngIf=\"element.isProgressBarAvailable\" class=\"progress-percents\">\r\n {{ element.progress }} %\r\n </span>\r\n </td>\r\n </ng-container>\r\n\r\n <!-- Action Column -->\r\n <ng-container matColumnDef=\"actions\">\r\n <th mat-header-cell *matHeaderCellDef>Actions</th>\r\n <td mat-cell *matCellDef=\"let element\" class=\"progress-spinner-td\">\r\n <div class=\"flex-container\">\r\n <button mat-button color=\"primary\" class=\"upgrade-button\" (click)=\"onSiteMigration(element)\">Upgrade</button>\r\n <button mat-icon-button [matMenuTriggerFor]=\"defaultBatchMenu\">\r\n <span style=\"font-size: 17px;\">⋮</span>\r\n </button>\r\n </div>\r\n\r\n <mat-menu\r\n #defaultBatchMenu=\"matMenu\"\r\n xPosition=\"after\"\r\n class=\"webex-action-menu\">\r\n\r\n <div class=\"webex-action-menu-row\"\r\n [ngClass]=\"{ 'webex-action-menu-row-disabled': element.pending || element.migrationFormStatus === 'NOT_PREPARED' }\"\r\n (click)=\"element.pending || element.migrationFormStatus === 'NOT_PREPARED' ? $event.stopPropagation() : onCollect(element)\">\r\n <span\r\n class=\"webex-details-icon webex-icon\"\r\n [ngClass]=\"{ 'migration-action-disabled': element.pending || element.migrationFormStatus === 'NOT_PREPARED'}\">\r\n </span>\r\n <span class=\"webex-action-menu-title\">Collect</span>\r\n </div>\r\n </mat-menu>\r\n\r\n </td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"userUpgradeLoader\">\r\n <th mat-header-cell *matHeaderCellDef></th>\r\n <td class=\"mat-progress-spinner-td\" mat-cell *matCellDef=\"let element\">\r\n\r\n <mat-progress-spinner\r\n *ngIf=\"element.pending\"\r\n class=\"field-spinner\"\r\n [diameter]=\"20\"\r\n mode=\"indeterminate\">\r\n </mat-progress-spinner>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"displayedColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: displayedColumns;\"></tr>\r\n </table>\r\n</div>\r\n","import { NgModule } from \"@angular/core\";\r\nimport { SiteUpgradeDataTableComponent } from \"./site-upgrade-data-table/site-upgrade-data-table.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { SharedModule } from \"../../shared/shared.module\";\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { ProgressBarComponent } from './progress-bar/progress-bar.component';\r\n\r\n@NgModule({\r\n declarations: [\r\n SiteUpgradeDataTableComponent,\r\n ProgressBarComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n MatTableModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatButtonModule,\r\n MatProgressSpinnerModule\r\n\r\n ],\r\n exports: [\r\n SiteUpgradeDataTableComponent,\r\n ProgressBarComponent\r\n ]\r\n})\r\nexport class SiteUpgradeModule {\r\n}\r\n","import { Injectable } from \"@angular/core\";\r\nimport { APIService } from \"../../shared/services/api.service\";\r\nimport { SiteInfrastructureSummary, SitesUpgradeReadiness, SitesUpgradeSummary, UpgradePreconditions, UsersUpgradeReadiness, UsersUpgradeSummary } from \"./types/upgrade-overview\";\r\nimport { map, Observable } from \"rxjs\";\r\nimport { API } from \"../../api/api.endpoints\";\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class UpgradeOverviewService {\r\n customerId!: string;\r\n\r\n constructor(private apiService: APIService) { }\r\n\r\n getUpgradePreconditions(): Observable<UpgradePreconditions> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_UPGRADE_PRECONDITIONS.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n controlHubIntegration: resp.controlHubIntegration,\r\n numberOfAvailableLicences: resp.availableLicences\r\n };\r\n }));\r\n }\r\n\r\n getSiteInfrastructureSummary(): Observable<SiteInfrastructureSummary> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_SITE_INFRASTRUCTURE.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalSites: resp.totalSites,\r\n totalLocations: resp.totalLocations,\r\n totalPSTNs: resp.totalPSTNS\r\n };\r\n }));\r\n }\r\n\r\n getUsersUpgradeSummary(): Observable<UsersUpgradeSummary> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_USERS_UPGRADE_SUMMARY.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalUsers: resp.totalUsers,\r\n totalReadyUsers: resp.totalUsersReady,\r\n totalUpgradedUsers: resp.totalUsersUpgraded\r\n };\r\n }));\r\n }\r\n\r\n getSitesUpgradeSummary(): Observable<SitesUpgradeSummary> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_SITES_UPGRADE_SUMMARY.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalSites: resp.totalSites,\r\n totalReadySites: resp.totalSitesReady,\r\n totalUpgradedSites: resp.totalSitesUpgraded\r\n };\r\n }));\r\n }\r\n\r\n getUsersUpgradeReadiness(): Observable<UsersUpgradeReadiness> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_USERS_UPGRADE_READINESS.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalUsers: resp.totalUsers,\r\n totalReadyUsers: resp.totalUsersReady\r\n };\r\n }));\r\n }\r\n\r\n getSitesUpgradeReadiness(): Observable<SitesUpgradeReadiness> {\r\n return this.apiService.fetch(\r\n API.OVERVIEW.GET_SITES_UPGRADE_READINESS.replace(':customerId', this.customerId)\r\n ).pipe(map((resp) => {\r\n return {\r\n id: resp.id,\r\n customerId: resp.customerId,\r\n totalSites: resp.totalSites,\r\n totalReadySites: resp.totalSitesReady\r\n };\r\n }));\r\n }\r\n}","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { UsersUpgradeReadiness } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: 'tk-ready-to-upgrade-users-card',\r\n templateUrl: './ready-to-upgrade-users-card.component.html',\r\n styleUrls: ['./ready-to-upgrade-users-card.component.scss']\r\n})\r\nexport class ReadyToUpgradeUsersCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Ready Users';\r\n type: any = 'user';\r\n readinessStats!: UsersUpgradeReadiness;\r\n upgradeStatus: any = 'ready';\r\n\r\n loading: boolean = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n \r\n this.loading = true;\r\n this.upgradeOverviewService.getUsersUpgradeReadiness()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats) => {\r\n this.readinessStats = stats;\r\n this.loading = false;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}"," <tk-stat-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [type]=\"type\"\r\n [readinessStats]=\"readinessStats\"\r\n [upgradeStatus]=\"upgradeStatus\">\r\n </tk-stat-card>","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { SitesUpgradeReadiness } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: 'tk-ready-to-upgrade-sites-card',\r\n templateUrl: './ready-to-upgrade-sites-card.component.html',\r\n styleUrls: ['./ready-to-upgrade-sites-card.component.scss']\r\n})\r\nexport class ReadyToUpgradeSitesCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Ready Sites';\r\n type: any = 'site';\r\n readinessStats!: SitesUpgradeReadiness;\r\n upgradeStatus: any = 'ready';\r\n\r\n loading: boolean = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n \r\n this.loading = true;\r\n this.upgradeOverviewService.getSitesUpgradeReadiness()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats) => {\r\n this.readinessStats = stats;\r\n this.loading = false;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}"," <tk-stat-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [type]=\"type\"\r\n [readinessStats]=\"readinessStats\"\r\n [upgradeStatus]=\"upgradeStatus\">\r\n </tk-stat-card>","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { UsersUpgradeSummary } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n\r\n@Component({\r\n selector: 'tk-already-upgraded-users-card',\r\n template: `\r\n <tk-stat-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [type]=\"type\"\r\n [readinessStats]=\"readinessStats\"\r\n [upgradeStatus]=\"upgradeStatus\"\r\n ></tk-stat-card>\r\n `\r\n})\r\nexport class AlreadyUpgradedUsersCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Upgraded Users';\r\n type: any = 'user';\r\n readinessStats!: UsersUpgradeSummary;\r\n upgradeStatus: any = 'already';\r\n\r\n loading: boolean = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n\r\n this.loading = true;\r\n this.upgradeOverviewService.getUsersUpgradeSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats) => {\r\n this.readinessStats = stats;\r\n this.loading = false;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { SitesUpgradeSummary } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: 'tk-already-upgraded-sites-card',\r\n template: `\r\n <tk-stat-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [type]=\"type\"\r\n [readinessStats]=\"readinessStats\"\r\n [upgradeStatus]=\"upgradeStatus\"\r\n ></tk-stat-card>\r\n `\r\n})\r\nexport class AlreadyUpgradedSitesCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Upgraded Sites';\r\n type: 'site' | 'user' = 'site';\r\n readinessStats!: SitesUpgradeSummary;\r\n upgradeStatus: any = 'already';\r\n\r\n loading: boolean = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n\r\n this.loading = true;\r\n this.upgradeOverviewService.getSitesUpgradeSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats) => {\r\n this.readinessStats = stats;\r\n this.loading = false;\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","import { Component, inject, Input, OnDestroy, OnInit } from \"@angular/core\";\r\nimport { UpgradePreconditions } from \"../../types/upgrade-overview\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { Subject, takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n\r\n@Component({\r\n selector: 'tk-preconditions-status-list-card',\r\n template: `\r\n <tk-status-list-card \r\n [title]=\"title\"\r\n [items]=\"items\"\r\n ></tk-status-list-card>\r\n `,\r\n styles: [` :host { width: 100%; } `]\r\n})\r\nexport class PreconditionsStatusListCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private destroy$ = new Subject<void>();\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title: string = 'Preconditions';\r\n preconditions!: UpgradePreconditions;\r\n\r\n items: any;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n \r\n this.upgradeOverviewService.getUpgradePreconditions()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((resp) => {\r\n this.preconditions = resp;\r\n this.init();\r\n });\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.items = [\r\n {\r\n label: 'Control Hub Integration',\r\n description: 'Control Hub Connectivity',\r\n status: this.preconditions.controlHubIntegration === 'CONNECTED'\r\n },\r\n {\r\n label: 'SIP Trunk (Local Gateway)',\r\n description: 'CUCM trunk connectivity estabilished',\r\n status: false\r\n },\r\n {\r\n label: `${this.preconditions.numberOfAvailableLicences} Available User Licences`,\r\n description: 'Webex calling licences provisioned and assgined',\r\n status: this.preconditions.numberOfAvailableLicences > 0\r\n }\r\n ];\r\n }\r\n}","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { SiteInfrastructureSummary } from \"../../types/upgrade-overview\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: 'tk-site-infrastructure-status-list-card',\r\n template: `\r\n <tk-status-list-card \r\n [title]=\"title\"\r\n [items]=\"items\"\r\n ></tk-status-list-card>\r\n `,\r\n styles: [` :host { width: 100%; } `]\r\n})\r\nexport class SiteInfrastructureStatusListCardComponent implements OnInit {\r\n title: string = 'Site Infrastructure';\r\n items: any;\r\n\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n\r\n this.upgradeOverviewService.getSiteInfrastructureSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((siteInfrastructure) => {\r\n this.items = [\r\n {\r\n label: 'PSTN Trunk',\r\n description: 'Public network connectivity',\r\n status: siteInfrastructure.totalPSTNs === siteInfrastructure.totalSites,\r\n totalSites: siteInfrastructure.totalSites,\r\n value: siteInfrastructure.totalPSTNs\r\n },\r\n {\r\n label: 'Location Mapping',\r\n description: 'Sites defined in Control Hub with proper configuration',\r\n status: siteInfrastructure.totalLocations === siteInfrastructure.totalSites,\r\n totalSites: siteInfrastructure.totalSites,\r\n value: siteInfrastructure.totalLocations\r\n }\r\n ];\r\n });\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","import { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { UsersUpgradeSummary, SitesUpgradeSummary } from \"../../types/upgrade-overview\";\r\nimport { Subject } from \"rxjs\";\r\nimport { takeUntil } from \"rxjs\";\r\nimport { APIService } from \"../../../../shared/services/api.service\";\r\n\r\n@Component({\r\n selector: \"tk-upgrade-state-comparison-chart-card\",\r\n template: `\r\n <tk-chart-card\r\n *ngIf=\"!loading\"\r\n [title]=\"title\"\r\n [totalUpgraded]=\"totalUpgraded\"\r\n [totalNotUpgraded]=\"totalNotUpgraded\"\r\n ></tk-chart-card>\r\n `,\r\n styles: [`\r\n :host {\r\n width: 100%\r\n } \r\n `]\r\n})\r\nexport class UpgradeStateComparisonChartCardComponent implements OnInit, OnDestroy {\r\n private apiService = inject(APIService);\r\n private upgradeOverviewService = inject(UpgradeOverviewService);\r\n private destroy$ = new Subject<void>();\r\n \r\n @Input() type: 'Users' | 'Sites' = 'Users';\r\n @Input() token!: string;\r\n @Input() customerId!: string;\r\n\r\n title!: string;\r\n totalUpgraded!: number;\r\n totalNotUpgraded!: number;\r\n\r\n loading = false;\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.upgradeOverviewService.customerId = this.customerId;\r\n\r\n this.totalUpgraded = 0;\r\n this.totalNotUpgraded = 0;\r\n this.loading = true;\r\n this.title = `Upgraded vs. Not Upgraded ${this.type}`;\r\n if (this.type === 'Sites') {\r\n this.upgradeOverviewService.getSitesUpgradeSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats: any) => {\r\n this.totalUpgraded = parseInt(stats.totalUpgradedSites);\r\n this.totalNotUpgraded = parseInt(stats.totalReadySites);\r\n this.loading = false;\r\n });\r\n } else {\r\n this.upgradeOverviewService.getUsersUpgradeSummary()\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((stats: any) => {\r\n this.totalUpgraded = parseInt(stats.totalUpgradedUsers);\r\n this.totalNotUpgraded = parseInt(stats.totalReadyUsers);\r\n this.loading = false;\r\n });\r\n }\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","import { NgModule } from \"@angular/core\";\r\nimport { ReadyToUpgradeUsersCardComponent } from \"./cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { SharedModule } from \"../../shared/shared.module\";\r\nimport { ReadyToUpgradeSitesCardComponent } from \"./cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component\";\r\nimport { AlreadyUpgradedUsersCardComponent } from \"./cards/already-upgraded-users/already-upgraded-users-card.component\";\r\nimport { AlreadyUpgradedSitesCardComponent } from \"./cards/already-upgraded-sites/already-upgraded-sites-card.component\";\r\nimport { PreconditionsStatusListCardComponent } from \"./cards/preconditions-status-list/preconditions-status-list-card.component\";\r\nimport { SiteInfrastructureStatusListCardComponent } from \"./cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component\";\r\nimport { UpgradeStateComparisonChartCardComponent } from \"./cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component\";\r\nimport { APIService } from \"../../shared/services/api.service\";\r\nimport { UserUpgradeService } from \"../user-upgrade/user-upgrade.service\";\r\n\r\n\r\n@NgModule({\r\n declarations: [\r\n ReadyToUpgradeUsersCardComponent,\r\n ReadyToUpgradeSitesCardComponent,\r\n AlreadyUpgradedUsersCardComponent,\r\n AlreadyUpgradedSitesCardComponent,\r\n PreconditionsStatusListCardComponent,\r\n SiteInfrastructureStatusListCardComponent,\r\n UpgradeStateComparisonChartCardComponent\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule\r\n ],\r\n exports: [\r\n ReadyToUpgradeUsersCardComponent,\r\n ReadyToUpgradeSitesCardComponent,\r\n AlreadyUpgradedUsersCardComponent,\r\n AlreadyUpgradedSitesCardComponent,\r\n PreconditionsStatusListCardComponent,\r\n SiteInfrastructureStatusListCardComponent,\r\n UpgradeStateComparisonChartCardComponent\r\n ],\r\n providers: [\r\n \r\n ]\r\n})\r\nexport class UpgradeOverviewModule {}","/*\r\n * Public API Surface of @tuki-io/tuki-widgets\r\n */\r\n\r\n// Shared Components\r\n// export * from './shared/shared.module';\r\n\r\n// Widget Modules\r\nexport * from './widgets/user-upgrade/user-upgrade.module';\r\nexport * from './widgets/site-upgrade/site-upgrade.module';\r\nexport * from './widgets/upgrade-overview/upgrade-overview.module';\r\n\r\n// Components\r\n// export * from './shared/components/index';\r\nexport * from './widgets/user-upgrade/user-upgrade-data-table/user-upgrade-data-table.component';\r\nexport * from './widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component';\r\nexport * from './widgets/upgrade-overview/cards/already-upgraded-sites/already-upgraded-sites-card.component';\r\nexport * from './widgets/upgrade-overview/cards/already-upgraded-users/already-upgraded-users-card.component';\r\nexport * from './widgets/upgrade-overview/cards/ready-to-upgrade-sites/ready-to-upgrade-sites-card.component';\r\nexport * from './widgets/upgrade-overview/cards/ready-to-upgrade-users/ready-to-upgrade-users-card.component';\r\nexport * from './widgets/upgrade-overview/cards/preconditions-status-list/preconditions-status-list-card.component';\r\nexport * from './widgets/upgrade-overview/cards/site-infrastructure-status-list/site-infrastructure-status-list-card.component';\r\nexport * from './widgets/upgrade-overview/cards/upgrade-state-comparison-chart/upgrade-state-comparison-chart-card.component';\r\nexport * from './widgets/site-upgrade/progress-bar/progress-bar.component';\r\n\r\n// Types\r\n// export * from './shared/types/data-table';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["API","i1","i2.SummaryCardComponent","i3.TableFiltersComponent","i4","i5","i6","i2.CardComponent","map","catchError","i8.ProgressBarComponent","i1.APIService","i2.StatCardComponent","i1.StatusListCardComponent","i2.ChartCardComponent"],"mappings":"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"}
|