@tuki-io/tuki-widgets 0.0.219-dev.51 → 0.0.219-dev.53

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.
@@ -14,7 +14,7 @@ function toStatus(provisioningStatus) {
14
14
  }
15
15
  return provisioningStatus.toLowerCase() === 'active' ? 'active' : 'inactive';
16
16
  }
17
- function toWorkspace(item, index) {
17
+ function toWorkspace(item, index, isCucm) {
18
18
  const device = item.device;
19
19
  const firstDirectoryNumber = device.associatedDNs?.[0]?.directoryNumber ?? '';
20
20
  return {
@@ -37,6 +37,7 @@ function toWorkspace(item, index) {
37
37
  statusLabel: device.provisioningStatus || 'Status unavailable',
38
38
  device,
39
39
  isHybrid: false,
40
+ cucmDeviceName: isCucm ? (device.name || null) : null,
40
41
  };
41
42
  }
42
43
  function mergeDevices(a, b) {
@@ -57,6 +58,7 @@ function mergeWorkspacesByDeviceName(workspaces) {
57
58
  ...workspace,
58
59
  device: mergeDevices(existing.device, workspace.device),
59
60
  isHybrid: true,
61
+ cucmDeviceName: existing.cucmDeviceName ?? workspace.cucmDeviceName,
60
62
  } : workspace);
61
63
  }
62
64
  return Array.from(merged.values());
@@ -85,8 +87,9 @@ export class WorkspacesService {
85
87
  return forkJoin([cucm$, webex$]).pipe(map(([cucmResponse, webexResponse]) => {
86
88
  const cucmParsed = parseResponse(cucmResponse);
87
89
  const webexParsed = parseResponse(webexResponse);
88
- const items = [...(cucmParsed?.pageData || []), ...(webexParsed?.pageData || [])];
89
- const workspaces = mergeWorkspacesByDeviceName(items.map(toWorkspace));
90
+ const cucmWorkspaces = (cucmParsed?.pageData || []).map((item, index) => toWorkspace(item, index, true));
91
+ const webexWorkspaces = (webexParsed?.pageData || []).map((item, index) => toWorkspace(item, index, false));
92
+ const workspaces = mergeWorkspacesByDeviceName([...cucmWorkspaces, ...webexWorkspaces]);
90
93
  return {
91
94
  workspaces,
92
95
  total: workspaces.length,
@@ -102,4 +105,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImpo
102
105
  providedIn: 'root'
103
106
  }]
104
107
  }], ctorParameters: function () { return [{ type: i1.APIService }]; } });
105
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3dvcmtzcGFjZXMvc3JjL3NlcnZpY2VzL3dvcmtzcGFjZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUVyRCxTQUFTLGFBQWEsQ0FBQyxRQUFhO0lBQ2xDLE9BQU8sT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLGtCQUFpQztJQUNqRCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7UUFDdkIsT0FBTyxhQUFhLENBQUM7S0FDdEI7SUFDRCxPQUFPLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDL0UsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQXVCLEVBQUUsS0FBYTtJQUN6RCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBQzNCLE1BQU0sb0JBQW9CLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLGVBQWUsSUFBSSxFQUFFLENBQUM7SUFFOUUsT0FBTztRQUNMLEVBQUUsRUFB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QUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBBUEkgfSBmcm9tICcuLi9hcHAuY29uc3RhbnRzJztcbmltcG9ydCB7IEFQSVNlcnZpY2UgfSBmcm9tICcuL2FwaS5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtzcGFjZSwgV29ya3NwYWNlTGlzdEl0ZW0sIFdvcmtzcGFjZXNQYWdlLCBXb3Jrc3BhY2VzUmVzcG9uc2UsIFdvcmtzcGFjZVN0YXR1cyB9IGZyb20gJy4uL3R5cGVzL3dvcmtzcGFjZSc7XG5pbXBvcnQgeyB3aXRob3V0U2VwIH0gZnJvbSAnLi4vdXRpbHMvd29ya3NwYWNlLW5hbWUnO1xuXG5mdW5jdGlvbiBwYXJzZVJlc3BvbnNlKHJlc3BvbnNlOiBhbnkpOiBhbnkge1xuICByZXR1cm4gdHlwZW9mIHJlc3BvbnNlID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UocmVzcG9uc2UpIDogcmVzcG9uc2U7XG59XG5cbmZ1bmN0aW9uIHRvU3RhdHVzKHByb3Zpc2lvbmluZ1N0YXR1czogc3RyaW5nIHwgbnVsbCk6IFdvcmtzcGFjZVN0YXR1cyB7XG4gIGlmICghcHJvdmlzaW9uaW5nU3RhdHVzKSB7XG4gICAgcmV0dXJuICd1bmF2YWlsYWJsZSc7XG4gIH1cbiAgcmV0dXJuIHByb3Zpc2lvbmluZ1N0YXR1cy50b0xvd2VyQ2FzZSgpID09PSAnYWN0aXZlJyA/ICdhY3RpdmUnIDogJ2luYWN0aXZlJztcbn1cblxuZnVuY3Rpb24gdG9Xb3Jrc3BhY2UoaXRlbTogV29ya3NwYWNlTGlzdEl0ZW0sIGluZGV4OiBudW1iZXIpOiBXb3Jrc3BhY2Uge1xuICBjb25zdCBkZXZpY2UgPSBpdGVtLmRldmljZTtcbiAgY29uc3QgZmlyc3REaXJlY3RvcnlOdW1iZXIgPSBkZXZpY2UuYXNzb2NpYXRlZEROcz8uWzBdPy5kaXJlY3RvcnlOdW1iZXIgPz8gJyc7XG5cbiAgcmV0dXJuIHtcbiAgICBpZDogZGV2aWNlLnBraWQgfHwgaXRlbS53b3Jrc3BhY2VEZXZpY2VzPy5bMF0/LmRldmljZUlkIHx8IGRldmljZS5uYW1lIHx8IGB3b3Jrc3BhY2UtJHtpbmRleH1gLFxuICAgIGRpc3BsYXlOYW1lOiBkZXZpY2UubmV3TmFtZSB8fCBkZXZpY2UubmFtZSB8fCAnVW5uYW1lZCBkZXZpY2UnLFxuICAgIHR5cGVMYWJlbDogZGV2aWNlLnVzZXJEZXZpY2VUeXBlIHx8ICdObyB0eXBlJyxcbiAgICBjYXBhY2l0eTogbnVsbCxcbiAgICBsb2NhdGlvbjogaXRlbS5zaXRlPy5uYW1lIHx8IGRldmljZS5zaXRlTmFtZSB8fCBkZXZpY2UubG9jYXRpb24gfHwgJycsXG4gICAgc2l0ZUlkOiBpdGVtLnNpdGU/LmlkID8/IG51bGwsXG4gICAgZGV2aWNlczogKGl0ZW0ud29ya3NwYWNlRGV2aWNlcyB8fCBbXSkubWFwKHdvcmtzcGFjZURldmljZSA9PiAoe1xuICAgICAgaWQ6IHdvcmtzcGFjZURldmljZS5kZXZpY2VJZCxcbiAgICAgIGtpbmQ6ICdkZXZpY2UnIGFzIGNvbnN0LFxuICAgICAgbGFiZWw6IHdvcmtzcGFjZURldmljZS5tb2RlbCB8fCB3b3Jrc3BhY2VEZXZpY2UubWFjLFxuICAgICAgbW9kZWw6IHdvcmtzcGFjZURldmljZS5tb2RlbCxcbiAgICB9KSksXG4gICAgc2NoZWR1bGluZzogJ05vdCBzZXQnLFxuICAgIGNhbGxpbmdMaWNlbnNlOiBmaXJzdERpcmVjdG9yeU51bWJlcixcbiAgICBwcm92aXNpb25pbmdUeXBlOiAnT24tcHJlbWlzZXMnLFxuICAgIHN0YXR1czogdG9TdGF0dXMoZGV2aWNlLnByb3Zpc2lvbmluZ1N0YXR1cyksXG4gICAgc3RhdHVzTGFiZWw6IGRldmljZS5wcm92aXNpb25pbmdTdGF0dXMgfHwgJ1N0YXR1cyB1bmF2YWlsYWJsZScsXG4gICAgZGV2aWNlLFxuICAgIGlzSHlicmlkOiBmYWxzZSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VEZXZpY2VzKGE6IFdvcmtzcGFjZVsnZGV2aWNlJ10sIGI6IFdvcmtzcGFjZVsnZGV2aWNlJ10pOiBXb3Jrc3BhY2VbJ2RldmljZSddIHtcbiAgcmV0dXJuIHtcbiAgICAuLi5hLFxuICAgIC4uLmIsXG4gICAgY3VjbUlkOiBiLmN1Y21JZCA/PyBhLmN1Y21JZCxcbiAgICB3ZWJleFVVSUQ6IGIud2ViZXhVVUlEID8/IGEud2ViZXhVVUlELFxuICB9O1xufVxuXG5mdW5jdGlvbiBtZXJnZVdvcmtzcGFjZXNCeURldmljZU5hbWUod29ya3NwYWNlczogV29ya3NwYWNlW10pOiBXb3Jrc3BhY2VbXSB7XG4gIGNvbnN0IG1lcmdlZCA9IG5ldyBNYXA8c3RyaW5nLCBXb3Jrc3BhY2U+KCk7XG5cbiAgZm9yIChjb25zdCB3b3Jrc3BhY2Ugb2Ygd29ya3NwYWNlcykge1xuICAgIGNvbnN0IGtleSA9IHdpdGhvdXRTZXAod29ya3NwYWNlLmRldmljZS5uYW1lKTtcbiAgICBjb25zdCBleGlzdGluZyA9IG1lcmdlZC5nZXQoa2V5KTtcbiAgICBtZXJnZWQuc2V0KGtleSwgZXhpc3RpbmcgPyB7XG4gICAgICAuLi5leGlzdGluZyxcbiAgICAgIC4uLndvcmtzcGFjZSxcbiAgICAgIGRldmljZTogbWVyZ2VEZXZpY2VzKGV4aXN0aW5nLmRldmljZSwgd29ya3NwYWNlLmRldmljZSksXG4gICAgICBpc0h5YnJpZDogdHJ1ZSxcbiAgICB9IDogd29ya3NwYWNlKTtcbiAgfVxuXG4gIHJldHVybiBBcnJheS5mcm9tKG1lcmdlZC52YWx1ZXMoKSk7XG59XG5cbmNvbnN0IEZFVENIX0FMTF9TSVpFID0gOTk5OTtcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgV29ya3NwYWNlc1NlcnZpY2Uge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGFwaVNlcnZpY2U6IEFQSVNlcnZpY2UpIHsgfVxuXG4gIGZldGNoV29ya3NwYWNlcyhjdXN0b21lcklkOiBzdHJpbmcgfCBudW1iZXIpOiBPYnNlcnZhYmxlPFdvcmtzcGFjZXNQYWdlPiB7XG4gICAgY29uc3QgYmFzZVBhcmFtczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHtcbiAgICAgIHR5cGU6ICdPUlBIQU5fREVWSUNFJyxcbiAgICAgIGN1c3RvbWVyaWQ6IGN1c3RvbWVySWQudG9TdHJpbmcoKSxcbiAgICAgIHNpemU6IEZFVENIX0FMTF9TSVpFLnRvU3RyaW5nKCksXG4gICAgICBwYWdlOiAnMCcsXG4gICAgfTtcblxuICAgIGNvbnN0IGN1Y20kID0gdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5XT1JLU1BBQ0VTLkdFVF9BTEwsIHtcbiAgICAgIC4uLmJhc2VQYXJhbXMsXG4gICAgICAnZGV2aWNlLW5hbWUnOiAnU0VQJyxcbiAgICAgIHByb3Zpc2lvblR5cGU6ICdDVUNNJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHdlYmV4JCA9IHRoaXMuYXBpU2VydmljZS5mZXRjaChBUEkuV09SS1NQQUNFUy5HRVRfQUxMLCB7XG4gICAgICAuLi5iYXNlUGFyYW1zLFxuICAgICAgcHJvdmlzaW9uVHlwZTogJ1dFQkVYJyxcbiAgICB9KTtcblxuICAgIHJldHVybiBmb3JrSm9pbihbY3VjbSQsIHdlYmV4JF0pLnBpcGUoXG4gICAgICBtYXAoKFtjdWNtUmVzcG9uc2UsIHdlYmV4UmVzcG9uc2VdKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1Y21QYXJzZWQgPSBwYXJzZVJlc3BvbnNlKGN1Y21SZXNwb25zZSkgYXMgV29ya3NwYWNlc1Jlc3BvbnNlO1xuICAgICAgICBjb25zdCB3ZWJleFBhcnNlZCA9IHBhcnNlUmVzcG9uc2Uod2ViZXhSZXNwb25zZSkgYXMgV29ya3NwYWNlc1Jlc3BvbnNlO1xuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi4oY3VjbVBhcnNlZD8ucGFnZURhdGEgfHwgW10pLCAuLi4od2ViZXhQYXJzZWQ/LnBhZ2VEYXRhIHx8IFtdKV07XG4gICAgICAgIGNvbnN0IHdvcmtzcGFjZXMgPSBtZXJnZVdvcmtzcGFjZXNCeURldmljZU5hbWUoaXRlbXMubWFwKHRvV29ya3NwYWNlKSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3b3Jrc3BhY2VzLFxuICAgICAgICAgIHRvdGFsOiB3b3Jrc3BhY2VzLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlcy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3dvcmtzcGFjZXMvc3JjL3NlcnZpY2VzL3dvcmtzcGFjZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxRQUFRLEVBQWMsTUFBTSxNQUFNLENBQUM7QUFDNUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUd2QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7OztBQUVyRCxTQUFTLGFBQWEsQ0FBQyxRQUFhO0lBQ2xDLE9BQU8sT0FBTyxRQUFRLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUM7QUFDeEUsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLGtCQUFpQztJQUNqRCxJQUFJLENBQUMsa0JBQWtCLEVBQUU7UUFDdkIsT0FBTyxhQUFhLENBQUM7S0FDdEI7SUFDRCxPQUFPLGtCQUFrQixDQUFDLFdBQVcsRUFBRSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7QUFDL0UsQ0FBQztBQUVELFNBQVMsV0FBVyxDQUFDLElBQXVCLEVBQUUsS0FBYSxFQUFFLE1BQWU7SUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUMzQixNQUFNLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxlQUFlLElBQUksRUFBRSxDQUFDO0lBRTlFLE9BQU87UUFD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LEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQzVHLE1BQU0sVUFBVSxHQUFHLDJCQUEyQixDQUFDLENBQUMsR0FBRyxjQUFjLEVBQUUsR0FBRyxlQUFlLENBQUMsQ0FBQyxDQUFDO1lBRXhGLE9BQU87Z0JBQ0wsVUFBVTtnQkFDVixLQUFLLEVBQUUsVUFBVSxDQUFDLE1BQU07YUFDekIsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7SUFDSixDQUFDOzsrR0FwQ1UsaUJBQWlCO21IQUFqQixpQkFBaUIsY0FGaEIsTUFBTTs0RkFFUCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZm9ya0pvaW4sIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEFQSSB9IGZyb20gJy4uL2FwcC5jb25zdGFudHMnO1xuaW1wb3J0IHsgQVBJU2VydmljZSB9IGZyb20gJy4vYXBpLnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya3NwYWNlLCBXb3Jrc3BhY2VMaXN0SXRlbSwgV29ya3NwYWNlc1BhZ2UsIFdvcmtzcGFjZXNSZXNwb25zZSwgV29ya3NwYWNlU3RhdHVzIH0gZnJvbSAnLi4vdHlwZXMvd29ya3NwYWNlJztcbmltcG9ydCB7IHdpdGhvdXRTZXAgfSBmcm9tICcuLi91dGlscy93b3Jrc3BhY2UtbmFtZSc7XG5cbmZ1bmN0aW9uIHBhcnNlUmVzcG9uc2UocmVzcG9uc2U6IGFueSk6IGFueSB7XG4gIHJldHVybiB0eXBlb2YgcmVzcG9uc2UgPT09ICdzdHJpbmcnID8gSlNPTi5wYXJzZShyZXNwb25zZSkgOiByZXNwb25zZTtcbn1cblxuZnVuY3Rpb24gdG9TdGF0dXMocHJvdmlzaW9uaW5nU3RhdHVzOiBzdHJpbmcgfCBudWxsKTogV29ya3NwYWNlU3RhdHVzIHtcbiAgaWYgKCFwcm92aXNpb25pbmdTdGF0dXMpIHtcbiAgICByZXR1cm4gJ3VuYXZhaWxhYmxlJztcbiAgfVxuICByZXR1cm4gcHJvdmlzaW9uaW5nU3RhdHVzLnRvTG93ZXJDYXNlKCkgPT09ICdhY3RpdmUnID8gJ2FjdGl2ZScgOiAnaW5hY3RpdmUnO1xufVxuXG5mdW5jdGlvbiB0b1dvcmtzcGFjZShpdGVtOiBXb3Jrc3BhY2VMaXN0SXRlbSwgaW5kZXg6IG51bWJlciwgaXNDdWNtOiBib29sZWFuKTogV29ya3NwYWNlIHtcbiAgY29uc3QgZGV2aWNlID0gaXRlbS5kZXZpY2U7XG4gIGNvbnN0IGZpcnN0RGlyZWN0b3J5TnVtYmVyID0gZGV2aWNlLmFzc29jaWF0ZWRETnM/LlswXT8uZGlyZWN0b3J5TnVtYmVyID8/ICcnO1xuXG4gIHJldHVybiB7XG4gICAgaWQ6IGRldmljZS5wa2lkIHx8IGl0ZW0ud29ya3NwYWNlRGV2aWNlcz8uWzBdPy5kZXZpY2VJZCB8fCBkZXZpY2UubmFtZSB8fCBgd29ya3NwYWNlLSR7aW5kZXh9YCxcbiAgICBkaXNwbGF5TmFtZTogZGV2aWNlLm5ld05hbWUgfHwgZGV2aWNlLm5hbWUgfHwgJ1VubmFtZWQgZGV2aWNlJyxcbiAgICB0eXBlTGFiZWw6IGRldmljZS51c2VyRGV2aWNlVHlwZSB8fCAnTm8gdHlwZScsXG4gICAgY2FwYWNpdHk6IG51bGwsXG4gICAgbG9jYXRpb246IGl0ZW0uc2l0ZT8ubmFtZSB8fCBkZXZpY2Uuc2l0ZU5hbWUgfHwgZGV2aWNlLmxvY2F0aW9uIHx8ICcnLFxuICAgIHNpdGVJZDogaXRlbS5zaXRlPy5pZCA/PyBudWxsLFxuICAgIGRldmljZXM6IChpdGVtLndvcmtzcGFjZURldmljZXMgfHwgW10pLm1hcCh3b3Jrc3BhY2VEZXZpY2UgPT4gKHtcbiAgICAgIGlkOiB3b3Jrc3BhY2VEZXZpY2UuZGV2aWNlSWQsXG4gICAgICBraW5kOiAnZGV2aWNlJyBhcyBjb25zdCxcbiAgICAgIGxhYmVsOiB3b3Jrc3BhY2VEZXZpY2UubW9kZWwgfHwgd29ya3NwYWNlRGV2aWNlLm1hYyxcbiAgICAgIG1vZGVsOiB3b3Jrc3BhY2VEZXZpY2UubW9kZWwsXG4gICAgfSkpLFxuICAgIHNjaGVkdWxpbmc6ICdOb3Qgc2V0JyxcbiAgICBjYWxsaW5nTGljZW5zZTogZmlyc3REaXJlY3RvcnlOdW1iZXIsXG4gICAgcHJvdmlzaW9uaW5nVHlwZTogJ09uLXByZW1pc2VzJyxcbiAgICBzdGF0dXM6IHRvU3RhdHVzKGRldmljZS5wcm92aXNpb25pbmdTdGF0dXMpLFxuICAgIHN0YXR1c0xhYmVsOiBkZXZpY2UucHJvdmlzaW9uaW5nU3RhdHVzIHx8ICdTdGF0dXMgdW5hdmFpbGFibGUnLFxuICAgIGRldmljZSxcbiAgICBpc0h5YnJpZDogZmFsc2UsXG4gICAgY3VjbURldmljZU5hbWU6IGlzQ3VjbSA/IChkZXZpY2UubmFtZSB8fCBudWxsKSA6IG51bGwsXG4gIH07XG59XG5cbmZ1bmN0aW9uIG1lcmdlRGV2aWNlcyhhOiBXb3Jrc3BhY2VbJ2RldmljZSddLCBiOiBXb3Jrc3BhY2VbJ2RldmljZSddKTogV29ya3NwYWNlWydkZXZpY2UnXSB7XG4gIHJldHVybiB7XG4gICAgLi4uYSxcbiAgICAuLi5iLFxuICAgIGN1Y21JZDogYi5jdWNtSWQgPz8gYS5jdWNtSWQsXG4gICAgd2ViZXhVVUlEOiBiLndlYmV4VVVJRCA/PyBhLndlYmV4VVVJRCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbWVyZ2VXb3Jrc3BhY2VzQnlEZXZpY2VOYW1lKHdvcmtzcGFjZXM6IFdvcmtzcGFjZVtdKTogV29ya3NwYWNlW10ge1xuICBjb25zdCBtZXJnZWQgPSBuZXcgTWFwPHN0cmluZywgV29ya3NwYWNlPigpO1xuXG4gIGZvciAoY29uc3Qgd29ya3NwYWNlIG9mIHdvcmtzcGFjZXMpIHtcbiAgICBjb25zdCBrZXkgPSB3aXRob3V0U2VwKHdvcmtzcGFjZS5kZXZpY2UubmFtZSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBtZXJnZWQuZ2V0KGtleSk7XG4gICAgbWVyZ2VkLnNldChrZXksIGV4aXN0aW5nID8ge1xuICAgICAgLi4uZXhpc3RpbmcsXG4gICAgICAuLi53b3Jrc3BhY2UsXG4gICAgICBkZXZpY2U6IG1lcmdlRGV2aWNlcyhleGlzdGluZy5kZXZpY2UsIHdvcmtzcGFjZS5kZXZpY2UpLFxuICAgICAgaXNIeWJyaWQ6IHRydWUsXG4gICAgICBjdWNtRGV2aWNlTmFtZTogZXhpc3RpbmcuY3VjbURldmljZU5hbWUgPz8gd29ya3NwYWNlLmN1Y21EZXZpY2VOYW1lLFxuICAgIH0gOiB3b3Jrc3BhY2UpO1xuICB9XG5cbiAgcmV0dXJuIEFycmF5LmZyb20obWVyZ2VkLnZhbHVlcygpKTtcbn1cblxuY29uc3QgRkVUQ0hfQUxMX1NJWkUgPSA5OTk5O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBXb3Jrc3BhY2VzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpU2VydmljZTogQVBJU2VydmljZSkgeyB9XG5cbiAgZmV0Y2hXb3Jrc3BhY2VzKGN1c3RvbWVySWQ6IHN0cmluZyB8IG51bWJlcik6IE9ic2VydmFibGU8V29ya3NwYWNlc1BhZ2U+IHtcbiAgICBjb25zdCBiYXNlUGFyYW1zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgdHlwZTogJ09SUEhBTl9ERVZJQ0UnLFxuICAgICAgY3VzdG9tZXJpZDogY3VzdG9tZXJJZC50b1N0cmluZygpLFxuICAgICAgc2l6ZTogRkVUQ0hfQUxMX1NJWkUudG9TdHJpbmcoKSxcbiAgICAgIHBhZ2U6ICcwJyxcbiAgICB9O1xuXG4gICAgY29uc3QgY3VjbSQgPSB0aGlzLmFwaVNlcnZpY2UuZmV0Y2goQVBJLldPUktTUEFDRVMuR0VUX0FMTCwge1xuICAgICAgLi4uYmFzZVBhcmFtcyxcbiAgICAgICdkZXZpY2UtbmFtZSc6ICdTRVAnLFxuICAgICAgcHJvdmlzaW9uVHlwZTogJ0NVQ00nLFxuICAgIH0pO1xuXG4gICAgY29uc3Qgd2ViZXgkID0gdGhpcy5hcGlTZXJ2aWNlLmZldGNoKEFQSS5XT1JLU1BBQ0VTLkdFVF9BTEwsIHtcbiAgICAgIC4uLmJhc2VQYXJhbXMsXG4gICAgICBwcm92aXNpb25UeXBlOiAnV0VCRVgnLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZvcmtKb2luKFtjdWNtJCwgd2ViZXgkXSkucGlwZShcbiAgICAgIG1hcCgoW2N1Y21SZXNwb25zZSwgd2ViZXhSZXNwb25zZV0pID0+IHtcbiAgICAgICAgY29uc3QgY3VjbVBhcnNlZCA9IHBhcnNlUmVzcG9uc2UoY3VjbVJlc3BvbnNlKSBhcyBXb3Jrc3BhY2VzUmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IHdlYmV4UGFyc2VkID0gcGFyc2VSZXNwb25zZSh3ZWJleFJlc3BvbnNlKSBhcyBXb3Jrc3BhY2VzUmVzcG9uc2U7XG4gICAgICAgIGNvbnN0IGN1Y21Xb3Jrc3BhY2VzID0gKGN1Y21QYXJzZWQ/LnBhZ2VEYXRhIHx8IFtdKS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB0b1dvcmtzcGFjZShpdGVtLCBpbmRleCwgdHJ1ZSkpO1xuICAgICAgICBjb25zdCB3ZWJleFdvcmtzcGFjZXMgPSAod2ViZXhQYXJzZWQ/LnBhZ2VEYXRhIHx8IFtdKS5tYXAoKGl0ZW0sIGluZGV4KSA9PiB0b1dvcmtzcGFjZShpdGVtLCBpbmRleCwgZmFsc2UpKTtcbiAgICAgICAgY29uc3Qgd29ya3NwYWNlcyA9IG1lcmdlV29ya3NwYWNlc0J5RGV2aWNlTmFtZShbLi4uY3VjbVdvcmtzcGFjZXMsIC4uLndlYmV4V29ya3NwYWNlc10pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgd29ya3NwYWNlcyxcbiAgICAgICAgICB0b3RhbDogd29ya3NwYWNlcy5sZW5ndGgsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -1,4 +1,4 @@
1
1
  // Raw shapes returned by /api/search/quicknonuserdevices (a paginated CUCM
