@tuki-io/tuki-widgets 0.0.219-dev.38 → 0.0.219-dev.40

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.
Files changed (40) hide show
  1. package/esm2020/locations/src/locations.component.mjs +2 -2
  2. package/esm2020/workspaces/public-api.mjs +8 -0
  3. package/esm2020/workspaces/src/app.constants.mjs +7 -0
  4. package/esm2020/workspaces/src/components/workspace-detail/workspace-detail.component.mjs +50 -0
  5. package/esm2020/workspaces/src/components/workspaces-filters/workspaces-filters.component.mjs +56 -0
  6. package/esm2020/workspaces/src/components/workspaces-table/workspaces-table.component.mjs +86 -0
  7. package/esm2020/workspaces/src/material.module.mjs +76 -0
  8. package/esm2020/workspaces/src/services/api.service.mjs +67 -0
  9. package/esm2020/workspaces/src/services/workspace-detail.service.mjs +54 -0
  10. package/esm2020/workspaces/src/services/workspaces.service.mjs +90 -0
  11. package/esm2020/workspaces/src/types/workspace.mjs +4 -0
  12. package/esm2020/workspaces/src/utils/app-loader/app-loader.mjs +14 -0
  13. package/esm2020/workspaces/src/utils/device-icon.mjs +13 -0
  14. package/esm2020/workspaces/src/workspaces.component.mjs +124 -0
  15. package/esm2020/workspaces/src/workspaces.module.mjs +48 -0
  16. package/esm2020/workspaces/tuki-io-tuki-widgets-workspaces.mjs +5 -0
  17. package/fesm2015/tuki-io-tuki-widgets-locations.mjs +2 -2
  18. package/fesm2015/tuki-io-tuki-widgets-locations.mjs.map +1 -1
  19. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs +651 -0
  20. package/fesm2015/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  21. package/fesm2020/tuki-io-tuki-widgets-locations.mjs +2 -2
  22. package/fesm2020/tuki-io-tuki-widgets-locations.mjs.map +1 -1
  23. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs +654 -0
  24. package/fesm2020/tuki-io-tuki-widgets-workspaces.mjs.map +1 -0
  25. package/package.json +9 -1
  26. package/workspaces/index.d.ts +5 -0
  27. package/workspaces/public-api.d.ts +2 -0
  28. package/workspaces/src/app.constants.d.ts +6 -0
  29. package/workspaces/src/components/workspace-detail/workspace-detail.component.d.ts +23 -0
  30. package/workspaces/src/components/workspaces-filters/workspaces-filters.component.d.ts +20 -0
  31. package/workspaces/src/components/workspaces-table/workspaces-table.component.d.ts +32 -0
  32. package/workspaces/src/material.module.d.ts +15 -0
  33. package/workspaces/src/services/api.service.d.ts +18 -0
  34. package/workspaces/src/services/workspace-detail.service.d.ts +8 -0
  35. package/workspaces/src/services/workspaces.service.d.ts +11 -0
  36. package/workspaces/src/types/workspace.d.ts +161 -0
  37. package/workspaces/src/utils/app-loader/app-loader.d.ts +6 -0
  38. package/workspaces/src/utils/device-icon.d.ts +1 -0
  39. package/workspaces/src/workspaces.component.d.ts +57 -0
  40. package/workspaces/src/workspaces.module.d.ts +15 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tuki-io-tuki-widgets-workspaces.mjs","sources":["../../../../projects/tuki/widgets/workspaces/src/material.module.ts","../../../../projects/tuki/widgets/workspaces/src/services/api.service.ts","../../../../projects/tuki/widgets/workspaces/src/app.constants.ts","../../../../projects/tuki/widgets/workspaces/src/services/workspaces.service.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspaces-filters/workspaces-filters.component.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspaces-filters/workspaces-filters.component.html","../../../../projects/tuki/widgets/workspaces/src/utils/device-icon.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspaces-table/workspaces-table.component.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspaces-table/workspaces-table.component.html","../../../../projects/tuki/widgets/workspaces/src/services/workspace-detail.service.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspace-detail/workspace-detail.component.ts","../../../../projects/tuki/widgets/workspaces/src/components/workspace-detail/workspace-detail.component.html","../../../../projects/tuki/widgets/workspaces/src/utils/app-loader/app-loader.ts","../../../../projects/tuki/widgets/workspaces/src/utils/app-loader/app-loader.component.html","../../../../projects/tuki/widgets/workspaces/src/workspaces.component.ts","../../../../projects/tuki/widgets/workspaces/src/workspaces.component.html","../../../../projects/tuki/widgets/workspaces/src/workspaces.module.ts","../../../../projects/tuki/widgets/workspaces/public-api.ts","../../../../projects/tuki/widgets/workspaces/tuki-io-tuki-widgets-workspaces.ts"],"sourcesContent":["import { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@NgModule({\n imports: [\n MatButtonModule,\n MatIconModule,\n MatTableModule,\n MatProgressSpinnerModule,\n MatFormFieldModule,\n MatInputModule,\n MatMenuModule,\n MatPaginatorModule,\n MatTooltipModule,\n ],\n exports: [\n MatButtonModule,\n MatIconModule,\n MatTableModule,\n MatProgressSpinnerModule,\n MatFormFieldModule,\n MatInputModule,\n MatMenuModule,\n MatPaginatorModule,\n MatTooltipModule,\n ]\n})\nexport class MaterialModule { }\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class APIService {\n token!: string;\n apiUrl!: string;\n\n constructor(\n private httpClient: HttpClient\n ) { }\n\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\n const headers = this.getHeaders(cache);\n params = params || {};\n return this.httpClient.get(this.apiUrl + url, { params: this.prepareEncodedParams(params), headers });\n }\n\n post(url: string, body: any, params = {}): Observable<any> {\n body = body || null;\n const headers = this.getHeaders();\n return this.httpClient.post(this.apiUrl + url, body, { params: this.prepareEncodedParams(params), headers });\n }\n\n put(url: string, body: any = null, params = {}): Observable<any> {\n const headers = this.getHeaders();\n return this.httpClient.put(this.apiUrl + url, body, { headers, params: this.prepareEncodedParams(params) });\n }\n\n delete(url: string, params = {}) {\n const headers = this.getHeaders();\n return this.httpClient.delete(this.apiUrl + url, { headers, params: this.prepareEncodedParams(params) });\n }\n\n private prepareEncodedParams(params: any) {\n const result: any = {};\n\n if (!params) {\n return {};\n }\n for (const key of Object.keys(params)) {\n if (params[key] !== undefined && params[key] !== null && params[key] !== '') {\n const stringParam = params[key].toString();\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\n }\n }\n return result;\n }\n\n private getHeaders(cache?: boolean): HttpHeaders {\n let headers = new HttpHeaders();\n if (cache) {\n headers = headers.append('_Cache', 'true ');\n }\n const token = this.token || this.getParameterByName('token');\n headers = headers.append('Authorization', 'Bearer ' + token);\n return headers;\n }\n\n private getParameterByName(name: any, url = window.location.href) {\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\n results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n }\n}\n","export const API = {\n WORKSPACES: {\n GET_ALL: '/api/search/quicknonuserdevices',\n }\n};\n\nexport const ON_PREM_ID = 2542;","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport { API } from '../app.constants';\nimport { APIService } from './api.service';\nimport { Workspace, WorkspaceListItem, WorkspacesPage, WorkspacesResponse, WorkspaceStatus } from '../types/workspace';\n\nfunction parseResponse(response: any): any {\n return typeof response === 'string' ? JSON.parse(response) : response;\n}\n\nfunction toStatus(provisioningStatus: string | null): WorkspaceStatus {\n if (!provisioningStatus) {\n return 'unavailable';\n }\n return provisioningStatus.toLowerCase() === 'active' ? 'active' : 'inactive';\n}\n\nfunction toWorkspace(item: WorkspaceListItem, index: number): Workspace {\n const device = item.device;\n const firstDirectoryNumber = device.associatedDNs?.[0]?.directoryNumber ?? '';\n\n return {\n id: device.pkid || item.workspaceDevices?.[0]?.deviceId || device.name || `workspace-${index}`,\n displayName: device.newName || device.name || 'Unnamed device',\n typeLabel: device.userDeviceType || 'No type',\n capacity: null,\n location: item.site?.name || device.siteName || device.location || '',\n devices: (item.workspaceDevices || []).map(workspaceDevice => ({\n id: workspaceDevice.deviceId,\n kind: 'device' as const,\n label: workspaceDevice.model || workspaceDevice.mac,\n model: workspaceDevice.model,\n })),\n scheduling: 'Not set',\n callingLicense: firstDirectoryNumber,\n provisioningType: 'On-premises',\n status: toStatus(device.provisioningStatus),\n statusLabel: device.provisioningStatus || 'Status unavailable',\n device,\n isHybrid: false,\n };\n}\n\nfunction mergeDevices(a: Workspace['device'], b: Workspace['device']): Workspace['device'] {\n return {\n ...a,\n ...b,\n cucmId: b.cucmId ?? a.cucmId,\n webexUUID: b.webexUUID ?? a.webexUUID,\n };\n}\n\nfunction mergeWorkspacesByDeviceName(workspaces: Workspace[]): Workspace[] {\n const merged = new Map<string, Workspace>();\n\n for (const workspace of workspaces) {\n const key = workspace.device.name;\n const existing = merged.get(key);\n merged.set(key, existing ? {\n ...existing,\n ...workspace,\n device: mergeDevices(existing.device, workspace.device),\n isHybrid: true,\n } : workspace);\n }\n\n return Array.from(merged.values());\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class WorkspacesService {\n constructor(private apiService: APIService) { }\n\n fetchWorkspaces(\n customerId: string | number,\n size = 10,\n page = 0,\n ): Observable<WorkspacesPage> {\n const queryParams: Record<string, string> = {\n type: 'ORPHAN_DEVICE',\n 'device-name': 'SEP',\n customerid: customerId.toString(),\n size: size.toString(),\n page: page.toString(),\n };\n return this.apiService.fetch(API.WORKSPACES.GET_ALL, queryParams).pipe(\n map((response: any) => {\n const parsed = parseResponse(response) as WorkspacesResponse;\n return {\n workspaces: mergeWorkspacesByDeviceName((parsed?.pageData || []).map(toWorkspace)),\n total: parsed?.total ?? 0,\n };\n }),\n );\n }\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n selector: 'tk-workspaces-filters',\n templateUrl: './workspaces-filters.component.html',\n styleUrls: ['./workspaces-filters.component.scss'],\n})\nexport class WorkspacesFiltersComponent {\n @Input() resultCount = 0;\n @Input() typeOptions: string[] = [];\n @Input() locationOptions: string[] = [];\n\n @Output() searchChange = new EventEmitter<string>();\n @Output() typeChange = new EventEmitter<string>();\n @Output() locationChange = new EventEmitter<string>();\n @Output() addWorkspace = new EventEmitter<void>();\n\n searchTerm = '';\n selectedType = '';\n selectedLocation = '';\n\n onSearchInputChange(event: Event): void {\n this.searchTerm = (event.target as HTMLInputElement).value;\n this.searchChange.emit(this.searchTerm);\n }\n\n onTypeChange(value: string): void {\n this.selectedType = value;\n this.typeChange.emit(value);\n }\n\n onLocationChange(value: string): void {\n this.selectedLocation = value;\n this.locationChange.emit(value);\n }\n\n onAddWorkspace(): void {\n this.addWorkspace.emit();\n }\n}\n","<div class=\"tk-workspaces-filters\">\n <div class=\"tk-workspaces-filters__search\">\n <input\n class=\"tk-workspaces-filters__search-input blue-input\"\n type=\"text\"\n placeholder=\"Search\"\n [value]=\"searchTerm\"\n (input)=\"onSearchInputChange($event)\"\n />\n <mat-icon class=\"tk-workspaces-filters__search-icon\">search</mat-icon>\n </div>\n\n <div class=\"tk-workspaces-filters__filters\">\n <span class=\"tk-workspaces-filters__filters-label\">Filters:</span>\n\n <div class=\"tk-workspaces-filters__select-wrap\">\n <select\n class=\"tk-workspaces-filters__select\"\n [ngModel]=\"selectedType\"\n (ngModelChange)=\"onTypeChange($event)\">\n <option value=\"\">General</option>\n <option *ngFor=\"let type of typeOptions\" [value]=\"type\">{{ type }}</option>\n </select>\n <mat-icon class=\"tk-workspaces-filters__select-icon\">expand_more</mat-icon>\n </div>\n\n <div class=\"tk-workspaces-filters__select-wrap\">\n <select\n class=\"tk-workspaces-filters__select\"\n [ngModel]=\"selectedLocation\"\n (ngModelChange)=\"onLocationChange($event)\">\n <option value=\"\">Location</option>\n <option *ngFor=\"let location of locationOptions\" [value]=\"location\">{{ location }}</option>\n </select>\n <mat-icon class=\"tk-workspaces-filters__select-icon\">expand_more</mat-icon>\n </div>\n </div>\n\n <span class=\"tk-workspaces-filters__count\">{{ resultCount }} workspace{{ resultCount === 1 ? '' : 's' }} in total</span>\n\n <button type=\"button\" class=\"tk-workspaces-filters__add-button\" [matMenuTriggerFor]=\"addMenu\">\n Add workspace\n <mat-icon class=\"tk-workspaces-filters__add-icon\">expand_more</mat-icon>\n </button>\n\n <mat-menu #addMenu=\"matMenu\">\n <button type=\"button\" mat-menu-item (click)=\"onAddWorkspace()\">Add workspace</button>\n <button type=\"button\" mat-menu-item disabled>Import workspaces</button>\n </mat-menu>\n</div>\n","const DEFAULT_DEVICE_ICON = 'assets/icons/cisco_8851.png';\n\nconst DEVICE_MODEL_ICONS: Record<string, string> = {\n 'cisco 8851': 'assets/icons/cisco_8851.png',\n 'cisco 8845': 'assets/icons/cisco_8845.png',\n 'cisco 9841': 'assets/icons/cisco_9841.png',\n};\n\nexport function getDeviceIcon(model?: string): string {\n if (!model) {\n return DEFAULT_DEVICE_ICON;\n }\n return DEVICE_MODEL_ICONS[model.trim().toLowerCase()] ?? DEFAULT_DEVICE_ICON;\n}\n","import { Component, EventEmitter, Input, Output } from '@angular/core';\nimport { PageEvent } from '@angular/material/paginator';\nimport { Workspace } from '../../types/workspace';\nimport { getDeviceIcon as resolveDeviceIcon } from '../../utils/device-icon';\n\nexport interface WorkspacesPageChange {\n pageIndex: number;\n pageSize: number;\n}\n\n@Component({\n selector: 'tk-workspaces-table',\n templateUrl: './workspaces-table.component.html',\n styleUrls: ['./workspaces-table.component.scss'],\n})\nexport class WorkspacesTableComponent {\n @Input() workspaces: Workspace[] = [];\n @Input() total = 0;\n @Input() pageIndex = 0;\n @Input() pageSize = 10;\n @Input() pageSizeOptions: number[] = [10, 25, 50, 100];\n\n @Output() openWorkspace = new EventEmitter<string>();\n @Output() editWorkspace = new EventEmitter<string>();\n @Output() deleteWorkspace = new EventEmitter<string>();\n @Output() addDevice = new EventEmitter<string>();\n @Output() pageChange = new EventEmitter<WorkspacesPageChange>();\n\n selectedIds = new Set<string>();\n\n get allSelected(): boolean {\n return this.workspaces.length > 0 && this.selectedIds.size === this.workspaces.length;\n }\n\n get someSelected(): boolean {\n return this.selectedIds.size > 0 && !this.allSelected;\n }\n\n toggleAll(): void {\n this.selectedIds = this.allSelected ? new Set() : new Set(this.workspaces.map(workspace => workspace.id));\n }\n\n toggleRow(workspaceId: string): void {\n const nextSelection = new Set(this.selectedIds);\n if (nextSelection.has(workspaceId)) {\n nextSelection.delete(workspaceId);\n } else {\n nextSelection.add(workspaceId);\n }\n this.selectedIds = nextSelection;\n }\n\n isSelected(workspaceId: string): boolean {\n return this.selectedIds.has(workspaceId);\n }\n\n onOpenWorkspace(workspace: Workspace): void {\n this.openWorkspace.emit(workspace.id);\n }\n\n onAddDevice(workspace: Workspace, event: Event): void {\n event.stopPropagation();\n this.addDevice.emit(workspace.id);\n }\n\n onPage(event: PageEvent): void {\n this.selectedIds = new Set();\n this.pageChange.emit({ pageIndex: event.pageIndex, pageSize: event.pageSize });\n }\n\n getDeviceIcon(model?: string): string {\n return resolveDeviceIcon(model);\n }\n}\n","<div class=\"tk-workspaces-table__bulk-bar\">Select one or more workspaces for bulk actions</div>\n\n<div class=\"tk-workspaces-table__wrapper\">\n <table class=\"tk-workspaces-table__table\">\n <thead>\n <tr>\n <th class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"allSelected\" [indeterminate]=\"someSelected\" (change)=\"toggleAll()\" />\n </th>\n <th>Name</th>\n <th>Devices</th>\n <th>Scheduling</th>\n <th>Calling</th>\n <th>Provisioning Type</th>\n <th>Status</th>\n <th class=\"tk-workspaces-table__settings-cell\">\n <mat-icon class=\"tk-workspaces-table__settings-icon\">settings</mat-icon>\n </th>\n </tr>\n </thead>\n <tbody>\n <tr\n *ngFor=\"let workspace of workspaces\"\n [class.tk-workspaces-table__row--selected]=\"isSelected(workspace.id)\">\n <td class=\"tk-workspaces-table__checkbox-cell\">\n <input type=\"checkbox\" [checked]=\"isSelected(workspace.id)\" (change)=\"toggleRow(workspace.id)\" />\n </td>\n <td class=\"tk-workspaces-table__name-cell\" (click)=\"onOpenWorkspace(workspace)\">\n <div class=\"tk-workspaces-table__name-wrapper\">\n <span class=\"tk-workspaces-table__name-icon\">\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\n </span>\n <div class=\"tk-workspaces-table__name-info\">\n <a href=\"javascript:void(0)\" class=\"tk-workspaces-table__name-link\">{{ workspace.displayName }}</a>\n <div class=\"tk-workspaces-table__name-meta\">\n <span class=\"tk-workspaces-table__name-type\">{{ workspace.typeLabel }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__name-capacity\">{{ workspace.capacity ?? 'No capacity' }}</span>\n <span class=\"tk-workspaces-table__meta-sep\">&middot;</span>\n <!-- <mat-icon class=\"tk-workspaces-table__meta-icon\">location_on</mat-icon> -->\n <img class=\"tk-workspaces-table__meta-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <a\n *ngIf=\"workspace.location; else noLocation\"\n href=\"javascript:void(0)\"\n class=\"tk-workspaces-table__location-link\">{{ workspace.location }}</a>\n <ng-template #noLocation>\n <span class=\"tk-workspaces-table__location-empty\">No location</span>\n </ng-template>\n </div>\n </div>\n </div>\n </td>\n <td>\n <div class=\"tk-workspaces-table__devices\">\n <ng-container *ngIf=\"workspace.devices.length; else noDevices\">\n <span *ngFor=\"let device of workspace.devices\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container>\n <!-- <ng-container *ngFor=\"let device of workspace.devices\">\n <span *ngIf=\"device && device.model else noDevice\" class=\"tk-workspaces-table__device-card\" [title]=\"device.label\">\n <img\n class=\"tk-workspaces-table__device-icon\"\n [src]=\"getDeviceIcon(device.model)\"\n [alt]=\"device.label\" />\n </span>\n </ng-container> -->\n <ng-template #noDevices>\n <button\n type=\"button\"\n class=\"tk-workspaces-table__device-add\"\n (click)=\"onAddDevice(workspace, $event)\">\n <span class=\"tk-workspaces-table__device-add-label\">\n <img\n class=\"tk-workspaces-table__device-add-icon\"\n src=\"assets/icons/multipled-devices-regular.svg\"\n alt=\"\" />\n Add device\n </span>\n </button>\n </ng-template>\n </div>\n </td>\n <td>{{ workspace.scheduling }}</td>\n <td class=\"tk-workspaces-table__calling-cell\">\n <span class=\"tk-workspaces-table__calling-content\">\n <img class=\"tk-workspaces-table__calling-icon\" src=\"assets/icons/location-regular.svg\" alt=\"\" />\n <span class=\"tk-workspaces-table__calling-text\" title=\"Cisco Webex Calling Professional Workspace\">Cisco Webex Calling Professional Workspace</span>\n </span>\n </td>\n <td>\n <div *ngIf=\"workspace.isHybrid\" class=\"tk-workspaces-table__provisioning-icons\">\n <span class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </div>\n <ng-container *ngIf=\"!workspace.isHybrid\">\n <span *ngIf=\"workspace.device.cucmId != null\" class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/di_cloud_24.svg\"\n [matTooltip]=\"'Webex Calling DI'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n <span *ngIf=\"workspace.device.webexUUID != null\" class=\"icon-wrapper\"\n ><img\n src=\"assets/icons/webex.svg\"\n [matTooltip]=\"'Webex Calling'\"\n matTooltipPosition=\"right\"\n width=\"20\"\n alt=\"\"\n /></span>\n </ng-container>\n </td>\n <td>\n <span class=\"tk-workspaces-table__status\">\n <span\n class=\"tk-workspaces-table__status-dot\"\n [class.tk-workspaces-table__status-dot--hybrid]=\"workspace.isHybrid\"\n [class.tk-workspaces-table__status-dot--active]=\"!workspace.isHybrid\"></span>\n {{ workspace.isHybrid ? 'Hybrid' : 'Active' }}\n </span>\n </td>\n <td class=\"tk-workspaces-table__actions-cell\">\n <button type=\"button\" class=\"tk-workspaces-table__actions-button\" [matMenuTriggerFor]=\"rowMenu\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #rowMenu=\"matMenu\">\n <button type=\"button\" mat-menu-item (click)=\"editWorkspace.emit(workspace.id)\">Edit</button>\n <button type=\"button\" mat-menu-item (click)=\"deleteWorkspace.emit(workspace.id)\">Delete</button>\n </mat-menu>\n </td>\n </tr>\n <tr *ngIf=\"!workspaces.length\">\n <td [attr.colspan]=\"8\" class=\"tk-workspaces-table__empty\">No workspaces to display.</td>\n </tr>\n </tbody>\n </table>\n</div>\n\n<mat-paginator\n class=\"tk-workspaces-table__paginator\"\n [length]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n [pageSizeOptions]=\"pageSizeOptions\"\n (page)=\"onPage($event)\">\n</mat-paginator>\n","import { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { Workspace, WorkspaceDetails } from '../types/workspace';\n\n// No dedicated detail API exists yet, so the Overview/Calling tabs are\n// populated with mock data derived from the already-loaded workspace record.\n@Injectable({\n providedIn: 'root'\n})\nexport class WorkspaceDetailService {\n getByWorkspace(workspace: Workspace): Observable<WorkspaceDetails> {\n const device = workspace.device;\n const directoryNumber = device.associatedDNs?.[0]?.directoryNumber ?? '';\n const sipAddress = `${(device.name || workspace.displayName || 'workspace').toLowerCase()}@tukidev.rooms.webex.com`;\n\n const issues = [\n !workspace.typeLabel || workspace.typeLabel === 'No type' ? {\n id: 'type',\n message: 'Workspace type not set',\n timestamp: 'Just now',\n actionLabel: 'Assign type',\n } : null,\n workspace.capacity == null ? {\n id: 'capacity',\n message: 'Workspace capacity not set',\n timestamp: 'Just now',\n actionLabel: 'Set capacity',\n } : null,\n ].filter((issue): issue is NonNullable<typeof issue> => issue !== null);\n\n const details: WorkspaceDetails = {\n issues,\n location: {\n country: workspace.location || 'Not set',\n address: device.location || 'Address not available',\n },\n calling: {\n license: workspace.callingLicense || 'Cisco Webex Calling Professional Workspace',\n sipAddress,\n directoryNumber: directoryNumber || 'Not assigned',\n routePartition: device.associatedDNs?.[0]?.routePartitionName || 'Not set',\n callingSearchSpace: device.callingSearchSpaceName || 'Not set',\n securityProfile: device.securityProfile || 'Not set',\n },\n schedulingConfigured: false,\n plannedMaintenanceEnabled: false,\n notes: null,\n };\n\n return of(details);\n }\n}\n","import { Location } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { Workspace, WorkspaceDetails } from '../../types/workspace';\nimport { WorkspaceDetailService } from '../../services/workspace-detail.service';\nimport { getDeviceIcon } from '../../utils/device-icon';\n\nexport type WorkspaceDetailTab = 'overview' | 'calling';\n\n@Component({\n selector: 'tk-workspace-detail',\n templateUrl: './workspace-detail.component.html',\n styleUrls: ['./workspace-detail.component.scss'],\n})\nexport class WorkspaceDetailComponent implements OnInit {\n @Input() workspace!: Workspace;\n\n @Output() back = new EventEmitter<void>();\n\n activeTab: WorkspaceDetailTab = 'overview';\n details: WorkspaceDetails | null = null;\n\n constructor(\n private workspaceDetailService: WorkspaceDetailService,\n private location: Location,\n ) { }\n\n ngOnInit(): void {\n this.workspaceDetailService.getByWorkspace(this.workspace).subscribe(details => {\n this.details = details;\n });\n this.updateUrl();\n }\n\n get deviceName(): string {\n return this.workspace.device?.name || this.workspace.id;\n }\n\n resolveIcon(model?: string): string {\n return getDeviceIcon(model);\n }\n\n selectTab(tab: WorkspaceDetailTab): void {\n this.activeTab = tab;\n this.updateUrl();\n }\n\n onBack(): void {\n this.location.replaceState('/workspaces');\n this.back.emit();\n }\n\n private updateUrl(): void {\n this.location.replaceState(`/workspaces/${this.deviceName}/${this.activeTab}`);\n }\n}\n","<button type=\"button\" class=\"tk-workspace-detail__breadcrumb\" (click)=\"onBack()\">\n <mat-icon>chevron_left</mat-icon>\n Workspaces\n</button>\n\n<div class=\"tk-workspace-detail__header\">\n <span class=\"tk-workspace-detail__icon\">\n <img src=\"assets/icons/device-in-room-regular.svg\" alt=\"\" />\n </span>\n <div class=\"tk-workspace-detail__title-block\">\n <h1 class=\"tk-workspace-detail__name\">{{ workspace.displayName }}</h1>\n <div class=\"tk-workspace-detail__meta\">\n <span class=\"tk-workspace-detail__status\">\n <span class=\"tk-workspace-detail__status-dot\"></span>\n Live status unavailable\n </span>\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\n <span>Type: {{ workspace.typeLabel === 'No type' ? 'Not set' : workspace.typeLabel }}</span>\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\n <img class=\"tk-workspace-detail__meta-icon\" src=\"assets/icons/people-regular.svg\" alt=\"\" />\n <span>Capacity: {{ workspace.capacity ?? 'Not set' }}</span>\n <span class=\"tk-workspace-detail__meta-sep\">&middot;</span>\n <span class=\"tk-workspace-detail__meta-muted\">Size not set</span>\n </div>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__actions-button\" [matMenuTriggerFor]=\"actionsMenu\">\n Actions\n <mat-icon>expand_more</mat-icon>\n </button>\n <mat-menu #actionsMenu=\"matMenu\">\n <button type=\"button\" mat-menu-item disabled>More actions coming soon</button>\n </mat-menu>\n</div>\n\n<nav class=\"tk-workspace-detail__tabs\">\n <button\n type=\"button\"\n class=\"tk-workspace-detail__tab\"\n [class.tk-workspace-detail__tab--active]=\"activeTab === 'overview'\"\n (click)=\"selectTab('overview')\">\n Overview\n </button>\n <button\n type=\"button\"\n class=\"tk-workspace-detail__tab\"\n [class.tk-workspace-detail__tab--active]=\"activeTab === 'calling'\"\n (click)=\"selectTab('calling')\">\n Calling\n </button>\n</nav>\n\n<ng-container *ngIf=\"details\">\n <div class=\"tk-workspace-detail__grid\" *ngIf=\"activeTab === 'overview'\">\n <div class=\"tk-workspace-detail__col\">\n <section class=\"tk-workspace-detail__card\" *ngIf=\"details.issues.length\">\n <h2 class=\"tk-workspace-detail__card-title\">Issues &amp; Information</h2>\n <div class=\"tk-workspace-detail__issue\" *ngFor=\"let issue of details.issues\">\n <div class=\"tk-workspace-detail__issue-info\">\n <mat-icon class=\"tk-workspace-detail__issue-icon\">info</mat-icon>\n <div>\n <div class=\"tk-workspace-detail__issue-message\">{{ issue.message }}</div>\n <div class=\"tk-workspace-detail__issue-timestamp\">{{ issue.timestamp }}</div>\n </div>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">\n {{ issue.actionLabel }}\n <mat-icon>expand_more</mat-icon>\n </button>\n </div>\n </section>\n\n <section class=\"tk-workspace-detail__card\">\n <div class=\"tk-workspace-detail__card-header\">\n <h2 class=\"tk-workspace-detail__card-title\">Devices</h2>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add device</button>\n </div>\n <div class=\"tk-workspace-detail__devices\" *ngIf=\"workspace.devices.length; else noDevices\">\n <div class=\"tk-workspace-detail__device\" *ngFor=\"let device of workspace.devices\">\n <img class=\"tk-workspace-detail__device-icon\" [src]=\"resolveIcon(device.model)\" [alt]=\"device.label\" />\n <div class=\"tk-workspace-detail__device-info\">\n <a href=\"javascript:void(0)\" class=\"tk-workspace-detail__device-link\">{{ device.label }}</a>\n <div class=\"tk-workspace-detail__device-status\">\n <span class=\"tk-workspace-detail__status-dot\"></span>\n Status unavailable\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\n </div>\n </div>\n </div>\n </div>\n <ng-template #noDevices>\n <div class=\"tk-workspace-detail__empty\">No devices assigned.</div>\n </ng-template>\n </section>\n\n <section class=\"tk-workspace-detail__card\">\n <div class=\"tk-workspace-detail__card-header\">\n <h2 class=\"tk-workspace-detail__card-title\">Calling</h2>\n <mat-icon class=\"tk-workspace-detail__settings-icon\">settings</mat-icon>\n </div>\n <div class=\"tk-workspace-detail__calling-license\">\n <mat-icon>call</mat-icon>\n {{ details.calling.license }}\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Cisco Webex SIP Address</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.sipAddress }}</span>\n </div>\n </section>\n\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\" *ngIf=\"!details.schedulingConfigured\">\n <mat-icon class=\"tk-workspace-detail__card-icon\">event</mat-icon>\n <h3 class=\"tk-workspace-detail__card-heading\">Choose scheduling</h3>\n <p class=\"tk-workspace-detail__card-text\">Choose a calendar service or setup hot-desking for this workspace.</p>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Choose scheduling</button>\n </section>\n\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\">\n <mat-icon class=\"tk-workspace-detail__card-icon\">info</mat-icon>\n <h3 class=\"tk-workspace-detail__card-heading\">Device hosted meetings unavailable</h3>\n <p class=\"tk-workspace-detail__card-text\">Service not supported by Cisco IP phones</p>\n </section>\n\n <section class=\"tk-workspace-detail__card\">\n <h2 class=\"tk-workspace-detail__card-title\">\n Planned Maintenance\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\n </h2>\n <div class=\"tk-workspace-detail__row\">\n <mat-icon>build</mat-icon>\n <span>{{ details.plannedMaintenanceEnabled ? 'On' : 'Off' }}</span>\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--with-action\">\n <div class=\"tk-workspace-detail__row\">\n <mat-icon>event</mat-icon>\n <div>\n <div>Schedule</div>\n <div class=\"tk-workspace-detail__row-hint\">No schedule set</div>\n </div>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Edit schedule</button>\n </div>\n </section>\n\n <section class=\"tk-workspace-detail__card tk-workspace-detail__card--centered\" *ngIf=\"!details.notes\">\n <mat-icon class=\"tk-workspace-detail__card-icon\">description</mat-icon>\n <h3 class=\"tk-workspace-detail__card-heading\">Add notes</h3>\n <p class=\"tk-workspace-detail__card-text\">Write a note about this workspace.</p>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add notes</button>\n </section>\n </div>\n\n <div class=\"tk-workspace-detail__col\">\n <section class=\"tk-workspace-detail__card\">\n <div class=\"tk-workspace-detail__card-header\">\n <h2 class=\"tk-workspace-detail__card-title\">Location</h2>\n <mat-icon class=\"tk-workspace-detail__settings-icon\">settings</mat-icon>\n </div>\n <div class=\"tk-workspace-detail__location\">\n <mat-icon>location_on</mat-icon>\n <div>\n <a href=\"javascript:void(0)\" class=\"tk-workspace-detail__location-link\">{{ details.location.country }}</a>\n <div class=\"tk-workspace-detail__location-address\">{{ details.location.address }}</div>\n </div>\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row\">\n <mat-icon>explore</mat-icon>\n <span>Indoor navigation</span>\n <mat-icon class=\"tk-workspace-detail__info-icon\">info_outline</mat-icon>\n </div>\n <button type=\"button\" class=\"tk-workspace-detail__pill-button\">Add URL</button>\n <div class=\"tk-workspace-detail__map\">\n <mat-icon class=\"tk-workspace-detail__map-pin\">location_on</mat-icon>\n </div>\n </section>\n </div>\n </div>\n\n <div class=\"tk-workspace-detail__grid\" *ngIf=\"activeTab === 'calling'\">\n <div class=\"tk-workspace-detail__col\">\n <section class=\"tk-workspace-detail__card\">\n <h2 class=\"tk-workspace-detail__card-title\">Calling</h2>\n <div class=\"tk-workspace-detail__calling-license\">\n <mat-icon>call</mat-icon>\n {{ details.calling.license }}\n </div>\n <hr class=\"tk-workspace-detail__divider\" />\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Cisco Webex SIP Address</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.sipAddress }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Directory Number</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.directoryNumber }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Route Partition</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.routePartition }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Calling Search Space</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.callingSearchSpace }}</span>\n </div>\n <div class=\"tk-workspace-detail__row tk-workspace-detail__row--kv\">\n <span class=\"tk-workspace-detail__row-label\">Device Security Profile</span>\n <span class=\"tk-workspace-detail__row-value\">{{ details.calling.securityProfile }}</span>\n </div>\n </section>\n </div>\n </div>\n</ng-container>\n","import { Component, ViewEncapsulation } from '@angular/core';\n\n@Component({\n selector: 'app-loader',\n templateUrl: './app-loader.component.html',\n styleUrls: ['./app-loader.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AppLoaderComponent {\n constructor() {\n }\n\n}\n","<div class=\"overlay\">\n <mat-progress-spinner\n class=\"page-spinner\"\n mode=\"indeterminate\"\n [diameter]=\"70\"\n strokeWidth=\"3\"></mat-progress-spinner>\n</div>\n","import { Location } from '@angular/common';\nimport { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { APIService } from './services/api.service';\nimport { WorkspacesService } from './services/workspaces.service';\nimport { Workspace } from './types/workspace';\n\ntype WorkspacesView = 'list' | 'detail';\n\ntype WorkspacesTab = 'workspaces' | 'insights' | 'integrations' | 'settings';\n\ninterface WorkspacesTabDefinition {\n id: WorkspacesTab;\n label: string;\n icon: string;\n}\n\n@Component({\n selector: 'tk-workspaces',\n templateUrl: './workspaces.component.html',\n styleUrls: ['./workspaces.component.scss'],\n})\nexport class WorkspacesComponent implements OnInit {\n @Input() host!: string;\n @Input() token!: string;\n @Input() customerId!: string;\n\n @Output() addWorkspace = new EventEmitter<void>();\n @Output() openWorkspace = new EventEmitter<string>();\n @Output() editWorkspace = new EventEmitter<string>();\n @Output() deleteWorkspace = new EventEmitter<string>();\n @Output() addDevice = new EventEmitter<string>();\n\n readonly tabs: WorkspacesTabDefinition[] = [\n { id: 'workspaces', label: 'Workspaces', icon: 'assets/icons/device-in-room-regular.svg' },\n { id: 'insights', label: 'Insights', icon: 'assets/icons/analysis-regular.svg' },\n { id: 'integrations', label: 'Integrations', icon: 'assets/icons/integrations-regular.svg' },\n { id: 'settings', label: 'Settings', icon: 'assets/icons/tools-regular.svg' },\n ];\n\n activeTab: WorkspacesTab = 'workspaces';\n\n view: WorkspacesView = 'list';\n selectedWorkspace: Workspace | null = null;\n\n workspaces: Workspace[] = [];\n isLoading = false;\n\n pageIndex = 0;\n pageSize = 10;\n total = 0;\n\n searchTerm = '';\n typeFilter = '';\n locationFilter = '';\n\n constructor(\n private apiService: APIService,\n private workspacesService: WorkspacesService,\n private location: Location,\n ) { }\n\n ngOnInit(): void {\n this.apiService.token = this.token;\n this.apiService.apiUrl = this.host + '/dcp';\n this.fetchWorkspaces();\n }\n\n get typeOptions(): string[] {\n return [...new Set(this.workspaces.map(workspace => workspace.typeLabel).filter(Boolean))];\n }\n\n get locationOptions(): string[] {\n return [...new Set(this.workspaces.map(workspace => workspace.location).filter(Boolean))];\n }\n\n get filteredWorkspaces(): Workspace[] {\n const term = this.searchTerm.trim().toLowerCase();\n return this.workspaces.filter(workspace =>\n (!term || workspace.displayName.toLowerCase().includes(term) || workspace.location.toLowerCase().includes(term)) &&\n (!this.typeFilter || workspace.typeLabel === this.typeFilter) &&\n (!this.locationFilter || workspace.location === this.locationFilter)\n );\n }\n\n selectTab(tab: WorkspacesTab): void {\n this.activeTab = tab;\n }\n\n onOpenWorkspace(id: string): void {\n const workspace = this.workspaces.find(item => item.id === id) ?? null;\n this.openWorkspace.emit(id);\n\n if (!workspace) {\n return;\n }\n\n this.selectedWorkspace = workspace;\n this.view = 'detail';\n }\n\n onBackToList(): void {\n this.view = 'list';\n this.selectedWorkspace = null;\n this.location.replaceState('/workspaces');\n }\n\n onSearchChange(term: string): void {\n this.searchTerm = term;\n }\n\n onTypeFilterChange(type: string): void {\n this.typeFilter = type;\n }\n\n onLocationFilterChange(location: string): void {\n this.locationFilter = location;\n }\n\n onPageChange({ pageIndex, pageSize }: { pageIndex: number; pageSize: number }): void {\n this.pageIndex = pageIndex;\n this.pageSize = pageSize;\n this.fetchWorkspaces();\n }\n\n private fetchWorkspaces(): void {\n this.isLoading = true;\n this.workspacesService.fetchWorkspaces(this.customerId, this.pageSize, this.pageIndex).subscribe({\n next: ({ workspaces, total }) => {\n this.workspaces = workspaces;\n this.total = total;\n this.isLoading = false;\n },\n error: () => {\n this.workspaces = [];\n this.total = 0;\n this.isLoading = false;\n },\n });\n }\n}\n","<div class=\"tk-workspaces\">\n <ng-container *ngIf=\"view === 'list'; else detailView\">\n <header class=\"tk-workspaces__header\">\n <h1 class=\"tk-workspaces__title\">Workspaces</h1>\n </header>\n\n <nav class=\"tk-workspaces__tabs\">\n <button\n type=\"button\"\n *ngFor=\"let tab of tabs\"\n class=\"tk-workspaces__tab\"\n [class.tk-workspaces__tab--active]=\"activeTab === tab.id\"\n (click)=\"selectTab(tab.id)\">\n <img class=\"tk-workspaces__tab-icon\" [src]=\"tab.icon\" alt=\"\" />\n {{ tab.label }}\n </button>\n </nav>\n\n <ng-container *ngIf=\"activeTab === 'workspaces'; else placeholder\">\n <app-loader *ngIf=\"isLoading\"></app-loader>\n\n <tk-workspaces-filters\n [resultCount]=\"total\"\n [typeOptions]=\"typeOptions\"\n [locationOptions]=\"locationOptions\"\n (searchChange)=\"onSearchChange($event)\"\n (typeChange)=\"onTypeFilterChange($event)\"\n (locationChange)=\"onLocationFilterChange($event)\"\n (addWorkspace)=\"addWorkspace.emit()\">\n </tk-workspaces-filters>\n\n <tk-workspaces-table\n [workspaces]=\"filteredWorkspaces\"\n [total]=\"total\"\n [pageIndex]=\"pageIndex\"\n [pageSize]=\"pageSize\"\n (openWorkspace)=\"onOpenWorkspace($event)\"\n (editWorkspace)=\"editWorkspace.emit($event)\"\n (deleteWorkspace)=\"deleteWorkspace.emit($event)\"\n (addDevice)=\"addDevice.emit($event)\"\n (pageChange)=\"onPageChange($event)\">\n </tk-workspaces-table>\n </ng-container>\n\n <ng-template #placeholder>\n <div class=\"tk-workspaces__placeholder\">This section isn't available in this widget yet.</div>\n </ng-template>\n </ng-container>\n\n <ng-template #detailView>\n <tk-workspace-detail\n *ngIf=\"selectedWorkspace\"\n [workspace]=\"selectedWorkspace\"\n (back)=\"onBackToList()\">\n </tk-workspace-detail>\n </ng-template>\n</div>\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { HttpClientModule } from '@angular/common/http';\nimport { FormsModule } from '@angular/forms';\nimport { MaterialModule } from './material.module';\nimport { WorkspacesComponent } from './workspaces.component';\nimport { WorkspacesFiltersComponent } from './components/workspaces-filters/workspaces-filters.component';\nimport { WorkspacesTableComponent } from './components/workspaces-table/workspaces-table.component';\nimport { WorkspaceDetailComponent } from './components/workspace-detail/workspace-detail.component';\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\n\n@NgModule({\n declarations: [\n WorkspacesComponent,\n WorkspacesFiltersComponent,\n WorkspacesTableComponent,\n WorkspaceDetailComponent,\n AppLoaderComponent,\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n FormsModule,\n MaterialModule,\n ],\n exports: [\n WorkspacesComponent,\n ],\n})\nexport class WorkspacesModule { }\n","/*\n * Public API Surface of @tuki-io/tuki-widgets\n */\n\n// Widget Modules\nexport * from './src/workspaces.module';\n\n// Components\nexport * from './src/workspaces.component';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.APIService","i1","i2","resolveDeviceIcon","i3","i4","i1.WorkspaceDetailService","i2.WorkspacesService","i4.WorkspacesFiltersComponent","i5.WorkspacesTableComponent","i6.WorkspaceDetailComponent","i7.AppLoaderComponent"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tuki-io/tuki-widgets",
