{"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/cards/pending-activation-users/pending-activation-users.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    GET_PENDING_ACTIVATION_COUNT: '/api/webex-upgrade/customers/:customerId/users/pending-activation/count'\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  token!: string;\r\n  apiUrl!: string;\r\n\r\n  constructor(\r\n    private httpClient: HttpClient\r\n  ) { }\r\n\r\n  fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n    const headers = this.getHeaders(cache);\r\n    params = params || {};\r\n    return this.httpClient.get(this.apiUrl + url, {params: this.prepareEncodedParams(params), headers});\r\n  }\r\n\r\n  post(url: string, body: any, params = {}): Observable<any> {\r\n    body = body || null;\r\n    const headers = this.getHeaders();\r\n    return this.httpClient.post(this.apiUrl + url, body, {params: this.prepareEncodedParams(params), headers});\r\n  }\r\n\r\n  // use when response extended data is necessary:\r\n  postExtended(url: string, body = null, params = {}, headers = {}) {\r\n    headers = headers || this.getHeaders();\r\n    return this.httpClient.post(this.apiUrl + url, body, {\r\n      headers,\r\n      observe: 'response',\r\n      params: this.prepareEncodedParams(params)\r\n    });\r\n  }\r\n\r\n  put(url: string, body = null, params = {}) {\r\n    const headers = this.getHeaders();\r\n    return this.httpClient.put(this.apiUrl + url, body, {headers, params: this.prepareEncodedParams(params)});\r\n  }\r\n\r\n  delete(url: string, params = {}) {\r\n    const headers = this.getHeaders();\r\n    return this.httpClient.delete(this.apiUrl + url, {headers, params: this.prepareEncodedParams(params)});\r\n  }\r\n\r\n  fetchPagination(url: string, pageSize: number, pageNumber: number, additionalParams = {}, cache?: boolean): Observable<any> {\r\n    const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));\r\n    const params = Object.assign(copyAdditionalParams, {size: pageSize.toString(), page: pageNumber.toString()});\r\n    return this.fetch(url, params, cache) as Observable<any>;\r\n  }\r\n\r\n  private prepareEncodedParams(params: any) {\r\n    const result: any = {};\r\n\r\n    if (!params) {\r\n      return {};\r\n    }\r\n    for (const key of Object.keys(params)) {\r\n      if (params[key]) {\r\n        const stringParam = params[key].toString();\r\n        result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n      }\r\n    }\r\n    return result;\r\n  }\r\n\r\n  private getHeaders(cache?: boolean): HttpHeaders {\r\n    let headers = new HttpHeaders();\r\n    if (cache) {\r\n      headers = headers.append('_Cache', 'true ');\r\n    }\r\n    const token = this.token || this.getParameterByName('token');\r\n    headers = headers.append('Authorization', 'Bearer '+ token);\r\n    return headers;\r\n  }\r\n\r\n  private getParameterByName(name: any, url = window.location.href) {\r\n    name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n    var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n      results = regex.exec(url);\r\n    if (!results) return null;\r\n    if (!results[2]) return '';\r\n    return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n  }\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { MatTableDataSource } from \"@angular/material/table\";\r\nimport { DeviceInfo, DeviceWithExtensions, 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, params: UserSearchParams): 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      params\r\n    );\r\n  }\r\n\r\n  mapDevicesWithExtensions(devices: string[], deviceDetails: DeviceInfo[]): DeviceWithExtensions[] {\r\n    if (!devices?.length) {\r\n      return [];\r\n    }\r\n\r\n    return devices.map(deviceName => {\r\n      const found = deviceDetails.find(d => d.name === deviceName);\r\n\r\n      return {\r\n        deviceName,\r\n        extensions: found?.extensions ?? []\r\n      };\r\n    }) as DeviceWithExtensions[];\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\nexport type UserSearchParams = {\r\n  userId?: string;\r\n  siteName?: string;\r\n  upgradeStatus?: string;\r\n}\r\n// UI filter keys coming from your controls\r\nexport type UiFilterKey = 'Site' | 'User Upgrade Status' | 'User' | string;\r\n\r\n// map UI keys -> server keys\r\nexport const FILTER_KEY_MAP: Record<UiFilterKey, keyof UserSearchParams> = {\r\n  'Site': 'siteName',\r\n  'User Upgrade Status': 'upgradeStatus',\r\n  'User': 'userId',\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 {\r\n  FILTER_KEY_MAP,\r\n  UiFilterKey,\r\n  User2UpgradeStatusDTO,\r\n  UserSearchParams,\r\n  UserUpgradeService\r\n} 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() host!: string;\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: Partial<UserSearchParams> = {};\r\n\r\n  ngOnInit(): void {\r\n    this.dataPending = true;\r\n    this.apiService.token = this.token;\r\n    this.apiService.apiUrl = this.host;\r\n\r\n    this.userUpgradeService.customerId = this.customerId;\r\n\r\n    const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex, this.activeFilters)\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe((results: any) => {\r\n        const records = results.content as UserUpgradeRecord[]\r\n        records.forEach(record => {\r\n          record.devicesWithExtensions = this.userUpgradeService.mapDevicesWithExtensions(record.devices, record.deviceDetails);\r\n        });\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  getSiteUpgradeStatusClass(status: string): string {\r\n    switch (status.toLowerCase()) {\r\n      case 'ready':\r\n        return 'status-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  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(params?: UserSearchParams): void {\r\n    this.dataPending = true;\r\n    const subsc1 = this.userUpgradeService.getUserUpgradeRecords(this.pagination.pageSize, this.pagination.pageIndex, params || {})\r\n      .pipe(takeUntil(this.destroy$))\r\n      .subscribe((result) => {\r\n        const records = result.content as UserUpgradeRecord[]\r\n        records.forEach(record => {\r\n          record.devicesWithExtensions = this.userUpgradeService.mapDevicesWithExtensions(record.devices, record.deviceDetails);\r\n        });\r\n\r\n        this.data = new MatTableDataSource(records);\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: UserUpgradeRecord[]): void {\r\n    if (!records?.length) {\r\n      this.filters = [];\r\n      return;\r\n    }\r\n\r\n    // Extract unique sites (skip empty/null)\r\n    const uniqueSites = [\r\n      ...new Set(\r\n        records\r\n          .map(record => record.siteName?.trim())\r\n          .filter((site): site is string => !!site)\r\n      )\r\n    ];\r\n\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 (skip empty/null)\r\n    const uniqueStatuses = [\r\n      ...new Set(\r\n        records\r\n          .map(record => record.upgradeStatus?.trim())\r\n          .filter((status): status is string => !!status)\r\n      )\r\n    ];\r\n\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\r\n    if (siteOptions.length) {\r\n      this.filters.push({\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\r\n    if (statusOptions.length) {\r\n      this.filters.push({\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  /** 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  private getFilterValue(input: any): any {\r\n    if (input && input.value !== undefined) return input.value;      // e.g. {value,label}\r\n    if (input && input.target) return input.target.value;            // DOM event\r\n    return input;                                                    // plain value\r\n  }\r\n  private isEmptyFilter(v: any): boolean {\r\n    if (v === undefined || v === null) return true;\r\n    if (typeof v === 'string') {\r\n      const s = v.trim().toLowerCase();\r\n      return s === '' || s === 'all';\r\n    }\r\n    return false;\r\n  }\r\n\r\n  onFilter(filterEvent: { key: UiFilterKey; value: any }) {\r\n    const rawKey = filterEvent.key;\r\n    const serverKey = FILTER_KEY_MAP[rawKey];\r\n    const value = this.getFilterValue(filterEvent.value);\r\n\r\n    const next: Partial<UserSearchParams> = { ...this.activeFilters };\r\n\r\n    if (this.isEmptyFilter(value)) {\r\n      delete next[serverKey];\r\n    } else {\r\n      // normalize to string for API (trim)\r\n      next[serverKey] = typeof value === 'string' ? value.trim() : String(value);\r\n    }\r\n\r\n    this.activeFilters = next;\r\n    this.pagination.pageIndex = 0;\r\n\r\n    // quick fix for demo\r\n    if (this.activeFilters['upgradeStatus']) {\r\n      this.activeFilters['upgradeStatus'] = this.activeFilters['upgradeStatus']?.toUpperCase();\r\n    }\r\n\r\n    this.getData(this.activeFilters as UserSearchParams);\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]=\"70\"\r\n    strokeWidth=\"3\"\r\n    ></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                color=\"primary\"\r\n                class=\"upgrade-bulk-button\"\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=\"status-indicator\" [ngClass]=\"getSiteUpgradeStatusClass(element.upgradeStatus)\"></span>\r\n                    <span>{{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 class=\"device-td\" 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.devicesWithExtensions; 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.deviceName || device }}</span>\r\n                  <span class=\"device-model\">\r\n                    {{ device.extensions?.length ? 'Ext: ' + device.extensions.join(\", \") : 'No Extension' }}\r\n                  </span>\r\n                </div>\r\n              </div>\r\n                <div class=\"device-info\">\r\n                    <div class=\"multiple-dev-link\" *ngIf=\"element.devicesWithExtensions?.length > 1; else oneDevice\">\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                  <ng-template #oneDevice>\r\n                    <div class=\"device-name-wrapper\">\r\n                      <span class=\"device-indicator\"></span>\r\n                      <span class=\"device-name\">{{element.devicesWithExtensions[0].deviceName}}</span>\r\n                    </div>\r\n                    <div class=\"device-model one-dev-extensions\">\r\n                      {{ element.devicesWithExtensions[0].extensions?.length ?\r\n                      'Ext: ' + element.devicesWithExtensions[0].extensions?.join(\", \") : 'No Extension' }}\r\n                    </div>\r\n                  </ng-template>\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' | 'pending';\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                pendingActivation: this.readinessStats?.['pendingActivation'],\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        if(this.upgradeStatus === 'already' && this.type === 'user') {\r\n            return Math.ceil(1 / this.stats?.total * 100);\r\n        } else if(this.upgradeStatus === 'already' && this.type === 'site') { \r\n            return Math.ceil(this.stats?.totalUpgraded / this.stats?.total * 100);\r\n        }\r\n        else return Math.ceil(this.stats?.totalReady / this.stats?.total * 100);\r\n    }\r\n\r\n    get upgradedPercentage() {\r\n        if(this.upgradeStatus === 'already' && this.type === 'user') {\r\n            return 0;\r\n        } else if(this.upgradeStatus === 'already' && this.type === 'site') {\r\n            return this.stats?.totalReady == 0 || this.stats?.total == 0 ? 0 : Math.ceil(this.stats?.totalReady / this.stats?.total * 100);\r\n        }\r\n        else return Math.ceil(this.stats?.totalUpgraded / this.stats?.total * 100);\r\n    }\r\n\r\n    get pendingActivationPercentage() {\r\n        return (Math.ceil(this.stats?.pendingActivation / this.stats?.pendingActivation * 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          <ng-container *ngIf=\"upgradeStatus === 'ready' || upgradeStatus === 'already'\">\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          </ng-container>\r\n          <ng-container *ngIf=\"upgradeStatus === 'pending'\">\r\n            <div class=\"card__content-label\">\r\n              {{ stats?.pendingActivation }}\r\n              {{ 'Users' }}</div>\r\n            <div class=\"card__content-description\">{{ 'Ready to activate' }}</div>\r\n          </ng-container>\r\n        </div>\r\n      </div>\r\n    </div>\r\n    <div class=\"card__content-progress-wrapper\">\r\n      <ng-container *ngIf=\"upgradeStatus === 'ready' || upgradeStatus === 'already'\">\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      </ng-container>\r\n      <ng-container *ngIf=\"upgradeStatus === 'pending'\">\r\n        <div class=\"card__content-progress\">\r\n          <div class=\"card__content-progress-label\">\r\n            <span>{{ pendingActivationPercentage }}%</span>\r\n            <span>From all {{ stats?.pendingActivation }} {{ 'upgraded users' }}</span>\r\n          </div>\r\n          <div class=\"card__content-progress-bar\" style=\"overflow: hidden;\">\r\n            <div\r\n              class=\"card__content-progress-bar-fill ready\"\r\n              [class.pending-activation]=\"upgradeStatus === 'pending'\"\r\n              [style.width.%]=\"pendingActivationPercentage\"\r\n            ></div>\r\n          </div>\r\n        </div>\r\n      </ng-container>\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\r\n    displayLink: boolean = false;\r\n    hoveredItemLabel!: string;\r\n    \r\n    displayStatsDialog: boolean = false;\r\n\r\n    onMouseOverItemText(event: Event, label: string): void {\r\n        this.hoveredItemLabel = label;\r\n        this.displayLink = true;\r\n    }\r\n\r\n    onMouseLeaveItemText(event: Event, label: string): void {\r\n        this.hoveredItemLabel = label;\r\n        this.displayLink = false;\r\n    }\r\n\r\n    onMouseOverItemStats(event: Event, label: string): void {\r\n        event.stopPropagation();\r\n        this.hoveredItemLabel = label;\r\n        this.displayStatsDialog = true;\r\n    }\r\n\r\n    onMouseLeaveItemStats(event: Event, label: string): void {\r\n        this.hoveredItemLabel = label;\r\n        this.displayStatsDialog = false;\r\n    }\r\n\r\n    trackByFn(index: number): number {\r\n        return index;\r\n    }\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; trackBy: trackByFn\">\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 \r\n                    class=\"card__item-info\"\r\n                    (mouseover)=\"onMouseOverItemText($event, item.label)\"\r\n                    (mouseleave)=\"onMouseLeaveItemText($event, item.label)\">\r\n                    <div \r\n                        class=\"card__item-text-wrapper\">\r\n                        <div class=\"card__item-text\"\r\n                            [matTooltip]=\"item.tooltip\"\r\n                            [matTooltipPosition]=\"'above'\">\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\r\n                            class=\"card__item-link-wrapper\"\r\n                            *ngIf=\"item.link.href && hoveredItemLabel === item.label && displayLink\"\r\n                            [matTooltip]=\"item.link.tooltip\"\r\n                            [matTooltipPosition]=\"'right'\">\r\n                            <mat-icon>open_in_new</mat-icon>\r\n                        </div>\r\n                    </div>\r\n                    <div\r\n                        *ngIf=\"title.includes('Site')\"\r\n                        class=\"card__item-stats\"\r\n                        (mouseover)=\"onMouseOverItemStats($event, item.label)\"\r\n                        (mouseleave)=\"onMouseLeaveItemStats($event, item.label)\">\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\r\n                        <div class=\"card__item-stats-dialog\" [class.fade-in]=\"hoveredItemLabel === item.label && displayStatsDialog\">\r\n                            <div class=\"card__item-stats-dialog-item\">\r\n                                <span class=\"name\">Atlanta</span>\r\n                                <div class=\"status\">\r\n                                    <span class=\"indicator\"></span>\r\n                                    <span class=\"status-text\">Ready</span>\r\n                                </div>\r\n                            </div>\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\", \"#16A693\"],\r\n            legend: {\r\n                position: \"right\",\r\n                offsetY: 0,\r\n                fontSize: \"14px\",\r\n                // markers: {\r\n                //     size: 16,\r\n                //     strokeWidth: 0,\r\n                //     shape: 'circle'\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 Number((Math.round(value * 100) / 100).toFixed(1));\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        MaterialModule,\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 // return after demo 22.03.26 and delete the next line\r\n        upgradeStatus: record.siteUpgradeStatus === 'READY' ? 'COMPLETED' : 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() host!: string;\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.apiService.apiUrl = this.host;\r\n\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; // return after demo 22.03.26 and delete next line\r\n        this.statusCounts['Ready'] = 0;\r\n        this.statusCounts['Not Ready'] = statusCounts['NOT_READY'] || 0;\r\n        // this.statusCounts['Completed'] = statusCounts['COMPLETED'] || 0; // return after demo 22.03.26 and delete next line\r\n        this.statusCounts['Completed'] = 1;\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    if (!records?.length) {\r\n      this.filters = [];\r\n      return;\r\n    }\r\n\r\n    // Extract unique sites (skip empty/null)\r\n    const uniqueSites = [\r\n      ...new Set(\r\n        records\r\n          .map(record => record.siteName?.trim())\r\n          .filter((site): site is string => !!site)\r\n      )\r\n    ];\r\n\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 (skip empty/null)\r\n    const uniqueStatuses = [\r\n      ...new Set(\r\n        records\r\n          .map(record => record.upgradeStatus?.trim())\r\n          .filter((status): status is string => !!status)\r\n      )\r\n    ];\r\n\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    if (siteOptions.length) {\r\n      this.filters.push({\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\r\n    if (statusOptions.length) {\r\n      this.filters.push({\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\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 'status-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]=\"70\"\r\n    strokeWidth=\"3\"></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)=\"onSiteMigration(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>{{ 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-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    getPendingActivationCount(): Observable<number> {\r\n        return this.apiService.fetch(\r\n            API.OVERVIEW.GET_PENDING_ACTIVATION_COUNT.replace(':customerId', this.customerId)\r\n        ).pipe(map((resp) => {\r\n            if (typeof resp === \"number\") {\r\n                return resp;\r\n            }\r\n            return resp?.count ?? resp?.pendingActivation ?? resp?.total ?? 0;\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, // return after demo 22.03.26 and delete next line\r\n                totalReadySites: 0,\r\n                // totalUpgradedSites: resp.totalSitesUpgraded // return after demo 22.03.26 and delete next line\r\n                totalUpgradedSites: 1\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 // return after demo 22.03.26 and delete next line\r\n                totalReadySites: 0\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() host!: string;\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.apiService.apiUrl = this.host;\r\n        \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() host!: string;\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.apiService.apiUrl = this.host;\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() host!: string;\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.apiService.apiUrl = this.host;\r\n\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 = {\r\n                    ...stats,\r\n                    totalUpgradedUsers: 1,\r\n                    totalReadyUsers: 43,\r\n                };\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() host!: string;\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.apiService.apiUrl = this.host;\r\n\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() host!: string;\r\n    @Input() token!: string;\r\n    @Input() customerId!: string;\r\n\r\n    title: string = 'Mandatory Preconditions for Upgrade';\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.apiService.apiUrl = this.host;\r\n\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                tooltip: 'Your tenant must be connected to Webex Control Hub to enable and manage the upgrade process.',\r\n                link: {\r\n                    href: `${this.host}`,\r\n                    tooltip: 'Click below to open the integration setup wizard in Tuki. If the tenant is not yet connected, you will be redirected to create the integration in Control Hub.'\r\n                }\r\n            },\r\n            {\r\n                label: 'SIP Trunk (Local Gateway)',\r\n                description: 'CUCM trunk connectivity estabilished',\r\n                status: true,\r\n                tooltip: 'CUCM must have an active SIP trunk to the Local Gateway for tenant-wide external calling.',\r\n                link: {\r\n                    href: `${this.host}`,\r\n                    tooltip: 'Confirm that the trunk is configured and connected in CUCM.'\r\n                }\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                tooltip: 'Webex Calling licenses are required for users who are being upgraded.',\r\n                link: {\r\n                    href: '',\r\n                    tooltip: ''\r\n                }\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 Preconditions';\r\n    items: any;\r\n\r\n    @Input() host!: string;\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.apiService.apiUrl = this.host;\r\n        \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                        tooltip: 'Public network connectivity is required for external calling.',\r\n                        link: {\r\n                            href: `${this.host}`,\r\n                            tooltip: 'Ensure that the site has a configured PSTN trunk in Control Hub and verify that the connection is established and active. If setup is incomplete, contact your administrator or PSTN provider.'\r\n                        }\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                        tooltip: 'Each site must be mapped to a Control Hub location.',\r\n                        link: {\r\n                            href: `${this.host}`,\r\n                            tooltip: 'Click below to open the Tuki mapping tool and complete the site-to-location mapping.'\r\n                        }\r\n                    },\r\n                    {\r\n                        label: 'Ready users',\r\n                        description: 'All users in the site are ready or already upgraded',\r\n                        status: false,\r\n                        totalSites: 12,\r\n                        value: siteInfrastructure.totalLocations,\r\n                        tooltip: 'All users in the site must be ready or already upgraded to ensure a successful migration.',\r\n                        link: {\r\n                            href: '',\r\n                            tooltip: ''\r\n                        }\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() host!: string;\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.apiService.apiUrl = this.host;\r\n\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 = `${this.type} - Upgraded vs. Not Upgraded`;\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 { Component, Input, OnInit, OnDestroy, inject } from \"@angular/core\";\r\nimport { UpgradeOverviewService } from \"../../upgrade-overview.service\";\r\nimport { UsersUpgradeSummary } from \"../../types/upgrade-overview\";\r\nimport { forkJoin, 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-pending-activation-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 PendingActivationUsersCardComponent 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() host!: string;\r\n    @Input() token!: string;\r\n    @Input() customerId!: string;\r\n\r\n    title: string = 'Pending Activation Users';\r\n    type: any = 'user';\r\n    readinessStats!: UsersUpgradeSummary;\r\n    upgradeStatus: any = 'pending';\r\n\r\n    loading: boolean = false;\r\n\r\n    ngOnInit(): void {\r\n        this.apiService.token = this.token;\r\n        this.apiService.apiUrl = this.host;\r\n\r\n        this.upgradeOverviewService.customerId = this.customerId;\r\n\r\n        this.loading = true;\r\n\r\n    //     this.upgradeOverviewService.getUsersUpgradeSummary()\r\n    //         .pipe(takeUntil(this.destroy$))\r\n    //         .subscribe((stats) => {\r\n    //             this.readinessStats = {\r\n    //                 ...stats,\r\n    //                 pendingActivation: 1,\r\n    //                 totalUpgradedUsers: 1,\r\n    //             };\r\n    //             this.loading = false;\r\n    //         });\r\n    // }\r\n        forkJoin({\r\n            summary: this.upgradeOverviewService.getUsersUpgradeSummary(),\r\n            pendingActivation: this.upgradeOverviewService.getPendingActivationCount()\r\n        }).pipe(takeUntil(this.destroy$))\r\n            .subscribe(({ summary, pendingActivation }) => {\r\n                this.readinessStats = {\r\n                    ...summary,\r\n                    pendingActivation\r\n                };\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 { 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 { PendingActivationUsersCardComponent } from \"./cards/pending-activation-users/pending-activation-users.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        PendingActivationUsersCardComponent,\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        PendingActivationUsersCardComponent,\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/pending-activation-users/pending-activation-users.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","i3","i4","i5.SummaryCardComponent","i6.TableFiltersComponent","i2.CardComponent","i4.CardComponent","map","catchError","i4.SummaryCardComponent","i5.TableFiltersComponent","i6","i8.ProgressBarComponent","i1.APIService","i2.StatCardComponent","i1.StatusListCardComponent","i2.ChartCardComponent"],"mappings":"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"}