2
2
  // non-user/shared device search, reused here as the "Workspaces" list).
3
3
  export {};
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3dvcmtzcGFjZXMvc3JjL3R5cGVzL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyRUFBMkU7QUFDM0Usd0VBQXdFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUmF3IHNoYXBlcyByZXR1cm5lZCBieSAvYXBpL3NlYXJjaC9xdWlja25vbnVzZXJkZXZpY2VzIChhIHBhZ2luYXRlZCBDVUNNXG4vLyBub24tdXNlci9zaGFyZWQgZGV2aWNlIHNlYXJjaCwgcmV1c2VkIGhlcmUgYXMgdGhlIFwiV29ya3NwYWNlc1wiIGxpc3QpLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUFzc29jaWF0ZWREaXJlY3RvcnlOdW1iZXIge1xuICBkaXJlY3RvcnlOdW1iZXI6IHN0cmluZztcbiAgcm91dGVQYXJ0aXRpb25OYW1lOiBzdHJpbmc7XG4gIHBraWQ6IHN0cmluZyB8IG51bGw7XG4gIGRuVHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgc3ViVHlwZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VMaW5lQXNzb2NpYXRpb24ge1xuICBsaW5lUGtpZDogc3RyaW5nIHwgbnVsbDtcbiAgaW5kZXg6IG51bWJlciB8IG51bGw7XG4gIHBvc2l0aW9uOiBudW1iZXIgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVNpdGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlRGV2aWNlQXNzb2NpYXRpb24ge1xuICBkZXZpY2VJZDogc3RyaW5nO1xuICBtYWM6IHN0cmluZztcbiAgbW9kZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VEZXZpY2VSZWNvcmQge1xuICBuYW1lOiBzdHJpbmc7XG4gIG5ld05hbWU6IHN0cmluZztcbiAgcGtpZDogc3RyaW5nIHwgbnVsbDtcbiAgZW50aXR5Q2hhbmdlVHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgZGV2aWNlVHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgYWN0aXZlTG9hZElkOiBzdHJpbmcgfCBudWxsO1xuICBhc3NvY2lhdGVkRE5zOiBXb3Jrc3BhY2VBc3NvY2lhdGVkRGlyZWN0b3J5TnVtYmVyW107XG4gIGF1dGhlbnRpY2F0aW9uTW9kZTogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aGVudGljYXRpb25TdHJpbmc6IHN0cmluZyB8IG51bGw7XG4gIGJ1aWx0SW5CcmlkZ2U6IHN0cmluZyB8IG51bGw7XG4gIGJ1c3lMYW1wRmllbGRzOiB1bmtub3duW107XG4gIGJ1dHRvblRlbXBsYXRlOiBzdHJpbmcgfCBudWxsO1xuICBjYWxsaW5nU2VhcmNoU3BhY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBjZXJ0aWZpY2F0ZU9wZXJhdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgY2VydGlmaWNhdGVTdGF0dXM6IHN0cmluZyB8IG51bGw7XG4gIGNoYW5nZWRMaW5lQXBwRW50aXR5OiBzdHJpbmcgfCBudWxsO1xuICBjaGFuZ2VkTWVldE1lRW50aXR5OiBzdHJpbmcgfCBudWxsO1xuICBjb21tb25QaG9uZUNvbmZpZ05hbWU6IHN0cmluZyB8IG51bGw7XG4gIGN0aVJlbW90ZURldmljZTogYm9vbGVhbjtcbiAgY3VjbUlkOiBzdHJpbmcgfCBudWxsO1xuICBjdXN0b21lcklkOiBudW1iZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBkZXZpY2VQb29sTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZGV2aWNlUmVnU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICBkZXZpY2VTZWN1cml0eU1vZGU6IHN0cmluZyB8IG51bGw7XG4gIGVuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eTogYm9vbGVhbjtcbiAgZXhjbHVkZURldmljZUV4dHJhT3B0aW9uczogYm9vbGVhbjtcbiAgZXh0cmFPcHRpb25zOiB1bmtub3duIHwgbnVsbDtcbiAgZmlybXdhcmVWZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICBmaXJzdEV4cGFuc2lvbk1vZHVsZTogc3RyaW5nIHwgbnVsbDtcbiAgaW50ZXJjb21MaW5lQXNzb2NpYXRpb25zOiB1bmtub3duW107XG4gIGlwQWRkcmVzczogc3RyaW5nIHwgbnVsbDtcbiAgbGFzdFJlZ1RpbWU6IHN0cmluZyB8IG51bGw7XG4gIGxpbmVBc3NvY2lhdGlvbnM6IFdvcmtzcGFjZUxpbmVBc3NvY2lhdGlvbltdO1xuICBsaW5lczogdW5rbm93bltdO1xuICBsb2NhdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgbWVldE1lRW5hYmxlZDogYm9vbGVhbjtcbiAgbmV0d29ya0xvY2FsZTogc3RyaW5nIHwgbnVsbDtcbiAgb3BlcmF0aW9uQ29tcGxldGVzQnk6IHN0cmluZyB8IG51bGw7XG4gIG93bmVyVXNlcklkOiBzdHJpbmcgfCBudWxsO1xuICBwbGFyRGV2aWNlOiBib29sZWFuO1xuICBwcm90b2NvbDogc3RyaW5nIHwgbnVsbDtcbiAgcHJvdmlzaW9uaW5nU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICByZXJvdXRpbmdDc3M6IHN0cmluZyB8IG51bGw7XG4gIHJzYUtleVNpemU6IHN0cmluZyB8IG51bGw7XG4gIHNlY29uZEV4cGFuc2lvbk1vZHVsZTogc3RyaW5nIHwgbnVsbDtcbiAgc2VjdXJpdHlQcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICBzZWN1cml0eVByb2ZpbGVVdWlkOiBzdHJpbmcgfCBudWxsO1xuICBzZWxlY3RlZERldmljZXNBYXJTZXR0aW5nczogdW5rbm93bltdO1xuICBzZWxlY3RlZERldmljZXNBZGRpdGlvbmFsSW5mb3M6IHVua25vd25bXTtcbiAgc2VsZWN0ZWREZXZpY2VzRG5kU2V0dGluZ3M6IHVua25vd25bXTtcbiAgc2VsZWN0ZWREZXZpY2VzRXh0ZXJuYWxEYXRhTG9jYXRpb25zOiB1bmtub3duW107XG4gIHNlbGVjdGVkRGV2aWNlc0dlbmVyYWxJbmZvczogdW5rbm93bltdO1xuICBzZWxlY3RlZERldmljZXNNZWRpYVNldHRpbmdzOiB1bmtub3duW107XG4gIHNlbGVjdGVkRGV2aWNlc01scHBJbmZvczogdW5rbm93bltdO1xuICBzZWxlY3RlZERldmljZXNOdW1iZXJQcmVzZW50YXRpb25zOiB1bmtub3duW107XG4gIHNlbGVjdGVkRGV2aWNlc1Bob25lU3BlY2lmaWNzOiB1bmtub3duW107XG4gIHNlbGVjdGVkRGV2aWNlc1Byb3RvY29sU3BlY2lmaWNzOiB1bmtub3duW107XG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgc2VydmljZXM6IHN0cmluZ1tdO1xuICBzaGFyZWRVc2Vyczogc3RyaW5nW107XG4gIHNpcFByb2ZpbGU6IHN0cmluZyB8IG51bGw7XG4gIHNpdGVJZDogbnVtYmVyO1xuICBzaXRlTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgc29mdGtleVRlbXBsYXRlOiBzdHJpbmcgfCBudWxsO1xuICBzcGVlZERpYWxzOiB1bmtub3duW107XG4gIHN1YnNjcmliZUNhbGxpbmdTZWFyY2hTcGFjZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHRoaXJkRXhwYW5zaW9uTW9kdWxlOiBzdHJpbmcgfCBudWxsO1xuICB1blN1cHBvcnRlZEZvclNEOiB1bmtub3duIHwgbnVsbDtcbiAgdXNlckRldmljZVR5cGU6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJMb2NhbGU6IHN0cmluZyB8IG51bGw7XG4gIHZvaWNlbWFpbEVuYWJsZWQ6IGJvb2xlYW47XG4gIHdlYmV4VVVJRDogc3RyaW5nIHwgbnVsbDtcbiAgd2l0aFVkcDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VMaXN0SXRlbSB7XG4gIGRldmljZTogV29ya3NwYWNlRGV2aWNlUmVjb3JkO1xuICBsaW5lczogdW5rbm93bltdO1xuICBzaXRlOiBXb3Jrc3BhY2VTaXRlIHwgbnVsbDtcbiAgd29ya3NwYWNlRGV2aWNlczogV29ya3NwYWNlRGV2aWNlQXNzb2NpYXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VzUmVzcG9uc2Uge1xuICB0b3RhbDogbnVtYmVyO1xuICBwYWdlRGF0YTogV29ya3NwYWNlTGlzdEl0ZW1bXTtcbn1cblxuLy8gRGlzcGxheS1mcmllbmRseSBzaGFwZSBjb25zdW1lZCBieSB0aGUgZmlsdGVycy90YWJsZSBjb21wb25lbnRzLlxuXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VTdGF0dXMgPSAnYWN0aXZlJyB8ICdpbmFjdGl2ZScgfCAndW5hdmFpbGFibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZURldmljZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGtpbmQ6ICdkZXZpY2UnIHwgJ3BlcnNvbic7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGluaXRpYWxzPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlc1BhZ2Uge1xuICB3b3Jrc3BhY2VzOiBXb3Jrc3BhY2VbXTtcbiAgdG90YWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2Uge1xuICBpZDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICB0eXBlTGFiZWw6IHN0cmluZztcbiAgY2FwYWNpdHk6IG51bWJlciB8IG51bGw7XG4gIGxvY2F0aW9uOiBzdHJpbmc7XG4gIHNpdGVJZDogbnVtYmVyIHwgbnVsbDtcbiAgZGV2aWNlczogV29ya3NwYWNlRGV2aWNlW107XG4gIHNjaGVkdWxpbmc6IHN0cmluZztcbiAgY2FsbGluZ0xpY2Vuc2U6IHN0cmluZztcbiAgcHJvdmlzaW9uaW5nVHlwZTogc3RyaW5nO1xuICBzdGF0dXM6IFdvcmtzcGFjZVN0YXR1cztcbiAgc3RhdHVzTGFiZWw6IHN0cmluZztcbiAgZGV2aWNlOiBXb3Jrc3BhY2VEZXZpY2VSZWNvcmQ7XG4gIGlzSHlicmlkOiBib29sZWFuO1xufVxuXG4vLyBXaGljaCBpZGVudGl0eSBhIHdvcmtzcGFjZSBzaG91bGQgYmUgb3BlbmVkL2FkZHJlc3NlZCBieTogdGhlIHBsYWluIFdlYmV4XG4vLyBDYWxsaW5nIGNvbm5lY3Rpb24gKGtleWVkIGJ5IGRldmljZS53ZWJleFVVSUQpIG9yIHRoZSBXZWJleCBDYWxsaW5nIERJIC9cbi8vIG9uLXByZW0gY29ubmVjdGlvbiAoa2V5ZWQgYnkgZGV2aWNlLm5hbWUpLiBBIGh5YnJpZCB3b3Jrc3BhY2UgaGFzIGJvdGggYW5kXG4vLyB0aGUgY2FsbGVyIHBpY2tzIHdoaWNoIG9uZSB0aGV5IGNsaWNrZWQ7IGEgbm9uLWh5YnJpZCB3b3Jrc3BhY2Ugb25seSBldmVyXG4vLyBoYXMgb25lIG9mIHRoZSB0d28gc2V0LlxuZXhwb3J0IHR5cGUgV29ya3NwYWNlQ29ubmVjdGlvblR5cGUgPSAnd2ViZXgnIHwgJ2RpJztcblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VPcGVuRXZlbnQge1xuICBpZDogc3RyaW5nO1xuICBjb25uZWN0aW9uVHlwZTogV29ya3NwYWNlQ29ubmVjdGlvblR5cGU7XG59XG5cbi8vIE1vY2sgZGF0YSBzaG93biBvbiB0aGUgd29ya3NwYWNlIGRldGFpbCAoT3ZlcnZpZXcgLyBDYWxsaW5nKSB2aWV3LCB1bnRpbCBhXG4vLyBkZWRpY2F0ZWQgZGV0YWlsIEFQSSBpcyBhdmFpbGFibGUuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlSXNzdWUge1xuICBpZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBhY3Rpb25MYWJlbDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUxvY2F0aW9uRGV0YWlscyB7XG4gIGNvdW50cnk6IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUNhbGxpbmdEZXRhaWxzIHtcbiAgbGljZW5zZTogc3RyaW5nO1xuICBzaXBBZGRyZXNzOiBzdHJpbmc7XG4gIGRpcmVjdG9yeU51bWJlcjogc3RyaW5nO1xuICByb3V0ZVBhcnRpdGlvbjogc3RyaW5nO1xuICBjYWxsaW5nU2VhcmNoU3BhY2U6IHN0cmluZztcbiAgc2VjdXJpdHlQcm9maWxlOiBzdHJpbmc7XG4gIGV4dGVybmFsQ2FsbGVySWROYW1lPzogc3RyaW5nO1xuICBleHRlcm5hbENhbGxlcklkTnVtYmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZURldGFpbHMge1xuICBpc3N1ZXM6IFdvcmtzcGFjZUlzc3VlW107XG4gIGxvY2F0aW9uOiBXb3Jrc3BhY2VMb2NhdGlvbkRldGFpbHM7XG4gIGNhbGxpbmc6IFdvcmtzcGFjZUNhbGxpbmdEZXRhaWxzO1xuICBzY2hlZHVsaW5nQ29uZmlndXJlZDogYm9vbGVhbjtcbiAgcGxhbm5lZE1haW50ZW5hbmNlRW5hYmxlZDogYm9vbGVhbjtcbiAgbm90ZXM6IHN0cmluZyB8IG51bGw7XG4gIGNhcGFjaXR5PzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gUmF3IHNoYXBlcyByZXR1cm5lZCBieSB0aGUgV2ViZXggQ2FsbGluZyB3b3Jrc3BhY2UtZGV0YWlsIGVuZHBvaW50c1xuLy8gKEFQSS5ERVRBSUxTLldFQkVYLldPUktTUEFDRSAvIE5VTUJFUlMgLyBDQUxMRVJJRCkuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhXb3Jrc3BhY2VEZXZpY2VTdW1tYXJ5IHtcbiAgZGV2aWNlSWQ6IHN0cmluZztcbiAgbWFjOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIHJlZ2lzdGVyZWQ6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhXb3Jrc3BhY2VEZXRhaWxzUmVzcG9uc2Uge1xuICBjdXN0b21lcklkOiBudW1iZXI7XG4gIGNhcGFjaXR5OiBudW1iZXIgfCBudWxsO1xuICBkZXZpY2VzOiBXZWJleFdvcmtzcGFjZURldmljZVN1bW1hcnlbXTtcbiAgZXh0ZW5zaW9uczogc3RyaW5nW107XG4gIGxpY2Vuc2VOYW1lOiBzdHJpbmc7XG4gIGxvY2F0aW9uSWQ6IHN0cmluZztcbiAgbG9jYXRpb25OYW1lOiBzdHJpbmc7XG4gIHNpcEFkZHJlc3M6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICB3b3Jrc3BhY2VJZDogc3RyaW5nO1xuICB3b3Jrc3BhY2VOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhOdW1iZXJMb2NhdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nIHwgbnVsbDtcbiAgYW5ub3VuY2VtZW50TGFuZ3VhZ2U6IHN0cmluZyB8IG51bGw7XG4gIGNpdHk6IHN0cmluZyB8IG51bGw7XG4gIGNvdW50cnk6IHN0cmluZyB8IG51bGw7XG4gIGVtYWlsTGFuZ3VhZ2U6IHN0cmluZyB8IG51bGw7XG4gIHBvc3RhbENvZGU6IHN0cmluZyB8IG51bGw7XG4gIHByZWZlcnJlZExhbmd1YWdlOiBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZTogc3RyaW5nIHwgbnVsbDtcbiAgdGltZVpvbmU6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhOdW1iZXJPcmdhbml6YXRpb24ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhQaG9uZU51bWJlciB7XG4gIGVzbjogc3RyaW5nIHwgbnVsbDtcbiAgZXh0ZW5zaW9uOiBzdHJpbmcgfCBudWxsO1xuICBleHRlcm5hbDogc3RyaW5nIHwgbnVsbDtcbiAgcHJpbWFyeTogYm9vbGVhbjtcbiAgd29ya3NwYWNlPzogeyBpZDogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhOdW1iZXJzUmVzcG9uc2Uge1xuICBwaG9uZU51bWJlcnM6IFdlYmV4UGhvbmVOdW1iZXJbXTtcbiAgbG9jYXRpb246IFdlYmV4TnVtYmVyTG9jYXRpb247XG4gIG9yZ2FuaXphdGlvbjogV2ViZXhOdW1iZXJPcmdhbml6YXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhDYWxsZXJJZFJlc3BvbnNlIHtcbiAgdHlwZXM6IHN0cmluZ1tdO1xuICBzZWxlY3RlZDogc3RyaW5nO1xuICBibG9ja0luRm9yd2FyZENhbGxzRW5hYmxlZDogYm9vbGVhbjtcbiAgY3VzdG9tRXh0ZXJuYWxDYWxsZXJJZE5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGN1c3RvbU51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgY3VzdG9tZXJOdW1iZXI6IHN0cmluZyB8IG51bGw7XG4gIGRpcmVjdE51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgZGlzcGxheURldGFpbDogc3RyaW5nIHwgbnVsbDtcbiAgZGlzcGxheU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGV4dGVybmFsQ2FsbGVySWROYW1lUG9saWN5OiBzdHJpbmcgfCBudWxsO1xuICBsb2NhdGlvbkV4dGVybmFsQ2FsbGVySWROYW1lOiBzdHJpbmcgfCBudWxsO1xuICBsb2NhdGlvbk51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgdG9sbEZyZWVMb2NhdGlvbk51bWJlcjogYm9vbGVhbjtcbn1cblxuLy8gUmF3IHNoYXBlcyByZXR1cm5lZCBieSB0aGUgQ1VDTSB3b3Jrc3BhY2UtZGV0YWlsIGVuZHBvaW50c1xuLy8gKEFQSS5ERVRBSUxTLkNVQ00uV09SS1NQQUNFIC8gU0lURSkuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbUNhbGxJbmZvRGlzcGxheSB7XG4gIGNhbGxlck5hbWU6IHN0cmluZztcbiAgY2FsbGVyTnVtYmVyOiBzdHJpbmc7XG4gIHJlZGlyZWN0ZWROdW1iZXI6IHN0cmluZztcbiAgZGlhbGVkTnVtYmVyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbUxpbmVBc3NvY2lhdGlvbiB7XG4gIGxpbmVQa2lkOiBzdHJpbmcgfCBudWxsO1xuICBpbmRleDogbnVtYmVyIHwgbnVsbDtcbiAgcG9zaXRpb246IG51bWJlciB8IG51bGw7XG4gIGRpcmVjdG9yeU51bWJlcjogV29ya3NwYWNlQXNzb2NpYXRlZERpcmVjdG9yeU51bWJlcjtcbiAgZTE2NE1hc2s6IHN0cmluZyB8IG51bGw7XG4gIHRleHRMYWJlbDogc3RyaW5nIHwgbnVsbDtcbiAgZGlzcGxheUxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICBkaXNwbGF5TGFiZWxBc2NpaTogc3RyaW5nIHwgbnVsbDtcbiAgbWF4TnVtYmVyT2ZDYWxsczogbnVtYmVyIHwgbnVsbDtcbiAgYnVzeVRyaWdnZXI6IG51bWJlciB8IG51bGw7XG4gIHJlY29yZGluZ09wdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgcmVjb3JkaW5nUHJvZmlsZTogc3RyaW5nIHwgbnVsbDtcbiAgcmVjb3JkaW5nTWVkaWFTb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gIHZpc3VhbE1XSTogc3RyaW5nIHwgbnVsbDtcbiAgYXVkaWJsZU1XSTogc3RyaW5nIHwgbnVsbDtcbiAgcmluZ1NldHRpbmdfaWRsZTogc3RyaW5nIHwgbnVsbDtcbiAgcmluZ1NldHRpbmdfYWN0aXZlOiBzdHJpbmcgfCBudWxsO1xuICBwaWNrdXBBQVNfaWRsZTogc3RyaW5nIHwgbnVsbDtcbiAgcGlja3VwQUFTX2FjdGl2ZTogc3RyaW5nIHwgbnVsbDtcbiAgbW9uaXRvckNTUzogc3RyaW5nIHwgbnVsbDtcbiAgbG9nTWlzc2VkQ2FsbDogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbEluZm9EaXNwbGF5OiBDdWNtQ2FsbEluZm9EaXNwbGF5O1xuICBsaW5lTG9jYWxJZDogc3RyaW5nIHwgbnVsbDtcbiAgZGlkUGF0dGVybjogdW5rbm93biB8IG51bGw7XG4gIHNoYXJlZERldmljZXM6IHVua25vd25bXTtcbiAgc2hhcmVkVXNlcnM6IHVua25vd25bXTtcbiAgb3duZXJVc2VySWQ6IHVua25vd25bXTtcbiAgYXNzb2NpYXRlZDogdW5rbm93biB8IG51bGw7XG4gIHBhdHRlcm5Vc2FnZTogdW5rbm93biB8IG51bGw7XG4gIGFsZXJ0aW5nTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcG9wdWxhdGVXaXRoRGlkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21TZXJ2aWNlIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZWxlY2FzdGVyU2VydmljZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdWNtRGV2aWNlRGV0YWlscyBleHRlbmRzIE9taXQ8V29ya3NwYWNlRGV2aWNlUmVjb3JkLCAnbGluZUFzc29jaWF0aW9ucycgfCAnc2VydmljZXMnPiB7XG4gIGxpbmVBc3NvY2lhdGlvbnM6IEN1Y21MaW5lQXNzb2NpYXRpb25bXTtcbiAgc2VydmljZXM6IEN1Y21TZXJ2aWNlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbUNhbGxGb3J3YXJkU2V0dGluZyB7XG4gIGZvcndhcmRUb1ZvaWNlTWFpbDogYm9vbGVhbiB8IG51bGw7XG4gIGRlc3RpbmF0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBjYWxsaW5nU2VhcmNoU3BhY2U6IHN0cmluZyB8IG51bGw7XG4gIGR1cmF0aW9uOiBudW1iZXIgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21BYXJTZXR0aW5ncyB7XG4gIGFhckRlc3RpbmF0aW9uTWFzazogc3RyaW5nIHwgbnVsbDtcbiAgYWFyR3JvdXA6IHN0cmluZyB8IG51bGw7XG4gIGFhclZvaWNlTWFpbEVuYWJsZWQ6IGJvb2xlYW47XG4gIGFhcktlZXBDYWxsSGlzdG9yeTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdWNtUGFya01vbml0b3Jpbmcge1xuICBkZXN0aW5hdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbGluZ1NlYXJjaFNwYWNlOiBzdHJpbmcgfCBudWxsO1xuICB2b2ljZU1haWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbURpZFBhdHRlcm4ge1xuICBwa2lkOiBzdHJpbmcgfCBudWxsO1xuICBwYXR0ZXJuOiBzdHJpbmcgfCBudWxsO1xuICBuZXdQYXR0ZXJuOiBzdHJpbmcgfCBudWxsO1xuICBjYWxsZWRQYXJ0eVRyYW5zZm9ybWF0aW9uTWFzazogc3RyaW5nIHwgbnVsbDtcbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gIHVzZU9yaWdpbmF0b3JDc3M6IHVua25vd24gfCBudWxsO1xuICBjYWxsaW5nU2VhcmNoU3BhY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICByb3V0ZVBhcnRpdGlvbk5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG5ld1JvdXRlUGFydGl0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgdXJnZW50UHJpb3JpdHk6IGJvb2xlYW47XG4gIG91dGdvaW5nQ2FsbHM6IHVua25vd24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21MaW5lRGV0YWlscyB7XG4gIGRpcmVjdG9yeU51bWJlcjogV29ya3NwYWNlQXNzb2NpYXRlZERpcmVjdG9yeU51bWJlcjtcbiAgcGtpZDogc3RyaW5nIHwgbnVsbDtcbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gIGVudGl0eUNoYW5nZVR5cGU6IHN0cmluZyB8IG51bGw7XG4gIGFsZXJ0aW5nTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgYXNjaWlBbGVydGluZ05hbWU6IHN0cmluZyB8IG51bGw7XG4gIGNhbGxpbmdTZWFyY2hTcGFjZTogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbEZvcndhcmRBbGw6IEN1Y21DYWxsRm9yd2FyZFNldHRpbmc7XG4gIGNhbGxGb3J3YXJkQWxsU2Vjb25kYXJ5Q1NTOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZEJ1c3lJbnRlcm5hbDogQ3VjbUNhbGxGb3J3YXJkU2V0dGluZztcbiAgY2FsbEZvcndhcmRCdXN5RXh0ZXJuYWw6IEN1Y21DYWxsRm9yd2FyZFNldHRpbmc7XG4gIGNhbGxGb3J3YXJkTm9BbnN3ZXJJbnRlcm5hbDogQ3VjbUNhbGxGb3J3YXJkU2V0dGluZztcbiAgY2FsbEZvcndhcmROb0Fuc3dlckV4dGVybmFsOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZE5vQ292ZXJhZ2VJbnRlcm5hbDogQ3VjbUNhbGxGb3J3YXJkU2V0dGluZztcbiAgY2FsbEZvcndhcmROb0NvdmVyYWdlRXh0ZXJuYWw6IEN1Y21DYWxsRm9yd2FyZFNldHRpbmc7XG4gIGNhbGxGb3J3YXJkT25DVElGYWlsdXJlOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZFVucmVnaXN0ZXJlZEludGVybmFsOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZFVucmVnaXN0ZXJlZEV4dGVybmFsOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZEFsdGVybmF0ZVBhcnR5OiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICB2b2ljZU1haWxQcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICBub0Fuc3dlclJpbmdEdXJhdGlvbjogbnVtYmVyIHwgbnVsbDtcbiAgYXV0b0Fuc3dlcjogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbFBpY2t1cEdyb3VwOiBzdHJpbmcgfCBudWxsO1xuICBhYXJTZXR0aW5nczogQ3VjbUFhclNldHRpbmdzO1xuICBwYXJrTW9uaXRvcmluZ0ludGVybmFsOiBDdWNtUGFya01vbml0b3Jpbmc7XG4gIHBhcmtNb25pdG9yaW5nRXh0ZXJuYWw6IEN1Y21QYXJrTW9uaXRvcmluZztcbiAgdXJnZW50UHJpb3JpdHk6IGJvb2xlYW47XG4gIGJsZlByZXNlbmNlR3JvdXA6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJIb2xkTU9IQXVkaW9Tb3VyY2VJZDogc3RyaW5nIHwgbnVsbDtcbiAgdXNlckhvbGRNT0hBdWRpb1NvdXJjZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG5ldHdvcmtNT0hBdWRpb1NvdXJjZUlkOiBzdHJpbmcgfCBudWxsO1xuICBuZXR3b3JrTU9IQXVkaW9Tb3VyY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICByZWplY3RBbm9ueW1vdXNDYWxsOiBib29sZWFuO1xuICBlbnRlcnByaXNlQWx0TnVtOiB1bmtub3duIHwgbnVsbDtcbiAgZTE2NEFsdE51bTogdW5rbm93biB8IG51bGw7XG4gIGRpcmVjdG9yeVVyaXM6IHVua25vd25bXTtcbiAgbWxwcE5vQW5zd2VyUmluZ0R1cmF0aW9uOiBudW1iZXIgfCBudWxsO1xuICBjb25maWRlbnRpYWxBY2Nlc3NNb2RlOiB1bmtub3duIHwgbnVsbDtcbiAgY29uZmlkZW50aWFsQWNjZXNzTGV2ZWw6IHVua25vd24gfCBudWxsO1xuICBjb25maWRlbnRpYWxBY2Nlc3NMZXZlbE5hbWU6IHVua25vd24gfCBudWxsO1xuICBjYWxsQ29udHJvbEFnZW50UHJvZmlsZTogdW5rbm93biB8IG51bGw7XG4gIGhvbGRSZXZlcnNpb25SaW5nRHVyYXRpb246IG51bWJlciB8IG51bGw7XG4gIGhvbGRSZXZlcnNpb25Ob3RpZmljYXRpb25JbnRlcnZhbDogbnVtYmVyIHwgbnVsbDtcbiAgcGFydHlFbnRyYW5jZVRvbmU6IHN0cmluZyB8IG51bGw7XG4gIHBzdG5GYWlsb3Zlcjogc3RyaW5nIHwgbnVsbDtcbiAgbG9jYWxJZDogc3RyaW5nIHwgbnVsbDtcbiAgY3VzdG9tZXJJZDogbnVtYmVyO1xuICBjdWNtSWQ6IG51bWJlcjtcbiAgc2l0ZUlkOiBudW1iZXI7XG4gIHNpdGVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBsb2NhdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgbG9jYXRpb25OYW1lczogc3RyaW5nW107XG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgZGlkUGF0dGVybnM6IEN1Y21EaWRQYXR0ZXJuW107XG4gIG1hcHBlZERpZHM6IHN0cmluZ1tdO1xuICBzZWxlY3RlZExpbmVzR2VuZXJhbFNldHRpbmdzOiB1bmtub3duW107XG4gIHNlbGVjdGVkTGluZXNBc3NvY2lhdGVkU2V0dGluZ3M6IHVua25vd25bXTtcbiAgc2VsZWN0ZWRMaW5lc011bHRpcGxlQ2FsbHM6IHVua25vd25bXTtcbiAgc2VsZWN0ZWRMaW5lc0NhbGxSZWNvcmRpbmdzOiB1bmtub3duW107XG4gIHNlbGVjdGVkTGluZXNBZGRpdGlvbmFsU2V0dGluZ3M6IHVua25vd25bXTtcbiAgc2VsZWN0ZWRMaW5lc0ZvcndhcmRDYWxsczogdW5rbm93bltdO1xuICBuZXdUb1VzZXI6IGJvb2xlYW47XG4gIHBsYXJEZXN0aW5hdGlvbk51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgcHJlZml4RGlnaXRzOiBzdHJpbmcgfCBudWxsO1xuICBwbGFyRGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gIHBsYXJDc3M6IHN0cmluZyB8IG51bGw7XG4gIHBsYXJSb3V0ZVBhcnRpdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgcGxhckVuYWJsZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbVdvcmtzcGFjZURldGFpbHNSZXNwb25zZSB7XG4gIGRldmljZTogQ3VjbURldmljZURldGFpbHM7XG4gIGxpbmVzOiBDdWNtTGluZURldGFpbHNbXTtcbiAgc2l0ZTogV29ya3NwYWNlU2l0ZSB8IG51bGw7XG4gIHdvcmtzcGFjZURldmljZXM6IFdvcmtzcGFjZURldmljZUFzc29jaWF0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbVNpdGVDdWNJbmZvIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21TaXRlQ3VjbUluZm8ge1xuICBwbGF0Zm9ybVR5cGU6IHN0cmluZztcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21TaXRlUmVzcG9uc2Uge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNob3J0TmFtZTogc3RyaW5nO1xuICBhZGRyZXNzMjogc3RyaW5nIHwgbnVsbDtcbiAgYWRkcmVzczM6IHN0cmluZyB8IG51bGw7XG4gIGNvdW50cnk6IHN0cmluZyB8IG51bGw7XG4gIGN1YzogQ3VjbVNpdGVDdWNJbmZvIHwgbnVsbDtcbiAgY3VjbTogQ3VjbVNpdGVDdWNtSW5mbyB8IG51bGw7XG4gIGhhc0FjdGl2YXRlZDogYm9vbGVhbjtcbiAgaHFTdGF0dXM6IGJvb2xlYW47XG4gIGlzQWZ0ZXJUdHU6IGJvb2xlYW47XG4gIGxvY2F0aW9uTmFtZTogc3RyaW5nO1xuICBwcmVmZXRjaERuOiBib29sZWFuO1xuICBzZXR0aW5nczogdW5rbm93bltdO1xuICBzdGF0ZTogc3RyaW5nIHwgbnVsbDtcbiAgdGltZXpvbmU6IHN0cmluZyB8IG51bGw7XG59XG4iXX0=
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid29ya3NwYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdHVraS93aWRnZXRzL3dvcmtzcGFjZXMvc3JjL3R5cGVzL3dvcmtzcGFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyRUFBMkU7QUFDM0Usd0VBQXdFIiwic291cmNlc0NvbnRlbnQiOlsiLy8gUmF3IHNoYXBlcyByZXR1cm5lZCBieSAvYXBpL3NlYXJjaC9xdWlja25vbnVzZXJkZXZpY2VzIChhIHBhZ2luYXRlZCBDVUNNXG4vLyBub24tdXNlci9zaGFyZWQgZGV2aWNlIHNlYXJjaCwgcmV1c2VkIGhlcmUgYXMgdGhlIFwiV29ya3NwYWNlc1wiIGxpc3QpLlxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZUFzc29jaWF0ZWREaXJlY3RvcnlOdW1iZXIge1xuICBkaXJlY3RvcnlOdW1iZXI6IHN0cmluZztcbiAgcm91dGVQYXJ0aXRpb25OYW1lOiBzdHJpbmc7XG4gIHBraWQ6IHN0cmluZyB8IG51bGw7XG4gIGRuVHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgc3ViVHlwZTogc3RyaW5nIHwgbnVsbDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VMaW5lQXNzb2NpYXRpb24ge1xuICBsaW5lUGtpZDogc3RyaW5nIHwgbnVsbDtcbiAgaW5kZXg6IG51bWJlciB8IG51bGw7XG4gIHBvc2l0aW9uOiBudW1iZXIgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZVNpdGUge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlRGV2aWNlQXNzb2NpYXRpb24ge1xuICBkZXZpY2VJZDogc3RyaW5nO1xuICBtYWM6IHN0cmluZztcbiAgbW9kZWw6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VEZXZpY2VSZWNvcmQge1xuICBuYW1lOiBzdHJpbmc7XG4gIG5ld05hbWU6IHN0cmluZztcbiAgcGtpZDogc3RyaW5nIHwgbnVsbDtcbiAgZW50aXR5Q2hhbmdlVHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgZGV2aWNlVHlwZTogc3RyaW5nIHwgbnVsbDtcbiAgYWN0aXZlTG9hZElkOiBzdHJpbmcgfCBudWxsO1xuICBhc3NvY2lhdGVkRE5zOiBXb3Jrc3BhY2VBc3NvY2lhdGVkRGlyZWN0b3J5TnVtYmVyW107XG4gIGF1dGhlbnRpY2F0aW9uTW9kZTogc3RyaW5nIHwgbnVsbDtcbiAgYXV0aGVudGljYXRpb25TdHJpbmc6IHN0cmluZyB8IG51bGw7XG4gIGJ1aWx0SW5CcmlkZ2U6IHN0cmluZyB8IG51bGw7XG4gIGJ1c3lMYW1wRmllbGRzOiB1bmtub3duW107XG4gIGJ1dHRvblRlbXBsYXRlOiBzdHJpbmcgfCBudWxsO1xuICBjYWxsaW5nU2VhcmNoU3BhY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBjZXJ0aWZpY2F0ZU9wZXJhdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgY2VydGlmaWNhdGVTdGF0dXM6IHN0cmluZyB8IG51bGw7XG4gIGNoYW5nZWRMaW5lQXBwRW50aXR5OiBzdHJpbmcgfCBudWxsO1xuICBjaGFuZ2VkTWVldE1lRW50aXR5OiBzdHJpbmcgfCBudWxsO1xuICBjb21tb25QaG9uZUNvbmZpZ05hbWU6IHN0cmluZyB8IG51bGw7XG4gIGN0aVJlbW90ZURldmljZTogYm9vbGVhbjtcbiAgY3VjbUlkOiBzdHJpbmcgfCBudWxsO1xuICBjdXN0b21lcklkOiBudW1iZXI7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBkZXZpY2VQb29sTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgZGV2aWNlUmVnU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICBkZXZpY2VTZWN1cml0eU1vZGU6IHN0cmluZyB8IG51bGw7XG4gIGVuYWJsZWRFeHRlbnNpb25Nb2JpbGl0eTogYm9vbGVhbjtcbiAgZXhjbHVkZURldmljZUV4dHJhT3B0aW9uczogYm9vbGVhbjtcbiAgZXh0cmFPcHRpb25zOiB1bmtub3duIHwgbnVsbDtcbiAgZmlybXdhcmVWZXJzaW9uOiBzdHJpbmcgfCBudWxsO1xuICBmaXJzdEV4cGFuc2lvbk1vZHVsZTogc3RyaW5nIHwgbnVsbDtcbiAgaW50ZXJjb21MaW5lQXNzb2NpYXRpb25zOiB1bmtub3duW107XG4gIGlwQWRkcmVzczogc3RyaW5nIHwgbnVsbDtcbiAgbGFzdFJlZ1RpbWU6IHN0cmluZyB8IG51bGw7XG4gIGxpbmVBc3NvY2lhdGlvbnM6IFdvcmtzcGFjZUxpbmVBc3NvY2lhdGlvbltdO1xuICBsaW5lczogdW5rbm93bltdO1xuICBsb2NhdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgbWVldE1lRW5hYmxlZDogYm9vbGVhbjtcbiAgbmV0d29ya0xvY2FsZTogc3RyaW5nIHwgbnVsbDtcbiAgb3BlcmF0aW9uQ29tcGxldGVzQnk6IHN0cmluZyB8IG51bGw7XG4gIG93bmVyVXNlcklkOiBzdHJpbmcgfCBudWxsO1xuICBwbGFyRGV2aWNlOiBib29sZWFuO1xuICBwcm90b2NvbDogc3RyaW5nIHwgbnVsbDtcbiAgcHJvdmlzaW9uaW5nU3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICByZXJvdXRpbmdDc3M6IHN0cmluZyB8IG51bGw7XG4gIHJzYUtleVNpemU6IHN0cmluZyB8IG51bGw7XG4gIHNlY29uZEV4cGFuc2lvbk1vZHVsZTogc3RyaW5nIHwgbnVsbDtcbiAgc2VjdXJpdHlQcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICBzZWN1cml0eVByb2ZpbGVVdWlkOiBzdHJpbmcgfCBudWxsO1xuICBzZWxlY3RlZERldmljZXNBYXJTZXR0aW5nczogdW5rbm93bltdO1xuICBzZWxlY3RlZERldmljZXNBZGRpdGlvbmFsSW5mb3M6IHVua25vd25bXTtcbiAgc2VsZWN0ZWREZXZpY2VzRG5kU2V0dGluZ3M6IHVua25vd25bXTtcbiAgc2VsZWN0ZWREZXZpY2VzRXh0ZXJuYWxEYXRhTG9jYXRpb25zOiB1bmtub3duW107XG4gIHNlbGVjdGVkRGV2aWNlc0dlbmVyYWxJbmZvczogdW5rbm93bltdO1xuICBzZWxlY3RlZERldmljZXNNZWRpYVNldHRpbmdzOiB1bmtub3duW107XG4gIHNlbGVjdGVkRGV2aWNlc01scHBJbmZvczogdW5rbm93bltdO1xuICBzZWxlY3RlZERldmljZXNOdW1iZXJQcmVzZW50YXRpb25zOiB1bmtub3duW107XG4gIHNlbGVjdGVkRGV2aWNlc1Bob25lU3BlY2lmaWNzOiB1bmtub3duW107XG4gIHNlbGVjdGVkRGV2aWNlc1Byb3RvY29sU3BlY2lmaWNzOiB1bmtub3duW107XG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgc2VydmljZXM6IHN0cmluZ1tdO1xuICBzaGFyZWRVc2Vyczogc3RyaW5nW107XG4gIHNpcFByb2ZpbGU6IHN0cmluZyB8IG51bGw7XG4gIHNpdGVJZDogbnVtYmVyO1xuICBzaXRlTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgc29mdGtleVRlbXBsYXRlOiBzdHJpbmcgfCBudWxsO1xuICBzcGVlZERpYWxzOiB1bmtub3duW107XG4gIHN1YnNjcmliZUNhbGxpbmdTZWFyY2hTcGFjZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIHRoaXJkRXhwYW5zaW9uTW9kdWxlOiBzdHJpbmcgfCBudWxsO1xuICB1blN1cHBvcnRlZEZvclNEOiB1bmtub3duIHwgbnVsbDtcbiAgdXNlckRldmljZVR5cGU6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJMb2NhbGU6IHN0cmluZyB8IG51bGw7XG4gIHZvaWNlbWFpbEVuYWJsZWQ6IGJvb2xlYW47XG4gIHdlYmV4VVVJRDogc3RyaW5nIHwgbnVsbDtcbiAgd2l0aFVkcDogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VMaXN0SXRlbSB7XG4gIGRldmljZTogV29ya3NwYWNlRGV2aWNlUmVjb3JkO1xuICBsaW5lczogdW5rbm93bltdO1xuICBzaXRlOiBXb3Jrc3BhY2VTaXRlIHwgbnVsbDtcbiAgd29ya3NwYWNlRGV2aWNlczogV29ya3NwYWNlRGV2aWNlQXNzb2NpYXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VzUmVzcG9uc2Uge1xuICB0b3RhbDogbnVtYmVyO1xuICBwYWdlRGF0YTogV29ya3NwYWNlTGlzdEl0ZW1bXTtcbn1cblxuLy8gRGlzcGxheS1mcmllbmRseSBzaGFwZSBjb25zdW1lZCBieSB0aGUgZmlsdGVycy90YWJsZSBjb21wb25lbnRzLlxuXG5leHBvcnQgdHlwZSBXb3Jrc3BhY2VTdGF0dXMgPSAnYWN0aXZlJyB8ICdpbmFjdGl2ZScgfCAndW5hdmFpbGFibGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZURldmljZSB7XG4gIGlkOiBzdHJpbmc7XG4gIGtpbmQ6ICdkZXZpY2UnIHwgJ3BlcnNvbic7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIGluaXRpYWxzPzogc3RyaW5nO1xuICBjb2xvcj86IHN0cmluZztcbiAgbW9kZWw/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlc1BhZ2Uge1xuICB3b3Jrc3BhY2VzOiBXb3Jrc3BhY2VbXTtcbiAgdG90YWw6IG51bWJlcjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2Uge1xuICBpZDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xuICB0eXBlTGFiZWw6IHN0cmluZztcbiAgY2FwYWNpdHk6IG51bWJlciB8IG51bGw7XG4gIGxvY2F0aW9uOiBzdHJpbmc7XG4gIHNpdGVJZDogbnVtYmVyIHwgbnVsbDtcbiAgZGV2aWNlczogV29ya3NwYWNlRGV2aWNlW107XG4gIHNjaGVkdWxpbmc6IHN0cmluZztcbiAgY2FsbGluZ0xpY2Vuc2U6IHN0cmluZztcbiAgcHJvdmlzaW9uaW5nVHlwZTogc3RyaW5nO1xuICBzdGF0dXM6IFdvcmtzcGFjZVN0YXR1cztcbiAgc3RhdHVzTGFiZWw6IHN0cmluZztcbiAgZGV2aWNlOiBXb3Jrc3BhY2VEZXZpY2VSZWNvcmQ7XG4gIGlzSHlicmlkOiBib29sZWFuO1xuICAvLyBUaGUgQ1VDTSBkZXZpY2UncyBvd24gbmFtZSAoZS5nLiBcIlNFUC4uLlwiKSBhcyBpdCB3YXMgYmVmb3JlIG1lcmdpbmcgd2l0aFxuICAvLyBpdHMgV2ViZXggY291bnRlcnBhcnQsIHdoaWNoIGNhbiBvdGhlcndpc2Ugb3ZlcndyaXRlIGRldmljZS5uYW1lLiBVc2VkIHRvXG4gIC8vIGFkZHJlc3MgdGhlIENVQ00gZGV0YWlsIGVuZHBvaW50IGZvciBhIGh5YnJpZCB3b3Jrc3BhY2UuXG4gIGN1Y21EZXZpY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xufVxuXG4vLyBXaGljaCBpZGVudGl0eSBhIHdvcmtzcGFjZSBzaG91bGQgYmUgb3BlbmVkL2FkZHJlc3NlZCBieTogdGhlIHBsYWluIFdlYmV4XG4vLyBDYWxsaW5nIGNvbm5lY3Rpb24gKGtleWVkIGJ5IGRldmljZS53ZWJleFVVSUQpIG9yIHRoZSBXZWJleCBDYWxsaW5nIERJIC9cbi8vIG9uLXByZW0gY29ubmVjdGlvbiAoa2V5ZWQgYnkgZGV2aWNlLm5hbWUpLiBBIGh5YnJpZCB3b3Jrc3BhY2UgaGFzIGJvdGggYW5kXG4vLyB0aGUgY2FsbGVyIHBpY2tzIHdoaWNoIG9uZSB0aGV5IGNsaWNrZWQ7IGEgbm9uLWh5YnJpZCB3b3Jrc3BhY2Ugb25seSBldmVyXG4vLyBoYXMgb25lIG9mIHRoZSB0d28gc2V0LlxuZXhwb3J0IHR5cGUgV29ya3NwYWNlQ29ubmVjdGlvblR5cGUgPSAnd2ViZXgnIHwgJ2RpJztcblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VPcGVuRXZlbnQge1xuICBpZDogc3RyaW5nO1xuICBjb25uZWN0aW9uVHlwZTogV29ya3NwYWNlQ29ubmVjdGlvblR5cGU7XG59XG5cbi8vIE1vY2sgZGF0YSBzaG93biBvbiB0aGUgd29ya3NwYWNlIGRldGFpbCAoT3ZlcnZpZXcgLyBDYWxsaW5nKSB2aWV3LCB1bnRpbCBhXG4vLyBkZWRpY2F0ZWQgZGV0YWlsIEFQSSBpcyBhdmFpbGFibGUuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV29ya3NwYWNlSXNzdWUge1xuICBpZDogc3RyaW5nO1xuICBtZXNzYWdlOiBzdHJpbmc7XG4gIHRpbWVzdGFtcDogc3RyaW5nO1xuICBhY3Rpb25MYWJlbDogc3RyaW5nO1xuICBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICBzdWdnZXN0ZWRBY3Rpb246IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VMb2NhdGlvbkRldGFpbHMge1xuICBjb3VudHJ5OiBzdHJpbmc7XG4gIGFkZHJlc3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBXb3Jrc3BhY2VDYWxsaW5nRGV0YWlscyB7XG4gIGxpY2Vuc2U6IHN0cmluZztcbiAgc2lwQWRkcmVzczogc3RyaW5nO1xuICBkaXJlY3RvcnlOdW1iZXI6IHN0cmluZztcbiAgZXh0ZW5zaW9uPzogc3RyaW5nO1xuICByb3V0ZVBhcnRpdGlvbjogc3RyaW5nO1xuICBjYWxsaW5nU2VhcmNoU3BhY2U6IHN0cmluZztcbiAgc2VjdXJpdHlQcm9maWxlOiBzdHJpbmc7XG4gIGV4dGVybmFsQ2FsbGVySWROYW1lPzogc3RyaW5nO1xuICBleHRlcm5hbENhbGxlcklkTnVtYmVyPzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFdvcmtzcGFjZURldGFpbHMge1xuICBpc3N1ZXM6IFdvcmtzcGFjZUlzc3VlW107XG4gIGxvY2F0aW9uOiBXb3Jrc3BhY2VMb2NhdGlvbkRldGFpbHM7XG4gIGNhbGxpbmc6IFdvcmtzcGFjZUNhbGxpbmdEZXRhaWxzO1xuICBzY2hlZHVsaW5nQ29uZmlndXJlZDogYm9vbGVhbjtcbiAgcGxhbm5lZE1haW50ZW5hbmNlRW5hYmxlZDogYm9vbGVhbjtcbiAgbm90ZXM6IHN0cmluZyB8IG51bGw7XG4gIGNhcGFjaXR5PzogbnVtYmVyIHwgbnVsbDtcbn1cblxuLy8gUmF3IHNoYXBlcyByZXR1cm5lZCBieSB0aGUgV2ViZXggQ2FsbGluZyB3b3Jrc3BhY2UtZGV0YWlsIGVuZHBvaW50c1xuLy8gKEFQSS5ERVRBSUxTLldFQkVYLldPUktTUEFDRSAvIE5VTUJFUlMgLyBDQUxMRVJJRCkuXG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhXb3Jrc3BhY2VEZXZpY2VTdW1tYXJ5IHtcbiAgZGV2aWNlSWQ6IHN0cmluZztcbiAgbWFjOiBzdHJpbmc7XG4gIG1vZGVsOiBzdHJpbmc7XG4gIHJlZ2lzdGVyZWQ6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhXb3Jrc3BhY2VEZXRhaWxzUmVzcG9uc2Uge1xuICBjdXN0b21lcklkOiBudW1iZXI7XG4gIGNhcGFjaXR5OiBudW1iZXIgfCBudWxsO1xuICBkZXZpY2VzOiBXZWJleFdvcmtzcGFjZURldmljZVN1bW1hcnlbXTtcbiAgZXh0ZW5zaW9uczogc3RyaW5nW107XG4gIGxpY2Vuc2VOYW1lOiBzdHJpbmc7XG4gIGxvY2F0aW9uSWQ6IHN0cmluZztcbiAgbG9jYXRpb25OYW1lOiBzdHJpbmc7XG4gIHNpcEFkZHJlc3M6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICB3b3Jrc3BhY2VJZDogc3RyaW5nO1xuICB3b3Jrc3BhY2VOYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhOdW1iZXJMb2NhdGlvbiB7XG4gIGlkOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgb3JnSWQ6IHN0cmluZztcbiAgYWRkcmVzczogc3RyaW5nIHwgbnVsbDtcbiAgYW5ub3VuY2VtZW50TGFuZ3VhZ2U6IHN0cmluZyB8IG51bGw7XG4gIGNpdHk6IHN0cmluZyB8IG51bGw7XG4gIGNvdW50cnk6IHN0cmluZyB8IG51bGw7XG4gIGVtYWlsTGFuZ3VhZ2U6IHN0cmluZyB8IG51bGw7XG4gIHBvc3RhbENvZGU6IHN0cmluZyB8IG51bGw7XG4gIHByZWZlcnJlZExhbmd1YWdlOiBzdHJpbmcgfCBudWxsO1xuICBzdGF0ZTogc3RyaW5nIHwgbnVsbDtcbiAgdGltZVpvbmU6IHN0cmluZyB8IG51bGw7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhOdW1iZXJPcmdhbml6YXRpb24ge1xuICBpZDogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhQaG9uZU51bWJlciB7XG4gIGVzbjogc3RyaW5nIHwgbnVsbDtcbiAgZXh0ZW5zaW9uOiBzdHJpbmcgfCBudWxsO1xuICBleHRlcm5hbDogc3RyaW5nIHwgbnVsbDtcbiAgcHJpbWFyeTogYm9vbGVhbjtcbiAgd29ya3NwYWNlPzogeyBpZDogc3RyaW5nIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhOdW1iZXJzUmVzcG9uc2Uge1xuICBwaG9uZU51bWJlcnM6IFdlYmV4UGhvbmVOdW1iZXJbXTtcbiAgbG9jYXRpb246IFdlYmV4TnVtYmVyTG9jYXRpb247XG4gIG9yZ2FuaXphdGlvbjogV2ViZXhOdW1iZXJPcmdhbml6YXRpb247XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgV2ViZXhDYWxsZXJJZFJlc3BvbnNlIHtcbiAgdHlwZXM6IHN0cmluZ1tdO1xuICBzZWxlY3RlZDogc3RyaW5nO1xuICBibG9ja0luRm9yd2FyZENhbGxzRW5hYmxlZDogYm9vbGVhbjtcbiAgY3VzdG9tRXh0ZXJuYWxDYWxsZXJJZE5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGN1c3RvbU51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgY3VzdG9tZXJOdW1iZXI6IHN0cmluZyB8IG51bGw7XG4gIGRpcmVjdE51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgZGlzcGxheURldGFpbDogc3RyaW5nIHwgbnVsbDtcbiAgZGlzcGxheU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIGV4dGVybmFsQ2FsbGVySWROYW1lUG9saWN5OiBzdHJpbmcgfCBudWxsO1xuICBsb2NhdGlvbkV4dGVybmFsQ2FsbGVySWROYW1lOiBzdHJpbmcgfCBudWxsO1xuICBsb2NhdGlvbk51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgdG9sbEZyZWVMb2NhdGlvbk51bWJlcjogYm9vbGVhbjtcbn1cblxuLy8gUmF3IHNoYXBlcyByZXR1cm5lZCBieSB0aGUgQ1VDTSB3b3Jrc3BhY2UtZGV0YWlsIGVuZHBvaW50c1xuLy8gKEFQSS5ERVRBSUxTLkNVQ00uV09SS1NQQUNFIC8gU0lURSkuXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbUNhbGxJbmZvRGlzcGxheSB7XG4gIGNhbGxlck5hbWU6IHN0cmluZztcbiAgY2FsbGVyTnVtYmVyOiBzdHJpbmc7XG4gIHJlZGlyZWN0ZWROdW1iZXI6IHN0cmluZztcbiAgZGlhbGVkTnVtYmVyOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbUxpbmVBc3NvY2lhdGlvbiB7XG4gIGxpbmVQa2lkOiBzdHJpbmcgfCBudWxsO1xuICBpbmRleDogbnVtYmVyIHwgbnVsbDtcbiAgcG9zaXRpb246IG51bWJlciB8IG51bGw7XG4gIGRpcmVjdG9yeU51bWJlcjogV29ya3NwYWNlQXNzb2NpYXRlZERpcmVjdG9yeU51bWJlcjtcbiAgZTE2NE1hc2s6IHN0cmluZyB8IG51bGw7XG4gIHRleHRMYWJlbDogc3RyaW5nIHwgbnVsbDtcbiAgZGlzcGxheUxhYmVsOiBzdHJpbmcgfCBudWxsO1xuICBkaXNwbGF5TGFiZWxBc2NpaTogc3RyaW5nIHwgbnVsbDtcbiAgbWF4TnVtYmVyT2ZDYWxsczogbnVtYmVyIHwgbnVsbDtcbiAgYnVzeVRyaWdnZXI6IG51bWJlciB8IG51bGw7XG4gIHJlY29yZGluZ09wdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgcmVjb3JkaW5nUHJvZmlsZTogc3RyaW5nIHwgbnVsbDtcbiAgcmVjb3JkaW5nTWVkaWFTb3VyY2U6IHN0cmluZyB8IG51bGw7XG4gIHZpc3VhbE1XSTogc3RyaW5nIHwgbnVsbDtcbiAgYXVkaWJsZU1XSTogc3RyaW5nIHwgbnVsbDtcbiAgcmluZ1NldHRpbmdfaWRsZTogc3RyaW5nIHwgbnVsbDtcbiAgcmluZ1NldHRpbmdfYWN0aXZlOiBzdHJpbmcgfCBudWxsO1xuICBwaWNrdXBBQVNfaWRsZTogc3RyaW5nIHwgbnVsbDtcbiAgcGlja3VwQUFTX2FjdGl2ZTogc3RyaW5nIHwgbnVsbDtcbiAgbW9uaXRvckNTUzogc3RyaW5nIHwgbnVsbDtcbiAgbG9nTWlzc2VkQ2FsbDogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbEluZm9EaXNwbGF5OiBDdWNtQ2FsbEluZm9EaXNwbGF5O1xuICBsaW5lTG9jYWxJZDogc3RyaW5nIHwgbnVsbDtcbiAgZGlkUGF0dGVybjogdW5rbm93biB8IG51bGw7XG4gIHNoYXJlZERldmljZXM6IHVua25vd25bXTtcbiAgc2hhcmVkVXNlcnM6IHVua25vd25bXTtcbiAgb3duZXJVc2VySWQ6IHVua25vd25bXTtcbiAgYXNzb2NpYXRlZDogdW5rbm93biB8IG51bGw7XG4gIHBhdHRlcm5Vc2FnZTogdW5rbm93biB8IG51bGw7XG4gIGFsZXJ0aW5nTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgcG9wdWxhdGVXaXRoRGlkOiBib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21TZXJ2aWNlIHtcbiAgbmFtZTogc3RyaW5nO1xuICB0ZWxlY2FzdGVyU2VydmljZU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdWNtRGV2aWNlRGV0YWlscyBleHRlbmRzIE9taXQ8V29ya3NwYWNlRGV2aWNlUmVjb3JkLCAnbGluZUFzc29jaWF0aW9ucycgfCAnc2VydmljZXMnPiB7XG4gIGxpbmVBc3NvY2lhdGlvbnM6IEN1Y21MaW5lQXNzb2NpYXRpb25bXTtcbiAgc2VydmljZXM6IEN1Y21TZXJ2aWNlW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbUNhbGxGb3J3YXJkU2V0dGluZyB7XG4gIGZvcndhcmRUb1ZvaWNlTWFpbDogYm9vbGVhbiB8IG51bGw7XG4gIGRlc3RpbmF0aW9uOiBzdHJpbmcgfCBudWxsO1xuICBjYWxsaW5nU2VhcmNoU3BhY2U6IHN0cmluZyB8IG51bGw7XG4gIGR1cmF0aW9uOiBudW1iZXIgfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21BYXJTZXR0aW5ncyB7XG4gIGFhckRlc3RpbmF0aW9uTWFzazogc3RyaW5nIHwgbnVsbDtcbiAgYWFyR3JvdXA6IHN0cmluZyB8IG51bGw7XG4gIGFhclZvaWNlTWFpbEVuYWJsZWQ6IGJvb2xlYW47XG4gIGFhcktlZXBDYWxsSGlzdG9yeTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDdWNtUGFya01vbml0b3Jpbmcge1xuICBkZXN0aW5hdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbGluZ1NlYXJjaFNwYWNlOiBzdHJpbmcgfCBudWxsO1xuICB2b2ljZU1haWw6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbURpZFBhdHRlcm4ge1xuICBwa2lkOiBzdHJpbmcgfCBudWxsO1xuICBwYXR0ZXJuOiBzdHJpbmcgfCBudWxsO1xuICBuZXdQYXR0ZXJuOiBzdHJpbmcgfCBudWxsO1xuICBjYWxsZWRQYXJ0eVRyYW5zZm9ybWF0aW9uTWFzazogc3RyaW5nIHwgbnVsbDtcbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gIHVzZU9yaWdpbmF0b3JDc3M6IHVua25vd24gfCBudWxsO1xuICBjYWxsaW5nU2VhcmNoU3BhY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICByb3V0ZVBhcnRpdGlvbk5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG5ld1JvdXRlUGFydGl0aW9uTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgdXJnZW50UHJpb3JpdHk6IGJvb2xlYW47XG4gIG91dGdvaW5nQ2FsbHM6IHVua25vd24gfCBudWxsO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21MaW5lRGV0YWlscyB7XG4gIGRpcmVjdG9yeU51bWJlcjogV29ya3NwYWNlQXNzb2NpYXRlZERpcmVjdG9yeU51bWJlcjtcbiAgcGtpZDogc3RyaW5nIHwgbnVsbDtcbiAgZGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gIGVudGl0eUNoYW5nZVR5cGU6IHN0cmluZyB8IG51bGw7XG4gIGFsZXJ0aW5nTmFtZTogc3RyaW5nIHwgbnVsbDtcbiAgYXNjaWlBbGVydGluZ05hbWU6IHN0cmluZyB8IG51bGw7XG4gIGNhbGxpbmdTZWFyY2hTcGFjZTogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbEZvcndhcmRBbGw6IEN1Y21DYWxsRm9yd2FyZFNldHRpbmc7XG4gIGNhbGxGb3J3YXJkQWxsU2Vjb25kYXJ5Q1NTOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZEJ1c3lJbnRlcm5hbDogQ3VjbUNhbGxGb3J3YXJkU2V0dGluZztcbiAgY2FsbEZvcndhcmRCdXN5RXh0ZXJuYWw6IEN1Y21DYWxsRm9yd2FyZFNldHRpbmc7XG4gIGNhbGxGb3J3YXJkTm9BbnN3ZXJJbnRlcm5hbDogQ3VjbUNhbGxGb3J3YXJkU2V0dGluZztcbiAgY2FsbEZvcndhcmROb0Fuc3dlckV4dGVybmFsOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZE5vQ292ZXJhZ2VJbnRlcm5hbDogQ3VjbUNhbGxGb3J3YXJkU2V0dGluZztcbiAgY2FsbEZvcndhcmROb0NvdmVyYWdlRXh0ZXJuYWw6IEN1Y21DYWxsRm9yd2FyZFNldHRpbmc7XG4gIGNhbGxGb3J3YXJkT25DVElGYWlsdXJlOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZFVucmVnaXN0ZXJlZEludGVybmFsOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZFVucmVnaXN0ZXJlZEV4dGVybmFsOiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICBjYWxsRm9yd2FyZEFsdGVybmF0ZVBhcnR5OiBDdWNtQ2FsbEZvcndhcmRTZXR0aW5nO1xuICB2b2ljZU1haWxQcm9maWxlOiBzdHJpbmcgfCBudWxsO1xuICBub0Fuc3dlclJpbmdEdXJhdGlvbjogbnVtYmVyIHwgbnVsbDtcbiAgYXV0b0Fuc3dlcjogc3RyaW5nIHwgbnVsbDtcbiAgY2FsbFBpY2t1cEdyb3VwOiBzdHJpbmcgfCBudWxsO1xuICBhYXJTZXR0aW5nczogQ3VjbUFhclNldHRpbmdzO1xuICBwYXJrTW9uaXRvcmluZ0ludGVybmFsOiBDdWNtUGFya01vbml0b3Jpbmc7XG4gIHBhcmtNb25pdG9yaW5nRXh0ZXJuYWw6IEN1Y21QYXJrTW9uaXRvcmluZztcbiAgdXJnZW50UHJpb3JpdHk6IGJvb2xlYW47XG4gIGJsZlByZXNlbmNlR3JvdXA6IHN0cmluZyB8IG51bGw7XG4gIHVzZXJIb2xkTU9IQXVkaW9Tb3VyY2VJZDogc3RyaW5nIHwgbnVsbDtcbiAgdXNlckhvbGRNT0hBdWRpb1NvdXJjZU5hbWU6IHN0cmluZyB8IG51bGw7XG4gIG5ldHdvcmtNT0hBdWRpb1NvdXJjZUlkOiBzdHJpbmcgfCBudWxsO1xuICBuZXR3b3JrTU9IQXVkaW9Tb3VyY2VOYW1lOiBzdHJpbmcgfCBudWxsO1xuICByZWplY3RBbm9ueW1vdXNDYWxsOiBib29sZWFuO1xuICBlbnRlcnByaXNlQWx0TnVtOiB1bmtub3duIHwgbnVsbDtcbiAgZTE2NEFsdE51bTogdW5rbm93biB8IG51bGw7XG4gIGRpcmVjdG9yeVVyaXM6IHVua25vd25bXTtcbiAgbWxwcE5vQW5zd2VyUmluZ0R1cmF0aW9uOiBudW1iZXIgfCBudWxsO1xuICBjb25maWRlbnRpYWxBY2Nlc3NNb2RlOiB1bmtub3duIHwgbnVsbDtcbiAgY29uZmlkZW50aWFsQWNjZXNzTGV2ZWw6IHVua25vd24gfCBudWxsO1xuICBjb25maWRlbnRpYWxBY2Nlc3NMZXZlbE5hbWU6IHVua25vd24gfCBudWxsO1xuICBjYWxsQ29udHJvbEFnZW50UHJvZmlsZTogdW5rbm93biB8IG51bGw7XG4gIGhvbGRSZXZlcnNpb25SaW5nRHVyYXRpb246IG51bWJlciB8IG51bGw7XG4gIGhvbGRSZXZlcnNpb25Ob3RpZmljYXRpb25JbnRlcnZhbDogbnVtYmVyIHwgbnVsbDtcbiAgcGFydHlFbnRyYW5jZVRvbmU6IHN0cmluZyB8IG51bGw7XG4gIHBzdG5GYWlsb3Zlcjogc3RyaW5nIHwgbnVsbDtcbiAgbG9jYWxJZDogc3RyaW5nIHwgbnVsbDtcbiAgY3VzdG9tZXJJZDogbnVtYmVyO1xuICBjdWNtSWQ6IG51bWJlcjtcbiAgc2l0ZUlkOiBudW1iZXI7XG4gIHNpdGVOYW1lOiBzdHJpbmcgfCBudWxsO1xuICBsb2NhdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgbG9jYXRpb25OYW1lczogc3RyaW5nW107XG4gIHNlbGVjdGVkSW5kZXg6IG51bWJlcjtcbiAgZGlkUGF0dGVybnM6IEN1Y21EaWRQYXR0ZXJuW107XG4gIG1hcHBlZERpZHM6IHN0cmluZ1tdO1xuICBzZWxlY3RlZExpbmVzR2VuZXJhbFNldHRpbmdzOiB1bmtub3duW107XG4gIHNlbGVjdGVkTGluZXNBc3NvY2lhdGVkU2V0dGluZ3M6IHVua25vd25bXTtcbiAgc2VsZWN0ZWRMaW5lc011bHRpcGxlQ2FsbHM6IHVua25vd25bXTtcbiAgc2VsZWN0ZWRMaW5lc0NhbGxSZWNvcmRpbmdzOiB1bmtub3duW107XG4gIHNlbGVjdGVkTGluZXNBZGRpdGlvbmFsU2V0dGluZ3M6IHVua25vd25bXTtcbiAgc2VsZWN0ZWRMaW5lc0ZvcndhcmRDYWxsczogdW5rbm93bltdO1xuICBuZXdUb1VzZXI6IGJvb2xlYW47XG4gIHBsYXJEZXN0aW5hdGlvbk51bWJlcjogc3RyaW5nIHwgbnVsbDtcbiAgcHJlZml4RGlnaXRzOiBzdHJpbmcgfCBudWxsO1xuICBwbGFyRGVzY3JpcHRpb246IHN0cmluZyB8IG51bGw7XG4gIHBsYXJDc3M6IHN0cmluZyB8IG51bGw7XG4gIHBsYXJSb3V0ZVBhcnRpdGlvbjogc3RyaW5nIHwgbnVsbDtcbiAgcGxhckVuYWJsZWQ6IGJvb2xlYW47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbVdvcmtzcGFjZURldGFpbHNSZXNwb25zZSB7XG4gIGRldmljZTogQ3VjbURldmljZURldGFpbHM7XG4gIGxpbmVzOiBDdWNtTGluZURldGFpbHNbXTtcbiAgc2l0ZTogV29ya3NwYWNlU2l0ZSB8IG51bGw7XG4gIHdvcmtzcGFjZURldmljZXM6IFdvcmtzcGFjZURldmljZUFzc29jaWF0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ3VjbVNpdGVDdWNJbmZvIHtcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21TaXRlQ3VjbUluZm8ge1xuICBwbGF0Zm9ybVR5cGU6IHN0cmluZztcbiAgaWQ6IG51bWJlcjtcbiAgbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEN1Y21TaXRlUmVzcG9uc2Uge1xuICBpZDogbnVtYmVyO1xuICBuYW1lOiBzdHJpbmc7XG4gIHNob3J0TmFtZTogc3RyaW5nO1xuICBhZGRyZXNzMjogc3RyaW5nIHwgbnVsbDtcbiAgYWRkcmVzczM6IHN0cmluZyB8IG51bGw7XG4gIGNvdW50cnk6IHN0cmluZyB8IG51bGw7XG4gIGN1YzogQ3VjbVNpdGVDdWNJbmZvIHwgbnVsbDtcbiAgY3VjbTogQ3VjbVNpdGVDdWNtSW5mbyB8IG51bGw7XG4gIGhhc0FjdGl2YXRlZDogYm9vbGVhbjtcbiAgaHFTdGF0dXM6IGJvb2xlYW47XG4gIGlzQWZ0ZXJUdHU6IGJvb2xlYW47XG4gIGxvY2F0aW9uTmFtZTogc3RyaW5nO1xuICBwcmVmZXRjaERuOiBib29sZWFuO1xuICBzZXR0aW5nczogdW5rbm93bltdO1xuICBzdGF0ZTogc3RyaW5nIHwgbnVsbDtcbiAgdGltZXpvbmU6IHN0cmluZyB8IG51bGw7XG59XG4iXX0=
@@ -160,8 +160,12 @@ const API = {
160
160
  GET_ALL: "/api/webex/configuration/customers/:customerId/siteslocations",
161
161
  },