3
- "version": "0.0.219-dev.38",
3
+ "version": "0.0.219-dev.40",
4
4
  "peerDependencies": {
5
5
  "@angular/common": "^15.2.0",
6
6
  "@angular/core": "^15.2.0",
@@ -99,6 +99,14 @@
99
99
  "es2015": "./fesm2015/tuki-io-tuki-widgets-users-list.mjs",
100
100
  "node": "./fesm2015/tuki-io-tuki-widgets-users-list.mjs",
101
101
  "default": "./fesm2020/tuki-io-tuki-widgets-users-list.mjs"
102
+ },
103
+ "./workspaces": {
104
+ "types": "./workspaces/index.d.ts",
105
+ "esm2020": "./esm2020/workspaces/tuki-io-tuki-widgets-workspaces.mjs",
106
+ "es2020": "./fesm2020/tuki-io-tuki-widgets-workspaces.mjs",
107
+ "es2015": "./fesm2015/tuki-io-tuki-widgets-workspaces.mjs",
108
+ "node": "./fesm2015/tuki-io-tuki-widgets-workspaces.mjs",
109
+ "default": "./fesm2020/tuki-io-tuki-widgets-workspaces.mjs"
102
110
  }
103
111
  },
104
112
  "sideEffects": false
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ /// <amd-module name="@tuki-io/tuki-widgets/workspaces" />
5
+ export * from './public-api';
@@ -0,0 +1,2 @@
1
+ export * from './src/workspaces.module';
2
+ export * from './src/workspaces.component';
@@ -0,0 +1,6 @@
1
+ export declare const API: {
2
+ WORKSPACES: {
3
+ GET_ALL: string;
4
+ };
5
+ };
6
+ export declare const ON_PREM_ID = 2542;
@@ -0,0 +1,23 @@
1
+ import { Location } from '@angular/common';
2
+ import { EventEmitter, OnInit } from '@angular/core';
3
+ import { Workspace, WorkspaceDetails } from '../../types/workspace';
4
+ import { WorkspaceDetailService } from '../../services/workspace-detail.service';
5
+ import * as i0 from "@angular/core";
6
+ export type WorkspaceDetailTab = 'overview' | 'calling';
7
+ export declare class WorkspaceDetailComponent implements OnInit {
8
+ private workspaceDetailService;
9
+ private location;
10
+ workspace: Workspace;
11
+ back: EventEmitter<void>;
12
+ activeTab: WorkspaceDetailTab;
13
+ details: WorkspaceDetails | null;
14
+ constructor(workspaceDetailService: WorkspaceDetailService, location: Location);
15
+ ngOnInit(): void;
16
+ get deviceName(): string;
17
+ resolveIcon(model?: string): string;
18
+ selectTab(tab: WorkspaceDetailTab): void;
19
+ onBack(): void;
20
+ private updateUrl;
21
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceDetailComponent, never>;
22
+ static ɵcmp: i0.ɵɵComponentDeclaration<WorkspaceDetailComponent, "tk-workspace-detail", never, { "workspace": "workspace"; }, { "back": "back"; }, never, never, false, never>;
23
+ }
@@ -0,0 +1,20 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class WorkspacesFiltersComponent {
4
+ resultCount: number;
5
+ typeOptions: string[];
6
+ locationOptions: string[];
7
+ searchChange: EventEmitter<string>;
8
+ typeChange: EventEmitter<string>;
9
+ locationChange: EventEmitter<string>;
10
+ addWorkspace: EventEmitter<void>;
11
+ searchTerm: string;
12
+ selectedType: string;
13
+ selectedLocation: string;
14
+ onSearchInputChange(event: Event): void;
15
+ onTypeChange(value: string): void;
16
+ onLocationChange(value: string): void;
17
+ onAddWorkspace(): void;
18
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkspacesFiltersComponent, never>;
19
+ static ɵcmp: i0.ɵɵComponentDeclaration<WorkspacesFiltersComponent, "tk-workspaces-filters", never, { "resultCount": "resultCount"; "typeOptions": "typeOptions"; "locationOptions": "locationOptions"; }, { "searchChange": "searchChange"; "typeChange": "typeChange"; "locationChange": "locationChange"; "addWorkspace": "addWorkspace"; }, never, never, false, never>;
20
+ }
@@ -0,0 +1,32 @@
1
+ import { EventEmitter } from '@angular/core';
2
+ import { PageEvent } from '@angular/material/paginator';
3
+ import { Workspace } from '../../types/workspace';
4
+ import * as i0 from "@angular/core";
5
+ export interface WorkspacesPageChange {
6
+ pageIndex: number;
7
+ pageSize: number;
8
+ }
9
+ export declare class WorkspacesTableComponent {
10
+ workspaces: Workspace[];
11
+ total: number;
12
+ pageIndex: number;
13
+ pageSize: number;
14
+ pageSizeOptions: number[];
15
+ openWorkspace: EventEmitter<string>;
16
+ editWorkspace: EventEmitter<string>;
17
+ deleteWorkspace: EventEmitter<string>;
18
+ addDevice: EventEmitter<string>;
19
+ pageChange: EventEmitter<WorkspacesPageChange>;
20
+ selectedIds: Set<string>;
21
+ get allSelected(): boolean;
22
+ get someSelected(): boolean;
23
+ toggleAll(): void;
24
+ toggleRow(workspaceId: string): void;
25
+ isSelected(workspaceId: string): boolean;
26
+ onOpenWorkspace(workspace: Workspace): void;
27
+ onAddDevice(workspace: Workspace, event: Event): void;
28
+ onPage(event: PageEvent): void;
29
+ getDeviceIcon(model?: string): string;
30
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkspacesTableComponent, never>;
31
+ static ɵcmp: i0.ɵɵComponentDeclaration<WorkspacesTableComponent, "tk-workspaces-table", never, { "workspaces": "workspaces"; "total": "total"; "pageIndex": "pageIndex"; "pageSize": "pageSize"; "pageSizeOptions": "pageSizeOptions"; }, { "openWorkspace": "openWorkspace"; "editWorkspace": "editWorkspace"; "deleteWorkspace": "deleteWorkspace"; "addDevice": "addDevice"; "pageChange": "pageChange"; }, never, never, false, never>;
32
+ }
@@ -0,0 +1,15 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "@angular/material/button";
3
+ import * as i2 from "@angular/material/icon";
4
+ import * as i3 from "@angular/material/table";
5
+ import * as i4 from "@angular/material/progress-spinner";
6
+ import * as i5 from "@angular/material/form-field";
7
+ import * as i6 from "@angular/material/input";
8
+ import * as i7 from "@angular/material/menu";
9
+ import * as i8 from "@angular/material/paginator";
10
+ import * as i9 from "@angular/material/tooltip";
11
+ export declare class MaterialModule {
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<MaterialModule, never>;
13
+ static ɵmod: i0.ɵɵNgModuleDeclaration<MaterialModule, never, [typeof i1.MatButtonModule, typeof i2.MatIconModule, typeof i3.MatTableModule, typeof i4.MatProgressSpinnerModule, typeof i5.MatFormFieldModule, typeof i6.MatInputModule, typeof i7.MatMenuModule, typeof i8.MatPaginatorModule, typeof i9.MatTooltipModule], [typeof i1.MatButtonModule, typeof i2.MatIconModule, typeof i3.MatTableModule, typeof i4.MatProgressSpinnerModule, typeof i5.MatFormFieldModule, typeof i6.MatInputModule, typeof i7.MatMenuModule, typeof i8.MatPaginatorModule, typeof i9.MatTooltipModule]>;
14
+ static ɵinj: i0.ɵɵInjectorDeclaration<MaterialModule>;
15
+ }
@@ -0,0 +1,18 @@
1
+ import { HttpClient } from '@angular/common/http';
2
+ import { Observable } from 'rxjs';
3
+ import * as i0 from "@angular/core";
4
+ export declare class APIService {
5
+ private httpClient;
6
+ token: string;
7
+ apiUrl: string;
8
+ constructor(httpClient: HttpClient);
9
+ fetch(url: string, params?: any, cache?: boolean): Observable<any>;
10
+ post(url: string, body: any, params?: {}): Observable<any>;
11
+ put(url: string, body?: any, params?: {}): Observable<any>;
12
+ delete(url: string, params?: {}): Observable<Object>;
13
+ private prepareEncodedParams;
14
+ private getHeaders;
15
+ private getParameterByName;
16
+ static ɵfac: i0.ɵɵFactoryDeclaration<APIService, never>;
17
+ static ɵprov: i0.ɵɵInjectableDeclaration<APIService>;
18
+ }
@@ -0,0 +1,8 @@
1
+ import { Observable } from 'rxjs';
2
+ import { Workspace, WorkspaceDetails } from '../types/workspace';
3
+ import * as i0 from "@angular/core";
4
+ export declare class WorkspaceDetailService {
5
+ getByWorkspace(workspace: Workspace): Observable<WorkspaceDetails>;
6
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkspaceDetailService, never>;
7
+ static ɵprov: i0.ɵɵInjectableDeclaration<WorkspaceDetailService>;
8
+ }
@@ -0,0 +1,11 @@
1
+ import { Observable } from 'rxjs';
2
+ import { APIService } from './api.service';
3
+ import { WorkspacesPage } from '../types/workspace';
4
+ import * as i0 from "@angular/core";
5
+ export declare class WorkspacesService {
6
+ private apiService;
7
+ constructor(apiService: APIService);
8
+ fetchWorkspaces(customerId: string | number, size?: number, page?: number): Observable<WorkspacesPage>;
9
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkspacesService, never>;
10
+ static ɵprov: i0.ɵɵInjectableDeclaration<WorkspacesService>;
11
+ }
@@ -0,0 +1,161 @@
1
+ export interface WorkspaceAssociatedDirectoryNumber {
2
+ directoryNumber: string;
3
+ routePartitionName: string;
4
+ pkid: string | null;
5
+ dnType: string | null;
6
+ subType: string | null;
7
+ }
8
+ export interface WorkspaceLineAssociation {
9
+ linePkid: string | null;
10
+ index: number | null;
11
+ position: number | null;
12
+ }
13
+ export interface WorkspaceSite {
14
+ id: number;
15
+ name: string;
16
+ }
17
+ export interface WorkspaceDeviceAssociation {
18
+ deviceId: string;
19
+ mac: string;
20
+ model: string;
21
+ }
22
+ export interface WorkspaceDeviceRecord {
23
+ name: string;
24
+ newName: string;
25
+ pkid: string | null;
26
+ entityChangeType: string | null;
27
+ deviceType: string | null;
28
+ activeLoadId: string | null;
29
+ associatedDNs: WorkspaceAssociatedDirectoryNumber[];
30
+ authenticationMode: string | null;
31
+ authenticationString: string | null;
32
+ builtInBridge: string | null;
33
+ busyLampFields: unknown[];
34
+ buttonTemplate: string | null;
35
+ callingSearchSpaceName: string | null;
36
+ certificateOperation: string | null;
37
+ certificateStatus: string | null;
38
+ changedLineAppEntity: string | null;
39
+ changedMeetMeEntity: string | null;
40
+ commonPhoneConfigName: string | null;
41
+ ctiRemoteDevice: boolean;
42
+ cucmId: string | null;
43
+ customerId: number;
44
+ description: string | null;
45
+ devicePoolName: string | null;
46
+ deviceRegStatus: string | null;
47
+ deviceSecurityMode: string | null;
48
+ enabledExtensionMobility: boolean;
49
+ excludeDeviceExtraOptions: boolean;
50
+ extraOptions: unknown | null;
51
+ firmwareVersion: string | null;
52
+ firstExpansionModule: string | null;
53
+ intercomLineAssociations: unknown[];
54
+ ipAddress: string | null;
55
+ lastRegTime: string | null;
56
+ lineAssociations: WorkspaceLineAssociation[];
57
+ lines: unknown[];
58
+ location: string | null;
59
+ meetMeEnabled: boolean;
60
+ networkLocale: string | null;
61
+ operationCompletesBy: string | null;
62
+ ownerUserId: string | null;
63
+ plarDevice: boolean;
64
+ protocol: string | null;
65
+ provisioningStatus: string | null;
66
+ reroutingCss: string | null;
67
+ rsaKeySize: string | null;
68
+ secondExpansionModule: string | null;
69
+ securityProfile: string | null;
70
+ securityProfileUuid: string | null;
71
+ selectedDevicesAarSettings: unknown[];
72
+ selectedDevicesAdditionalInfos: unknown[];
73
+ selectedDevicesDndSettings: unknown[];
74
+ selectedDevicesExternalDataLocations: unknown[];
75
+ selectedDevicesGeneralInfos: unknown[];
76
+ selectedDevicesMediaSettings: unknown[];
77
+ selectedDevicesMlppInfos: unknown[];
78
+ selectedDevicesNumberPresentations: unknown[];
79
+ selectedDevicesPhoneSpecifics: unknown[];
80
+ selectedDevicesProtocolSpecifics: unknown[];
81
+ selectedIndex: number;
82
+ services: string[];
83
+ sharedUsers: string[];
84
+ sipProfile: string | null;
85
+ siteId: number;
86
+ siteName: string | null;
87
+ softkeyTemplate: string | null;
88
+ speedDials: unknown[];
89
+ subscribeCallingSearchSpaceName: string | null;
90
+ thirdExpansionModule: string | null;
91
+ unSupportedForSD: unknown | null;
92
+ userDeviceType: string | null;
93
+ userLocale: string | null;
94
+ voicemailEnabled: boolean;
95
+ webexUUID: string | null;
96
+ withUdp: boolean;
97
+ }
98
+ export interface WorkspaceListItem {
99
+ device: WorkspaceDeviceRecord;
100
+ lines: unknown[];
101
+ site: WorkspaceSite | null;
102
+ workspaceDevices: WorkspaceDeviceAssociation[];
103
+ }
104
+ export interface WorkspacesResponse {
105
+ total: number;
106
+ pageData: WorkspaceListItem[];
107
+ }
108
+ export type WorkspaceStatus = 'active' | 'inactive' | 'unavailable';
109
+ export interface WorkspaceDevice {
110
+ id: string;
111
+ kind: 'device' | 'person';
112
+ label: string;
113
+ initials?: string;
114
+ color?: string;
115
+ model?: string;
116
+ }
117
+ export interface WorkspacesPage {
118
+ workspaces: Workspace[];
119
+ total: number;
120
+ }
121
+ export interface Workspace {
122
+ id: string;
123
+ displayName: string;
124
+ typeLabel: string;
125
+ capacity: number | null;
126
+ location: string;
127
+ devices: WorkspaceDevice[];
128
+ scheduling: string;
129
+ callingLicense: string;
130
+ provisioningType: string;
131
+ status: WorkspaceStatus;
132
+ statusLabel: string;
133
+ device: WorkspaceDeviceRecord;
134
+ isHybrid: boolean;
135
+ }
136
+ export interface WorkspaceIssue {
137
+ id: string;
138
+ message: string;
139
+ timestamp: string;
140
+ actionLabel: string;
141
+ }
142
+ export interface WorkspaceLocationDetails {
143
+ country: string;
144
+ address: string;
145
+ }
146
+ export interface WorkspaceCallingDetails {
147
+ license: string;
148
+ sipAddress: string;
149
+ directoryNumber: string;
150
+ routePartition: string;
151
+ callingSearchSpace: string;
152
+ securityProfile: string;
153
+ }
154
+ export interface WorkspaceDetails {
155
+ issues: WorkspaceIssue[];
156
+ location: WorkspaceLocationDetails;
157
+ calling: WorkspaceCallingDetails;
158
+ schedulingConfigured: boolean;
159
+ plannedMaintenanceEnabled: boolean;
160
+ notes: string | null;
161
+ }
@@ -0,0 +1,6 @@
1
+ import * as i0 from "@angular/core";
2
+ export declare class AppLoaderComponent {
3
+ constructor();
4
+ static ɵfac: i0.ɵɵFactoryDeclaration<AppLoaderComponent, never>;
5
+ static ɵcmp: i0.ɵɵComponentDeclaration<AppLoaderComponent, "app-loader", never, {}, {}, never, never, false, never>;
6
+ }
@@ -0,0 +1 @@
1
+ export declare function getDeviceIcon(model?: string): string;
@@ -0,0 +1,57 @@
1
+ import { Location } from '@angular/common';
2
+ import { EventEmitter, OnInit } from '@angular/core';
3
+ import { APIService } from './services/api.service';
4
+ import { WorkspacesService } from './services/workspaces.service';
5
+ import { Workspace } from './types/workspace';
6
+ import * as i0 from "@angular/core";
7
+ type WorkspacesView = 'list' | 'detail';
8
+ type WorkspacesTab = 'workspaces' | 'insights' | 'integrations' | 'settings';
9
+ interface WorkspacesTabDefinition {
10
+ id: WorkspacesTab;
11
+ label: string;
12
+ icon: string;
13
+ }
14
+ export declare class WorkspacesComponent implements OnInit {
15
+ private apiService;
16
+ private workspacesService;
17
+ private location;
18
+ host: string;
19
+ token: string;
20
+ customerId: string;
21
+ addWorkspace: EventEmitter<void>;
22
+ openWorkspace: EventEmitter<string>;
23
+ editWorkspace: EventEmitter<string>;
24
+ deleteWorkspace: EventEmitter<string>;
25
+ addDevice: EventEmitter<string>;
26
+ readonly tabs: WorkspacesTabDefinition[];
27
+ activeTab: WorkspacesTab;
28
+ view: WorkspacesView;
29
+ selectedWorkspace: Workspace | null;
30
+ workspaces: Workspace[];
31
+ isLoading: boolean;
32
+ pageIndex: number;
33
+ pageSize: number;
34
+ total: number;
35
+ searchTerm: string;
36
+ typeFilter: string;
37
+ locationFilter: string;
38
+ constructor(apiService: APIService, workspacesService: WorkspacesService, location: Location);
39
+ ngOnInit(): void;
40
+ get typeOptions(): string[];
41
+ get locationOptions(): string[];
42
+ get filteredWorkspaces(): Workspace[];
43
+ selectTab(tab: WorkspacesTab): void;
44
+ onOpenWorkspace(id: string): void;
45
+ onBackToList(): void;
46
+ onSearchChange(term: string): void;
47
+ onTypeFilterChange(type: string): void;
48
+ onLocationFilterChange(location: string): void;
49
+ onPageChange({ pageIndex, pageSize }: {
50
+ pageIndex: number;
51
+ pageSize: number;
52
+ }): void;
53
+ private fetchWorkspaces;
54
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkspacesComponent, never>;
55
+ static ɵcmp: i0.ɵɵComponentDeclaration<WorkspacesComponent, "tk-workspaces", never, { "host": "host"; "token": "token"; "customerId": "customerId"; }, { "addWorkspace": "addWorkspace"; "openWorkspace": "openWorkspace"; "editWorkspace": "editWorkspace"; "deleteWorkspace": "deleteWorkspace"; "addDevice": "addDevice"; }, never, never, false, never>;
56
+ }
57
+ export {};
@@ -0,0 +1,15 @@
1
+ import * as i0 from "@angular/core";
2
+ import * as i1 from "./workspaces.component";
3
+ import * as i2 from "./components/workspaces-filters/workspaces-filters.component";
4
+ import * as i3 from "./components/workspaces-table/workspaces-table.component";
5
+ import * as i4 from "./components/workspace-detail/workspace-detail.component";
6
+ import * as i5 from "./utils/app-loader/app-loader";
7
+ import * as i6 from "@angular/common";
8
+ import * as i7 from "@angular/common/http";
9
+ import * as i8 from "@angular/forms";
10
+ import * as i9 from "./material.module";
11
+ export declare class WorkspacesModule {
12
+ static ɵfac: i0.ɵɵFactoryDeclaration<WorkspacesModule, never>;
13
+ static ɵmod: i0.ɵɵNgModuleDeclaration<WorkspacesModule, [typeof i1.WorkspacesComponent, typeof i2.WorkspacesFiltersComponent, typeof i3.WorkspacesTableComponent, typeof i4.WorkspaceDetailComponent, typeof i5.AppLoaderComponent], [typeof i6.CommonModule, typeof i7.HttpClientModule, typeof i8.FormsModule, typeof i9.MaterialModule], [typeof i1.WorkspacesComponent]>;
14
+ static ɵinj: i0.ɵɵInjectorDeclaration<WorkspacesModule>;
15
+ }