@tuki-io/tuki-widgets 0.0.219-dev.47 → 0.0.219-dev.48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/locations/src/location-confirm-dialog/location-confirm-dialog.component.mjs +2 -2
- package/esm2020/locations/src/locations.component.mjs +5 -5
- package/esm2020/workspaces/src/app.constants.mjs +5 -2
- package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +13 -3
- package/esm2020/workspaces/src/services/workspace-detail.service.mjs +21 -11
- package/esm2020/workspaces/src/services/workspaces.service.mjs +4 -2
- package/esm2020/workspaces/src/types/workspace.mjs +1 -1
- package/esm2020/workspaces/src/utils/workspace-name.mjs +8 -0
- package/esm2020/workspaces/src/workspaces.component.mjs +14 -6
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs +6 -6
- package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -1
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +57 -19
- package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs +6 -6
- package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -1
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +56 -18
- package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -1
- package/package.json +1 -1
- package/workspaces/src/app.constants.d.ts +4 -1
- package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +2 -0
- package/workspaces/src/services/workspace-detail.service.d.ts +4 -1
- package/workspaces/src/types/workspace.d.ts +181 -0
- package/workspaces/src/utils/workspace-name.d.ts +1 -0
- package/workspaces/src/workspaces.component.d.ts +2 -0
|
@@ -77,10 +77,10 @@ class LocationConfirmDialogComponent {
|
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
LocationConfirmDialogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocationConfirmDialogComponent, deps: [{ token: i1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
80
|
-
LocationConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LocationConfirmDialogComponent, selector: "tk-location-confirm-dialog", ngImport: i0, template: "<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\r\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\r\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\r\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\r\n {{ data.confirmButtonText }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".tk-location-confirm-dialog{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;width:400px;box-sizing:border-box;padding:0 0 16px}.tk-location-confirm-dialog__title{text-align:center;font-weight:600;font-size:16px;margin:0 0 20px}.tk-location-confirm-dialog__content{color:#000000b3;font-size:14px;padding:0}.tk-location-confirm-dialog__content p{margin:0 0 12px}.tk-location-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:12px;margin:16px 0 0}.tk-location-confirm-dialog__button{height:32px;padding:0 16px;border-radius:50px;box-shadow:none;border:none;font-size:14px;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer}.tk-location-confirm-dialog__button--cancel{border:1px solid rgba(0,0,0,.5);color:#000;background:#fff}.tk-location-confirm-dialog__button--confirm{background:#000;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
80
|
+
LocationConfirmDialogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LocationConfirmDialogComponent, selector: "tk-location-confirm-dialog", ngImport: i0, template: "<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\r\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\r\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\r\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\r\n {{ data.confirmButtonText }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".tk-location-confirm-dialog-panel .mat-dialog-container{padding:24px;border-radius:8px;background:#fff;box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f}.tk-location-confirm-dialog-backdrop{background:rgba(0,0,0,.32)}.tk-location-confirm-dialog{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;width:400px;box-sizing:border-box;padding:0 0 16px}.tk-location-confirm-dialog__title{text-align:center;font-weight:600;font-size:16px;margin:0 0 20px}.tk-location-confirm-dialog__content{color:#000000b3;font-size:14px;padding:0}.tk-location-confirm-dialog__content p{margin:0 0 12px}.tk-location-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:12px;margin:16px 0 0}.tk-location-confirm-dialog__button{height:32px;padding:0 16px;border-radius:50px;box-shadow:none;border:none;font-size:14px;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer}.tk-location-confirm-dialog__button--cancel{border:1px solid rgba(0,0,0,.5);color:#000;background:#fff}.tk-location-confirm-dialog__button--confirm{background:#000;color:#fff}\n"], dependencies: [{ kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }], encapsulation: i0.ViewEncapsulation.None });
|
|
81
81
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocationConfirmDialogComponent, decorators: [{
|
|
82
82
|
type: Component,
|
|
83
|
-
args: [{ selector: 'tk-location-confirm-dialog', encapsulation: ViewEncapsulation.None, template: "<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\r\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\r\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\r\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\r\n {{ data.confirmButtonText }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".tk-location-confirm-dialog{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;width:400px;box-sizing:border-box;padding:0 0 16px}.tk-location-confirm-dialog__title{text-align:center;font-weight:600;font-size:16px;margin:0 0 20px}.tk-location-confirm-dialog__content{color:#000000b3;font-size:14px;padding:0}.tk-location-confirm-dialog__content p{margin:0 0 12px}.tk-location-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:12px;margin:16px 0 0}.tk-location-confirm-dialog__button{height:32px;padding:0 16px;border-radius:50px;box-shadow:none;border:none;font-size:14px;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer}.tk-location-confirm-dialog__button--cancel{border:1px solid rgba(0,0,0,.5);color:#000;background:#fff}.tk-location-confirm-dialog__button--confirm{background:#000;color:#fff}\n"] }]
|
|
83
|
+
args: [{ selector: 'tk-location-confirm-dialog', encapsulation: ViewEncapsulation.None, template: "<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\r\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\r\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\r\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\r\n {{ data.confirmButtonText }}\r\n </button>\r\n </div>\r\n</div>\r\n", styles: [".tk-location-confirm-dialog-panel .mat-dialog-container{padding:24px;border-radius:8px;background:#fff;box-shadow:0 11px 15px -7px #0003,0 24px 38px 3px #00000024,0 9px 46px 8px #0000001f}.tk-location-confirm-dialog-backdrop{background:rgba(0,0,0,.32)}.tk-location-confirm-dialog{font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;width:400px;box-sizing:border-box;padding:0 0 16px}.tk-location-confirm-dialog__title{text-align:center;font-weight:600;font-size:16px;margin:0 0 20px}.tk-location-confirm-dialog__content{color:#000000b3;font-size:14px;padding:0}.tk-location-confirm-dialog__content p{margin:0 0 12px}.tk-location-confirm-dialog__actions{display:flex;justify-content:flex-end;gap:12px;margin:16px 0 0}.tk-location-confirm-dialog__button{height:32px;padding:0 16px;border-radius:50px;box-shadow:none;border:none;font-size:14px;font-family:Inter,Helvetica Neue,Helvetica,Arial,sans-serif;cursor:pointer}.tk-location-confirm-dialog__button--cancel{border:1px solid rgba(0,0,0,.5);color:#000;background:#fff}.tk-location-confirm-dialog__button--confirm{background:#000;color:#fff}\n"] }]
|
|
84
84
|
}], ctorParameters: function () { return [{ type: i1.MatDialogRef }, { type: undefined, decorators: [{
|
|
85
85
|
type: Inject,
|
|
86
86
|
args: [MAT_DIALOG_DATA]
|
|
@@ -391,11 +391,11 @@ class LocationsComponent {
|
|
|
391
391
|
}
|
|
392
392
|
onMigrateSite(location) {
|
|
393
393
|
const dialogRef = this.dialog.open(LocationConfirmDialogComponent, {
|
|
394
|
+
panelClass: 'tk-location-confirm-dialog-panel',
|
|
395
|
+
backdropClass: 'tk-location-confirm-dialog-backdrop',
|
|
394
396
|
data: {
|
|
395
|
-
title: `Migrate ${location.name}
|
|
396
|
-
message: `<p>
|
|
397
|
-
<p>Users and devices at this location will be updated to the new environment. This may take several minutes.</p>
|
|
398
|
-
<p>Do you want to continue?</p>`,
|
|
397
|
+
title: `Migrate ${location.name}?`,
|
|
398
|
+
message: `<p>Are you sure you want to migrate this location?</p>`,
|
|
399
399
|
confirmButtonText: 'Yes, migrate',
|
|
400
400
|
},
|
|
401
401
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tuki-io-tuki-widgets-locations.mjs","sources":["../../../../projects/tuki/widgets/locations/src/material.module.ts","../../../../projects/tuki/widgets/locations/src/location-confirm-dialog/location-confirm-dialog.component.ts","../../../../projects/tuki/widgets/locations/src/location-confirm-dialog/location-confirm-dialog.component.html","../../../../projects/tuki/widgets/locations/src/services/api.service.ts","../../../../projects/tuki/widgets/locations/src/app.constants.ts","../../../../projects/tuki/widgets/locations/src/services/locations.service.ts","../../../../projects/tuki/widgets/locations/src/utils/app-loader/app-loader.ts","../../../../projects/tuki/widgets/locations/src/utils/app-loader/app-loader.component.html","../../../../projects/tuki/widgets/locations/src/locations.component.ts","../../../../projects/tuki/widgets/locations/src/locations.component.html","../../../../projects/tuki/widgets/locations/src/locations.module.ts","../../../../projects/tuki/widgets/locations/public-api.ts","../../../../projects/tuki/widgets/locations/tuki-io-tuki-widgets-locations.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n imports: [\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n ],\r\n exports: [\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n ]\r\n})\r\nexport class MaterialModule { }\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\nexport interface LocationConfirmDialogData {\r\n title: string;\r\n message: string;\r\n confirmButtonText: string;\r\n}\r\n\r\n@Component({\r\n selector: 'tk-location-confirm-dialog',\r\n templateUrl: './location-confirm-dialog.component.html',\r\n styleUrls: ['./location-confirm-dialog.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocationConfirmDialogComponent {\r\n constructor(\r\n public dialogRef: MatDialogRef<LocationConfirmDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: LocationConfirmDialogData,\r\n ) { }\r\n\r\n onClose(result: boolean): void {\r\n this.dialogRef.close(result);\r\n }\r\n}\r\n","<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\r\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\r\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\r\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\r\n {{ data.confirmButtonText }}\r\n </button>\r\n </div>\r\n</div>\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 put(url: string, body: any = null, params = {}): Observable<any> {\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 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","export const API = {\r\n LOCATIONS: {\r\n GET_ALL: \"/api/webex/locations/customers/:customerId\",\r\n },\r\n SITE_MIGRATION: {\r\n MIGRATE_SITE: \"/api/migration/webex/sites/:siteId/migrate\",\r\n BATCH_STATUS: \"/api/migration/webex/customer/:customerId/batchesstatus\",\r\n },\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { API } from '../app.constants';\r\nimport { APIService } from './api.service';\r\nimport { Location, LocationAddress } from '../types/location';\r\n\r\nexport interface LocationsPage {\r\n locations: Location[];\r\n totalElements: number;\r\n}\r\n\r\nexport interface SiteBatchStatus {\r\n id: number;\r\n status: string;\r\n progress: number;\r\n migErrorsCount: string;\r\n}\r\n\r\nfunction toLocationAddress(raw: any): LocationAddress {\r\n return {\r\n address1: raw?.address1 || '',\r\n address2: raw?.address2 || '',\r\n city: raw?.city || '',\r\n state: raw?.state || '',\r\n postalCode: raw?.postalCode || '',\r\n country: raw?.country || '',\r\n countryName: raw?.countryName || raw?.country || '',\r\n };\r\n}\r\n\r\nfunction toLocation(raw: any): Location {\r\n return {\r\n id: String(raw?.id ?? ''),\r\n name: raw?.name || '',\r\n timeZone: raw?.timeZone || '',\r\n address: toLocationAddress(raw?.address),\r\n // Every location returned by this endpoint is a Webex Control Hub location.\r\n provisioningType: raw?.provisioningType || 'WEBEX',\r\n hasPendingActions: !!raw?.hasPendingActions,\r\n };\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocationsService {\r\n constructor(private apiService: APIService) { }\r\n\r\n fetchLocations(customerId: number, page: number, size: number): Observable<LocationsPage> {\r\n const url = API.LOCATIONS.GET_ALL.replace(':customerId', String(customerId));\r\n return this.apiService.fetch(url, { page, size }).pipe(\r\n map((response: any) => {\r\n const content = response?.content || [];\r\n return {\r\n locations: content.map(toLocation),\r\n totalElements: response?.totalElements ?? content.length,\r\n };\r\n }),\r\n );\r\n }\r\n \r\n migrateSite(siteId: string): Observable<number> {\r\n const url = API.SITE_MIGRATION.MIGRATE_SITE.replace(':siteId', siteId);\r\n return this.apiService.post(url, {}, { batchId: '' });\r\n }\r\n\r\n getMigrationBatchStatuses(customerId: number, batchIds: number[]): Observable<SiteBatchStatus[]> {\r\n const url = API.SITE_MIGRATION.BATCH_STATUS.replace(':customerId', String(customerId));\r\n return this.apiService.post(url, batchIds);\r\n }\r\n}\r\n","import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-loader',\r\n templateUrl: './app-loader.component.html',\r\n styleUrls: ['./app-loader.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AppLoaderComponent {\r\n constructor() {\r\n }\r\n\r\n}\r\n","<div 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","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { APIService } from './services/api.service';\r\nimport { LocationsService, SiteBatchStatus } from './services/locations.service';\r\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\r\nimport { Location } from './types/location';\r\n\r\nconst MIGRATION_POLL_INTERVAL_MS = 10000;\r\n\r\ntype LocationsSortDirection = 'asc' | 'desc';\r\n\r\nconst PAGE_SIZE_OPTIONS = [10, 25, 50];\r\n\r\n@Component({\r\n selector: 'tk-locations',\r\n templateUrl: './locations.component.html',\r\n styleUrls: ['./locations.component.scss'],\r\n})\r\nexport class LocationsComponent implements OnInit, OnDestroy {\r\n @Input() exHost!: string;\r\n @Input() token!: string;\r\n @Input() customerId!: number;\r\n\r\n @Output() openLocation = new EventEmitter<string>();\r\n @Output() editLocation = new EventEmitter<string>();\r\n @Output() removeLocation = new EventEmitter<string>();\r\n @Output() addLocation = new EventEmitter<void>();\r\n @Output() importLocations = new EventEmitter<void>();\r\n\r\n locations: Location[] = [];\r\n totalElements = 0;\r\n isLoading = false;\r\n\r\n searchTerm = '';\r\n sortDirection: LocationsSortDirection = 'asc';\r\n isBannerDismissed = false;\r\n\r\n readonly pageSizeOptions = PAGE_SIZE_OPTIONS;\r\n pageIndex = 0;\r\n pageSize = PAGE_SIZE_OPTIONS[0];\r\n\r\n isFilterPanelOpen = false;\r\n filters = {\r\n country: '',\r\n pendingActions: '',\r\n };\r\n\r\n private readonly countryDisplayNames = typeof Intl !== 'undefined' && 'DisplayNames' in Intl\r\n ? new Intl.DisplayNames(['en'], { type: 'region' })\r\n : null;\r\n\r\n private readonly migrationIntervals = new Map<string, ReturnType<typeof setInterval>>();\r\n\r\n constructor(\r\n private apiService: APIService,\r\n private locationsService: LocationsService,\r\n private dialog: MatDialog,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.apiService.apiUrl = this.exHost + '/webex';\r\n this.loadPage();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.migrationIntervals.forEach(interval => clearInterval(interval));\r\n this.migrationIntervals.clear();\r\n }\r\n\r\n private loadPage(): void {\r\n this.isLoading = true;\r\n this.locationsService.fetchLocations(this.customerId, this.pageIndex, this.pageSize).subscribe({\r\n next: ({ locations, totalElements }) => {\r\n this.locations = locations;\r\n this.totalElements = totalElements;\r\n this.isLoading = false;\r\n },\r\n error: () => {\r\n this.isLoading = false;\r\n },\r\n });\r\n }\r\n\r\n get pendingLocations(): Location[] {\r\n return this.locations.filter(location => location.hasPendingActions);\r\n }\r\n\r\n get showPendingBanner(): boolean {\r\n return !this.isBannerDismissed && this.pendingLocations.length > 0;\r\n }\r\n\r\n get countries(): string[] {\r\n return Array.from(new Set(this.locations.map(location => this.countryLabel(location)).filter(Boolean))).sort();\r\n }\r\n\r\n // Search/filter/sort apply only to the currently loaded page — the API paginates\r\n // server-side (page/size) and doesn't expose a documented search/filter parameter.\r\n get filteredLocations(): Location[] {\r\n const term = this.searchTerm.trim().toLowerCase();\r\n const filtered = this.locations.filter(location =>\r\n (!term ||\r\n location.name.toLowerCase().includes(term) ||\r\n this.addressLine(location).toLowerCase().includes(term) ||\r\n location.address.city.toLowerCase().includes(term) ||\r\n location.address.state.toLowerCase().includes(term) ||\r\n this.countryLabel(location).toLowerCase().includes(term)) &&\r\n (!this.filters.country || this.countryLabel(location) === this.filters.country) &&\r\n (!this.filters.pendingActions || String(location.hasPendingActions) === this.filters.pendingActions)\r\n );\r\n\r\n return filtered.sort((a, b) => {\r\n const comparison = a.name.localeCompare(b.name);\r\n return this.sortDirection === 'asc' ? comparison : -comparison;\r\n });\r\n }\r\n\r\n get pageRangeLabel(): string {\r\n if (!this.totalElements) {\r\n return '0 of 0';\r\n }\r\n const start = this.pageIndex * this.pageSize + 1;\r\n const end = Math.min(this.totalElements, start + this.locations.length - 1);\r\n return `${start} – ${end} of ${this.totalElements}`;\r\n }\r\n\r\n get hasPreviousPage(): boolean {\r\n return this.pageIndex > 0;\r\n }\r\n\r\n get hasNextPage(): boolean {\r\n return (this.pageIndex + 1) * this.pageSize < this.totalElements;\r\n }\r\n\r\n addressLine(location: Location): string {\r\n return [location.address.address1, location.address.address2, location.address.city]\r\n .filter(Boolean)\r\n .join(' - ');\r\n }\r\n\r\n countryLabel(location: Location): string {\r\n const { countryName, country } = location.address;\r\n if (countryName) {\r\n return countryName;\r\n }\r\n if (!country) {\r\n return '';\r\n }\r\n return this.countryDisplayNames?.of(country) || country;\r\n }\r\n\r\n // Same icon set as users-list's \"Provisioning Type\" column (assets/icons/webex.svg,\r\n // local_24.svg, di_cloud_24.svg).\r\n private readonly provisioningTypeIcons: Record<string, { src: string; tooltip: string }> = {\r\n WEBEX: { src: 'assets/icons/webex.svg', tooltip: 'Webex Calling' },\r\n UCM: { src: 'assets/icons/local_24.svg', tooltip: 'UCM' },\r\n DI: { src: 'assets/icons/di_cloud_24.svg', tooltip: 'Webex Calling DI' },\r\n };\r\n\r\n provisioningTypeIcon(location: Location): { src: string; tooltip: string } | null {\r\n return this.provisioningTypeIcons[location.provisioningType] || null;\r\n }\r\n\r\n onSearchInputChange(event: Event): void {\r\n this.searchTerm = (event.target as HTMLInputElement).value;\r\n }\r\n\r\n toggleNameSort(): void {\r\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\r\n }\r\n\r\n dismissBanner(): void {\r\n this.isBannerDismissed = true;\r\n }\r\n\r\n toggleFilterPanel(): void {\r\n this.isFilterPanelOpen = !this.isFilterPanelOpen;\r\n }\r\n\r\n closeFilterPanel(): void {\r\n this.isFilterPanelOpen = false;\r\n }\r\n\r\n clearFilters(): void {\r\n this.filters = { country: '', pendingActions: '' };\r\n }\r\n\r\n onPageSizeChange(event: Event): void {\r\n this.pageSize = Number((event.target as HTMLSelectElement).value);\r\n this.pageIndex = 0;\r\n this.loadPage();\r\n }\r\n\r\n goToPreviousPage(): void {\r\n if (this.hasPreviousPage) {\r\n this.pageIndex--;\r\n this.loadPage();\r\n }\r\n }\r\n\r\n goToNextPage(): void {\r\n if (this.hasNextPage) {\r\n this.pageIndex++;\r\n this.loadPage();\r\n }\r\n }\r\n\r\n onOpenLocation(location: Location): void {\r\n this.openLocation.emit(location.id);\r\n }\r\n\r\n onEditLocation(location: Location): void {\r\n this.editLocation.emit(location.id);\r\n }\r\n\r\n onRemoveLocation(location: Location): void {\r\n this.removeLocation.emit(location.id);\r\n }\r\n\r\n canMigrateSite(location: Location): boolean {\r\n return location.migrationStatus !== 'IN_PROGRESS';\r\n }\r\n\r\n onMigrateSite(location: Location): void {\r\n const dialogRef = this.dialog.open(LocationConfirmDialogComponent, {\r\n data: {\r\n title: `Migrate ${location.name} to Webex Calling?`,\r\n message: `<p>Migrating this site will move its calling configuration to Webex Calling.</p>\r\n <p>Users and devices at this location will be updated to the new environment. This may take several minutes.</p>\r\n <p>Do you want to continue?</p>`,\r\n confirmButtonText: 'Yes, migrate',\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(confirmed => {\r\n if (confirmed) {\r\n this.migrateSite(location);\r\n }\r\n });\r\n }\r\n\r\n private migrateSite(location: Location): void {\r\n location.migrationStatus = 'IN_PROGRESS';\r\n this.locationsService.migrateSite(location.id).subscribe({\r\n next: (batchId: number) => {\r\n if (batchId) {\r\n this.pollMigrationStatus(location, batchId);\r\n } else {\r\n location.migrationStatus = 'COMPLETED';\r\n location.provisioningType = 'WEBEX';\r\n }\r\n },\r\n error: () => {\r\n location.migrationStatus = 'FAILED';\r\n },\r\n });\r\n }\r\n\r\n private pollMigrationStatus(location: Location, batchId: number): void {\r\n this.clearMigrationInterval(location.id);\r\n\r\n const poll = (): void => {\r\n this.locationsService.getMigrationBatchStatuses(this.customerId, [batchId]).subscribe({\r\n next: (statuses: SiteBatchStatus[]) => {\r\n const status = statuses.find(item => item.id === batchId);\r\n if (!status || status.status === 'In Progress') {\r\n return;\r\n }\r\n this.clearMigrationInterval(location.id);\r\n location.migrationStatus = status.status === 'Completed' ? 'COMPLETED' : 'FAILED';\r\n if (location.migrationStatus === 'COMPLETED') {\r\n location.provisioningType = 'WEBEX';\r\n }\r\n },\r\n error: () => {\r\n this.clearMigrationInterval(location.id);\r\n location.migrationStatus = 'FAILED';\r\n },\r\n });\r\n };\r\n\r\n poll();\r\n this.migrationIntervals.set(location.id, setInterval(poll, MIGRATION_POLL_INTERVAL_MS));\r\n }\r\n\r\n private clearMigrationInterval(locationId: string): void {\r\n const interval = this.migrationIntervals.get(locationId);\r\n if (interval) {\r\n clearInterval(interval);\r\n this.migrationIntervals.delete(locationId);\r\n }\r\n }\r\n\r\n onAddLocation(): void {\r\n this.addLocation.emit();\r\n }\r\n\r\n onImportLocations(): void {\r\n this.importLocations.emit();\r\n }\r\n\r\n exportLocations(): void {\r\n const rows = this.filteredLocations.map(location => [\r\n location.name,\r\n this.addressLine(location),\r\n this.countryLabel(location),\r\n this.provisioningTypeIcon(location)?.tooltip || '',\r\n ]);\r\n const csvLines = [\r\n ['Location Name', 'Address', 'Country/Region', 'Provisioning Type'],\r\n ...rows,\r\n ].map(row => row.map(cell => `\"${String(cell).replace(/\"/g, '\"\"')}\"`).join(','));\r\n\r\n const blob = new Blob([csvLines.join('\\n')], { type: 'text/csv;charset=utf-8;' });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = 'locations.csv';\r\n link.click();\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n","<div class=\"tk-locations\">\r\n <app-loader *ngIf=\"isLoading\"></app-loader>\r\n\r\n <div class=\"tk-locations__view-toggle\">\r\n <button type=\"button\" class=\"tk-locations__view-button tk-locations__view-button--active\">\r\n <mat-icon class=\"tk-locations__view-icon\">menu</mat-icon>\r\n List\r\n </button>\r\n <button type=\"button\" class=\"tk-locations__view-button\" disabled title=\"Map view coming soon\">\r\n <mat-icon class=\"tk-locations__view-icon\">place</mat-icon>\r\n Map\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__banner\" *ngIf=\"showPendingBanner\">\r\n <mat-icon class=\"tk-locations__banner-icon\">warning</mat-icon>\r\n <span class=\"tk-locations__banner-text\">\r\n View location(s) with pending action items to resume your calling service in {{ pendingLocations.length }} or more locations.\r\n </span>\r\n <button type=\"button\" class=\"tk-locations__banner-close\" aria-label=\"Dismiss\" (click)=\"dismissBanner()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__toolbar\">\r\n <div style=\"position: relative; width: fit-content; min-width: 200px\">\r\n <input\r\n [value]=\"searchTerm\"\r\n class=\"blue-input\"\r\n (input)=\"onSearchInputChange($event)\"\r\n type=\"text\"\r\n placeholder=\"Search by name, city, state, country\"\r\n style=\"\r\n width: 100%;\r\n height: 34px;\r\n border-radius: 0.5rem;\r\n font-size: 16px;\r\n padding: 6px 12px 6px 44px;\r\n border: 1px solid #00000080;\r\n background: #fff;\r\n color: #222;\r\n outline: none;\r\n box-sizing: border-box;\r\n min-width: 280px;\r\n \"\r\n />\r\n <span\r\n style=\"\r\n position: absolute;\r\n left: 12px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n color: #757575;\r\n font-size: 18px;\r\n font-weight: normal;\r\n pointer-events: none;\r\n \"\r\n >\r\n <i\r\n class=\"material-icons\"\r\n style=\"font-size: 18px; font-weight: normal\"\r\n >search</i\r\n >\r\n </span>\r\n </div>\r\n\r\n <button type=\"button\" class=\"tk-locations__filter-button\" (click)=\"toggleFilterPanel()\">\r\n <img class=\"tk-locations__filter-icon\" src=\"assets/icons/filter-regular.svg\" alt=\"filter_list\" title=\"filter_list\">\r\n Filter\r\n </button>\r\n\r\n <span class=\"tk-locations__count\">{{ filteredLocations.length }} locations</span>\r\n\r\n <button type=\"button\" class=\"tk-locations__download-button\" aria-label=\"Download locations\" title=\"Download locations\" (click)=\"exportLocations()\">\r\n <mat-icon>file_download</mat-icon>\r\n </button>\r\n\r\n <button type=\"button\" class=\"tk-locations__manage-button\" [matMenuTriggerFor]=\"manageMenu\">\r\n Manage locations\r\n <mat-icon class=\"tk-locations__manage-chevron\">expand_more</mat-icon>\r\n </button>\r\n <mat-menu #manageMenu=\"matMenu\" xPosition=\"before\">\r\n <button mat-menu-item type=\"button\" (click)=\"onAddLocation()\">Add location</button>\r\n <button mat-menu-item type=\"button\" (click)=\"onImportLocations()\">Import locations</button>\r\n </mat-menu>\r\n </div>\r\n\r\n <table class=\"tk-locations__table\">\r\n <thead>\r\n <tr>\r\n <th (click)=\"toggleNameSort()\">\r\n Location Name\r\n <mat-icon class=\"tk-locations__sort-icon\">{{ sortDirection === 'asc' ? 'arrow_upward' : 'arrow_downward' }}</mat-icon>\r\n </th>\r\n <th>Address</th>\r\n <th>Country/Region</th>\r\n <th>Provisioning Type</th>\r\n <th class=\"tk-locations__actions-col\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let location of filteredLocations\" (click)=\"onOpenLocation(location)\">\r\n <td class=\"tk-locations__name-cell\">\r\n <a href=\"javascript:void(0)\" class=\"tk-locations__name-link\" (click)=\"$event.stopPropagation(); onOpenLocation(location)\">{{ location.name }}</a>\r\n </td>\r\n <td>{{ addressLine(location) || '—' }}</td>\r\n <td>{{ countryLabel(location) || '—' }}</td>\r\n <td>\r\n <span class=\"tk-locations__icon-wrapper\" *ngIf=\"provisioningTypeIcon(location) as pt; else noProvisioningType\">\r\n <img [src]=\"pt.src\" [matTooltip]=\"pt.tooltip\" matTooltipPosition=\"right\" width=\"20\" alt=\"\">\r\n </span>\r\n <ng-template #noProvisioningType>—</ng-template>\r\n </td>\r\n <td class=\"tk-locations__actions-col\">\r\n <mat-progress-spinner\r\n *ngIf=\"location.migrationStatus === 'IN_PROGRESS'\"\r\n class=\"tk-locations__row-action-spinner\"\r\n [diameter]=\"20\"\r\n strokeWidth=\"2\"\r\n mode=\"indeterminate\"\r\n matTooltip=\"Migrating site…\">\r\n </mat-progress-spinner>\r\n <button\r\n *ngIf=\"location.migrationStatus !== 'IN_PROGRESS'\"\r\n mat-icon-button\r\n class=\"tk-locations__row-action-button\"\r\n [matMenuTriggerFor]=\"rowMenu\"\r\n (click)=\"$event.stopPropagation()\"\r\n aria-label=\"Open location actions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #rowMenu=\"matMenu\" yPosition=\"below\">\r\n <button mat-menu-item type=\"button\" (click)=\"onOpenLocation(location)\">View details</button>\r\n <button mat-menu-item type=\"button\" (click)=\"onEditLocation(location)\">Edit location</button>\r\n <button\r\n *ngIf=\"canMigrateSite(location)\"\r\n mat-menu-item\r\n type=\"button\"\r\n (click)=\"onMigrateSite(location)\">Migrate site</button>\r\n <button mat-menu-item type=\"button\" (click)=\"onRemoveLocation(location)\">Remove location</button>\r\n </mat-menu>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"!filteredLocations.length\">\r\n <td colspan=\"5\" class=\"tk-locations__empty\">No locations match your search.</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <div class=\"tk-locations__footer\">\r\n <div class=\"tk-locations__rows-per-page\">\r\n <label for=\"tk-locations-page-size\">Rows per page:</label>\r\n <select id=\"tk-locations-page-size\" class=\"tk-locations__rows-per-page-select\" [ngModel]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\r\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">{{ size }}</option>\r\n </select>\r\n </div>\r\n <span class=\"tk-locations__footer-text\">{{ pageRangeLabel }}</span>\r\n <div class=\"tk-locations__pagination\">\r\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasPreviousPage\" (click)=\"goToPreviousPage()\" aria-label=\"Previous page\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasNextPage\" (click)=\"goToNextPage()\" aria-label=\"Next page\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"tk-locations__filter-backdrop\"\r\n *ngIf=\"isFilterPanelOpen\"\r\n (click)=\"closeFilterPanel()\">\r\n </div>\r\n\r\n <aside class=\"tk-locations__filter-panel\" [class.tk-locations__filter-panel--open]=\"isFilterPanelOpen\">\r\n <div class=\"tk-locations__filter-panel-header\">\r\n <h3 class=\"tk-locations__filter-panel-title\">Filter locations</h3>\r\n <button\r\n type=\"button\"\r\n class=\"tk-locations__filter-panel-close\"\r\n aria-label=\"Close filter panel\"\r\n (click)=\"closeFilterPanel()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-panel-body\">\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-country\">Country/Region</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-country\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.country\">\r\n <option value=\"\">All countries</option>\r\n <option *ngFor=\"let country of countries\" [value]=\"country\">{{ country }}</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-pending\">Pending action items</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-pending\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.pendingActions\">\r\n <option value=\"\">All</option>\r\n <option value=\"true\">Yes</option>\r\n <option value=\"false\">No</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-panel-footer\">\r\n <button type=\"button\" class=\"tk-locations__filter-clear\" (click)=\"clearFilters()\">Clear all</button>\r\n <button type=\"button\" class=\"tk-locations__filter-done\" (click)=\"closeFilterPanel()\">Done</button>\r\n </div>\r\n </aside>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MaterialModule } from './material.module';\r\nimport { LocationsComponent } from './locations.component';\r\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\r\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\r\n\r\n@NgModule({\r\n declarations: [\r\n LocationsComponent,\r\n LocationConfirmDialogComponent,\r\n AppLoaderComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n FormsModule,\r\n MaterialModule,\r\n ],\r\n exports: [\r\n LocationsComponent,\r\n ],\r\n})\r\nexport class LocationsModule { }\r\n","/*\r\n * Public API Surface of @tuki-io/tuki-widgets\r\n */\r\n\r\n// Widget Modules\r\nexport * from './src/locations.module';\r\n\r\n// Components\r\nexport * from './src/locations.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.APIService","i2.LocationsService","i3","i9","i11.AppLoaderComponent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tuki-io-tuki-widgets-locations.mjs","sources":["../../../../projects/tuki/widgets/locations/src/material.module.ts","../../../../projects/tuki/widgets/locations/src/location-confirm-dialog/location-confirm-dialog.component.ts","../../../../projects/tuki/widgets/locations/src/location-confirm-dialog/location-confirm-dialog.component.html","../../../../projects/tuki/widgets/locations/src/services/api.service.ts","../../../../projects/tuki/widgets/locations/src/app.constants.ts","../../../../projects/tuki/widgets/locations/src/services/locations.service.ts","../../../../projects/tuki/widgets/locations/src/utils/app-loader/app-loader.ts","../../../../projects/tuki/widgets/locations/src/utils/app-loader/app-loader.component.html","../../../../projects/tuki/widgets/locations/src/locations.component.ts","../../../../projects/tuki/widgets/locations/src/locations.component.html","../../../../projects/tuki/widgets/locations/src/locations.module.ts","../../../../projects/tuki/widgets/locations/public-api.ts","../../../../projects/tuki/widgets/locations/tuki-io-tuki-widgets-locations.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\n\r\n@NgModule({\r\n imports: [\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n ],\r\n exports: [\r\n MatButtonModule,\r\n MatDialogModule,\r\n MatIconModule,\r\n MatMenuModule,\r\n MatProgressSpinnerModule,\r\n MatTooltipModule,\r\n ]\r\n})\r\nexport class MaterialModule { }\r\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\r\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\r\n\r\nexport interface LocationConfirmDialogData {\r\n title: string;\r\n message: string;\r\n confirmButtonText: string;\r\n}\r\n\r\n@Component({\r\n selector: 'tk-location-confirm-dialog',\r\n templateUrl: './location-confirm-dialog.component.html',\r\n styleUrls: ['./location-confirm-dialog.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class LocationConfirmDialogComponent {\r\n constructor(\r\n public dialogRef: MatDialogRef<LocationConfirmDialogComponent>,\r\n @Inject(MAT_DIALOG_DATA) public data: LocationConfirmDialogData,\r\n ) { }\r\n\r\n onClose(result: boolean): void {\r\n this.dialogRef.close(result);\r\n }\r\n}\r\n","<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\r\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\r\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\r\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\r\n Cancel\r\n </button>\r\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\r\n {{ data.confirmButtonText }}\r\n </button>\r\n </div>\r\n</div>\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 put(url: string, body: any = null, params = {}): Observable<any> {\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 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","export const API = {\r\n LOCATIONS: {\r\n GET_ALL: \"/api/webex/locations/customers/:customerId\",\r\n },\r\n SITE_MIGRATION: {\r\n MIGRATE_SITE: \"/api/migration/webex/sites/:siteId/migrate\",\r\n BATCH_STATUS: \"/api/migration/webex/customer/:customerId/batchesstatus\",\r\n },\r\n};\r\n","import { Injectable } from '@angular/core';\r\nimport { Observable } from 'rxjs';\r\nimport { map } from 'rxjs/operators';\r\nimport { API } from '../app.constants';\r\nimport { APIService } from './api.service';\r\nimport { Location, LocationAddress } from '../types/location';\r\n\r\nexport interface LocationsPage {\r\n locations: Location[];\r\n totalElements: number;\r\n}\r\n\r\nexport interface SiteBatchStatus {\r\n id: number;\r\n status: string;\r\n progress: number;\r\n migErrorsCount: string;\r\n}\r\n\r\nfunction toLocationAddress(raw: any): LocationAddress {\r\n return {\r\n address1: raw?.address1 || '',\r\n address2: raw?.address2 || '',\r\n city: raw?.city || '',\r\n state: raw?.state || '',\r\n postalCode: raw?.postalCode || '',\r\n country: raw?.country || '',\r\n countryName: raw?.countryName || raw?.country || '',\r\n };\r\n}\r\n\r\nfunction toLocation(raw: any): Location {\r\n return {\r\n id: String(raw?.id ?? ''),\r\n name: raw?.name || '',\r\n timeZone: raw?.timeZone || '',\r\n address: toLocationAddress(raw?.address),\r\n // Every location returned by this endpoint is a Webex Control Hub location.\r\n provisioningType: raw?.provisioningType || 'WEBEX',\r\n hasPendingActions: !!raw?.hasPendingActions,\r\n };\r\n}\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LocationsService {\r\n constructor(private apiService: APIService) { }\r\n\r\n fetchLocations(customerId: number, page: number, size: number): Observable<LocationsPage> {\r\n const url = API.LOCATIONS.GET_ALL.replace(':customerId', String(customerId));\r\n return this.apiService.fetch(url, { page, size }).pipe(\r\n map((response: any) => {\r\n const content = response?.content || [];\r\n return {\r\n locations: content.map(toLocation),\r\n totalElements: response?.totalElements ?? content.length,\r\n };\r\n }),\r\n );\r\n }\r\n \r\n migrateSite(siteId: string): Observable<number> {\r\n const url = API.SITE_MIGRATION.MIGRATE_SITE.replace(':siteId', siteId);\r\n return this.apiService.post(url, {}, { batchId: '' });\r\n }\r\n\r\n getMigrationBatchStatuses(customerId: number, batchIds: number[]): Observable<SiteBatchStatus[]> {\r\n const url = API.SITE_MIGRATION.BATCH_STATUS.replace(':customerId', String(customerId));\r\n return this.apiService.post(url, batchIds);\r\n }\r\n}\r\n","import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-loader',\r\n templateUrl: './app-loader.component.html',\r\n styleUrls: ['./app-loader.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AppLoaderComponent {\r\n constructor() {\r\n }\r\n\r\n}\r\n","<div 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","import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { APIService } from './services/api.service';\r\nimport { LocationsService, SiteBatchStatus } from './services/locations.service';\r\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\r\nimport { Location } from './types/location';\r\n\r\nconst MIGRATION_POLL_INTERVAL_MS = 10000;\r\n\r\ntype LocationsSortDirection = 'asc' | 'desc';\r\n\r\nconst PAGE_SIZE_OPTIONS = [10, 25, 50];\r\n\r\n@Component({\r\n selector: 'tk-locations',\r\n templateUrl: './locations.component.html',\r\n styleUrls: ['./locations.component.scss'],\r\n})\r\nexport class LocationsComponent implements OnInit, OnDestroy {\r\n @Input() exHost!: string;\r\n @Input() token!: string;\r\n @Input() customerId!: number;\r\n\r\n @Output() openLocation = new EventEmitter<string>();\r\n @Output() editLocation = new EventEmitter<string>();\r\n @Output() removeLocation = new EventEmitter<string>();\r\n @Output() addLocation = new EventEmitter<void>();\r\n @Output() importLocations = new EventEmitter<void>();\r\n\r\n locations: Location[] = [];\r\n totalElements = 0;\r\n isLoading = false;\r\n\r\n searchTerm = '';\r\n sortDirection: LocationsSortDirection = 'asc';\r\n isBannerDismissed = false;\r\n\r\n readonly pageSizeOptions = PAGE_SIZE_OPTIONS;\r\n pageIndex = 0;\r\n pageSize = PAGE_SIZE_OPTIONS[0];\r\n\r\n isFilterPanelOpen = false;\r\n filters = {\r\n country: '',\r\n pendingActions: '',\r\n };\r\n\r\n private readonly countryDisplayNames = typeof Intl !== 'undefined' && 'DisplayNames' in Intl\r\n ? new Intl.DisplayNames(['en'], { type: 'region' })\r\n : null;\r\n\r\n private readonly migrationIntervals = new Map<string, ReturnType<typeof setInterval>>();\r\n\r\n constructor(\r\n private apiService: APIService,\r\n private locationsService: LocationsService,\r\n private dialog: MatDialog,\r\n ) { }\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.apiService.apiUrl = this.exHost + '/webex';\r\n this.loadPage();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.migrationIntervals.forEach(interval => clearInterval(interval));\r\n this.migrationIntervals.clear();\r\n }\r\n\r\n private loadPage(): void {\r\n this.isLoading = true;\r\n this.locationsService.fetchLocations(this.customerId, this.pageIndex, this.pageSize).subscribe({\r\n next: ({ locations, totalElements }) => {\r\n this.locations = locations;\r\n this.totalElements = totalElements;\r\n this.isLoading = false;\r\n },\r\n error: () => {\r\n this.isLoading = false;\r\n },\r\n });\r\n }\r\n\r\n get pendingLocations(): Location[] {\r\n return this.locations.filter(location => location.hasPendingActions);\r\n }\r\n\r\n get showPendingBanner(): boolean {\r\n return !this.isBannerDismissed && this.pendingLocations.length > 0;\r\n }\r\n\r\n get countries(): string[] {\r\n return Array.from(new Set(this.locations.map(location => this.countryLabel(location)).filter(Boolean))).sort();\r\n }\r\n\r\n // Search/filter/sort apply only to the currently loaded page — the API paginates\r\n // server-side (page/size) and doesn't expose a documented search/filter parameter.\r\n get filteredLocations(): Location[] {\r\n const term = this.searchTerm.trim().toLowerCase();\r\n const filtered = this.locations.filter(location =>\r\n (!term ||\r\n location.name.toLowerCase().includes(term) ||\r\n this.addressLine(location).toLowerCase().includes(term) ||\r\n location.address.city.toLowerCase().includes(term) ||\r\n location.address.state.toLowerCase().includes(term) ||\r\n this.countryLabel(location).toLowerCase().includes(term)) &&\r\n (!this.filters.country || this.countryLabel(location) === this.filters.country) &&\r\n (!this.filters.pendingActions || String(location.hasPendingActions) === this.filters.pendingActions)\r\n );\r\n\r\n return filtered.sort((a, b) => {\r\n const comparison = a.name.localeCompare(b.name);\r\n return this.sortDirection === 'asc' ? comparison : -comparison;\r\n });\r\n }\r\n\r\n get pageRangeLabel(): string {\r\n if (!this.totalElements) {\r\n return '0 of 0';\r\n }\r\n const start = this.pageIndex * this.pageSize + 1;\r\n const end = Math.min(this.totalElements, start + this.locations.length - 1);\r\n return `${start} – ${end} of ${this.totalElements}`;\r\n }\r\n\r\n get hasPreviousPage(): boolean {\r\n return this.pageIndex > 0;\r\n }\r\n\r\n get hasNextPage(): boolean {\r\n return (this.pageIndex + 1) * this.pageSize < this.totalElements;\r\n }\r\n\r\n addressLine(location: Location): string {\r\n return [location.address.address1, location.address.address2, location.address.city]\r\n .filter(Boolean)\r\n .join(' - ');\r\n }\r\n\r\n countryLabel(location: Location): string {\r\n const { countryName, country } = location.address;\r\n if (countryName) {\r\n return countryName;\r\n }\r\n if (!country) {\r\n return '';\r\n }\r\n return this.countryDisplayNames?.of(country) || country;\r\n }\r\n\r\n // Same icon set as users-list's \"Provisioning Type\" column (assets/icons/webex.svg,\r\n // local_24.svg, di_cloud_24.svg).\r\n private readonly provisioningTypeIcons: Record<string, { src: string; tooltip: string }> = {\r\n WEBEX: { src: 'assets/icons/webex.svg', tooltip: 'Webex Calling' },\r\n UCM: { src: 'assets/icons/local_24.svg', tooltip: 'UCM' },\r\n DI: { src: 'assets/icons/di_cloud_24.svg', tooltip: 'Webex Calling DI' },\r\n };\r\n\r\n provisioningTypeIcon(location: Location): { src: string; tooltip: string } | null {\r\n return this.provisioningTypeIcons[location.provisioningType] || null;\r\n }\r\n\r\n onSearchInputChange(event: Event): void {\r\n this.searchTerm = (event.target as HTMLInputElement).value;\r\n }\r\n\r\n toggleNameSort(): void {\r\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\r\n }\r\n\r\n dismissBanner(): void {\r\n this.isBannerDismissed = true;\r\n }\r\n\r\n toggleFilterPanel(): void {\r\n this.isFilterPanelOpen = !this.isFilterPanelOpen;\r\n }\r\n\r\n closeFilterPanel(): void {\r\n this.isFilterPanelOpen = false;\r\n }\r\n\r\n clearFilters(): void {\r\n this.filters = { country: '', pendingActions: '' };\r\n }\r\n\r\n onPageSizeChange(event: Event): void {\r\n this.pageSize = Number((event.target as HTMLSelectElement).value);\r\n this.pageIndex = 0;\r\n this.loadPage();\r\n }\r\n\r\n goToPreviousPage(): void {\r\n if (this.hasPreviousPage) {\r\n this.pageIndex--;\r\n this.loadPage();\r\n }\r\n }\r\n\r\n goToNextPage(): void {\r\n if (this.hasNextPage) {\r\n this.pageIndex++;\r\n this.loadPage();\r\n }\r\n }\r\n\r\n onOpenLocation(location: Location): void {\r\n this.openLocation.emit(location.id);\r\n }\r\n\r\n onEditLocation(location: Location): void {\r\n this.editLocation.emit(location.id);\r\n }\r\n\r\n onRemoveLocation(location: Location): void {\r\n this.removeLocation.emit(location.id);\r\n }\r\n\r\n canMigrateSite(location: Location): boolean {\r\n return location.migrationStatus !== 'IN_PROGRESS';\r\n }\r\n\r\n onMigrateSite(location: Location): void {\r\n const dialogRef = this.dialog.open(LocationConfirmDialogComponent, {\r\n panelClass: 'tk-location-confirm-dialog-panel',\r\n backdropClass: 'tk-location-confirm-dialog-backdrop',\r\n data: {\r\n title: `Migrate ${location.name}?`,\r\n message: `<p>Are you sure you want to migrate this location?</p>`,\r\n confirmButtonText: 'Yes, migrate',\r\n },\r\n });\r\n\r\n dialogRef.afterClosed().subscribe(confirmed => {\r\n if (confirmed) {\r\n this.migrateSite(location);\r\n }\r\n });\r\n }\r\n\r\n private migrateSite(location: Location): void {\r\n location.migrationStatus = 'IN_PROGRESS';\r\n this.locationsService.migrateSite(location.id).subscribe({\r\n next: (batchId: number) => {\r\n if (batchId) {\r\n this.pollMigrationStatus(location, batchId);\r\n } else {\r\n location.migrationStatus = 'COMPLETED';\r\n location.provisioningType = 'WEBEX';\r\n }\r\n },\r\n error: () => {\r\n location.migrationStatus = 'FAILED';\r\n },\r\n });\r\n }\r\n\r\n private pollMigrationStatus(location: Location, batchId: number): void {\r\n this.clearMigrationInterval(location.id);\r\n\r\n const poll = (): void => {\r\n this.locationsService.getMigrationBatchStatuses(this.customerId, [batchId]).subscribe({\r\n next: (statuses: SiteBatchStatus[]) => {\r\n const status = statuses.find(item => item.id === batchId);\r\n if (!status || status.status === 'In Progress') {\r\n return;\r\n }\r\n this.clearMigrationInterval(location.id);\r\n location.migrationStatus = status.status === 'Completed' ? 'COMPLETED' : 'FAILED';\r\n if (location.migrationStatus === 'COMPLETED') {\r\n location.provisioningType = 'WEBEX';\r\n }\r\n },\r\n error: () => {\r\n this.clearMigrationInterval(location.id);\r\n location.migrationStatus = 'FAILED';\r\n },\r\n });\r\n };\r\n\r\n poll();\r\n this.migrationIntervals.set(location.id, setInterval(poll, MIGRATION_POLL_INTERVAL_MS));\r\n }\r\n\r\n private clearMigrationInterval(locationId: string): void {\r\n const interval = this.migrationIntervals.get(locationId);\r\n if (interval) {\r\n clearInterval(interval);\r\n this.migrationIntervals.delete(locationId);\r\n }\r\n }\r\n\r\n onAddLocation(): void {\r\n this.addLocation.emit();\r\n }\r\n\r\n onImportLocations(): void {\r\n this.importLocations.emit();\r\n }\r\n\r\n exportLocations(): void {\r\n const rows = this.filteredLocations.map(location => [\r\n location.name,\r\n this.addressLine(location),\r\n this.countryLabel(location),\r\n this.provisioningTypeIcon(location)?.tooltip || '',\r\n ]);\r\n const csvLines = [\r\n ['Location Name', 'Address', 'Country/Region', 'Provisioning Type'],\r\n ...rows,\r\n ].map(row => row.map(cell => `\"${String(cell).replace(/\"/g, '\"\"')}\"`).join(','));\r\n\r\n const blob = new Blob([csvLines.join('\\n')], { type: 'text/csv;charset=utf-8;' });\r\n const url = URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.download = 'locations.csv';\r\n link.click();\r\n URL.revokeObjectURL(url);\r\n }\r\n}\r\n","<div class=\"tk-locations\">\r\n <app-loader *ngIf=\"isLoading\"></app-loader>\r\n\r\n <div class=\"tk-locations__view-toggle\">\r\n <button type=\"button\" class=\"tk-locations__view-button tk-locations__view-button--active\">\r\n <mat-icon class=\"tk-locations__view-icon\">menu</mat-icon>\r\n List\r\n </button>\r\n <button type=\"button\" class=\"tk-locations__view-button\" disabled title=\"Map view coming soon\">\r\n <mat-icon class=\"tk-locations__view-icon\">place</mat-icon>\r\n Map\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__banner\" *ngIf=\"showPendingBanner\">\r\n <mat-icon class=\"tk-locations__banner-icon\">warning</mat-icon>\r\n <span class=\"tk-locations__banner-text\">\r\n View location(s) with pending action items to resume your calling service in {{ pendingLocations.length }} or more locations.\r\n </span>\r\n <button type=\"button\" class=\"tk-locations__banner-close\" aria-label=\"Dismiss\" (click)=\"dismissBanner()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__toolbar\">\r\n <div style=\"position: relative; width: fit-content; min-width: 200px\">\r\n <input\r\n [value]=\"searchTerm\"\r\n class=\"blue-input\"\r\n (input)=\"onSearchInputChange($event)\"\r\n type=\"text\"\r\n placeholder=\"Search by name, city, state, country\"\r\n style=\"\r\n width: 100%;\r\n height: 34px;\r\n border-radius: 0.5rem;\r\n font-size: 16px;\r\n padding: 6px 12px 6px 44px;\r\n border: 1px solid #00000080;\r\n background: #fff;\r\n color: #222;\r\n outline: none;\r\n box-sizing: border-box;\r\n min-width: 280px;\r\n \"\r\n />\r\n <span\r\n style=\"\r\n position: absolute;\r\n left: 12px;\r\n top: 50%;\r\n transform: translateY(-50%);\r\n color: #757575;\r\n font-size: 18px;\r\n font-weight: normal;\r\n pointer-events: none;\r\n \"\r\n >\r\n <i\r\n class=\"material-icons\"\r\n style=\"font-size: 18px; font-weight: normal\"\r\n >search</i\r\n >\r\n </span>\r\n </div>\r\n\r\n <button type=\"button\" class=\"tk-locations__filter-button\" (click)=\"toggleFilterPanel()\">\r\n <img class=\"tk-locations__filter-icon\" src=\"assets/icons/filter-regular.svg\" alt=\"filter_list\" title=\"filter_list\">\r\n Filter\r\n </button>\r\n\r\n <span class=\"tk-locations__count\">{{ filteredLocations.length }} locations</span>\r\n\r\n <button type=\"button\" class=\"tk-locations__download-button\" aria-label=\"Download locations\" title=\"Download locations\" (click)=\"exportLocations()\">\r\n <mat-icon>file_download</mat-icon>\r\n </button>\r\n\r\n <button type=\"button\" class=\"tk-locations__manage-button\" [matMenuTriggerFor]=\"manageMenu\">\r\n Manage locations\r\n <mat-icon class=\"tk-locations__manage-chevron\">expand_more</mat-icon>\r\n </button>\r\n <mat-menu #manageMenu=\"matMenu\" xPosition=\"before\">\r\n <button mat-menu-item type=\"button\" (click)=\"onAddLocation()\">Add location</button>\r\n <button mat-menu-item type=\"button\" (click)=\"onImportLocations()\">Import locations</button>\r\n </mat-menu>\r\n </div>\r\n\r\n <table class=\"tk-locations__table\">\r\n <thead>\r\n <tr>\r\n <th (click)=\"toggleNameSort()\">\r\n Location Name\r\n <mat-icon class=\"tk-locations__sort-icon\">{{ sortDirection === 'asc' ? 'arrow_upward' : 'arrow_downward' }}</mat-icon>\r\n </th>\r\n <th>Address</th>\r\n <th>Country/Region</th>\r\n <th>Provisioning Type</th>\r\n <th class=\"tk-locations__actions-col\"></th>\r\n </tr>\r\n </thead>\r\n <tbody>\r\n <tr *ngFor=\"let location of filteredLocations\" (click)=\"onOpenLocation(location)\">\r\n <td class=\"tk-locations__name-cell\">\r\n <a href=\"javascript:void(0)\" class=\"tk-locations__name-link\" (click)=\"$event.stopPropagation(); onOpenLocation(location)\">{{ location.name }}</a>\r\n </td>\r\n <td>{{ addressLine(location) || '—' }}</td>\r\n <td>{{ countryLabel(location) || '—' }}</td>\r\n <td>\r\n <span class=\"tk-locations__icon-wrapper\" *ngIf=\"provisioningTypeIcon(location) as pt; else noProvisioningType\">\r\n <img [src]=\"pt.src\" [matTooltip]=\"pt.tooltip\" matTooltipPosition=\"right\" width=\"20\" alt=\"\">\r\n </span>\r\n <ng-template #noProvisioningType>—</ng-template>\r\n </td>\r\n <td class=\"tk-locations__actions-col\">\r\n <mat-progress-spinner\r\n *ngIf=\"location.migrationStatus === 'IN_PROGRESS'\"\r\n class=\"tk-locations__row-action-spinner\"\r\n [diameter]=\"20\"\r\n strokeWidth=\"2\"\r\n mode=\"indeterminate\"\r\n matTooltip=\"Migrating site…\">\r\n </mat-progress-spinner>\r\n <button\r\n *ngIf=\"location.migrationStatus !== 'IN_PROGRESS'\"\r\n mat-icon-button\r\n class=\"tk-locations__row-action-button\"\r\n [matMenuTriggerFor]=\"rowMenu\"\r\n (click)=\"$event.stopPropagation()\"\r\n aria-label=\"Open location actions\">\r\n <mat-icon>more_vert</mat-icon>\r\n </button>\r\n <mat-menu #rowMenu=\"matMenu\" yPosition=\"below\">\r\n <button mat-menu-item type=\"button\" (click)=\"onOpenLocation(location)\">View details</button>\r\n <button mat-menu-item type=\"button\" (click)=\"onEditLocation(location)\">Edit location</button>\r\n <button\r\n *ngIf=\"canMigrateSite(location)\"\r\n mat-menu-item\r\n type=\"button\"\r\n (click)=\"onMigrateSite(location)\">Migrate site</button>\r\n <button mat-menu-item type=\"button\" (click)=\"onRemoveLocation(location)\">Remove location</button>\r\n </mat-menu>\r\n </td>\r\n </tr>\r\n <tr *ngIf=\"!filteredLocations.length\">\r\n <td colspan=\"5\" class=\"tk-locations__empty\">No locations match your search.</td>\r\n </tr>\r\n </tbody>\r\n </table>\r\n\r\n <div class=\"tk-locations__footer\">\r\n <div class=\"tk-locations__rows-per-page\">\r\n <label for=\"tk-locations-page-size\">Rows per page:</label>\r\n <select id=\"tk-locations-page-size\" class=\"tk-locations__rows-per-page-select\" [ngModel]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\r\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">{{ size }}</option>\r\n </select>\r\n </div>\r\n <span class=\"tk-locations__footer-text\">{{ pageRangeLabel }}</span>\r\n <div class=\"tk-locations__pagination\">\r\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasPreviousPage\" (click)=\"goToPreviousPage()\" aria-label=\"Previous page\">\r\n <mat-icon>chevron_left</mat-icon>\r\n </button>\r\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasNextPage\" (click)=\"goToNextPage()\" aria-label=\"Next page\">\r\n <mat-icon>chevron_right</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n\r\n <div\r\n class=\"tk-locations__filter-backdrop\"\r\n *ngIf=\"isFilterPanelOpen\"\r\n (click)=\"closeFilterPanel()\">\r\n </div>\r\n\r\n <aside class=\"tk-locations__filter-panel\" [class.tk-locations__filter-panel--open]=\"isFilterPanelOpen\">\r\n <div class=\"tk-locations__filter-panel-header\">\r\n <h3 class=\"tk-locations__filter-panel-title\">Filter locations</h3>\r\n <button\r\n type=\"button\"\r\n class=\"tk-locations__filter-panel-close\"\r\n aria-label=\"Close filter panel\"\r\n (click)=\"closeFilterPanel()\">\r\n <mat-icon>close</mat-icon>\r\n </button>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-panel-body\">\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-country\">Country/Region</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-country\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.country\">\r\n <option value=\"\">All countries</option>\r\n <option *ngFor=\"let country of countries\" [value]=\"country\">{{ country }}</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-field\">\r\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-pending\">Pending action items</label>\r\n <div class=\"tk-locations__filter-select-wrap\">\r\n <select id=\"tk-locations-filter-pending\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.pendingActions\">\r\n <option value=\"\">All</option>\r\n <option value=\"true\">Yes</option>\r\n <option value=\"false\">No</option>\r\n </select>\r\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"tk-locations__filter-panel-footer\">\r\n <button type=\"button\" class=\"tk-locations__filter-clear\" (click)=\"clearFilters()\">Clear all</button>\r\n <button type=\"button\" class=\"tk-locations__filter-done\" (click)=\"closeFilterPanel()\">Done</button>\r\n </div>\r\n </aside>\r\n</div>\r\n","import { CommonModule } from '@angular/common';\r\nimport { NgModule } from '@angular/core';\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { FormsModule } from '@angular/forms';\r\nimport { MaterialModule } from './material.module';\r\nimport { LocationsComponent } from './locations.component';\r\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\r\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\r\n\r\n@NgModule({\r\n declarations: [\r\n LocationsComponent,\r\n LocationConfirmDialogComponent,\r\n AppLoaderComponent,\r\n ],\r\n imports: [\r\n CommonModule,\r\n HttpClientModule,\r\n FormsModule,\r\n MaterialModule,\r\n ],\r\n exports: [\r\n LocationsComponent,\r\n ],\r\n})\r\nexport class LocationsModule { }\r\n","/*\r\n * Public API Surface of @tuki-io/tuki-widgets\r\n */\r\n\r\n// Widget Modules\r\nexport * from './src/locations.module';\r\n\r\n// Components\r\nexport * from './src/locations.component';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1","i1.APIService","i2.LocationsService","i3","i9","i11.AppLoaderComponent"],"mappings":"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"}
|