162
162
  SITE_MIGRATION: {
163
- MIGRATE_SITE: "/api/migration/webex/sites/:siteId/migrate",
163
+ MIGRATE_SITE: "/api/migration/WEBEX/sites/:siteId/migrate",
164
164
  BATCH_STATUS: "/api/migration/webex/customer/:customerId/batchesstatus",
165
+ // Pre-existing migration batches for the customer, matched to a site by
166
+ // siteId. Reachable through the same exHost/webex gateway as everything
167
+ // else in this service — no separate host needed.
168
+ GET_BATCH_SITES: "/api/e2emigration/batch/:customerId/Sites",
165
169
  },
166
170
  };
167
171
 
@@ -208,9 +212,13 @@ class LocationsService {
208
212
  const url = API.SITES_LOCATIONS.GET_ALL.replace(':customerId', String(customerId));
209
213
  return this.apiService.fetch(url).pipe(map((response) => (Array.isArray(response) ? response : []).map(toSiteLocation)));
210
214
  }
211
- migrateSite(siteId) {
215
+ migrateSite(siteId, batchId) {
212
216
  const url = API.SITE_MIGRATION.MIGRATE_SITE.replace(':siteId', String(siteId));
213
- return this.apiService.post(url, {}, { batchId: '' });
217
+ return this.apiService.post(url, {}, batchId != null ? { batchId } : {});
218
+ }
219
+ getBatchSites(customerId) {
220
+ const url = API.SITE_MIGRATION.GET_BATCH_SITES.replace(':customerId', String(customerId));
221
+ return this.apiService.fetch(url).pipe(map((response) => (Array.isArray(response) ? response : [])));
214
222
  }
215
223
  getMigrationBatchStatuses(customerId, batchIds) {
216
224
  const url = API.SITE_MIGRATION.BATCH_STATUS.replace(':customerId', String(customerId));
@@ -270,6 +278,7 @@ class LocationsComponent {
270
278
  ? new Intl.DisplayNames(['en'], { type: 'region' })
271
279
  : null;
272
280
  this.migrationIntervals = new Map();
281
+ this.batchIdBySiteId = new Map();
273
282
  // Same icon set as users-list's "Provisioning Type" column (assets/icons/webex.svg,
274
283
  // local_24.svg, di_cloud_24.svg).
275
284
  this.provisioningTypeIcons = {
@@ -282,6 +291,7 @@ class LocationsComponent {
282
291
  this.apiService.token = this.token;
283
292
  this.apiService.apiUrl = this.exHost + '/webex';
284
293
  this.loadSiteLocations();
294
+ this.loadBatchSites();
285
295
  }
286
296
  ngOnDestroy() {
287
297
  this.migrationIntervals.forEach(interval => clearInterval(interval));
@@ -291,7 +301,7 @@ class LocationsComponent {
291
301
  this.isLoading = true;
292
302
  this.locationsService.fetchSiteLocations(this.customerId).subscribe({
293
303
  next: (siteLocations) => {
294
- this.siteLocations = siteLocations;
304
+ this.siteLocations = this.applyBatchIds(siteLocations);
295
305
  this.isLoading = false;
296
306
  },
297
307
  error: () => {
@@ -299,6 +309,19 @@ class LocationsComponent {
299
309
  },
300
310
  });
301
311
  }
312
+ // Runs independently of loadSiteLocations() — whichever resolves second
313
+ // re-applies the merge, so batchId ends up set regardless of load order.
314
+ loadBatchSites() {
315
+ this.locationsService.getBatchSites(this.customerId).subscribe({
316
+ next: (batches) => {
317
+ this.batchIdBySiteId = new Map(batches.map(batch => [batch.siteId, batch.id]));
318
+ this.siteLocations = this.applyBatchIds(this.siteLocations);
319
+ },
320
+ });
321
+ }
322
+ applyBatchIds(rows) {
323
+ return rows.map(row => (Object.assign(Object.assign({}, row), { batchId: this.batchIdBySiteId.get(row.site.id) })));
324
+ }
302
325
  get pendingLocations() {
303
326
  return this.siteLocations.filter(row => { var _a; return !!((_a = row.location) === null || _a === void 0 ? void 0 : _a.hasPendingActions); });
304
327
  }
@@ -456,7 +479,7 @@ class LocationsComponent {
456
479
  migrateSite(row) {
457
480
  const siteId = row.site.id;
458
481
  row.migrationStatus = 'IN_PROGRESS';
459
- this.locationsService.migrateSite(siteId).subscribe({
482
+ this.locationsService.migrateSite(siteId, row.batchId).subscribe({
460
483
  next: (batchId) => {
461
484
  if (batchId) {
462
485
  this.pollMigrationStatus(siteId, batchId);
@@ -518,7 +541,7 @@ class LocationsComponent {
518
541
  // concurrent poll's next tick doesn't land on a row that briefly lost it.
519
542
  mergeSiteLocations(fresh) {
520
543
  const inProgressSiteIds = new Set(this.siteLocations.filter(row => row.migrationStatus === 'IN_PROGRESS').map(row => row.site.id));
521
- this.siteLocations = fresh.map(row => inProgressSiteIds.has(row.site.id) && !row.location
544
+ this.siteLocations = this.applyBatchIds(fresh).map(row => inProgressSiteIds.has(row.site.id) && !row.location
522
545
  ? Object.assign(Object.assign({}, row), { migrationStatus: 'IN_PROGRESS' }) : row);
523
546
  }
524
547
  clearMigrationInterval(siteId) {
@@ -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';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@NgModule({\n imports: [\n MatButtonModule,\n MatDialogModule,\n MatIconModule,\n MatMenuModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n ],\n exports: [\n MatButtonModule,\n MatDialogModule,\n MatIconModule,\n MatMenuModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n ]\n})\nexport class MaterialModule { }\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nexport interface LocationConfirmDialogData {\n title: string;\n message: string;\n confirmButtonText: string;\n}\n\n@Component({\n selector: 'tk-location-confirm-dialog',\n templateUrl: './location-confirm-dialog.component.html',\n styleUrls: ['./location-confirm-dialog.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class LocationConfirmDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<LocationConfirmDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: LocationConfirmDialogData,\n ) { }\n\n onClose(result: boolean): void {\n this.dialogRef.close(result);\n }\n}\n","<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\n Cancel\n </button>\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\n {{ data.confirmButtonText }}\n </button>\n </div>\n</div>\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]) {\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 SITES_LOCATIONS: {\n // Returns every site for the customer paired with its mapped Control Hub\n // location (or null when the site hasn't been migrated yet) — this is the\n // source of truth for siteId, superseding the old LOCATIONS.GET_ALL\n // endpoint, which only listed already-mapped locations and exposed no siteId.\n GET_ALL: \"/api/webex/configuration/customers/:customerId/siteslocations\",\n },\n SITE_MIGRATION: {\n MIGRATE_SITE: \"/api/migration/webex/sites/:siteId/migrate\",\n BATCH_STATUS: \"/api/migration/webex/customer/:customerId/batchesstatus\",\n },\n};\n","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 { Location, LocationAddress, Site, SiteLocation } from '../types/location';\n\nexport interface SiteBatchStatus {\n id: number;\n status: string;\n progress: number;\n migErrorsCount: string;\n}\n\nfunction toLocationAddress(raw: any): LocationAddress {\n return {\n address1: raw?.address1 || '',\n address2: raw?.address2 || '',\n city: raw?.city || '',\n state: raw?.state || '',\n postalCode: raw?.postalCode || '',\n country: raw?.country || '',\n countryName: raw?.countryName || raw?.country || '',\n };\n}\n\nfunction toLocation(raw: any): Location {\n return {\n id: String(raw?.id ?? ''),\n name: raw?.name || '',\n timeZone: raw?.timeZone || '',\n address: toLocationAddress(raw?.address),\n // Every location returned by this endpoint is a Webex Control Hub location.\n provisioningType: raw?.provisioningType || 'WEBEX',\n hasPendingActions: !!raw?.hasPendingActions,\n };\n}\n\nfunction toSite(raw: any): Site {\n return {\n id: Number(raw?.id),\n name: raw?.name || '',\n };\n}\n\nfunction toSiteLocation(raw: any): SiteLocation {\n return {\n site: toSite(raw?.site),\n location: raw?.location ? toLocation(raw.location) : null,\n };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocationsService {\n constructor(private apiService: APIService) { }\n\n fetchSiteLocations(customerId: number): Observable<SiteLocation[]> {\n const url = API.SITES_LOCATIONS.GET_ALL.replace(':customerId', String(customerId));\n return this.apiService.fetch(url).pipe(\n map((response: any) => (Array.isArray(response) ? response : []).map(toSiteLocation)),\n );\n }\n\n migrateSite(siteId: number): Observable<number> {\n const url = API.SITE_MIGRATION.MIGRATE_SITE.replace(':siteId', String(siteId));\n return this.apiService.post(url, {}, { batchId: '' });\n }\n\n getMigrationBatchStatuses(customerId: number, batchIds: number[]): Observable<SiteBatchStatus[]> {\n const url = API.SITE_MIGRATION.BATCH_STATUS.replace(':customerId', String(customerId));\n return this.apiService.post(url, batchIds);\n }\n}\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 { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { APIService } from './services/api.service';\nimport { LocationsService, SiteBatchStatus } from './services/locations.service';\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\nimport { LocationMigrationStatus, SiteLocation } from './types/location';\n\nconst MIGRATION_POLL_INTERVAL_MS = 10000;\n\ntype LocationsSortDirection = 'asc' | 'desc';\ntype MappedFilterValue = '' | 'mapped' | 'unmapped';\n\nconst PAGE_SIZE_OPTIONS = [10, 25, 50];\n\n@Component({\n selector: 'tk-locations',\n templateUrl: './locations.component.html',\n styleUrls: ['./locations.component.scss'],\n})\nexport class LocationsComponent implements OnInit, OnDestroy {\n @Input() exHost!: string;\n @Input() token!: string;\n @Input() customerId!: number;\n\n @Output() openLocation = new EventEmitter<string>();\n @Output() editLocation = new EventEmitter<string>();\n @Output() removeLocation = new EventEmitter<string>();\n @Output() addLocation = new EventEmitter<void>();\n @Output() importLocations = new EventEmitter<void>();\n\n // Every site for the customer, each paired with its mapped Control Hub\n // location or null — the siteslocations API returns the full, unpaged list,\n // so search/filter/sort/pagination below all run client-side over this.\n siteLocations: SiteLocation[] = [];\n isLoading = false;\n\n searchTerm = '';\n sortDirection: LocationsSortDirection = 'asc';\n isBannerDismissed = false;\n\n readonly pageSizeOptions = PAGE_SIZE_OPTIONS;\n pageIndex = 0;\n pageSize = PAGE_SIZE_OPTIONS[0];\n\n isFilterPanelOpen = false;\n filters = {\n country: '',\n pendingActions: '',\n mapped: '' as MappedFilterValue,\n };\n\n private readonly countryDisplayNames = typeof Intl !== 'undefined' && 'DisplayNames' in Intl\n ? new Intl.DisplayNames(['en'], { type: 'region' })\n : null;\n\n private readonly migrationIntervals = new Map<number, ReturnType<typeof setInterval>>();\n\n constructor(\n private apiService: APIService,\n private locationsService: LocationsService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.apiService.token = this.token;\n this.apiService.apiUrl = this.exHost + '/webex';\n this.loadSiteLocations();\n }\n\n ngOnDestroy(): void {\n this.migrationIntervals.forEach(interval => clearInterval(interval));\n this.migrationIntervals.clear();\n }\n\n private loadSiteLocations(): void {\n this.isLoading = true;\n this.locationsService.fetchSiteLocations(this.customerId).subscribe({\n next: (siteLocations) => {\n this.siteLocations = siteLocations;\n this.isLoading = false;\n },\n error: () => {\n this.isLoading = false;\n },\n });\n }\n\n get pendingLocations(): SiteLocation[] {\n return this.siteLocations.filter(row => !!row.location?.hasPendingActions);\n }\n\n get showPendingBanner(): boolean {\n return !this.isBannerDismissed && this.pendingLocations.length > 0;\n }\n\n get countries(): string[] {\n return Array.from(new Set(this.siteLocations.map(row => this.countryLabel(row)).filter(Boolean))).sort();\n }\n\n get filteredRows(): SiteLocation[] {\n const term = this.searchTerm.trim().toLowerCase();\n const filtered = this.siteLocations.filter(row =>\n (!term ||\n this.rowName(row).toLowerCase().includes(term) ||\n this.addressLine(row).toLowerCase().includes(term) ||\n (row.location?.address?.city || '').toLowerCase().includes(term) ||\n (row.location?.address?.state || '').toLowerCase().includes(term) ||\n this.countryLabel(row).toLowerCase().includes(term)) &&\n (!this.filters.country || this.countryLabel(row) === this.filters.country) &&\n (!this.filters.pendingActions || String(!!row.location?.hasPendingActions) === this.filters.pendingActions) &&\n (!this.filters.mapped || (this.filters.mapped === 'mapped' ? this.isMapped(row) : !this.isMapped(row)))\n );\n\n return filtered.sort((a, b) => {\n const comparison = this.rowName(a).localeCompare(this.rowName(b));\n return this.sortDirection === 'asc' ? comparison : -comparison;\n });\n }\n\n get pagedRows(): SiteLocation[] {\n const start = this.pageIndex * this.pageSize;\n return this.filteredRows.slice(start, start + this.pageSize);\n }\n\n get totalElements(): number {\n return this.filteredRows.length;\n }\n\n get pageRangeLabel(): string {\n if (!this.totalElements) {\n return '0 of 0';\n }\n const start = this.pageIndex * this.pageSize + 1;\n const end = Math.min(this.totalElements, start + this.pagedRows.length - 1);\n return `${start} – ${end} of ${this.totalElements}`;\n }\n\n get hasPreviousPage(): boolean {\n return this.pageIndex > 0;\n }\n\n get hasNextPage(): boolean {\n return (this.pageIndex + 1) * this.pageSize < this.totalElements;\n }\n\n rowName(row: SiteLocation): string {\n return row.site.name;\n }\n\n isMapped(row: SiteLocation): boolean {\n return !!row.location;\n }\n\n addressLine(row: SiteLocation): string {\n if (!row.location) {\n return '';\n }\n return [row.location.address.address1, row.location.address.address2, row.location.address.city]\n .filter(Boolean)\n .join(' - ');\n }\n\n countryLabel(row: SiteLocation): string {\n if (!row.location) {\n return '';\n }\n const { countryName, country } = row.location.address;\n if (countryName) {\n return countryName;\n }\n if (!country) {\n return '';\n }\n return this.countryDisplayNames?.of(country) || country;\n }\n\n // Same icon set as users-list's \"Provisioning Type\" column (assets/icons/webex.svg,\n // local_24.svg, di_cloud_24.svg).\n private readonly provisioningTypeIcons: Record<string, { src: string; tooltip: string }> = {\n WEBEX: { src: 'assets/icons/webex.svg', tooltip: 'Webex Calling' },\n UCM: { src: 'assets/icons/local_24.svg', tooltip: 'UCM' },\n DI: { src: 'assets/icons/di_cloud_24.svg', tooltip: 'Webex Calling DI' },\n };\n\n provisioningTypeIcon(row: SiteLocation): { src: string; tooltip: string } | null {\n if (!row.location) {\n return null;\n }\n return this.provisioningTypeIcons[row.location.provisioningType] || null;\n }\n\n onSearchInputChange(event: Event): void {\n this.searchTerm = (event.target as HTMLInputElement).value;\n this.pageIndex = 0;\n }\n\n toggleNameSort(): void {\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n }\n\n dismissBanner(): void {\n this.isBannerDismissed = true;\n }\n\n toggleFilterPanel(): void {\n this.isFilterPanelOpen = !this.isFilterPanelOpen;\n }\n\n closeFilterPanel(): void {\n this.isFilterPanelOpen = false;\n }\n\n onFilterChange(): void {\n this.pageIndex = 0;\n }\n\n clearFilters(): void {\n this.filters = { country: '', pendingActions: '', mapped: '' };\n this.pageIndex = 0;\n }\n\n onPageSizeChange(event: Event): void {\n this.pageSize = Number((event.target as HTMLSelectElement).value);\n this.pageIndex = 0;\n }\n\n goToPreviousPage(): void {\n if (this.hasPreviousPage) {\n this.pageIndex--;\n }\n }\n\n goToNextPage(): void {\n if (this.hasNextPage) {\n this.pageIndex++;\n }\n }\n\n onOpenLocation(row: SiteLocation): void {\n if (row.location) {\n this.openLocation.emit(row.location.id);\n }\n }\n\n onEditLocation(row: SiteLocation): void {\n if (row.location) {\n this.editLocation.emit(row.location.id);\n }\n }\n\n onRemoveLocation(row: SiteLocation): void {\n if (row.location) {\n this.removeLocation.emit(row.location.id);\n }\n }\n\n canMigrateSite(row: SiteLocation): boolean {\n return row.migrationStatus !== 'IN_PROGRESS';\n }\n\n onMigrateSite(row: SiteLocation): void {\n const dialogRef = this.dialog.open(LocationConfirmDialogComponent, {\n panelClass: 'tk-location-confirm-dialog-panel',\n backdropClass: 'tk-location-confirm-dialog-backdrop',\n data: {\n title: `Migrate ${row.site.name}?`,\n message: `<p>Are you sure you want to migrate <em>${row.site.name}</em> site?</p>`,\n confirmButtonText: 'Yes, migrate',\n },\n });\n\n dialogRef.afterClosed().subscribe(confirmed => {\n if (confirmed) {\n this.migrateSite(row);\n }\n });\n }\n\n private migrateSite(row: SiteLocation): void {\n const siteId = row.site.id;\n row.migrationStatus = 'IN_PROGRESS';\n this.locationsService.migrateSite(siteId).subscribe({\n next: (batchId: number) => {\n if (batchId) {\n this.pollMigrationStatus(siteId, batchId);\n } else {\n this.onMigrationComplete(siteId);\n }\n },\n error: () => {\n this.setMigrationStatus(siteId, 'FAILED');\n },\n });\n }\n\n private pollMigrationStatus(siteId: number, batchId: number): void {\n this.clearMigrationInterval(siteId);\n\n const poll = (): void => {\n this.locationsService.getMigrationBatchStatuses(this.customerId, [batchId]).subscribe({\n next: (statuses: SiteBatchStatus[]) => {\n const status = statuses.find(item => item.id === batchId);\n if (!status || status.status === 'In Progress') {\n return;\n }\n this.clearMigrationInterval(siteId);\n if (status.status === 'Completed') {\n this.onMigrationComplete(siteId);\n } else {\n this.setMigrationStatus(siteId, 'FAILED');\n }\n },\n error: () => {\n this.clearMigrationInterval(siteId);\n this.setMigrationStatus(siteId, 'FAILED');\n },\n });\n };\n\n poll();\n this.migrationIntervals.set(siteId, setInterval(poll, MIGRATION_POLL_INTERVAL_MS));\n }\n\n // Looks the row up by siteId (rather than closing over a row reference) so\n // status updates still land on whatever object is currently in\n // siteLocations, even after loadSiteLocations()/mergeSiteLocations() below\n // have replaced the array with freshly-fetched row objects.\n private setMigrationStatus(siteId: number, status: LocationMigrationStatus): void {\n const row = this.siteLocations.find(item => item.site.id === siteId);\n if (row) {\n row.migrationStatus = status;\n }\n }\n\n // The migrate/batch-status APIs don't return the newly created location's\n // details, so re-fetch to pick up its mapping, address, timezone, etc.\n private onMigrationComplete(siteId: number): void {\n this.setMigrationStatus(siteId, 'COMPLETED');\n this.locationsService.fetchSiteLocations(this.customerId).subscribe({\n next: (fresh) => this.mergeSiteLocations(fresh),\n });\n }\n\n // Preserves the IN_PROGRESS status of any other site still migrating so a\n // concurrent poll's next tick doesn't land on a row that briefly lost it.\n private mergeSiteLocations(fresh: SiteLocation[]): void {\n const inProgressSiteIds = new Set(\n this.siteLocations.filter(row => row.migrationStatus === 'IN_PROGRESS').map(row => row.site.id)\n );\n this.siteLocations = fresh.map(row =>\n inProgressSiteIds.has(row.site.id) && !row.location\n ? { ...row, migrationStatus: 'IN_PROGRESS' as const }\n : row\n );\n }\n\n private clearMigrationInterval(siteId: number): void {\n const interval = this.migrationIntervals.get(siteId);\n if (interval) {\n clearInterval(interval);\n this.migrationIntervals.delete(siteId);\n }\n }\n\n onAddLocation(): void {\n this.addLocation.emit();\n }\n\n onImportLocations(): void {\n this.importLocations.emit();\n }\n\n exportLocations(): void {\n const rows = this.filteredRows.map(row => [\n row.site.name,\n this.addressLine(row),\n this.countryLabel(row),\n this.isMapped(row) ? 'Mapped' : 'Not mapped',\n ]);\n const csvLines = [\n ['Location Name', 'Address', 'Country/Region', 'Mapping Status'],\n ...rows,\n ].map(row => row.map(cell => `\"${String(cell).replace(/\"/g, '\"\"')}\"`).join(','));\n\n const blob = new Blob([csvLines.join('\\n')], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = 'locations.csv';\n link.click();\n URL.revokeObjectURL(url);\n }\n}\n","<div class=\"tk-locations\">\n <app-loader *ngIf=\"isLoading\"></app-loader>\n\n <div class=\"tk-locations__view-toggle\">\n <button type=\"button\" class=\"tk-locations__view-button tk-locations__view-button--active\">\n <mat-icon class=\"tk-locations__view-icon\">menu</mat-icon>\n List\n </button>\n <button type=\"button\" class=\"tk-locations__view-button\" disabled title=\"Map view coming soon\">\n <mat-icon class=\"tk-locations__view-icon\">place</mat-icon>\n Map\n </button>\n </div>\n\n <div class=\"tk-locations__banner\" *ngIf=\"showPendingBanner\">\n <mat-icon class=\"tk-locations__banner-icon\">warning</mat-icon>\n <span class=\"tk-locations__banner-text\">\n View location(s) with pending action items to resume your calling service in {{ pendingLocations.length }} or more locations.\n </span>\n <button type=\"button\" class=\"tk-locations__banner-close\" aria-label=\"Dismiss\" (click)=\"dismissBanner()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <div class=\"tk-locations__toolbar\">\n <div style=\"position: relative; width: fit-content; min-width: 200px\">\n <input\n [value]=\"searchTerm\"\n class=\"blue-input\"\n (input)=\"onSearchInputChange($event)\"\n type=\"text\"\n placeholder=\"Search by name, city, state, country\"\n style=\"\n width: 100%;\n height: 34px;\n border-radius: 0.5rem;\n font-size: 16px;\n padding: 6px 12px 6px 44px;\n border: 1px solid #00000080;\n background: #fff;\n color: #222;\n outline: none;\n box-sizing: border-box;\n min-width: 280px;\n \"\n />\n <span\n style=\"\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: #757575;\n font-size: 18px;\n font-weight: normal;\n pointer-events: none;\n \"\n >\n <i\n class=\"material-icons\"\n style=\"font-size: 18px; font-weight: normal\"\n >search</i\n >\n </span>\n </div>\n\n <button type=\"button\" class=\"tk-locations__filter-button\" (click)=\"toggleFilterPanel()\">\n <img class=\"tk-locations__filter-icon\" src=\"assets/icons/filter-regular.svg\" alt=\"filter_list\" title=\"filter_list\">\n Filter\n </button>\n\n <span class=\"tk-locations__count\">{{ totalElements }} locations</span>\n\n <button type=\"button\" class=\"tk-locations__download-button\" aria-label=\"Download locations\" title=\"Download locations\" (click)=\"exportLocations()\">\n <mat-icon>file_download</mat-icon>\n </button>\n\n <button type=\"button\" class=\"tk-locations__manage-button\" [matMenuTriggerFor]=\"manageMenu\">\n Manage locations\n <mat-icon class=\"tk-locations__manage-chevron\">expand_more</mat-icon>\n </button>\n <mat-menu #manageMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item type=\"button\" (click)=\"onAddLocation()\">Add location</button>\n <button mat-menu-item type=\"button\" (click)=\"onImportLocations()\">Import locations</button>\n </mat-menu>\n </div>\n\n <table class=\"tk-locations__table\">\n <thead>\n <tr>\n <th (click)=\"toggleNameSort()\">\n Location Name\n <mat-icon class=\"tk-locations__sort-icon\">{{ sortDirection === 'asc' ? 'arrow_upward' : 'arrow_downward' }}</mat-icon>\n </th>\n <th>Address</th>\n <th>Country/Region</th>\n <th>Mapping</th>\n <th>Provisioning Type</th>\n <th class=\"tk-locations__actions-col\"></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of pagedRows\" (click)=\"onOpenLocation(row)\">\n <td class=\"tk-locations__name-cell\">\n <a href=\"javascript:void(0)\" class=\"tk-locations__name-link\" (click)=\"$event.stopPropagation(); onOpenLocation(row)\">{{ row.site.name }}</a>\n </td>\n <td>{{ addressLine(row) || '—' }}</td>\n <td>{{ countryLabel(row) || '—' }}</td>\n <td>\n <span class=\"tk-locations__mapping-badge\" [class.tk-locations__mapping-badge--mapped]=\"isMapped(row)\">\n {{ isMapped(row) ? 'Mapped' : 'Not mapped' }}\n </span>\n </td>\n <td>\n <span class=\"tk-locations__icon-wrapper\" *ngIf=\"provisioningTypeIcon(row) as pt; else noProvisioningType\">\n <img [src]=\"pt.src\" [matTooltip]=\"pt.tooltip\" matTooltipPosition=\"right\" width=\"20\" alt=\"\">\n </span>\n <ng-template #noProvisioningType>—</ng-template>\n </td>\n <td class=\"tk-locations__actions-col\">\n <mat-progress-spinner\n *ngIf=\"row.migrationStatus === 'IN_PROGRESS'\"\n class=\"tk-locations__row-action-spinner\"\n [diameter]=\"20\"\n strokeWidth=\"2\"\n mode=\"indeterminate\"\n matTooltip=\"Migrating site…\">\n </mat-progress-spinner>\n <button\n *ngIf=\"row.migrationStatus !== 'IN_PROGRESS'\"\n mat-icon-button\n class=\"tk-locations__row-action-button\"\n [matMenuTriggerFor]=\"rowMenu\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Open location actions\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #rowMenu=\"matMenu\" yPosition=\"below\">\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onOpenLocation(row)\">View details</button>\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onEditLocation(row)\">Edit location</button>\n <button\n *ngIf=\"canMigrateSite(row)\"\n mat-menu-item\n type=\"button\"\n (click)=\"onMigrateSite(row)\">Migrate site</button>\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onRemoveLocation(row)\">Remove location</button>\n </mat-menu>\n </td>\n </tr>\n <tr *ngIf=\"!pagedRows.length\">\n <td colspan=\"6\" class=\"tk-locations__empty\">No locations match your search.</td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"tk-locations__footer\">\n <div class=\"tk-locations__rows-per-page\">\n <label for=\"tk-locations-page-size\">Rows per page:</label>\n <select id=\"tk-locations-page-size\" class=\"tk-locations__rows-per-page-select\" [ngModel]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">{{ size }}</option>\n </select>\n </div>\n <span class=\"tk-locations__footer-text\">{{ pageRangeLabel }}</span>\n <div class=\"tk-locations__pagination\">\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasPreviousPage\" (click)=\"goToPreviousPage()\" aria-label=\"Previous page\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasNextPage\" (click)=\"goToNextPage()\" aria-label=\"Next page\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n\n <div\n class=\"tk-locations__filter-backdrop\"\n *ngIf=\"isFilterPanelOpen\"\n (click)=\"closeFilterPanel()\">\n </div>\n\n <aside class=\"tk-locations__filter-panel\" [class.tk-locations__filter-panel--open]=\"isFilterPanelOpen\">\n <div class=\"tk-locations__filter-panel-header\">\n <h3 class=\"tk-locations__filter-panel-title\">Filter locations</h3>\n <button\n type=\"button\"\n class=\"tk-locations__filter-panel-close\"\n aria-label=\"Close filter panel\"\n (click)=\"closeFilterPanel()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <div class=\"tk-locations__filter-panel-body\">\n <div class=\"tk-locations__filter-field\">\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-mapped\">Mapping</label>\n <div class=\"tk-locations__filter-select-wrap\">\n <select id=\"tk-locations-filter-mapped\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.mapped\" (change)=\"onFilterChange()\">\n <option value=\"\">All</option>\n <option value=\"mapped\">Mapped</option>\n <option value=\"unmapped\">Not mapped</option>\n </select>\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\n </div>\n </div>\n\n <div class=\"tk-locations__filter-field\">\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-country\">Country/Region</label>\n <div class=\"tk-locations__filter-select-wrap\">\n <select id=\"tk-locations-filter-country\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.country\" (change)=\"onFilterChange()\">\n <option value=\"\">All countries</option>\n <option *ngFor=\"let country of countries\" [value]=\"country\">{{ country }}</option>\n </select>\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\n </div>\n </div>\n\n <div class=\"tk-locations__filter-field\">\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-pending\">Pending action items</label>\n <div class=\"tk-locations__filter-select-wrap\">\n <select id=\"tk-locations-filter-pending\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.pendingActions\" (change)=\"onFilterChange()\">\n <option value=\"\">All</option>\n <option value=\"true\">Yes</option>\n <option value=\"false\">No</option>\n </select>\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\n </div>\n </div>\n </div>\n\n <div class=\"tk-locations__filter-panel-footer\">\n <button type=\"button\" class=\"tk-locations__filter-clear\" (click)=\"clearFilters()\">Clear all</button>\n <button type=\"button\" class=\"tk-locations__filter-done\" (click)=\"closeFilterPanel()\">Done</button>\n </div>\n </aside>\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 { LocationsComponent } from './locations.component';\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\n\n@NgModule({\n declarations: [\n LocationsComponent,\n LocationConfirmDialogComponent,\n AppLoaderComponent,\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n FormsModule,\n MaterialModule,\n ],\n exports: [\n LocationsComponent,\n ],\n})\nexport class LocationsModule { }\n","/*\n * Public API Surface of @tuki-io/tuki-widgets\n */\n\n// Widget Modules\nexport * from './src/locations.module';\n\n// Components\nexport * from './src/locations.component';\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';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatTooltipModule } from '@angular/material/tooltip';\n\n@NgModule({\n imports: [\n MatButtonModule,\n MatDialogModule,\n MatIconModule,\n MatMenuModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n ],\n exports: [\n MatButtonModule,\n MatDialogModule,\n MatIconModule,\n MatMenuModule,\n MatProgressSpinnerModule,\n MatTooltipModule,\n ]\n})\nexport class MaterialModule { }\n","import { Component, Inject, ViewEncapsulation } from '@angular/core';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\n\nexport interface LocationConfirmDialogData {\n title: string;\n message: string;\n confirmButtonText: string;\n}\n\n@Component({\n selector: 'tk-location-confirm-dialog',\n templateUrl: './location-confirm-dialog.component.html',\n styleUrls: ['./location-confirm-dialog.component.scss'],\n encapsulation: ViewEncapsulation.None,\n})\nexport class LocationConfirmDialogComponent {\n constructor(\n public dialogRef: MatDialogRef<LocationConfirmDialogComponent>,\n @Inject(MAT_DIALOG_DATA) public data: LocationConfirmDialogData,\n ) { }\n\n onClose(result: boolean): void {\n this.dialogRef.close(result);\n }\n}\n","<div class=\"tk-location-confirm-dialog\" role=\"dialog\" aria-labelledby=\"tk-location-confirm-dialog-title\">\n <h3 id=\"tk-location-confirm-dialog-title\" class=\"tk-location-confirm-dialog__title\">{{ data.title }}</h3>\n <div mat-dialog-content class=\"tk-location-confirm-dialog__content\" [innerHTML]=\"data.message\"></div>\n <div mat-dialog-actions class=\"tk-location-confirm-dialog__actions\">\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--cancel\" (click)=\"onClose(false)\">\n Cancel\n </button>\n <button type=\"button\" class=\"tk-location-confirm-dialog__button tk-location-confirm-dialog__button--confirm\" (click)=\"onClose(true)\">\n {{ data.confirmButtonText }}\n </button>\n </div>\n</div>\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]) {\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 SITES_LOCATIONS: {\n // Returns every site for the customer paired with its mapped Control Hub\n // location (or null when the site hasn't been migrated yet) — this is the\n // source of truth for siteId, superseding the old LOCATIONS.GET_ALL\n // endpoint, which only listed already-mapped locations and exposed no siteId.\n GET_ALL: \"/api/webex/configuration/customers/:customerId/siteslocations\",\n },\n SITE_MIGRATION: {\n MIGRATE_SITE: \"/api/migration/WEBEX/sites/:siteId/migrate\",\n BATCH_STATUS: \"/api/migration/webex/customer/:customerId/batchesstatus\",\n // Pre-existing migration batches for the customer, matched to a site by\n // siteId. Reachable through the same exHost/webex gateway as everything\n // else in this service — no separate host needed.\n GET_BATCH_SITES: \"/api/e2emigration/batch/:customerId/Sites\",\n },\n};\n","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 { Location, LocationAddress, Site, SiteLocation } from '../types/location';\n\nexport interface SiteBatchStatus {\n id: number;\n status: string;\n progress: number;\n migErrorsCount: string;\n}\n\n// Minimal shape of the site-batch entries from GET_BATCH_SITES — only the\n// fields needed to match a batch to a site.\nexport interface SiteMigrationBatch {\n id: number;\n siteId: number;\n}\n\nfunction toLocationAddress(raw: any): LocationAddress {\n return {\n address1: raw?.address1 || '',\n address2: raw?.address2 || '',\n city: raw?.city || '',\n state: raw?.state || '',\n postalCode: raw?.postalCode || '',\n country: raw?.country || '',\n countryName: raw?.countryName || raw?.country || '',\n };\n}\n\nfunction toLocation(raw: any): Location {\n return {\n id: String(raw?.id ?? ''),\n name: raw?.name || '',\n timeZone: raw?.timeZone || '',\n address: toLocationAddress(raw?.address),\n // Every location returned by this endpoint is a Webex Control Hub location.\n provisioningType: raw?.provisioningType || 'WEBEX',\n hasPendingActions: !!raw?.hasPendingActions,\n };\n}\n\nfunction toSite(raw: any): Site {\n return {\n id: Number(raw?.id),\n name: raw?.name || '',\n };\n}\n\nfunction toSiteLocation(raw: any): SiteLocation {\n return {\n site: toSite(raw?.site),\n location: raw?.location ? toLocation(raw.location) : null,\n };\n}\n\n@Injectable({\n providedIn: 'root'\n})\nexport class LocationsService {\n constructor(private apiService: APIService) { }\n\n fetchSiteLocations(customerId: number): Observable<SiteLocation[]> {\n const url = API.SITES_LOCATIONS.GET_ALL.replace(':customerId', String(customerId));\n return this.apiService.fetch(url).pipe(\n map((response: any) => (Array.isArray(response) ? response : []).map(toSiteLocation)),\n );\n }\n\n migrateSite(siteId: number, batchId?: number): Observable<number> {\n const url = API.SITE_MIGRATION.MIGRATE_SITE.replace(':siteId', String(siteId));\n return this.apiService.post(url, {}, batchId != null ? { batchId } : {});\n }\n\n getBatchSites(customerId: number): Observable<SiteMigrationBatch[]> {\n const url = API.SITE_MIGRATION.GET_BATCH_SITES.replace(':customerId', String(customerId));\n return this.apiService.fetch(url).pipe(\n map((response: any) => (Array.isArray(response) ? response : [])),\n );\n }\n\n getMigrationBatchStatuses(customerId: number, batchIds: number[]): Observable<SiteBatchStatus[]> {\n const url = API.SITE_MIGRATION.BATCH_STATUS.replace(':customerId', String(customerId));\n return this.apiService.post(url, batchIds);\n }\n}\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 { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { MatDialog } from '@angular/material/dialog';\nimport { APIService } from './services/api.service';\nimport { LocationsService, SiteBatchStatus, SiteMigrationBatch } from './services/locations.service';\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\nimport { LocationMigrationStatus, SiteLocation } from './types/location';\n\nconst MIGRATION_POLL_INTERVAL_MS = 10000;\n\ntype LocationsSortDirection = 'asc' | 'desc';\ntype MappedFilterValue = '' | 'mapped' | 'unmapped';\n\nconst PAGE_SIZE_OPTIONS = [10, 25, 50];\n\n@Component({\n selector: 'tk-locations',\n templateUrl: './locations.component.html',\n styleUrls: ['./locations.component.scss'],\n})\nexport class LocationsComponent implements OnInit, OnDestroy {\n @Input() exHost!: string;\n @Input() token!: string;\n @Input() customerId!: number;\n\n @Output() openLocation = new EventEmitter<string>();\n @Output() editLocation = new EventEmitter<string>();\n @Output() removeLocation = new EventEmitter<string>();\n @Output() addLocation = new EventEmitter<void>();\n @Output() importLocations = new EventEmitter<void>();\n\n // Every site for the customer, each paired with its mapped Control Hub\n // location or null — the siteslocations API returns the full, unpaged list,\n // so search/filter/sort/pagination below all run client-side over this.\n siteLocations: SiteLocation[] = [];\n isLoading = false;\n\n searchTerm = '';\n sortDirection: LocationsSortDirection = 'asc';\n isBannerDismissed = false;\n\n readonly pageSizeOptions = PAGE_SIZE_OPTIONS;\n pageIndex = 0;\n pageSize = PAGE_SIZE_OPTIONS[0];\n\n isFilterPanelOpen = false;\n filters = {\n country: '',\n pendingActions: '',\n mapped: '' as MappedFilterValue,\n };\n\n private readonly countryDisplayNames = typeof Intl !== 'undefined' && 'DisplayNames' in Intl\n ? new Intl.DisplayNames(['en'], { type: 'region' })\n : null;\n\n private readonly migrationIntervals = new Map<number, ReturnType<typeof setInterval>>();\n private batchIdBySiteId = new Map<number, number>();\n\n constructor(\n private apiService: APIService,\n private locationsService: LocationsService,\n private dialog: MatDialog,\n ) { }\n\n ngOnInit(): void {\n this.apiService.token = this.token;\n this.apiService.apiUrl = this.exHost + '/webex';\n this.loadSiteLocations();\n this.loadBatchSites();\n }\n\n ngOnDestroy(): void {\n this.migrationIntervals.forEach(interval => clearInterval(interval));\n this.migrationIntervals.clear();\n }\n\n private loadSiteLocations(): void {\n this.isLoading = true;\n this.locationsService.fetchSiteLocations(this.customerId).subscribe({\n next: (siteLocations) => {\n this.siteLocations = this.applyBatchIds(siteLocations);\n this.isLoading = false;\n },\n error: () => {\n this.isLoading = false;\n },\n });\n }\n\n // Runs independently of loadSiteLocations() — whichever resolves second\n // re-applies the merge, so batchId ends up set regardless of load order.\n private loadBatchSites(): void {\n this.locationsService.getBatchSites(this.customerId).subscribe({\n next: (batches: SiteMigrationBatch[]) => {\n this.batchIdBySiteId = new Map(batches.map(batch => [batch.siteId, batch.id]));\n this.siteLocations = this.applyBatchIds(this.siteLocations);\n },\n });\n }\n\n private applyBatchIds(rows: SiteLocation[]): SiteLocation[] {\n return rows.map(row => ({ ...row, batchId: this.batchIdBySiteId.get(row.site.id) }));\n }\n\n get pendingLocations(): SiteLocation[] {\n return this.siteLocations.filter(row => !!row.location?.hasPendingActions);\n }\n\n get showPendingBanner(): boolean {\n return !this.isBannerDismissed && this.pendingLocations.length > 0;\n }\n\n get countries(): string[] {\n return Array.from(new Set(this.siteLocations.map(row => this.countryLabel(row)).filter(Boolean))).sort();\n }\n\n get filteredRows(): SiteLocation[] {\n const term = this.searchTerm.trim().toLowerCase();\n const filtered = this.siteLocations.filter(row =>\n (!term ||\n this.rowName(row).toLowerCase().includes(term) ||\n this.addressLine(row).toLowerCase().includes(term) ||\n (row.location?.address?.city || '').toLowerCase().includes(term) ||\n (row.location?.address?.state || '').toLowerCase().includes(term) ||\n this.countryLabel(row).toLowerCase().includes(term)) &&\n (!this.filters.country || this.countryLabel(row) === this.filters.country) &&\n (!this.filters.pendingActions || String(!!row.location?.hasPendingActions) === this.filters.pendingActions) &&\n (!this.filters.mapped || (this.filters.mapped === 'mapped' ? this.isMapped(row) : !this.isMapped(row)))\n );\n\n return filtered.sort((a, b) => {\n const comparison = this.rowName(a).localeCompare(this.rowName(b));\n return this.sortDirection === 'asc' ? comparison : -comparison;\n });\n }\n\n get pagedRows(): SiteLocation[] {\n const start = this.pageIndex * this.pageSize;\n return this.filteredRows.slice(start, start + this.pageSize);\n }\n\n get totalElements(): number {\n return this.filteredRows.length;\n }\n\n get pageRangeLabel(): string {\n if (!this.totalElements) {\n return '0 of 0';\n }\n const start = this.pageIndex * this.pageSize + 1;\n const end = Math.min(this.totalElements, start + this.pagedRows.length - 1);\n return `${start} – ${end} of ${this.totalElements}`;\n }\n\n get hasPreviousPage(): boolean {\n return this.pageIndex > 0;\n }\n\n get hasNextPage(): boolean {\n return (this.pageIndex + 1) * this.pageSize < this.totalElements;\n }\n\n rowName(row: SiteLocation): string {\n return row.site.name;\n }\n\n isMapped(row: SiteLocation): boolean {\n return !!row.location;\n }\n\n addressLine(row: SiteLocation): string {\n if (!row.location) {\n return '';\n }\n return [row.location.address.address1, row.location.address.address2, row.location.address.city]\n .filter(Boolean)\n .join(' - ');\n }\n\n countryLabel(row: SiteLocation): string {\n if (!row.location) {\n return '';\n }\n const { countryName, country } = row.location.address;\n if (countryName) {\n return countryName;\n }\n if (!country) {\n return '';\n }\n return this.countryDisplayNames?.of(country) || country;\n }\n\n // Same icon set as users-list's \"Provisioning Type\" column (assets/icons/webex.svg,\n // local_24.svg, di_cloud_24.svg).\n private readonly provisioningTypeIcons: Record<string, { src: string; tooltip: string }> = {\n WEBEX: { src: 'assets/icons/webex.svg', tooltip: 'Webex Calling' },\n UCM: { src: 'assets/icons/local_24.svg', tooltip: 'UCM' },\n DI: { src: 'assets/icons/di_cloud_24.svg', tooltip: 'Webex Calling DI' },\n };\n\n provisioningTypeIcon(row: SiteLocation): { src: string; tooltip: string } | null {\n if (!row.location) {\n return null;\n }\n return this.provisioningTypeIcons[row.location.provisioningType] || null;\n }\n\n onSearchInputChange(event: Event): void {\n this.searchTerm = (event.target as HTMLInputElement).value;\n this.pageIndex = 0;\n }\n\n toggleNameSort(): void {\n this.sortDirection = this.sortDirection === 'asc' ? 'desc' : 'asc';\n }\n\n dismissBanner(): void {\n this.isBannerDismissed = true;\n }\n\n toggleFilterPanel(): void {\n this.isFilterPanelOpen = !this.isFilterPanelOpen;\n }\n\n closeFilterPanel(): void {\n this.isFilterPanelOpen = false;\n }\n\n onFilterChange(): void {\n this.pageIndex = 0;\n }\n\n clearFilters(): void {\n this.filters = { country: '', pendingActions: '', mapped: '' };\n this.pageIndex = 0;\n }\n\n onPageSizeChange(event: Event): void {\n this.pageSize = Number((event.target as HTMLSelectElement).value);\n this.pageIndex = 0;\n }\n\n goToPreviousPage(): void {\n if (this.hasPreviousPage) {\n this.pageIndex--;\n }\n }\n\n goToNextPage(): void {\n if (this.hasNextPage) {\n this.pageIndex++;\n }\n }\n\n onOpenLocation(row: SiteLocation): void {\n if (row.location) {\n this.openLocation.emit(row.location.id);\n }\n }\n\n onEditLocation(row: SiteLocation): void {\n if (row.location) {\n this.editLocation.emit(row.location.id);\n }\n }\n\n onRemoveLocation(row: SiteLocation): void {\n if (row.location) {\n this.removeLocation.emit(row.location.id);\n }\n }\n\n canMigrateSite(row: SiteLocation): boolean {\n return row.migrationStatus !== 'IN_PROGRESS';\n }\n\n onMigrateSite(row: SiteLocation): void {\n const dialogRef = this.dialog.open(LocationConfirmDialogComponent, {\n panelClass: 'tk-location-confirm-dialog-panel',\n backdropClass: 'tk-location-confirm-dialog-backdrop',\n data: {\n title: `Migrate ${row.site.name}?`,\n message: `<p>Are you sure you want to migrate <em>${row.site.name}</em> site?</p>`,\n confirmButtonText: 'Yes, migrate',\n },\n });\n\n dialogRef.afterClosed().subscribe(confirmed => {\n if (confirmed) {\n this.migrateSite(row);\n }\n });\n }\n\n private migrateSite(row: SiteLocation): void {\n const siteId = row.site.id;\n row.migrationStatus = 'IN_PROGRESS';\n this.locationsService.migrateSite(siteId, row.batchId).subscribe({\n next: (batchId: number) => {\n if (batchId) {\n this.pollMigrationStatus(siteId, batchId);\n } else {\n this.onMigrationComplete(siteId);\n }\n },\n error: () => {\n this.setMigrationStatus(siteId, 'FAILED');\n },\n });\n }\n\n private pollMigrationStatus(siteId: number, batchId: number): void {\n this.clearMigrationInterval(siteId);\n\n const poll = (): void => {\n this.locationsService.getMigrationBatchStatuses(this.customerId, [batchId]).subscribe({\n next: (statuses: SiteBatchStatus[]) => {\n const status = statuses.find(item => item.id === batchId);\n if (!status || status.status === 'In Progress') {\n return;\n }\n this.clearMigrationInterval(siteId);\n if (status.status === 'Completed') {\n this.onMigrationComplete(siteId);\n } else {\n this.setMigrationStatus(siteId, 'FAILED');\n }\n },\n error: () => {\n this.clearMigrationInterval(siteId);\n this.setMigrationStatus(siteId, 'FAILED');\n },\n });\n };\n\n poll();\n this.migrationIntervals.set(siteId, setInterval(poll, MIGRATION_POLL_INTERVAL_MS));\n }\n\n // Looks the row up by siteId (rather than closing over a row reference) so\n // status updates still land on whatever object is currently in\n // siteLocations, even after loadSiteLocations()/mergeSiteLocations() below\n // have replaced the array with freshly-fetched row objects.\n private setMigrationStatus(siteId: number, status: LocationMigrationStatus): void {\n const row = this.siteLocations.find(item => item.site.id === siteId);\n if (row) {\n row.migrationStatus = status;\n }\n }\n\n // The migrate/batch-status APIs don't return the newly created location's\n // details, so re-fetch to pick up its mapping, address, timezone, etc.\n private onMigrationComplete(siteId: number): void {\n this.setMigrationStatus(siteId, 'COMPLETED');\n this.locationsService.fetchSiteLocations(this.customerId).subscribe({\n next: (fresh) => this.mergeSiteLocations(fresh),\n });\n }\n\n // Preserves the IN_PROGRESS status of any other site still migrating so a\n // concurrent poll's next tick doesn't land on a row that briefly lost it.\n private mergeSiteLocations(fresh: SiteLocation[]): void {\n const inProgressSiteIds = new Set(\n this.siteLocations.filter(row => row.migrationStatus === 'IN_PROGRESS').map(row => row.site.id)\n );\n this.siteLocations = this.applyBatchIds(fresh).map(row =>\n inProgressSiteIds.has(row.site.id) && !row.location\n ? { ...row, migrationStatus: 'IN_PROGRESS' as const }\n : row\n );\n }\n\n private clearMigrationInterval(siteId: number): void {\n const interval = this.migrationIntervals.get(siteId);\n if (interval) {\n clearInterval(interval);\n this.migrationIntervals.delete(siteId);\n }\n }\n\n onAddLocation(): void {\n this.addLocation.emit();\n }\n\n onImportLocations(): void {\n this.importLocations.emit();\n }\n\n exportLocations(): void {\n const rows = this.filteredRows.map(row => [\n row.site.name,\n this.addressLine(row),\n this.countryLabel(row),\n this.isMapped(row) ? 'Mapped' : 'Not mapped',\n ]);\n const csvLines = [\n ['Location Name', 'Address', 'Country/Region', 'Mapping Status'],\n ...rows,\n ].map(row => row.map(cell => `\"${String(cell).replace(/\"/g, '\"\"')}\"`).join(','));\n\n const blob = new Blob([csvLines.join('\\n')], { type: 'text/csv;charset=utf-8;' });\n const url = URL.createObjectURL(blob);\n const link = document.createElement('a');\n link.href = url;\n link.download = 'locations.csv';\n link.click();\n URL.revokeObjectURL(url);\n }\n}\n","<div class=\"tk-locations\">\n <app-loader *ngIf=\"isLoading\"></app-loader>\n\n <div class=\"tk-locations__view-toggle\">\n <button type=\"button\" class=\"tk-locations__view-button tk-locations__view-button--active\">\n <mat-icon class=\"tk-locations__view-icon\">menu</mat-icon>\n List\n </button>\n <button type=\"button\" class=\"tk-locations__view-button\" disabled title=\"Map view coming soon\">\n <mat-icon class=\"tk-locations__view-icon\">place</mat-icon>\n Map\n </button>\n </div>\n\n <div class=\"tk-locations__banner\" *ngIf=\"showPendingBanner\">\n <mat-icon class=\"tk-locations__banner-icon\">warning</mat-icon>\n <span class=\"tk-locations__banner-text\">\n View location(s) with pending action items to resume your calling service in {{ pendingLocations.length }} or more locations.\n </span>\n <button type=\"button\" class=\"tk-locations__banner-close\" aria-label=\"Dismiss\" (click)=\"dismissBanner()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <div class=\"tk-locations__toolbar\">\n <div style=\"position: relative; width: fit-content; min-width: 200px\">\n <input\n [value]=\"searchTerm\"\n class=\"blue-input\"\n (input)=\"onSearchInputChange($event)\"\n type=\"text\"\n placeholder=\"Search by name, city, state, country\"\n style=\"\n width: 100%;\n height: 34px;\n border-radius: 0.5rem;\n font-size: 16px;\n padding: 6px 12px 6px 44px;\n border: 1px solid #00000080;\n background: #fff;\n color: #222;\n outline: none;\n box-sizing: border-box;\n min-width: 280px;\n \"\n />\n <span\n style=\"\n position: absolute;\n left: 12px;\n top: 50%;\n transform: translateY(-50%);\n color: #757575;\n font-size: 18px;\n font-weight: normal;\n pointer-events: none;\n \"\n >\n <i\n class=\"material-icons\"\n style=\"font-size: 18px; font-weight: normal\"\n >search</i\n >\n </span>\n </div>\n\n <button type=\"button\" class=\"tk-locations__filter-button\" (click)=\"toggleFilterPanel()\">\n <img class=\"tk-locations__filter-icon\" src=\"assets/icons/filter-regular.svg\" alt=\"filter_list\" title=\"filter_list\">\n Filter\n </button>\n\n <span class=\"tk-locations__count\">{{ totalElements }} locations</span>\n\n <button type=\"button\" class=\"tk-locations__download-button\" aria-label=\"Download locations\" title=\"Download locations\" (click)=\"exportLocations()\">\n <mat-icon>file_download</mat-icon>\n </button>\n\n <button type=\"button\" class=\"tk-locations__manage-button\" [matMenuTriggerFor]=\"manageMenu\">\n Manage locations\n <mat-icon class=\"tk-locations__manage-chevron\">expand_more</mat-icon>\n </button>\n <mat-menu #manageMenu=\"matMenu\" xPosition=\"before\">\n <button mat-menu-item type=\"button\" (click)=\"onAddLocation()\">Add location</button>\n <button mat-menu-item type=\"button\" (click)=\"onImportLocations()\">Import locations</button>\n </mat-menu>\n </div>\n\n <table class=\"tk-locations__table\">\n <thead>\n <tr>\n <th (click)=\"toggleNameSort()\">\n Location Name\n <mat-icon class=\"tk-locations__sort-icon\">{{ sortDirection === 'asc' ? 'arrow_upward' : 'arrow_downward' }}</mat-icon>\n </th>\n <th>Address</th>\n <th>Country/Region</th>\n <th>Mapping</th>\n <th>Provisioning Type</th>\n <th class=\"tk-locations__actions-col\"></th>\n </tr>\n </thead>\n <tbody>\n <tr *ngFor=\"let row of pagedRows\" (click)=\"onOpenLocation(row)\">\n <td class=\"tk-locations__name-cell\">\n <a href=\"javascript:void(0)\" class=\"tk-locations__name-link\" (click)=\"$event.stopPropagation(); onOpenLocation(row)\">{{ row.site.name }}</a>\n </td>\n <td>{{ addressLine(row) || '—' }}</td>\n <td>{{ countryLabel(row) || '—' }}</td>\n <td>\n <span class=\"tk-locations__mapping-badge\" [class.tk-locations__mapping-badge--mapped]=\"isMapped(row)\">\n {{ isMapped(row) ? 'Mapped' : 'Not mapped' }}\n </span>\n </td>\n <td>\n <span class=\"tk-locations__icon-wrapper\" *ngIf=\"provisioningTypeIcon(row) as pt; else noProvisioningType\">\n <img [src]=\"pt.src\" [matTooltip]=\"pt.tooltip\" matTooltipPosition=\"right\" width=\"20\" alt=\"\">\n </span>\n <ng-template #noProvisioningType>—</ng-template>\n </td>\n <td class=\"tk-locations__actions-col\">\n <mat-progress-spinner\n *ngIf=\"row.migrationStatus === 'IN_PROGRESS'\"\n class=\"tk-locations__row-action-spinner\"\n [diameter]=\"20\"\n strokeWidth=\"2\"\n mode=\"indeterminate\"\n matTooltip=\"Migrating site…\">\n </mat-progress-spinner>\n <button\n *ngIf=\"row.migrationStatus !== 'IN_PROGRESS'\"\n mat-icon-button\n class=\"tk-locations__row-action-button\"\n [matMenuTriggerFor]=\"rowMenu\"\n (click)=\"$event.stopPropagation()\"\n aria-label=\"Open location actions\">\n <mat-icon>more_vert</mat-icon>\n </button>\n <mat-menu #rowMenu=\"matMenu\" yPosition=\"below\">\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onOpenLocation(row)\">View details</button>\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onEditLocation(row)\">Edit location</button>\n <button\n *ngIf=\"canMigrateSite(row)\"\n mat-menu-item\n type=\"button\"\n (click)=\"onMigrateSite(row)\">Migrate site</button>\n <button *ngIf=\"row.location\" mat-menu-item type=\"button\" (click)=\"onRemoveLocation(row)\">Remove location</button>\n </mat-menu>\n </td>\n </tr>\n <tr *ngIf=\"!pagedRows.length\">\n <td colspan=\"6\" class=\"tk-locations__empty\">No locations match your search.</td>\n </tr>\n </tbody>\n </table>\n\n <div class=\"tk-locations__footer\">\n <div class=\"tk-locations__rows-per-page\">\n <label for=\"tk-locations-page-size\">Rows per page:</label>\n <select id=\"tk-locations-page-size\" class=\"tk-locations__rows-per-page-select\" [ngModel]=\"pageSize\" (change)=\"onPageSizeChange($event)\">\n <option *ngFor=\"let size of pageSizeOptions\" [value]=\"size\">{{ size }}</option>\n </select>\n </div>\n <span class=\"tk-locations__footer-text\">{{ pageRangeLabel }}</span>\n <div class=\"tk-locations__pagination\">\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasPreviousPage\" (click)=\"goToPreviousPage()\" aria-label=\"Previous page\">\n <mat-icon>chevron_left</mat-icon>\n </button>\n <button type=\"button\" class=\"tk-locations__pagination-button\" [disabled]=\"!hasNextPage\" (click)=\"goToNextPage()\" aria-label=\"Next page\">\n <mat-icon>chevron_right</mat-icon>\n </button>\n </div>\n </div>\n\n <div\n class=\"tk-locations__filter-backdrop\"\n *ngIf=\"isFilterPanelOpen\"\n (click)=\"closeFilterPanel()\">\n </div>\n\n <aside class=\"tk-locations__filter-panel\" [class.tk-locations__filter-panel--open]=\"isFilterPanelOpen\">\n <div class=\"tk-locations__filter-panel-header\">\n <h3 class=\"tk-locations__filter-panel-title\">Filter locations</h3>\n <button\n type=\"button\"\n class=\"tk-locations__filter-panel-close\"\n aria-label=\"Close filter panel\"\n (click)=\"closeFilterPanel()\">\n <mat-icon>close</mat-icon>\n </button>\n </div>\n\n <div class=\"tk-locations__filter-panel-body\">\n <div class=\"tk-locations__filter-field\">\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-mapped\">Mapping</label>\n <div class=\"tk-locations__filter-select-wrap\">\n <select id=\"tk-locations-filter-mapped\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.mapped\" (change)=\"onFilterChange()\">\n <option value=\"\">All</option>\n <option value=\"mapped\">Mapped</option>\n <option value=\"unmapped\">Not mapped</option>\n </select>\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\n </div>\n </div>\n\n <div class=\"tk-locations__filter-field\">\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-country\">Country/Region</label>\n <div class=\"tk-locations__filter-select-wrap\">\n <select id=\"tk-locations-filter-country\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.country\" (change)=\"onFilterChange()\">\n <option value=\"\">All countries</option>\n <option *ngFor=\"let country of countries\" [value]=\"country\">{{ country }}</option>\n </select>\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\n </div>\n </div>\n\n <div class=\"tk-locations__filter-field\">\n <label class=\"tk-locations__filter-label\" for=\"tk-locations-filter-pending\">Pending action items</label>\n <div class=\"tk-locations__filter-select-wrap\">\n <select id=\"tk-locations-filter-pending\" class=\"tk-locations__filter-select\" [(ngModel)]=\"filters.pendingActions\" (change)=\"onFilterChange()\">\n <option value=\"\">All</option>\n <option value=\"true\">Yes</option>\n <option value=\"false\">No</option>\n </select>\n <mat-icon class=\"tk-locations__filter-select-icon\">expand_more</mat-icon>\n </div>\n </div>\n </div>\n\n <div class=\"tk-locations__filter-panel-footer\">\n <button type=\"button\" class=\"tk-locations__filter-clear\" (click)=\"clearFilters()\">Clear all</button>\n <button type=\"button\" class=\"tk-locations__filter-done\" (click)=\"closeFilterPanel()\">Done</button>\n </div>\n </aside>\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 { LocationsComponent } from './locations.component';\nimport { LocationConfirmDialogComponent } from './location-confirm-dialog/location-confirm-dialog.component';\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\n\n@NgModule({\n declarations: [\n LocationsComponent,\n LocationConfirmDialogComponent,\n AppLoaderComponent,\n ],\n imports: [\n CommonModule,\n HttpClientModule,\n FormsModule,\n MaterialModule,\n ],\n exports: [\n LocationsComponent,\n ],\n})\nexport class LocationsModule { }\n","/*\n * Public API Surface of @tuki-io/tuki-widgets\n */\n\n// Widget Modules\nexport * from './src/locations.module';\n\n// Components\nexport * from './src/locations.component';\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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"}