@tuki-io/tuki-widgets 0.0.219-dev.6 → 0.0.219-dev.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (165) hide show
  1. package/README.md +24 -24
  2. package/esm2020/contact-center/cc-readiness/cc-readiness.module.mjs +1 -1
  3. package/esm2020/contact-center/cc-readiness/cc-readiness.service.mjs +1 -1
  4. package/esm2020/contact-center/cc-readiness/widgets/licences-requirement/licences-requirement.component.mjs +3 -3
  5. package/esm2020/di2mt/widgets/site-upgrade/progress-bar/progress-bar.component.mjs +3 -3
  6. package/esm2020/di2mt/widgets/site-upgrade/site-upgrade-data-table/site-upgrade-data-table.component.mjs +2 -2
  7. package/esm2020/di2mt/widgets/upgrade-overview/cards/pending-activation-users/pending-activation-users.component.mjs +17 -17
  8. package/esm2020/lib/widgets.component.mjs +9 -9
  9. package/esm2020/lib/widgets.module.mjs +1 -1
  10. package/esm2020/lib/widgets.service.mjs +1 -1
  11. package/esm2020/public-api.mjs +1 -1
  12. package/esm2020/user-creation/src/app.constants.mjs +1 -1
  13. package/esm2020/user-creation/src/classes/notification.mjs +1 -1
  14. package/esm2020/user-creation/src/classes/site.mjs +1 -1
  15. package/esm2020/user-creation/src/environments/environment.mjs +1 -1
  16. package/esm2020/user-creation/src/interfaces/user-creation-wizard.interfaces.mjs +1 -1
  17. package/esm2020/user-creation/src/shared/components/notification/notification.component.mjs +3 -3
  18. package/esm2020/user-creation/src/shared/pipes/truncate.pipe.mjs +1 -1
  19. package/esm2020/user-creation/src/shared/services/notification.service.mjs +1 -1
  20. package/esm2020/user-creation/src/shared/services/user-creation-api.service.mjs +1 -1
  21. package/esm2020/user-creation/src/shared/services/utils.mjs +1 -1
  22. package/esm2020/user-creation/src/utils/app-loader/app-loader.mjs +3 -3
  23. package/esm2020/user-creation/src/utils/build-savable-end-user.mjs +1 -1
  24. package/esm2020/user-creation/src/utils/device-default-prefix.mjs +1 -1
  25. package/esm2020/user-creation/src/utils/device-name-validation.mjs +1 -1
  26. package/esm2020/user-creation/src/utils/model.mjs +1 -1
  27. package/esm2020/user-creation/src/utils/parse-device-name-rule.mjs +1 -1
  28. package/esm2020/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.mjs +3 -3
  29. package/esm2020/user-device-manage/public-api.mjs +1 -1
  30. package/esm2020/user-device-manage/src/app.constants.mjs +1 -1
  31. package/esm2020/user-device-manage/src/classes/device.mjs +1 -1
  32. package/esm2020/user-device-manage/src/classes/deviceProfile.mjs +1 -1
  33. package/esm2020/user-device-manage/src/classes/line-association-interface.mjs +1 -1
  34. package/esm2020/user-device-manage/src/classes/line-association.mjs +1 -1
  35. package/esm2020/user-device-manage/src/classes/line-call-info-display.mjs +1 -1
  36. package/esm2020/user-device-manage/src/classes/line-directory.mjs +1 -1
  37. package/esm2020/user-device-manage/src/classes/line.mjs +1 -1
  38. package/esm2020/user-device-manage/src/classes/notification.mjs +1 -1
  39. package/esm2020/user-device-manage/src/classes/recording-options.mjs +1 -1
  40. package/esm2020/user-device-manage/src/classes/simplified-user.mjs +1 -1
  41. package/esm2020/user-device-manage/src/classes/site-defaults.mjs +1 -1
  42. package/esm2020/user-device-manage/src/classes/translation-pattern.mjs +1 -1
  43. package/esm2020/user-device-manage/src/classes/types.mjs +1 -1
  44. package/esm2020/user-device-manage/src/common-functions.mjs +1 -1
  45. package/esm2020/user-device-manage/src/confirm-dialog/info-dialog.component.mjs +3 -3
  46. package/esm2020/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.mjs +3 -3
  47. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.mjs +3 -3
  48. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.mjs +3 -3
  49. package/esm2020/user-device-manage/src/device-associated-line/device-associated-line.component.mjs +1 -1
  50. package/esm2020/user-device-manage/src/device-info/device-info.component.mjs +3 -3
  51. package/esm2020/user-device-manage/src/device-manage-widget.component.mjs +2 -2
  52. package/esm2020/user-device-manage/src/environments/environment.mjs +1 -1
  53. package/esm2020/user-device-manage/src/interseptors/auth.interceptor.mjs +1 -1
  54. package/esm2020/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  55. package/esm2020/user-device-manage/src/material.module.mjs +1 -1
  56. package/esm2020/user-device-manage/src/notifications/notification.component.mjs +3 -3
  57. package/esm2020/user-device-manage/src/pipes/mac-address.pipe.mjs +1 -1
  58. package/esm2020/user-device-manage/src/services/api.service.mjs +1 -1
  59. package/esm2020/user-device-manage/src/services/device.service.mjs +1 -1
  60. package/esm2020/user-device-manage/src/services/dns.service.mjs +1 -1
  61. package/esm2020/user-device-manage/src/services/line.service.mjs +1 -1
  62. package/esm2020/user-device-manage/src/services/notification.service.mjs +1 -1
  63. package/esm2020/user-device-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  64. package/esm2020/user-device-manage/src/services/site-settings.service.mjs +1 -1
  65. package/esm2020/user-device-manage/src/services/sorting-utils.service.mjs +1 -1
  66. package/esm2020/user-device-manage/src/services/user.service.mjs +1 -1
  67. package/esm2020/user-device-manage/src/services/utils.service.mjs +1 -1
  68. package/esm2020/user-device-manage/src/services/validation.service.mjs +1 -1
  69. package/esm2020/user-device-manage/src/shared/tk-page-section/page-section.component.mjs +1 -1
  70. package/esm2020/user-device-manage/src/utils/app-loader/app-loader.mjs +3 -3
  71. package/esm2020/user-manage/public-api.mjs +1 -1
  72. package/esm2020/user-manage/src/app.constants.mjs +1 -1
  73. package/esm2020/user-manage/src/classes/device.mjs +1 -1
  74. package/esm2020/user-manage/src/classes/line-association-interface.mjs +1 -1
  75. package/esm2020/user-manage/src/classes/line-association.mjs +1 -1
  76. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +1 -1
  77. package/esm2020/user-manage/src/classes/line-directory.mjs +1 -1
  78. package/esm2020/user-manage/src/classes/line.mjs +1 -1
  79. package/esm2020/user-manage/src/classes/notification.mjs +1 -1
  80. package/esm2020/user-manage/src/classes/pagination.mjs +1 -1
  81. package/esm2020/user-manage/src/classes/recording-options.mjs +1 -1
  82. package/esm2020/user-manage/src/classes/simplified-user.mjs +1 -1
  83. package/esm2020/user-manage/src/classes/table-data.mjs +1 -1
  84. package/esm2020/user-manage/src/classes/translation-pattern.mjs +1 -1
  85. package/esm2020/user-manage/src/classes/user-list.mjs +1 -1
  86. package/esm2020/user-manage/src/common-functions.mjs +1 -1
  87. package/esm2020/user-manage/src/device-list/device-list.component.mjs +3 -3
  88. package/esm2020/user-manage/src/device-list/device-row/device-row.component.mjs +3 -3
  89. package/esm2020/user-manage/src/environments/environment.mjs +1 -1
  90. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +1 -1
  91. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +3 -3
  92. package/esm2020/user-manage/src/material.module.mjs +1 -1
  93. package/esm2020/user-manage/src/notifications/notification.component.mjs +3 -3
  94. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +1 -1
  95. package/esm2020/user-manage/src/services/api.service.mjs +1 -1
  96. package/esm2020/user-manage/src/services/dns.service.mjs +1 -1
  97. package/esm2020/user-manage/src/services/line.service.mjs +1 -1
  98. package/esm2020/user-manage/src/services/notification.service.mjs +1 -1
  99. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +1 -1
  100. package/esm2020/user-manage/src/services/site-settings.service.mjs +1 -1
  101. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +1 -1
  102. package/esm2020/user-manage/src/services/user.service.mjs +1 -1
  103. package/esm2020/user-manage/src/services/utils.service.mjs +1 -1
  104. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +3 -3
  105. package/esm2020/user-manage/src/user-info/user-info.component.mjs +3 -3
  106. package/esm2020/user-manage/src/user-manage-widget.component.mjs +2 -2
  107. package/esm2020/user-manage/src/user-manage.module.mjs +1 -1
  108. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +3 -3
  109. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +3 -3
  110. package/esm2020/users-list/public-api.mjs +1 -1
  111. package/esm2020/users-list/src/app.constants.mjs +1 -1
  112. package/esm2020/users-list/src/classes/app-location.mjs +1 -1
  113. package/esm2020/users-list/src/classes/device.mjs +1 -1
  114. package/esm2020/users-list/src/classes/line.mjs +1 -1
  115. package/esm2020/users-list/src/classes/move-user.mjs +1 -1
  116. package/esm2020/users-list/src/classes/notification.mjs +1 -1
  117. package/esm2020/users-list/src/classes/simlified-user.mjs +1 -1
  118. package/esm2020/users-list/src/classes/table-data.mjs +1 -1
  119. package/esm2020/users-list/src/classes/user-list.mjs +1 -1
  120. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user/device-move-user-wizard.component.mjs +3 -3
  121. package/esm2020/users-list/src/move-user-wizard/move-user-stepper/device-move-user-tab/devices-move-user-wizard-tab.component.mjs +3 -3
  122. package/esm2020/users-list/src/move-user-wizard/move-user-wizard.component.mjs +3 -3
  123. package/esm2020/users-list/src/services/api-webex.service.mjs +1 -1
  124. package/esm2020/users-list/src/services/api.service.mjs +1 -1
  125. package/esm2020/users-list/src/services/dns.service.mjs +1 -1
  126. package/esm2020/users-list/src/services/events-communication.service.mjs +1 -1
  127. package/esm2020/users-list/src/services/notification.service.mjs +1 -1
  128. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +1 -1
  129. package/esm2020/users-list/src/services/site-settings.service.mjs +1 -1
  130. package/esm2020/users-list/src/services/user.service.mjs +1 -1
  131. package/esm2020/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.mjs +3 -3
  132. package/esm2020/users-list/src/users-list.component.mjs +2 -2
  133. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +3 -3
  134. package/esm2020/users-list/src/utils/common-functions.mjs +1 -1
  135. package/esm2020/users-list/src/utils/notifications/notification.component.mjs +3 -3
  136. package/esm2020/users-list/src/utils/utils.service.mjs +1 -1
  137. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  138. package/fesm2015/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  139. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  140. package/fesm2015/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  141. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  142. package/fesm2015/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  143. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  144. package/fesm2015/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  145. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  146. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  147. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +13 -13
  148. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  149. package/fesm2015/tuki-io-tuki-widgets.mjs +8 -8
  150. package/fesm2015/tuki-io-tuki-widgets.mjs.map +1 -1
  151. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs +2 -2
  152. package/fesm2020/tuki-io-tuki-widgets-contact-center.mjs.map +1 -1
  153. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs +20 -20
  154. package/fesm2020/tuki-io-tuki-widgets-di2mt.mjs.map +1 -1
  155. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs +6 -6
  156. package/fesm2020/tuki-io-tuki-widgets-user-creation.mjs.map +1 -1
  157. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs +18 -18
  158. package/fesm2020/tuki-io-tuki-widgets-user-device-manage.mjs.map +1 -1
  159. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +18 -18
  160. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +1 -1
  161. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +13 -13
  162. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +1 -1
  163. package/fesm2020/tuki-io-tuki-widgets.mjs +8 -8
  164. package/fesm2020/tuki-io-tuki-widgets.mjs.map +1 -1
  165. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"tuki-io-tuki-widgets-user-creation.mjs","sources":["../../../../projects/tuki/widgets/user-creation/src/environments/environment.ts","../../../../projects/tuki/widgets/user-creation/src/classes/notification.ts","../../../../projects/tuki/widgets/user-creation/src/shared/services/notification.service.ts","../../../../projects/tuki/widgets/user-creation/src/app.constants.ts","../../../../projects/tuki/widgets/user-creation/src/shared/pipes/truncate.pipe.ts","../../../../projects/tuki/widgets/user-creation/src/shared/components/notification/notification.component.ts","../../../../projects/tuki/widgets/user-creation/src/shared/components/notification/notification.component.html","../../../../projects/tuki/widgets/user-creation/src/shared/material.module.ts","../../../../projects/tuki/widgets/user-creation/src/shared/api/api.service.ts","../../../../projects/tuki/widgets/user-creation/src/shared/services/user-creation-api.service.ts","../../../../projects/tuki/widgets/user-creation/src/shared/shared.module.ts","../../../../projects/tuki/widgets/user-creation/src/utils/device-name-validation.ts","../../../../projects/tuki/widgets/user-creation/src/shared/services/utils.ts","../../../../projects/tuki/widgets/user-creation/src/classes/site.ts","../../../../projects/tuki/widgets/user-creation/src/utils/model.ts","../../../../projects/tuki/widgets/user-creation/src/interfaces/user-creation-wizard.interfaces.ts","../../../../projects/tuki/widgets/user-creation/src/utils/build-savable-end-user.ts","../../../../projects/tuki/widgets/user-creation/src/utils/device-default-prefix.ts","../../../../projects/tuki/widgets/user-creation/src/utils/parse-device-name-rule.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.ts","../../../../projects/tuki/widgets/user-creation/src/utils/app-loader/app-loader.ts","../../../../projects/tuki/widgets/user-creation/src/utils/app-loader/app-loader.component.html","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.html","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.html","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.html","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.html","../../../../projects/tuki/widgets/user-creation/src/user-creation.module.ts","../../../../projects/tuki/widgets/user-creation/public-api.ts","../../../../projects/tuki/widgets/user-creation/tuki-io-tuki-widgets-user-creation.ts"],"sourcesContent":["export const environment = {\r\n production: false,\r\n // apiUrl: 'http://localhost:4200',\r\n apiUrl: 'http://192.168.0.191:8080',\r\n notificationsLifetime: 30000,\r\n longNotificationsLifetime: 45000,\r\n cashCleanTimer: 900000,\r\n cashArrayLength: 10000,\r\n matomoUrl: 'http://192.168.0.136/matomo/',\r\n};\r\n","import { environment } from '../environments/environment';\r\n\r\nconst TTL_DEFAULT = environment.notificationsLifetime;\r\nconst TTL_LONG_DEFAULT = environment.longNotificationsLifetime;\r\n\r\nexport enum NotificationType {\r\n info = 'info',\r\n error = 'error',\r\n success = 'success',\r\n warning = 'warning'\r\n}\r\n\r\nexport class Notification {\r\n id?: number;\r\n type?: NotificationType;\r\n message?: string;\r\n ttl: number = TTL_DEFAULT;\r\n timerId?: any;\r\n\r\n constructor(data: any) {\r\n Object.assign(this, data || {});\r\n\r\n if(this.ttl === undefined) {\r\n this.ttl = this.message && this.message.length && this.message.length < 80 ? TTL_DEFAULT : TTL_LONG_DEFAULT;\r\n }\r\n }\r\n\r\n isInfo(): boolean {\r\n return this.type === NotificationType.info;\r\n }\r\n isError(): boolean {\r\n return this.type === NotificationType.error;\r\n }\r\n isSuccess(): boolean {\r\n return this.type === NotificationType.success;\r\n }\r\n isWarning(): boolean {\r\n return this.type === NotificationType.warning;\r\n }\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport { Notification } from '../../classes/notification';\r\nimport { Subject } from 'rxjs';\r\nconst SUCCESS_TIME = 5000;\r\nconst INACTIVE_SESSION_MESSAGE = 'Your session was lost due to inactivity. Please login again';\r\nconst INACTIVE_SESSION = 'SESSION_INACTIVE';\r\n\r\n@Injectable()\r\nexport class NotificationService {\r\n\r\n public listChange = new Subject();\r\n\r\n private max = 0;\r\n private list: Notification[] = [];\r\n\r\n constructor(\r\n ) {\r\n }\r\n\r\n error(message: string, ttl?: number): void {\r\n this.notify('error', message, ttl);\r\n }\r\n\r\n success(message: string, ttl?: number): void {\r\n this.notify('success', message, (!ttl) ? SUCCESS_TIME : ttl);\r\n }\r\n\r\n warning(message: string, ttl?: number): void {\r\n this.notify('warning', message, ttl);\r\n }\r\n\r\n info(message: string, ttl?: number): void {\r\n this.notify('info', message, ttl);\r\n }\r\n private notify(type: string, message: string, ttl?: number): void {\r\n const found = this.list.find((n: Notification) => n.message === message);\r\n if (found) {\r\n this.remove(found);\r\n }\r\n const notification = new Notification({\r\n id: ++this.max,\r\n type, message, ttl\r\n });\r\n if (notification.ttl > 0) {\r\n notification.timerId = setTimeout(() => this.remove(notification, true), notification.ttl);\r\n }\r\n this.list.push(notification);\r\n this.listChange.next(this.list);\r\n }\r\n\r\n remove(notification: Notification, auto?: boolean): void {\r\n if (!auto && notification.timerId) {\r\n // clear timeout in case of manual remove\r\n clearInterval(notification.timerId);\r\n }\r\n this.list = this.list.filter(n => n.id !== notification.id);\r\n this.listChange.next(this.list);\r\n }\r\n\r\n private removeInactiveSessionError(): void {\r\n if (!this.list || !this.list.length) {\r\n return;\r\n }\r\n this.list = this.list.filter(n => n.message !== INACTIVE_SESSION_MESSAGE && n.message !== INACTIVE_SESSION);\r\n this.listChange.next(this.list);\r\n }\r\n\r\n}\r\n","export const API = {\r\n WEBEX_CHECK_CONTROL_HUB_INTEGRATION: \"/webex/api/search/webex/customers/:customerId/controlhubexists\",\r\n SITES: \"/dcp/api/customers/:customerId/sites\",\r\n SITE: \"/dcp/api/sites/:siteId\",\r\n DEVICE_TYPES: \"/dcp/api/provision/options/:siteId/devicetypes\",\r\n SITE_SETTINGS: \"/dcp/api/sites/:siteId/settings\",\r\n VM_USER_TEMPLATES: \"/dcp/api/provision/options/:siteId/vmusertemplates\",\r\n EXISTING_USERS: \"/dcp/api/provision/:siteId/users\",\r\n USER_TEMPLATES_UPLOAD_LIST: \"/dcp/api/searchbulkupdate/uploadedusertemplatelist\",\r\n USER_TEMPLATE_TOKEN: \"/dcp/api/bulkupdate/:customerId/usertemplate/:id/token\",\r\n AVAILABLE_DN_IN_RANGES: \"/dcp/api/sites/:siteId/available-dn-in-ranges\",\r\n USER_CHECK_ID_EXISTING: \"/dcp/api/provision/:siteId/users/:userId\",\r\n LDAP_USERS: \"/dcp/api/provision/:siteId/users\",\r\n USERS: \"/dcp/api/provision/:siteId/users\",\r\n CREATE_NEW_USER_FROM_TEMPLATE: \"/dcp/api/provision/newUserFromUserTemplate\",\r\n DEVICE_DEFAULTS: \"/api/provision/options/:siteId/devicedefaults/:deviceType\",\r\n}\r\n\r\nexport const USER_CREATION_TYPES = {\r\n CUCM: 'CUCM',\r\n MT: 'MT'\r\n};\r\n\r\nexport const MAX_INTEGER = 2147483647;\r\n\r\nexport const CUTTING_SYMBOLS = [\r\n \" \",\r\n \"_\",\r\n \"-\"\r\n ];\r\n\r\nexport const BREADCRUMB_LENGTH_LIMIT = 20;\r\nexport const DEFAULT_CUTTING_LENGTH = 15;","import { Pipe, PipeTransform } from '@angular/core';\r\nimport { CUTTING_SYMBOLS, BREADCRUMB_LENGTH_LIMIT, DEFAULT_CUTTING_LENGTH } from '../../app.constants';\r\n\r\n@Pipe({\r\n name: 'truncate'\r\n})\r\nexport class TruncatePipe implements PipeTransform {\r\n\r\n transform(value: string | undefined, args?: any[]): string {\r\n if(!value) {\r\n return '';\r\n }\r\n if (args) {\r\n const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\r\n const trail = args.length > 1 ? args[1] : '...';\r\n return value.length > limit ? value.substring(0, limit) + trail : value;\r\n }\r\n if (value.length <= BREADCRUMB_LENGTH_LIMIT) {\r\n return value;\r\n }\r\n const foundSymbol = CUTTING_SYMBOLS.find((symbol) => value.includes(symbol, DEFAULT_CUTTING_LENGTH));\r\n const cutIndex = foundSymbol ? value.indexOf(foundSymbol, DEFAULT_CUTTING_LENGTH) : BREADCRUMB_LENGTH_LIMIT;\r\n return value.substring(0, cutIndex) + '...';\r\n }\r\n\r\n}\r\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\nimport { NotificationService } from '../../../shared/services/notification.service';\r\nimport { Notification } from '../../../classes/notification';\r\n\r\n@Component({\r\n selector: 'app-notification',\r\n templateUrl: './notification.component.html',\r\n styleUrls: ['./notification.component.scss'],\r\n changeDetection: ChangeDetectionStrategy.OnPush\r\n})\r\nexport class NotificationsComponent implements OnInit, OnDestroy {\r\n public list!: Notification[];\r\n public isReadMore!: boolean;\r\n private listSubscription!: Subscription;\r\n\r\n constructor(\r\n public notificationService: NotificationService,\r\n private ref: ChangeDetectorRef\r\n ) {\r\n }\r\n\r\n ngOnInit() {\r\n this.listChangeSubscribe();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.listSubscription.unsubscribe();\r\n }\r\n\r\n public readMore(): void {\r\n this.isReadMore = !this.isReadMore;\r\n }\r\n\r\n public removeNotification(notification: Notification): void {\r\n this.notificationService.remove(notification);\r\n }\r\n\r\n private listChangeSubscribe(): void {\r\n this.listSubscription = this.notificationService.listChange\r\n .subscribe((list: any) => {\r\n this.list = list;\r\n this.ref.detectChanges();\r\n });\r\n }\r\n}\r\n","\r\n\r\n<div class=\"notification-block\" role=\"alert\" aria-live=\"assertive\">\r\n <div class=\"notification\"\r\n *ngFor=\"let notification of list\"\r\n [ngClass]=\"{'error': notification.isError(), 'success': notification.isSuccess()}\">\r\n\r\n <div class=\"flex-box\">\r\n <div class=\"notification-icons-block\">\r\n <i *ngIf=\"notification.isError()\" class=\"fa fa-exclamation-triangle\"></i>\r\n <i *ngIf=\"notification.isWarning()\" class=\"fa fa-hand-paper-o\"></i>\r\n <i *ngIf=\"notification.isSuccess()\" class=\"fa fa-check\"></i>\r\n <i *ngIf=\"notification.isInfo()\" class=\"fa fa-info-circle\"></i>\r\n </div>\r\n <div *ngIf=\"!isReadMore\" class=\"message-block\">\r\n {{notification.message | truncate:[93]}}\r\n </div>\r\n <div *ngIf=\"isReadMore\" class=\"message-block\">\r\n {{notification.message}}\r\n </div>\r\n </div>\r\n <div class=\"read-more-error link clickable\" *ngIf=\"notification.message && notification.message.length > 93\"\r\n (click)=\"readMore()\">{{(isReadMore ? 'Collapse' : 'Read More')}}</div>\r\n <button\r\n class=\"close\"\r\n mat-icon-button\r\n (click)=\"removeNotification(notification)\">\r\n <img class=\"notification-icon-close\" src=\"assets/icons/close_icon_modal.svg\" alt=\"\">\r\n </button>\r\n </div>\r\n</div>\r\n\r\n","import { NgModule } from \"@angular/core\";\r\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\n\r\n@NgModule({\r\n imports: [\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatAutocompleteModule,\r\n MatProgressSpinnerModule,\r\n MatPaginatorModule,\r\n MatChipsModule,\r\n ],\r\n exports: [\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatAutocompleteModule,\r\n MatProgressSpinnerModule,\r\n MatPaginatorModule,\r\n MatChipsModule,\r\n ]\r\n})\r\nexport class MaterialModule { }","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class APIService {\r\n token!: string;\r\n apiUrl!: string;\r\n\r\n constructor(\r\n private httpClient: HttpClient\r\n ) { }\r\n\r\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n const headers = this.getHeaders(cache);\r\n params = params || {};\r\n return this.httpClient.get(this.apiUrl + url, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n post(url: string, body: any, params = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n // use when response extended data is necessary:\r\n postExtended(url: string, body = null, params = {}, headers = {}) {\r\n headers = headers || this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {\r\n headers,\r\n observe: 'response',\r\n params: this.prepareEncodedParams(params)\r\n });\r\n }\r\n\r\n put(url: string, body = null, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.put(this.apiUrl + url, body, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n delete(url: string, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.delete(this.apiUrl + url, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n fetchPagination(url: string, pageSize: number, pageNumber: number, additionalParams = {}, cache?: boolean): Observable<any> {\r\n const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));\r\n const params = Object.assign(copyAdditionalParams, { size: pageSize.toString(), page: pageNumber.toString() });\r\n return this.fetch(url, params, cache) as Observable<any>;\r\n }\r\n\r\n private prepareEncodedParams(params: any) {\r\n const result: any = {};\r\n\r\n if (!params) {\r\n return {};\r\n }\r\n for (const key of Object.keys(params)) {\r\n if (params[key]) {\r\n const stringParam = params[key].toString();\r\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private getHeaders(cache?: boolean): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n if (cache) {\r\n headers = headers.append('_Cache', 'true ');\r\n }\r\n const token = this.token || this.getParameterByName('token');\r\n headers = headers.append('Authorization', 'Bearer ' + token);\r\n return headers;\r\n }\r\n\r\n private getParameterByName(name: any, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n}","import { inject, Injectable } from \"@angular/core\";\r\nimport { BehaviorSubject, forkJoin, map, Observable, tap } from \"rxjs\";\r\nimport { Site, SiteDefaults, SiteInterface, SiteTemplateInterface } from \"../../classes/site\";\r\nimport { DeviceDefaultsInterface, UserTemplateInterface } from \"../../interfaces/user-creation-wizard.interfaces\";\r\n// import { APIService } from \"./api.service\";\r\nimport { API, MAX_INTEGER } from \"../../app.constants\";\r\nimport { APIService } from \"../api/api.service\";\r\n\r\n@Injectable()\r\nexport class UserCreationApiService {\r\n\r\n private _allSites: Site[] = [];\r\n private readonly sitesListSubject$ = new BehaviorSubject<Site[]>([]);\r\n public readonly sitesList$ = this.sitesListSubject$.asObservable();\r\n\r\n private readonly templatesListSubject$ = new BehaviorSubject<UserTemplateInterface[]>([]);\r\n public readonly templatesList$ = this.templatesListSubject$.asObservable();\r\n\r\n private apiService = inject(APIService);\r\n\r\n constructor() { }\r\n\r\n public getSitesList() {\r\n\r\n }\r\n\r\n public checkControlHubIntegration(customerId: string) {\r\n const URL = API.WEBEX_CHECK_CONTROL_HUB_INTEGRATION.replace(':customerId', String(customerId));\r\n return this.apiService.fetch(URL);\r\n // .pipe(this.handleError(true, true));\r\n }\r\n\r\n public getAllCustomerSites(customerId: string, onlySitesWithLocation?: boolean): Observable<Site[]> {\r\n const params: { [key: string]: string } = {};\r\n if (onlySitesWithLocation) {\r\n params['onlySitesWithLocation'] = 'true';\r\n }\r\n return this.apiService.fetchPagination(API.SITES.replace(':customerId', String(customerId)), MAX_INTEGER, 0, params, false)\r\n .pipe(\r\n tap((res: any) => {\r\n // this._allSites = [];\r\n // if (res.pageData && res.pageData.length) {\r\n // this.assignAllSites(customerId, res.pageData);\r\n // }\r\n // this.allCustomerSites$.next(true);\r\n // return this._allSites;\r\n this.sitesListSubject$.next([...res.pageData]);\r\n })\r\n )\r\n // .pipe(this.handleError(true));\r\n }\r\n\r\n public getSiteAllData(siteId: number): Observable<any> {\r\n // this.dataPending = true;\r\n return forkJoin([\r\n this.getSite(siteId),\r\n this.getSiteDefaults(siteId, false),\r\n // this.getDeviceTypes(siteId),\r\n // this.getVoiceMailUserTemplates(siteId)\r\n ]);\r\n }\r\n\r\n public getSite(siteId: number, isEdit?: boolean): Observable<SiteInterface> {\r\n return this.apiService.fetch(API.SITE.replace(':siteId', String(siteId)), null, false);\r\n }\r\n\r\n public getDeviceTypes(siteId: number | string): Observable<string[]> {\r\n return this.apiService.fetch(API.DEVICE_TYPES.replace(':siteId', String(siteId)), null, true)\r\n // .pipe(\r\n // map((types: string[]) => {\r\n // // this.deviceTypes = types)\r\n // })\r\n // );\r\n // .pipe(this.handleError(false, true));\r\n }\r\n\r\n public getSiteDefaults(siteId: number, directAccess: boolean, sharedLineSiteIds?: string): Observable<SiteDefaults> {\r\n const params = { directAccess: directAccess };\r\n // if (sharedLineSiteIds) {\r\n // params['sharedLineSiteIds'] = sharedLineSiteIds;\r\n // }\r\n return this.apiService.fetch(API.SITE_SETTINGS.replace(':siteId', String(siteId)), params)\r\n // .pipe(map((siteDefaults: SiteTemplateInterface) => {\r\n // // this.siteDefaults = new SiteDefaults(siteDefaults, !!sharedLineSiteIds);\r\n // // const copiedSiteDefaults = JSON.parse(JSON.stringify(siteDefaults));\r\n // // this.originalSiteDefaults = new SiteDefaults(copiedSiteDefaults, !!sharedLineSiteIds);\r\n // }));\r\n // .pipe(this.handleError(true, true));\r\n }\r\n\r\n public getVoiceMailUserTemplates(siteId: number) {\r\n return this.apiService.fetch(API.VM_USER_TEMPLATES.replace(':siteId', String(siteId)), null, true)\r\n .pipe(map((templates: string[]) => {\r\n // this.voiceMailTemplates = templates;\r\n }));\r\n // .pipe(this.handleError(false, true));\r\n }\r\n\r\n public fetchAllUserTemplates(siteId: number): Observable<UserTemplateInterface[]> {\r\n const params = {\r\n siteId: siteId,\r\n };\r\n return this.apiService.fetch(API.USER_TEMPLATES_UPLOAD_LIST, params)\r\n .pipe(tap((result: UserTemplateInterface[]) => {\r\n this.templatesListSubject$.next(result);\r\n }));\r\n }\r\n\r\n public getUserTemplateToken(id: string, customerId: string): Observable<any> {\r\n return this.apiService.fetch(API.USER_TEMPLATE_TOKEN.replace(':customerId', customerId).replace(':id', id))\r\n // .pipe(this.handleError(false, true));\r\n }\r\n\r\n public getAvailableDnInRanges(siteId: string, params: any): any {\r\n return this.apiService.fetch(API.AVAILABLE_DN_IN_RANGES.replace(':siteId', siteId), params);\r\n }\r\n\r\n public getLdapUsers(siteId: string, params: any): Observable<any> {\r\n return this.apiService.fetch(API.LDAP_USERS.replace(':siteId', siteId), params);\r\n }\r\n\r\n public checkUserIdExisting(siteId: string, userId: string): Observable<any> {\r\n return this.apiService.fetch(API.USER_CHECK_ID_EXISTING.replace(':siteId', siteId).replace(':userId', userId));\r\n }\r\n\r\n public saveTemplateUser(user: any, templateId: string, siteId: string): Observable<any> {\r\n return this.apiService.post(API.CREATE_NEW_USER_FROM_TEMPLATE, user, { siteId: siteId, templateId: templateId });\r\n }\r\n\r\n public getDeviceDefaults(siteId: string, deviceType: string): Observable<DeviceDefaultsInterface> {\r\n const encodedType = encodeURIComponent(deviceType);\r\n return this.apiService.fetch(\r\n API.DEVICE_DEFAULTS.replace(':siteId', siteId).replace(':deviceType', encodedType)\r\n );\r\n }\r\n}\r\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MaterialModule } from \"./material.module\";\r\nimport { NgApexchartsModule } from \"ng-apexcharts\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { ReactiveFormsModule, FormsModule } from \"@angular/forms\";\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n NgApexchartsModule,\r\n HttpClientModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n ],\r\n exports: [\r\n MaterialModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n MatTableModule,\r\n NgApexchartsModule,\r\n HttpClientModule,\r\n ]\r\n})\r\nexport class SharedModule {}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\r\n\r\nexport interface DeviceNameValidatorOptions {\r\n regex: string;\r\n caption?: string | null;\r\n}\r\n\r\nexport function deviceNameValidator(options: DeviceNameValidatorOptions): ValidatorFn {\r\n return (control: AbstractControl): ValidationErrors | null => {\r\n const raw = String(control.value ?? '').trim();\r\n if (!raw || !options.regex?.trim()) {\r\n return null;\r\n }\r\n\r\n try {\r\n const rule = new RegExp(`^(?:${options.regex})$`);\r\n if (!rule.test(raw)) {\r\n return {\r\n deviceName: {\r\n caption: options.caption || options.regex,\r\n },\r\n };\r\n }\r\n } catch {\r\n return null;\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","export const getSavableData = (model: any, exclude?: Array<string>) => {\r\n let result = Object.keys(model);\r\n if (exclude && exclude.length) {\r\n result = result.filter(key => !exclude.some(item => item === key));\r\n }\r\n return result.reduce((result: any, key) => {\r\n if (model[key] instanceof Array && model[key].length && model[key][0].getSavableData) {\r\n result[key] = model[key].map((item: any) => item.getSavableData());\r\n } else if (model[key] instanceof Object && model[key].getSavableData) {\r\n result[key] = model[key].getSavableData();\r\n } else {\r\n result[key] = model[key];\r\n }\r\n return result;\r\n }, {});\r\n};","import { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\r\nimport { getSavableData } from '../shared/services/utils';\r\n\r\nexport interface SiteInterface {\r\n id: number;\r\n name: string;\r\n country: any;\r\n locationName: string;\r\n isAfterTtu: boolean;\r\n shortName: string;\r\n ttuEnableDate?: string;\r\n cucm: any;\r\n cuc: any;\r\n hasActivated?: boolean;\r\n // hqStatus: boolean;\r\n deactivateDate?: string;\r\n siteUniqueId?: number;\r\n form: FormGroup;\r\n\r\n initForm: () => void;\r\n getSavableData: () => void;\r\n getId: () => void;\r\n}\r\n\r\n\r\nexport class Site implements SiteInterface {\r\n id!: number;\r\n name!: string;\r\n country: any;\r\n locationName!: string;\r\n isAfterTtu!: boolean;\r\n shortName!: string;\r\n ttuEnableDate?: string;\r\n cucm: any;\r\n cuc: any;\r\n hasActivated?: boolean;\r\n // hqStatus: boolean;\r\n deactivateDate?: string;\r\n address1?: string;\r\n address2?: string;\r\n city?: string;\r\n state?: string;\r\n zipCode?: string;\r\n form!: FormGroup;\r\n\r\n constructor(site?: SiteInterface) {\r\n Object.assign(this, site);\r\n this.initForm();\r\n }\r\n\r\n initForm() {\r\n const formBuilder = new FormBuilder();\r\n const formSettings = {\r\n name: [this.name || '', [Validators.required]],\r\n shortName: [this.shortName || '', [Validators.required]],\r\n cucm: [this.cucm || ''],\r\n cuc: [this.cuc || ''],\r\n address1: [this.address1 || ''],\r\n zipCode: [this.country || ''],\r\n city: [this.city || ''],\r\n state: [this.state || ''],\r\n country: [this.country || '', [Validators.required]],\r\n isAfterTtu: [this.isAfterTtu || ''],\r\n ttuEnableDate: [this.ttuEnableDate || '']\r\n };\r\n\r\n this.form = formBuilder.group(formSettings);\r\n }\r\n\r\n getSavableData() {\r\n const nonSavableData = ['form'];\r\n return getSavableData(this, nonSavableData);\r\n }\r\n\r\n getId() {\r\n return this.id;\r\n }\r\n}\r\n\r\nexport interface SiteTemplateInterface {\r\n id: number;\r\n routePartitionFilter: string | string[];\r\n devicePoolFilter: string | string[];\r\n cssFilter: string | string[] | undefined;\r\n voicemailProfileFilter: string | string[];\r\n lineCss: string;\r\n deviceCss: string;\r\n callForwardAllCss: string;\r\n location: string;\r\n voicemailUserTemplate: string;\r\n routePartition: string;\r\n devicePool: string;\r\n voicemailProfile: string;\r\n externalCallerId: string;\r\n huntPilotPartition: string;\r\n callPickupGroupPartition: string;\r\n meetMeConferencePartition: string;\r\n callParkPartition: string;\r\n userLocale: string;\r\n networkLocale: string;\r\n cucmGroup: string;\r\n softkeyTemplates: string;\r\n phoneButtonTemplate: string;\r\n phoneSecurityProfile: string;\r\n sipProfile: string;\r\n rdpCss: string;\r\n rdpRerouteCss: string;\r\n commonPhoneProfile: string;\r\n subscribeCss: string;\r\n enableEm: boolean | string;\r\n forwardHuntBusyCSS: string;\r\n forwardHuntNoAnswerCSS: string;\r\n forwardBusyInternalCss: string;\r\n forwardBusyExternalCss: string;\r\n forwardNoAnswerInternalCss: string;\r\n forwardNoAnswerExternalCss: string;\r\n forwardNoCoverageInternalCss: string;\r\n forwardNoCoverageExternalCss: string;\r\n forwardOnCtiFailureCss: string;\r\n forwardUnregisteredInternalCss: string;\r\n forwardUnregisteredExternalCss: string;\r\n rdpExternalCallerId: string;\r\n noAnswerRingDuration: string;\r\n ucServiceProfile: string;\r\n phoneSystem: string;\r\n maxNumberOfCalls: string;\r\n busyTrigger: string;\r\n didPartition: string;\r\n didCss: string;\r\n vossCompatibilitySiteCode: string;\r\n vossCompatibilityRidCode: string;\r\n dialPlanType: string;\r\n emService: string;\r\n emergencyPartition?: string;\r\n cucPartition: string;\r\n alertingName?: string;\r\n displayCallerId?: string;\r\n lineTextLabel?: string;\r\n textLabel?: string;\r\n internalTranslationPartition?: string;\r\n internalTranslationCss?: string;\r\n plarCss?: string;\r\n lineDescription?: string;\r\n deviceDescription?: string;\r\n sharedSitesCssFilter?: string[];\r\n sharedSitesRPFilter?: string[];\r\n reroutingCss?: string;\r\n udpDeviceType: string;\r\n udpDeviceProtocol: string;\r\n udpButtonTemplate: string;\r\n userUserLocale: string;\r\n userAccessControlGroups?: string;\r\n}\r\n\r\nexport class SiteDefaults implements SiteTemplateInterface {\r\n id!: number;\r\n routePartitionFilter: string[];\r\n devicePoolFilter: string[];\r\n cssFilter: string[];\r\n voicemailProfileFilter: string[];\r\n lineCss!: string;\r\n deviceCss!: string;\r\n callForwardAllCss!: string;\r\n location!: string;\r\n voicemailUserTemplate!: string;\r\n routePartition!: string;\r\n devicePool!: string;\r\n voicemailProfile!: string;\r\n externalCallerId!: string;\r\n huntPilotPartition!: string;\r\n callPickupGroupPartition!: string;\r\n meetMeConferencePartition!: string;\r\n callParkPartition!: string;\r\n userLocale!: string;\r\n networkLocale!: string;\r\n cucmGroup!: string;\r\n softkeyTemplates!: string;\r\n phoneButtonTemplate!: string;\r\n phoneSecurityProfile!: string;\r\n sipProfile!: string;\r\n rdpCss!: string;\r\n rdpRerouteCss!: string;\r\n commonPhoneProfile!: string;\r\n subscribeCss!: string;\r\n enableEm!: boolean;\r\n forwardHuntBusyCSS!: string;\r\n forwardHuntNoAnswerCSS!: string;\r\n forwardBusyInternalCss!: string;\r\n forwardBusyExternalCss!: string;\r\n forwardNoAnswerInternalCss!: string;\r\n forwardNoAnswerExternalCss!: string;\r\n forwardNoCoverageInternalCss!: string;\r\n forwardNoCoverageExternalCss!: string;\r\n forwardOnCtiFailureCss!: string;\r\n forwardUnregisteredInternalCss!: string;\r\n forwardUnregisteredExternalCss!: string;\r\n rdpExternalCallerId!: string;\r\n noAnswerRingDuration!: string;\r\n ucServiceProfile!: string;\r\n phoneSystem!: string;\r\n maxNumberOfCalls!: string;\r\n busyTrigger!: string;\r\n didPartition!: string;\r\n didCss!: string;\r\n vossCompatibilitySiteCode!: string;\r\n vossCompatibilityRidCode!: string;\r\n dialPlanType!: string;\r\n emService!: string;\r\n cucPartition!: string;\r\n alertingName?: string;\r\n displayCallerId?: string;\r\n textLabel?: string;\r\n internalTranslationPartition?: string;\r\n internalTranslationCss?: string;\r\n plarCss?: string;\r\n lineDescription?: string;\r\n deviceDescription?: string;\r\n sharedSitesCssFilter!: string[];\r\n sharedSitesRPFilter!: string[];\r\n udpDeviceType!: string;\r\n udpDeviceProtocol!: string;\r\n udpButtonTemplate!: string;\r\n userUserLocale!: string;\r\n userAccessControlGroups?: string;\r\n\r\n constructor(siteDefaults?: SiteTemplateInterface, isSharedLineSite?: boolean) {\r\n this.routePartitionFilter = [];\r\n this.devicePoolFilter = [];\r\n this.cssFilter = [];\r\n this.voicemailProfileFilter = [];\r\n if (siteDefaults) {\r\n Object.assign(this, siteDefaults);\r\n this.enableEm = siteDefaults.enableEm === 'true';\r\n this.routePartitionFilter.sort();\r\n this.devicePoolFilter.sort();\r\n this.cssFilter.sort();\r\n this.voicemailProfileFilter.sort();\r\n }\r\n if (isSharedLineSite) {\r\n this.cssFilter = siteDefaults?.sharedSitesCssFilter || [];\r\n this.routePartitionFilter = siteDefaults?.sharedSitesRPFilter || [];\r\n }\r\n }\r\n}\r\n\r\nexport interface UserTemplateInterface {\r\n id: number;\r\n name: string;\r\n description: string;\r\n customerId: number;\r\n endUser: any;\r\n userRequiredFields?: string[];\r\n deviceRequiredFields?: string[];\r\n lineRequiredFields?: string[];\r\n editMode?: boolean;\r\n isChanged?: boolean;\r\n type?: string;\r\n ownerType?: string;\r\n globalTemplate?: boolean;\r\n}\r\n","export const getSavableData = (model: any, exclude?: Array<string>) => {\r\n let result = Object.keys(model);\r\n if (exclude && exclude.length) {\r\n result = result.filter(key => !exclude.some(item => item === key));\r\n }\r\n return result.reduce((result: any, key) => {\r\n if (model[key] instanceof Array && model[key].length && model[key][0].getSavableData) {\r\n result[key] = model[key].map((item: any) => item.getSavableData());\r\n } else if (model[key] instanceof Object && model[key].getSavableData) {\r\n result[key] = model[key].getSavableData();\r\n } else {\r\n result[key] = model[key];\r\n }\r\n return result;\r\n }, {});\r\n};","import { getSavableData } from '../utils/model';\r\n\r\nexport interface LdapUserRow {\r\n userId: string;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n}\r\n\r\nexport type LdapQueryType = 'userId' | 'firstName' | 'lastName';\r\n\r\nexport interface OverviewUserRow extends LdapUserRow {\r\n userTemplate: string;\r\n}\r\n\r\nexport interface OverviewLineRow {\r\n number: string;\r\n did: string;\r\n routePartitionName: string;\r\n css: string;\r\n description: string;\r\n}\r\n\r\nexport interface OverviewDeviceRow {\r\n name: string;\r\n deviceType: string;\r\n lines: string;\r\n description: string;\r\n}\r\n\r\nexport type UserCreationType = 'CUCM' | 'MT';\r\n\r\nexport interface UserDetailsForm {\r\n userId: string;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n}\r\n\r\nexport interface UserDetailsLineFormValue {\r\n lineNumber: string;\r\n number: string;\r\n routePartition: string;\r\n}\r\n\r\nexport interface UserDetailsDeviceFormValue {\r\n deviceType: string;\r\n protocol: string;\r\n buttonTemplate: string;\r\n name: string;\r\n}\r\n\r\nexport interface UserDetailsFormValue {\r\n userId: string;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n lines: UserDetailsLineFormValue[];\r\n devices: UserDetailsDeviceFormValue[];\r\n deviceProfiles: UserDetailsDeviceFormValue[];\r\n}\r\n\r\nexport interface LineOption {\r\n number: string;\r\n did: string;\r\n css: string;\r\n description: string;\r\n}\r\n\r\nexport interface SelectedLineRow {\r\n lineNumber: string | null;\r\n routePartitionName: string | null;\r\n}\r\n\r\nexport interface DeviceEntry {\r\n deviceType: string;\r\n protocol: string;\r\n buttonTemplate: string;\r\n name: string;\r\n}\r\n\r\nexport interface TemplateLineLike {\r\n directoryNumber?: {\r\n directoryNumber?: string;\r\n routePartitionName?: string | null;\r\n templateDirectoryNumber?: string | null;\r\n };\r\n description?: string | null;\r\n callingSearchSpace?: string | { name?: string | null } | null;\r\n didPatterns?: Array<{ pattern?: string | null }> | null;\r\n}\r\n\r\nexport interface TemplateDeviceLike {\r\n deviceType?: string | null;\r\n protocol?: string | null;\r\n buttonTemplate?: string | null;\r\n name?: string | null;\r\n lineAssociations?: Array<{\r\n logMissedCall?: boolean | string | null;\r\n directoryNumber?: {\r\n directoryNumber?: string;\r\n routePartitionName?: string | null;\r\n templateDirectoryNumber?: string | null;\r\n } | null;\r\n }>;\r\n}\r\n\r\nexport interface TemplateEndUserLike {\r\n userid?: string | null;\r\n firstName?: string | null;\r\n lastName?: string | null;\r\n email?: string | null;\r\n lines?: TemplateLineLike[] | null;\r\n devices?: TemplateDeviceLike[] | null;\r\n}\r\n\r\n\r\nexport interface UserTemplateInterface {\r\n id: number;\r\n name: string;\r\n description: string;\r\n createOrUpload: string | null;\r\n userTemplateSettings: UserTemplateSetting[];\r\n customerId: number;\r\n userRequiredFields: string[];\r\n deviceRequiredFields: string[];\r\n udpRequiredFields: string[];\r\n lineRequiredFields: string[];\r\n endUser: EndUserInterface;\r\n type: string;\r\n globalTemplate: boolean;\r\n}\r\n\r\nexport interface UserTemplateSetting {\r\n // Add fields if needed\r\n}\r\n\r\n// export class User implements EndUserInterface {\r\n// userid?: string;\r\n// firstName?: string;\r\n// lastName?: string;\r\n// middleName?: string;\r\n// email?: string;\r\n// domain?: string;\r\n// department?: string;\r\n// telephoneNumber?: string;\r\n// homeNumber?: string;\r\n// mobileNumber?: string;\r\n// pagerNumber?: string;\r\n// displayName?: string;\r\n// ldapIntegrated?: boolean;\r\n// sparkLicenses: Array<any>;\r\n// extensionMobility: any;\r\n// singleNumberReach?: SingleNumberReach;\r\n// primaryLineReference: LineDirectory;\r\n// voicemail: Voicemail;\r\n// devices: Array<Device>;\r\n// deviceProfiles: Array<Device>;\r\n// lines: Array<Line>;\r\n// features: Array<string>;\r\n// ucServiceProfile: string;\r\n// subscribeCss: string;\r\n// presenceGroup: string;\r\n// allowDeviceControlFromCti: boolean;\r\n// enableCrossClusterEm: boolean;\r\n// enableUserToHostConferenceNow: boolean;\r\n// attendeesAccessCode: string;\r\n// manager: string;\r\n// title: string;\r\n// associatedPc: string;\r\n// userProfile: string;\r\n// enableMobileVoiceAccess: boolean;\r\n// mlppUserIdNumber: string;\r\n// mlppPrecedencePattern: string;\r\n// userLocale: string;\r\n// siteId: number;\r\n// siteName: string;\r\n// location: string;\r\n// lineAppearances: Array<LineAppearance>;\r\n// meetMes: Array<MeetMeConferencing>;\r\n// token: string;\r\n// mlppPassword: string;\r\n// password?: string;\r\n// digestCredentials?: string;\r\n// newUserid: string;\r\n// homeCluster: boolean;\r\n// directoryUri: string;\r\n// createUserMode: boolean;\r\n// pin: string;\r\n// migrationVmUnchanged: boolean;\r\n// migrationImPUnchanged: boolean;\r\n// telecomManagerRule: boolean;\r\n// userTemplateUdpDeviceTypesRules: UdpDeviceTypesRule[];\r\n// deletedUserTemplateUdpDeviceTypesRules: UdpDeviceTypesRule[];\r\n// hasModifiedCache = false;\r\n\r\n// vmOnlyUser?: boolean;\r\n\r\n// constructor(user: EndUserInterface, devicesStates = null, deviceProfilesStates = null, linesStates = null) {\r\n// Object.assign(this, user || {});\r\n// this.extensionMobility = new ExtensionMobility(this.extensionMobility);\r\n// this.singleNumberReach = new SingleNumberReach(this.singleNumberReach);\r\n// this.primaryLineReference = new LineDirectory(this.primaryLineReference);\r\n// this.voicemail = new Voicemail(this.voicemail);\r\n// this.devices = !this.devices ? [] : this.devices.map(device => new Device(device));\r\n// this.userTemplateUdpDeviceTypesRules = !this.userTemplateUdpDeviceTypesRules ? [] : this.userTemplateUdpDeviceTypesRules.map(rule => new UdpDeviceTypesRule(rule));\r\n// this.deviceProfiles = !this.deviceProfiles ? [] : this.deviceProfiles\r\n// .map(device => new Device(device, appValidators, DeviceKind.deviceProfile));\r\n// this.lines = !this.lines ? [] : this.lines.map(line => new Line(line));\r\n// this.lineAppearances = !this.lineAppearances ? [] : this.lineAppearances.map(lineAppearance => new LineAppearance(lineAppearance));\r\n// this.meetMes = !this.meetMes ? [] : this.meetMes.map(meetMe => new MeetMeConferencing(meetMe));\r\n// this.sparkLicenses = !this.sparkLicenses ? [] : this.sparkLicenses.map(spark => new Spark(spark));\r\n// this.features = this.features || [];\r\n// this.password = null;\r\n// this.digestCredentials = null;\r\n// this.deletedUserTemplateUdpDeviceTypesRules = [];\r\n// }\r\n\r\n// getSavableData() {\r\n// const excludedFields: string[] = ['form', 'editMode$', 'viewMode', 'token', 'hasModifiedCache', 'deletedUserTemplateUdpDeviceTypesRules'];\r\n// return getSavableData(this, excludedFields);\r\n// }\r\n// }\r\n\r\nexport class EndUser implements Partial<EndUserInterface> {\r\n lines: LineInterface[] = [];\r\n voicemail: Voicemail;\r\n constructor(init?: EndUserInterface) {\r\n Object.assign(this, init || {});\r\n this.voicemail = new Voicemail(init?.voicemail);\r\n }\r\n}\r\n\r\nexport interface EndUserInterface {\r\n userid?: string | null;\r\n email?: string | null;\r\n firstName?: string | null;\r\n lastName?: string | null;\r\n domain?: string | null;\r\n customerId?: number | null;\r\n department?: string | null;\r\n userProfile?: string | null;\r\n manager?: string | null;\r\n enableMobileVoiceAccess?: boolean | null;\r\n associatedPc?: string | null;\r\n userLocale?: string | null;\r\n digestCredentials?: string | null;\r\n middleName?: string | null;\r\n title?: string | null;\r\n telephoneNumber?: string | null;\r\n homeNumber?: string | null;\r\n mobileNumber?: string | null;\r\n pagerNumber?: string | null;\r\n displayName?: string | null;\r\n directoryUri?: string | null;\r\n presenceGroup?: string | null;\r\n subscribeCss?: string | null;\r\n allowDeviceControlFromCti?: boolean | null;\r\n enableCrossClusterEm?: boolean | null;\r\n mlppUserIdNumber?: string | null;\r\n mlppPrecedencePattern?: string | null;\r\n createUserMode?: boolean;\r\n enableMobility?: boolean | null;\r\n devices?: DeviceInterface[];\r\n deviceProfiles?: DeviceInterface[];\r\n lines: LineInterface[];\r\n singleNumberReach?: {\r\n associatedLines?: LineInterface[] | null;\r\n remoteDestinations?: {\r\n lineAssociations?: LineInterface[] | null;\r\n }[] | null;\r\n remoteDestinationProfileName?: string | null;\r\n } | null;\r\n primaryLineReference?: unknown | null;\r\n voicemail?: Voicemail;\r\n features?: Feature[];\r\n migrationVmUnchanged?: boolean | null;\r\n migrationImPUnchanged?: boolean | null;\r\n ucServiceProfile?: string | null;\r\n telecomManagerRule?: boolean;\r\n userTemplateUdpDeviceTypesRules?: UserTemplateUdpDeviceTypesRule[];\r\n ldapIntegrated?: boolean | null;\r\n}\r\n\r\nexport interface CallInfoDisplay {\r\n callerName?: string | null;\r\n callerNumber?: string | null;\r\n redirectedNumber?: string | null;\r\n dialedNumber?: string | null;\r\n}\r\n\r\nexport interface DidPattern {\r\n calledPartyTransformationMask?: string | null;\r\n pattern?: string | null;\r\n}\r\n\r\nexport interface ProtocolSpecificDefaults {\r\n buttonTemplates: string[];\r\n securityProfiles: string[];\r\n supportedExpansionModules: string[];\r\n supportsSoftkeyTemplates: boolean;\r\n supportsBLF: boolean;\r\n supportsEM: boolean;\r\n supportsMultipleCallDisplay: boolean;\r\n}\r\n\r\nexport interface DeviceDefaultsInterface {\r\n deviceType: string;\r\n deviceNameRegex: string;\r\n deviceNameExplained: string;\r\n networkLocales: string[];\r\n protocolProtocolSpecificDefault: Record<string, ProtocolSpecificDefaults>;\r\n}\r\n\r\nexport interface DeviceInterface {\r\n deviceType: string | null;\r\n protocol: string | null;\r\n name: string | null;\r\n newName: string | null;\r\n prefix: string | null;\r\n description?: string | null;\r\n buttonTemplate: string | null;\r\n location: string | null;\r\n devicePoolName: string | null;\r\n softkeyTemplate: string | null;\r\n entityChangeType: string | null;\r\n createDeviceMode?: boolean;\r\n callingSearchSpaceName: string | null;\r\n commonPhoneConfigName: string | null;\r\n securityProfile: string | null;\r\n userLocale: string | null;\r\n networkLocale: string | null;\r\n enabledExtensionMobility: boolean | null;\r\n firstExpansionModule: string | null;\r\n secondExpansionModule: string | null;\r\n withUdp: boolean;\r\n lineAssociations: LineAssociation[];\r\n sipProfile: string | null;\r\n subscribeCallingSearchSpaceName: string | null;\r\n extraOptions: DeviceExtraOptions;\r\n userDeviceType: string | null;\r\n builtInBridge: string | null;\r\n services: Service[];\r\n speedDials: SpeedDial[];\r\n busyLampFields: BusyLampField[];\r\n webexUUID: string | null;\r\n pkid: string | null;\r\n deviceDefaults?: DeviceDefaultsInterface | null;\r\n nameValidationRegex?: string | null;\r\n nameValidationCaption?: string | null;\r\n}\r\n\r\nexport interface LineAssociation {\r\n linePkid: string | null;\r\n index: number;\r\n position: string | null;\r\n directoryNumber: DirectoryNumber;\r\n e164Mask: string | null;\r\n textLabel: string | null;\r\n displayLabel: string | null;\r\n displayLabelAscii: string | null;\r\n maxNumberOfCalls: number | null;\r\n busyTrigger: number | null;\r\n recordingOption: string | null;\r\n recordingProfile: string | null;\r\n recordingMediaSource: string | null;\r\n visualMWI: boolean | null;\r\n audibleMWI: boolean | null;\r\n ringSetting_idle: string | null;\r\n ringSetting_active: string | null;\r\n pickupAAS_idle: string | null;\r\n pickupAAS_active: string | null;\r\n monitorCSS: string | null;\r\n logMissedCall: boolean | string | null;\r\n callInfoDisplay: CallInfoDisplay | string | null;\r\n lineLocalId: string;\r\n didPattern: DidPattern | string | null;\r\n entityChangeType?: string | null;\r\n sharedDevices: SharedDevice[];\r\n sharedUsers: SharedUser[];\r\n ownerUserId: string[];\r\n associated: boolean;\r\n patternUsage: string | null;\r\n alertingName: string | null;\r\n populateWithDid: boolean;\r\n}\r\n\r\nexport interface DirectoryNumber {\r\n // directoryNumber: string | null;\r\n // routePartitionName: string | null;\r\n // pkid: string | null;\r\n // dnType: string | null;\r\n // subType: string | null;\r\n\r\n directoryNumber: string;\r\n templateDirectoryNumber?: string;\r\n routePartitionName: string;\r\n pkid?: string | null;\r\n dnType?: string | null;\r\n subType?: string | null;\r\n displayValue?: string;\r\n}\r\n\r\nexport interface DeviceExtraOptions {\r\n mediaResourceGroupList: string | null;\r\n userHoldMOHAudioSourceId: string | null;\r\n userHoldMOHAudioSourceName: string | null;\r\n networkMOHAudioSourceId: string | null;\r\n networkMOHAudioSourceName: string | null;\r\n aarCss: string | null;\r\n aarGroup: string | null;\r\n privacy: string | null;\r\n deviceMobilityMode: string | null;\r\n mobilityUserId: string | null;\r\n phonePersonalization: string | null;\r\n servicesProvisioning: string | null;\r\n phoneLoadName: string | null;\r\n phoneIdleBLFAlertSetting: string | null;\r\n phoneBusyBLFAlertSetting: string | null;\r\n useTrustedRelayPoint: boolean | null;\r\n alwaysUsePrimeLine: boolean | null;\r\n alwaysUsePrimeLineForVoiceMessage: boolean | null;\r\n geolocation: string | null;\r\n ignorePresentationIndicators: boolean | null;\r\n loggedIntoHuntGroup: boolean | null;\r\n enabledExtensionMobility: boolean | null;\r\n remoteDevice: string | null;\r\n protectedDevice: boolean | null;\r\n hotlineDevice: boolean;\r\n commonDeviceConfigName: string | null;\r\n useDevicePoolCgpnIngressDN: boolean | null;\r\n cgpnIngressDN: string | null;\r\n useDevicePoolCgpnTransformCss: boolean | null;\r\n cgpnTransformationCss: string | null;\r\n packetCaptureMode: string | null;\r\n packetCaptureDuration: number | null;\r\n blfPresenceGroup: string | null;\r\n sipDialRules: string | null;\r\n mtpPreferredOriginatingCodec: string | null;\r\n rerouteCss: string | null;\r\n subscribeCss: string | null;\r\n digestUser: string | null;\r\n mtpRequired: boolean | null;\r\n unattendedPort: boolean | null;\r\n requireDtmfReception: boolean | null;\r\n informationUrl: string | null;\r\n directoryUrl: string | null;\r\n messagesUrl: string | null;\r\n servicesUrl: string | null;\r\n authenticationUrl: string | null;\r\n proxyServerUrl: string | null;\r\n idleUrl: string | null;\r\n idleTimeout: number | null;\r\n secureAuthenticationUrl: string | null;\r\n secureDirectoryUrl: string | null;\r\n secureIdleUrl: string | null;\r\n secureInformationUrl: string | null;\r\n secureMessageUrl: string | null;\r\n secureServicesUrl: string | null;\r\n mlppDomain: string | null;\r\n mlppIndication: string | null;\r\n mlppPreemption: string | null;\r\n confidentialAccessMode: string | null;\r\n confidentialAccessLevel: string | null;\r\n confidentialAccessLevelName: string | null;\r\n doNotDisturb: boolean | null;\r\n dndOption: string | null;\r\n dndIncomingCallAlert: string | null;\r\n disableSpeakerphone: boolean | null;\r\n disableSpeakerphoneAndHeadset: boolean | null;\r\n forwardingDelay: number | null;\r\n pcPort: boolean | null;\r\n settingsAccess: string | null;\r\n gratuitousARP: boolean | null;\r\n pcVoiceVlanAccess: string | null;\r\n videoCapabilities: string | null;\r\n webAccess: boolean | null;\r\n daysDisplayNotActive: number | null;\r\n displayOnTime: string | null;\r\n displayOnDuration: number | null;\r\n displayIdleTimeout: number | null;\r\n wirelessHeadsetHookswitchControl: boolean | null;\r\n minRingVolume: number | null;\r\n showAllCallsOnPL: boolean | null;\r\n lineMode: string | null;\r\n latentCapabilityRegistration: boolean | null;\r\n actionableAlert: boolean | null;\r\n revertToAllCalls: boolean | null;\r\n widebandHeadsetUIControl: boolean | null;\r\n widebandHeadset: boolean | null;\r\n authentication802: boolean | null;\r\n spanToPcPort: boolean | null;\r\n headsetMonitor: boolean | null;\r\n headsetRecording: boolean | null;\r\n updatedFields: string[];\r\n enableCdpSwPort: boolean | null;\r\n enableCdpPcPort: boolean | null;\r\n enableLldpPcPort: boolean | null;\r\n defaultWallpaperFile: string | null;\r\n analogGatewayPortInformation: string | null;\r\n loadServer: string | null;\r\n peerFirmwareSharing: string | null;\r\n}\r\n\r\nexport interface LineInterface {\r\n directoryNumber: DirectoryNumber;\r\n callingSearchSpace: string | null;\r\n description: string | null;\r\n localId: string;\r\n entityChangeType: string | null;\r\n alertingName: string | null;\r\n asciiAlertingName: string | null;\r\n callForwardAll: CallForward;\r\n callForwardAllSecondaryCSS: CallForward;\r\n callForwardBusyInternal: CallForward;\r\n callForwardBusyExternal: CallForward;\r\n callForwardNoAnswerInternal: CallForward;\r\n callForwardNoAnswerExternal: CallForward;\r\n callForwardNoCoverageInternal: CallForward;\r\n callForwardNoCoverageExternal: CallForward;\r\n callForwardOnCTIFailure: CallForward;\r\n callForwardUnregisteredInternal: CallForward;\r\n callForwardUnregisteredExternal: CallForward;\r\n voiceMailProfile: string | null;\r\n noAnswerRingDuration: number | null;\r\n autoAnswer: string | null;\r\n callPickupGroup: string | null;\r\n aarSettings: AarSettings;\r\n parkMonitoringInternal: string | null;\r\n parkMonitoringExternal: string | null;\r\n urgentPriority: string | null;\r\n blfPresenceGroup: string | null;\r\n userHoldMOHAudioSourceId: string | null;\r\n userHoldMOHAudioSourceName: string | null;\r\n networkMOHAudioSourceId: string | null;\r\n networkMOHAudioSourceName: string | null;\r\n rejectAnonymousCall: boolean | null;\r\n enterpriseAltNum: string | null;\r\n e164AltNum: string | null;\r\n directoryUris: string[];\r\n callForwardAlternateParty: CallForward;\r\n mlppNoAnswerRingDuration: number | null;\r\n confidentialAccessMode: string | null;\r\n confidentialAccessLevel: string | null;\r\n confidentialAccessLevelName: string | null;\r\n callControlAgentProfile: string | null;\r\n holdReversionRingDuration: number | null;\r\n holdReversionNotificationInterval: number | null;\r\n partyEntranceTone: string | null;\r\n pstnFailover: string | null;\r\n newToUser: boolean | null;\r\n didPatterns: string[];\r\n}\r\n\r\nexport interface CallForward {\r\n forwardToVoiceMail: boolean | null;\r\n destination: string | null;\r\n callingSearchSpace: string | null;\r\n duration: number | null;\r\n}\r\n\r\nexport interface AarSettings {\r\n aarDestinationMask: string | null;\r\n aarGroup: string | null;\r\n aarVoiceMailEnabled: boolean | null;\r\n aarKeepCallHistory: boolean | null;\r\n}\r\n\r\nexport interface DeviceProfile {\r\n}\r\n\r\nexport interface Feature {\r\n}\r\n\r\nexport interface UserTemplateUdpDeviceTypesRule {\r\n id: number;\r\n originalDeviceType: string;\r\n protocol: string;\r\n newDeviceType: string;\r\n originNewDeviceType: string;\r\n entityChangeType: string;\r\n newProtocol: string;\r\n isTemplateRule: boolean;\r\n localId: number;\r\n}\r\n\r\nexport interface SharedDevice {\r\n}\r\n\r\nexport interface SharedUser {\r\n}\r\n\r\nexport interface Service {\r\n}\r\n\r\nexport interface SpeedDial {\r\n}\r\n\r\nexport interface BusyLampField {\r\n}\r\n\r\nexport enum DnRangeType {\r\n extension = 'EXTENSION',\r\n cpg = 'CPG',\r\n callpark = 'CALLPARK',\r\n huntgroup = 'HUNTGROUP',\r\n meetme = 'MEETME',\r\n did = 'DID'\r\n}\r\n\r\nexport interface DnRangeInterface {\r\n from: string;\r\n to: string;\r\n prefix: string;\r\n routePartition: string;\r\n dnType: DnRangeType;\r\n tempIdx: number;\r\n}\r\n\r\nexport interface AvailablePhoneNumberRangeInterface {\r\n phoneNumberRange: DnRangeInterface;\r\n usedNumbers: string[];\r\n requestedNumber: string;\r\n unUsedNumbersWithDids: any[];\r\n}\r\n\r\nexport interface AvailableRangeInterface {\r\n availableNumberList: AvailablePhoneNumberRangeInterface[];\r\n}\r\n\r\nexport enum UserViewType {\r\n details = 0,\r\n devices = 1,\r\n lines = 2,\r\n snr = 3,\r\n features = 4,\r\n overview = 5\r\n}\r\n\r\nexport interface ListUserInterface {\r\n userid: string;\r\n firstName?: string;\r\n lastName?: string;\r\n email?: string;\r\n telephoneNumber?: string;\r\n viewMode?: UserViewType;\r\n devices: DeviceInterface[];\r\n deviceProfiles: DeviceInterface[];\r\n lines?: LineInterface[];\r\n siteId?: number;\r\n siteName?: string;\r\n checked?: boolean;\r\n}\r\n\r\nexport interface LdapUsersTableResponse {\r\n total: number;\r\n pageData: ListUserInterface[];\r\n}\r\n\r\n// export class ExtensionMobility implements ExtensionMobilityInterface {\r\n// deviceType: string = '';\r\n// deviceProfileName: string = '';\r\n// buttonTemplate: string = '';\r\n// services: string[] = [];\r\n// protocol: string = '';\r\n// userLocale: string = '';\r\n// lineAssociations: LineAssociation[] = [];\r\n// speedDials: SpeedDial[] = [];\r\n\r\n// constructor(extensionMobility: ExtensionMobilityInterface) {\r\n// Object.assign(this, extensionMobility || {});\r\n// }\r\n\r\n// getSavableData() {\r\n// return getSavableData(this);\r\n// }\r\n\r\n// }\r\n// export class ExtensionMobilityInterface {\r\n// deviceType?: string;\r\n// deviceProfileName?: string;\r\n// buttonTemplate?: string;\r\n// services?: string[];\r\n// protocol?: string;\r\n// userLocale?: string;\r\n// lineAssociations: LineAssociation[] = [];\r\n// speedDials: SpeedDial[] = [];\r\n\r\n// constructor(extensionMobility: ExtensionMobilityInterface) {\r\n// Object.assign(this, extensionMobility || {});\r\n// this.speedDials.map(dial => new SpeedDial(dial, false));\r\n// }\r\n\r\n// getSavableData() {\r\n// return getSavableData(this);\r\n// }\r\n\r\n// }\r\n\r\n// export interface SingleNumberReachInterface {\r\n// remoteDestinationProfileName: string;\r\n// remoteDestinations?: RemoteDestinationInterface[];\r\n// devicePool?: string;\r\n// css?: string;\r\n// rerouteCss?: string;\r\n// }\r\n\r\n// export interface RemoteDestinationInterface {\r\n// name: string;\r\n// destination: string;\r\n// answerTooSoonTimer: number;\r\n// answerTooLateTimer: number;\r\n// delayBeforeRingingCell: number;\r\n// lineAssociations: LineDirectoryInterface[];\r\n// snrVoicemailPolicy?: string;\r\n// enableMoveToMobile?: boolean;\r\n// ringSchedule?: RingScheduleInterface;\r\n// todError?: boolean;\r\n// enableSingleNumberReach?: boolean;\r\n// }\r\n\r\n// export interface SingleNumberReachInterface {\r\n// remoteDestinationProfileName: string;\r\n// remoteDestinations?: RemoteDestinationInterface[];\r\n// devicePool?: string;\r\n// css?: string;\r\n// rerouteCss?: string;\r\n// }\r\n\r\n\r\nexport class Voicemail implements Partial<VoicemailInterface> {\r\n callHandlerObjectId?: string;\r\n extension: string = '';\r\n vmUserTemplate: string = '';\r\n emailAddress: string = '';\r\n vmPassword?: any;\r\n vmMailbox?: any;\r\n vmUnifiedMessagingAccount?: any[];\r\n notificationDevices?: any[];\r\n alternateExtensions?: any[];\r\n language?: any;\r\n messageActions?: any;\r\n callerInput?: any;\r\n webAppPasswordSettings?: any;\r\n vmPasswordSettings?: any;\r\n greetings: any[] = [];\r\n pkid?: string;\r\n pin: string = '';\r\n // non-savable data\r\n changeExtensionByNewLine: number = 0;\r\n\r\n constructor(vm?: VoicemailInterface) {\r\n if (vm && vm.extension) {\r\n Object.assign(this, vm);\r\n if (this.extension && this.extension.startsWith('+')) {\r\n this.extension = '\\\\' + this.extension;\r\n }\r\n if (this.extension) {\r\n // this.notificationDevices = this.initDevices();\r\n // this.greetings = !this.greetings ? [] : this.greetings.map(greetings => new GreetingDetail(greetings));\r\n }\r\n } else {\r\n this.extension = '';\r\n this.vmUserTemplate = '';\r\n }\r\n }\r\n\r\n getSavableData() {\r\n const nonSavableData = ['vmMailbox', 'notificationDevices', 'changeExtensionByNewLine'];\r\n return getSavableData(this, nonSavableData);\r\n }\r\n}\r\n\r\nexport interface VoicemailInterface {\r\n callHandlerObjectId?: string;\r\n extension: string;\r\n vmUserTemplate?: string;\r\n vmPassword?: any;\r\n vmMailbox?: any;\r\n vmUnifiedMessagingAccount?: any[];\r\n notificationDevices?: any[];\r\n alternateExtensions?: any[];\r\n language?: any;\r\n messageActions?: any;\r\n webAppPassword?: any;\r\n vmPasswordSettings?: any;\r\n pkid?: string;\r\n}","import {\r\n DeviceInterface,\r\n EndUserInterface,\r\n LineAssociation,\r\n LineInterface,\r\n UserDetailsForm,\r\n} from '../interfaces/user-creation-wizard.interfaces';\r\n\r\nexport const ENTITY_CHANGE_TYPE = {\r\n ADDED: 'added',\r\n UPDATED: 'updated',\r\n EXISTING: 'existing',\r\n REMOVED: 'removed',\r\n} as const;\r\n\r\nexport interface CallInfoDisplayPayload {\r\n callerName?: string | null;\r\n callerNumber?: string | null;\r\n redirectedNumber?: string | null;\r\n dialedNumber?: string | null;\r\n}\r\n\r\nexport interface DidPatternPayload {\r\n calledPartyTransformationMask?: string | null;\r\n pattern?: string | null;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface BuildSavableEndUserOptions {\r\n resolveDeviceName?: (index: number, device: DeviceInterface) => string;\r\n resolveDeviceProfileName?: (index: number, device: DeviceInterface) => string;\r\n}\r\n\r\nfunction deepClone<T>(value: T): T {\r\n return JSON.parse(JSON.stringify(value)) as T;\r\n}\r\n\r\nfunction toApiBooleanString(value: unknown): string {\r\n if (value === true || value === 'true') {\r\n return 'true';\r\n }\r\n if (value === false || value === 'false') {\r\n return 'false';\r\n }\r\n return value == null || value === '' ? '' : String(value);\r\n}\r\n\r\nfunction toApiStringValue(value: unknown): string {\r\n if (value === true) {\r\n return 'true';\r\n }\r\n if (value === false) {\r\n return 'false';\r\n }\r\n return value == null ? '' : String(value);\r\n}\r\n\r\nfunction normalizeCallInfoDisplay(\r\n callInfoDisplay: unknown\r\n): CallInfoDisplayPayload | null {\r\n if (!callInfoDisplay) {\r\n return null;\r\n }\r\n if (typeof callInfoDisplay === 'string') {\r\n try {\r\n const parsed = JSON.parse(callInfoDisplay);\r\n return normalizeCallInfoDisplay(parsed);\r\n } catch {\r\n return null;\r\n }\r\n }\r\n if (typeof callInfoDisplay !== 'object') {\r\n return null;\r\n }\r\n const source = callInfoDisplay as Record<string, unknown>;\r\n return {\r\n callerName: source['callerName'] != null ? toApiBooleanString(source['callerName']) : null,\r\n callerNumber: source['callerNumber'] != null ? toApiBooleanString(source['callerNumber']) : null,\r\n redirectedNumber: source['redirectedNumber'] != null ? toApiBooleanString(source['redirectedNumber']) : null,\r\n dialedNumber: source['dialedNumber'] != null ? toApiBooleanString(source['dialedNumber']) : null,\r\n };\r\n}\r\n\r\nfunction normalizeDidPattern(\r\n didPattern: unknown,\r\n line?: LineInterface,\r\n directoryNumber?: string\r\n): DidPatternPayload | null {\r\n if (didPattern && typeof didPattern === 'object') {\r\n return didPattern as DidPatternPayload;\r\n }\r\n if (typeof didPattern === 'string' && didPattern.trim()) {\r\n return { calledPartyTransformationMask: didPattern };\r\n }\r\n const dn = directoryNumber || line?.directoryNumber?.directoryNumber;\r\n if (dn) {\r\n return { calledPartyTransformationMask: dn };\r\n }\r\n return null;\r\n}\r\n\r\nfunction normalizeDirectoryNumber(\r\n directoryNumber: LineAssociation['directoryNumber']\r\n): LineAssociation['directoryNumber'] {\r\n const { displayValue: _displayValue, ...rest } = directoryNumber;\r\n return {\r\n directoryNumber: rest.directoryNumber ?? '',\r\n routePartitionName: rest.routePartitionName ?? '',\r\n templateDirectoryNumber: rest.templateDirectoryNumber,\r\n pkid: rest.pkid || null,\r\n dnType: rest.dnType || null,\r\n subType: rest.subType ?? null,\r\n };\r\n}\r\n\r\nfunction prepareLineAssociation(\r\n association: LineAssociation,\r\n line?: LineInterface\r\n): LineAssociation {\r\n const prepared = deepClone(association);\r\n const lineDn = line?.directoryNumber;\r\n\r\n if (lineDn) {\r\n prepared.directoryNumber = {\r\n ...prepared.directoryNumber,\r\n directoryNumber: lineDn.directoryNumber || '',\r\n routePartitionName: lineDn.routePartitionName || '',\r\n templateDirectoryNumber:\r\n lineDn.templateDirectoryNumber ??\r\n prepared.directoryNumber?.templateDirectoryNumber,\r\n } as LineAssociation['directoryNumber'];\r\n }\r\n\r\n prepared.directoryNumber = normalizeDirectoryNumber(prepared.directoryNumber);\r\n prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;\r\n prepared.logMissedCall = toApiBooleanString(prepared.logMissedCall) as unknown as LineAssociation['logMissedCall'] || 'false';\r\n prepared.callInfoDisplay = normalizeCallInfoDisplay(prepared.callInfoDisplay) as unknown as LineAssociation['callInfoDisplay'];\r\n prepared.didPattern = normalizeDidPattern(\r\n prepared.didPattern,\r\n line,\r\n prepared.directoryNumber?.directoryNumber\r\n ) as unknown as LineAssociation['didPattern'];\r\n prepared.visualMWI = toApiStringValue(prepared.visualMWI) as unknown as LineAssociation['visualMWI'];\r\n prepared.audibleMWI = toApiStringValue(prepared.audibleMWI) as unknown as LineAssociation['audibleMWI'];\r\n prepared.associated = prepared.associated ?? true;\r\n\r\n return prepared;\r\n}\r\n\r\nfunction prepareLine(line: LineInterface): LineInterface {\r\n const prepared = deepClone(line);\r\n prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;\r\n if (prepared.directoryNumber) {\r\n prepared.directoryNumber = normalizeDirectoryNumber(prepared.directoryNumber);\r\n }\r\n return prepared;\r\n}\r\n\r\nfunction syncDeviceLineAssociations(device: DeviceInterface, lines: LineInterface[]): void {\r\n device.lineAssociations = (device.lineAssociations || []).map((association, index) =>\r\n prepareLineAssociation(association, lines[index])\r\n );\r\n}\r\n\r\nfunction prepareDeviceForSave(\r\n device: DeviceInterface,\r\n userId: string,\r\n lines: LineInterface[],\r\n deviceName: string\r\n): DeviceInterface {\r\n const prepared = deepClone(device);\r\n const resolvedName = deviceName.trim();\r\n\r\n prepared.name = resolvedName;\r\n prepared.newName = resolvedName;\r\n prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;\r\n prepared.createDeviceMode = prepared.createDeviceMode ?? false;\r\n\r\n if (prepared.extraOptions) {\r\n prepared.extraOptions.mobilityUserId = userId;\r\n }\r\n\r\n syncDeviceLineAssociations(prepared, lines);\r\n return prepared;\r\n}\r\n\r\nfunction resolvePrimaryLineReference(user: EndUserInterface): unknown | null {\r\n const firstDeviceAssociation = user.devices?.[0]?.lineAssociations?.[0]?.directoryNumber;\r\n if (firstDeviceAssociation) {\r\n return firstDeviceAssociation;\r\n }\r\n const firstLineDn = user.lines?.[0]?.directoryNumber;\r\n return firstLineDn ?? null;\r\n}\r\n\r\nexport function buildSavableEndUser(\r\n endUser: EndUserInterface,\r\n lines: LineInterface[],\r\n devices: DeviceInterface[],\r\n deviceProfiles: DeviceInterface[],\r\n form: UserDetailsForm,\r\n options: BuildSavableEndUserOptions = {}\r\n): EndUserInterface {\r\n const user = deepClone(endUser);\r\n\r\n user.userid = form.userId || user.userid || '';\r\n user.firstName = form.firstName || user.firstName || '';\r\n user.lastName = form.lastName || user.lastName || '';\r\n user.email = form.email || user.email || '';\r\n user.createUserMode = false;\r\n\r\n user.lines = (lines || []).map(line => prepareLine(line));\r\n user.devices = (devices || []).map((device, index) =>\r\n prepareDeviceForSave(\r\n device,\r\n user.userid || '',\r\n user.lines,\r\n options.resolveDeviceName?.(index, device) ?? device.name ?? device.newName ?? ''\r\n )\r\n );\r\n user.deviceProfiles = (deviceProfiles || []).map((profile, index) =>\r\n prepareDeviceForSave(\r\n profile,\r\n user.userid || '',\r\n user.lines,\r\n options.resolveDeviceProfileName?.(index, profile) ?? profile.name ?? profile.newName ?? ''\r\n )\r\n );\r\n\r\n user.primaryLineReference = resolvePrimaryLineReference(user);\r\n\r\n const snr = user.singleNumberReach as { remoteDestinationProfileName?: string | null } | null | undefined;\r\n if (snr && !snr.remoteDestinationProfileName) {\r\n user.singleNumberReach = null as EndUserInterface['singleNumberReach'];\r\n }\r\n\r\n return user;\r\n}\r\n","import { DeviceInterface } from '../interfaces/user-creation-wizard.interfaces';\r\n\r\n/** Matches device types like `Cisco 8851`. */\r\nexport const CISCO_DIGIT_DEVICE_TYPE_PATTERN = /^Cisco\\s+\\d+$/i;\r\n\r\nexport const DEFAULT_SEP_DEVICE_PREFIX = 'SEP';\r\n\r\nexport function applyDefaultDevicePrefixIfMissing(device: Pick<DeviceInterface, 'prefix' | 'deviceType'>): void {\r\n if (device.prefix?.trim()) {\r\n return;\r\n }\r\n\r\n const deviceType = device.deviceType?.trim() ?? '';\r\n if (CISCO_DIGIT_DEVICE_TYPE_PATTERN.test(deviceType)) {\r\n device.prefix = DEFAULT_SEP_DEVICE_PREFIX;\r\n }\r\n}\r\n","/**\r\n * Strips a leading device-prefix group from `deviceNameRegex`, returning the pattern\r\n * to validate the name field value (without matPrefix).\r\n *\r\n * - `([sS][eE][pP]|BAT)[0-9a-fA-F]{12}` → `[0-9a-fA-F]{12}`\r\n * - `[a-zA-Z0-9]{1,15}` → `[a-zA-Z0-9]{1,15}` (unchanged)\r\n */\r\nexport function parseDeviceNameRegexBody(deviceNameRegex: string | null | undefined): string {\r\n const fullRegex = deviceNameRegex?.trim() ?? '';\r\n if (!fullRegex) {\r\n return '';\r\n }\r\n\r\n return stripLeadingPrefixGroup(fullRegex);\r\n}\r\n\r\nfunction stripLeadingPrefixGroup(regex: string): string {\r\n const parenMatch = regex.match(/^(\\(.+?\\))(.+)$/s);\r\n if (parenMatch?.[2]?.trim()) {\r\n return parenMatch[2];\r\n }\r\n\r\n const literalMatch = regex.match(/^([A-Za-z]+)(\\[.+\\])$/s);\r\n if (literalMatch?.[2]?.trim()) {\r\n return literalMatch[2];\r\n }\r\n\r\n return regex;\r\n}\r\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { UserCreationApiService } from \"../../shared/services/user-creation-api.service\";\r\nimport { API } from \"../../app.constants\";\r\n// import { AvailablePhoneNumberRangeInterface, AvailableRangeInterface, DnRangeType, LineInterface } from \"projects/tuki/widgets/users-list/src/classes/line\";\r\nimport { APIService } from \"../../shared/api/api.service\";\r\nimport { catchError, forkJoin, map, Observable, of, Subject, switchMap, tap } from \"rxjs\";\r\nimport Big from \"big.js\";\r\nimport { SiteDefaults } from \"../../classes/site\";\r\nimport { Site, SiteInterface, SiteTemplateInterface } from \"../../classes/site\";\r\nimport {\r\n DeviceEntry,\r\n EndUserInterface,\r\n LineOption,\r\n OverviewDeviceRow,\r\n OverviewLineRow,\r\n OverviewUserRow,\r\n SelectedLineRow,\r\n TemplateDeviceLike,\r\n TemplateEndUserLike,\r\n TemplateLineLike,\r\n UserCreationType,\r\n UserDetailsForm,\r\n UserDetailsFormValue,\r\n UserTemplateInterface,\r\n LineInterface,\r\n DeviceInterface,\r\n DeviceDefaultsInterface,\r\n AvailablePhoneNumberRangeInterface,\r\n AvailableRangeInterface,\r\n DnRangeType,\r\n ListUserInterface,\r\n EndUser,\r\n} from \"../../interfaces/user-creation-wizard.interfaces\";\r\nimport { buildSavableEndUser } from \"../../utils/build-savable-end-user\";\r\nimport { applyDefaultDevicePrefixIfMissing } from \"../../utils/device-default-prefix\";\r\nimport { parseDeviceNameRegexBody } from \"../../utils/parse-device-name-rule\";\r\n\r\n@Injectable()\r\nexport class UserCreationWizardService {\r\n private readonly userCreationApiService = inject(UserCreationApiService);\r\n\r\n readonly ldapTableColumns: string[] = ['userId', 'firstName', 'lastName', 'email', 'add'];\r\n readonly userCreationTypes: UserCreationType[] = ['CUCM', 'MT'];\r\n\r\n private template: UserTemplateInterface | null = null;\r\n public endUser: EndUserInterface | null = null;\r\n public lines: LineInterface[] = [];\r\n public devices: DeviceInterface[] = [];\r\n public deviceProfiles: DeviceInterface[] = [];\r\n private templateLinesSnapshot: LineInterface[] | null = null;\r\n private _currentSite: Site | null = null;\r\n\r\n get currentSite(): Site | null {\r\n return this._currentSite;\r\n }\r\n\r\n siteOptions: string[] = [];\r\n templateOptions: string[] = [];\r\n lineOptions: LineOption[] = [];\r\n routePartitionOptions: string[] = [];\r\n deviceRows: number[] = [];\r\n ldapUsers: ListUserInterface[] = [];\r\n overviewUsers: OverviewUserRow[] = [];\r\n overviewLines: OverviewLineRow[] = [];\r\n overviewDevices: OverviewDeviceRow[] = [];\r\n overviewDeviceProfiles: OverviewDeviceRow[] = [];\r\n userDetailsFormValue: UserDetailsFormValue | null = null;\r\n userDetailsForm: UserDetailsForm = {\r\n userId: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n };\r\n lineSelections: SelectedLineRow[] = [];\r\n deviceEntries: DeviceEntry[] = [];\r\n availableNumbers: string[] = [];\r\n deviceTypes: string[] = [];\r\n siteDefaults: SiteDefaults | null = null;\r\n originalSiteDefaults: SiteDefaults | null = null;\r\n templateLines: TemplateLineLike[] = [];\r\n templateDevices: TemplateDeviceLike[] = [];\r\n templateUserDetails: TemplateEndUserLike = {};\r\n\r\n selectedSite: number | null = null;\r\n selectedTemplateName: string | null = null;\r\n selectedTemplateId: number | null = null;\r\n selectedUserCreationType: UserCreationType = 'CUCM';\r\n availableDidPatternsMappedToDn: any = {};\r\n\r\n private readonly deviceDefaultsLoadedSubject = new Subject<void>();\r\n readonly deviceDefaultsLoaded$ = this.deviceDefaultsLoadedSubject.asObservable();\r\n\r\n get firstLineRoutePartition(): string {\r\n return this.lines[0]?.directoryNumber?.routePartitionName ?? '';\r\n }\r\n\r\n get siteDefaultRoutePartition(): string {\r\n return this.siteDefaults?.routePartition || '';\r\n }\r\n\r\n get routePartitionNamesList(): string[] {\r\n return this.siteDefaults ? this.siteDefaults.routePartitionFilter : [];\r\n }\r\n\r\n selectedLdapUser: ListUserInterface | null = null;\r\n ldapUsersTotal = 0;\r\n\r\n constructor() {\r\n // this.loadPlaceholderData();\r\n }\r\n\r\n get isLdapIntegrated(): boolean {\r\n return !!this.endUser?.ldapIntegrated;\r\n }\r\n\r\n selectLdapUser(user: ListUserInterface): void {\r\n this.selectedLdapUser = user;\r\n if (this.endUser) {\r\n this.endUser.ldapIntegrated = true;\r\n this.endUser.userid = user.userid;\r\n this.endUser.firstName = user.firstName ?? '';\r\n this.endUser.lastName = user.lastName ?? '';\r\n this.endUser.email = user.email ?? '';\r\n }\r\n this.userDetailsForm = {\r\n userId: user.userid,\r\n firstName: user.firstName ?? '',\r\n lastName: user.lastName ?? '',\r\n email: user.email ?? '',\r\n };\r\n this.rebuildOverviewUsers();\r\n }\r\n\r\n clearLdapUserSelection(): void {\r\n this.selectedLdapUser = null;\r\n if (this.endUser) {\r\n this.endUser.ldapIntegrated = false;\r\n this.endUser.userid = '';\r\n this.endUser.firstName = '';\r\n this.endUser.lastName = '';\r\n this.endUser.email = '';\r\n }\r\n this.userDetailsForm = {\r\n userId: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n };\r\n this.rebuildOverviewUsers();\r\n }\r\n\r\n isLdapUserRowSelected(row: ListUserInterface): boolean {\r\n return this.selectedLdapUser?.userid === row.userid;\r\n }\r\n\r\n setLdapUsersResult(users: ListUserInterface[], total: number): void {\r\n this.ldapUsers = users;\r\n this.ldapUsersTotal = total;\r\n }\r\n\r\n public setSelectedSite(site: number | null): void {\r\n this.selectedSite = site || null;\r\n }\r\n\r\n setSelectedTemplate(template?: UserTemplateInterface | undefined): void {\r\n this.selectedTemplateName = template?.name || null;\r\n this.selectedTemplateId = template?.id || null;\r\n this.rebuildOverviewUsers();\r\n }\r\n\r\n public setCurrentSite(site: Site): void {\r\n this._currentSite = site;\r\n }\r\n\r\n resetTemplateDrivenData(): void {\r\n this.lineOptions = [];\r\n this.routePartitionOptions = [];\r\n this.lineSelections = [];\r\n this.deviceEntries = [];\r\n this.deviceRows = [];\r\n this.rebuildOverviewLines();\r\n this.rebuildOverviewDevices();\r\n }\r\n\r\n applyTemplateTokenPayload(payload: UserTemplateInterface): void {\r\n this.template = this.extractTemplateFromTokenPayload(payload);\r\n this.endUser = new EndUser(this.template?.endUser);\r\n this.lines = this.endUser && Array.isArray(this.endUser.lines) ? this.endUser.lines : [];\r\n this.devices = this.endUser && Array.isArray(this.endUser.devices) ? this.endUser.devices : [];\r\n this.deviceProfiles = this.endUser && Array.isArray(this.endUser.deviceProfiles) ? this.endUser.deviceProfiles : [];\r\n\r\n this.initTemplateDnsNamesForLines();\r\n\r\n // this.userDetailsForm = {\r\n // userId: this.valueToString(this.endUser?.userid ?? ''),\r\n // firstName: this.valueToString(this.endUser?.firstName ?? ''),\r\n // lastName: this.valueToString(this.endUser?.lastName ?? ''),\r\n // email: this.valueToString(this.endUser?.email ?? '')\r\n // };\r\n\r\n // const mappedLineOptions: LineOption[] = linesFromTemplate\r\n // .map(line => ({\r\n // number: this.valueToString(line?.directoryNumber?.directoryNumber),\r\n // did: this.valueToString(line?.didPatterns?.[0]?.pattern || line?.directoryNumber?.directoryNumber),\r\n // css: this.valueToString(\r\n // typeof line?.callingSearchSpace === 'string'\r\n // ? line.callingSearchSpace\r\n // : line?.callingSearchSpace?.name\r\n // ),\r\n // description: this.valueToString(line?.description)\r\n // }))\r\n // .filter(line => line.number.trim().length > 0);\r\n\r\n this.devices.forEach(device => {\r\n this.initDeviceWithSiteInfo(device);\r\n applyDefaultDevicePrefixIfMissing(device);\r\n });\r\n this.deviceProfiles.forEach(device => this.initDeviceWithSiteInfo(device));\r\n this.lines.forEach(line => this.initLineWithSiteInfo(line));\r\n\r\n this.captureTemplateLinesSnapshot();\r\n\r\n if (this.selectedSite) {\r\n this.loadDeviceDefaultsForDevices(this.selectedSite).subscribe();\r\n }\r\n\r\n // if (mappedLineOptions.length) {\r\n // this.lineOptions = this.uniqueByNumber(mappedLineOptions);\r\n // this.lineSelections = this.lineOptions.map(line => ({\r\n // lineNumber: line.number,\r\n // routePartitionName: linesFromTemplate.find(\r\n // source => (source?.directoryNumber?.directoryNumber || '') === line.number\r\n // )?.directoryNumber?.routePartitionName || null\r\n // }));\r\n // } else {\r\n // const lineAssociations = devicesFromTemplate.flatMap(device => device.lineAssociations || []);\r\n // const associatedLineOptions: LineOption[] = lineAssociations\r\n // .map(association => {\r\n // const number = association?.directoryNumber?.directoryNumber || '';\r\n // return {\r\n // number,\r\n // did: number,\r\n // css: '',\r\n // description: ''\r\n // };\r\n // })\r\n // .filter(line => line.number.trim().length > 0);\r\n\r\n // this.lineOptions = this.uniqueByNumber(associatedLineOptions);\r\n // this.lineSelections = this.lineOptions.map(line => ({\r\n // lineNumber: line.number,\r\n // routePartitionName: lineAssociations.find(\r\n // source => (source?.directoryNumber?.directoryNumber || '') === line.number\r\n // )?.directoryNumber?.routePartitionName || null\r\n // }));\r\n\r\n // this.templateLines.forEach((line: any) => this.initLineWithSiteInfo(line));\r\n // this.initTemplateDnsNamesForLines(this.templateLines);\r\n // }\r\n\r\n // const routePartitions = this.lineSelections\r\n // .map(line => line.routePartitionName)\r\n // .filter((value): value is string => !!value && value.trim().length > 0);\r\n // this.routePartitionOptions = this.uniqueStrings(routePartitions);\r\n\r\n // this.deviceEntries = devicesFromTemplate.map(device => ({\r\n // deviceType: this.valueToString(device.deviceType),\r\n // protocol: this.valueToString(device.protocol),\r\n // buttonTemplate: this.valueToString(device.buttonTemplate),\r\n // name: this.valueToString(device.name)\r\n // }));\r\n // this.deviceRows = this.deviceEntries.map((_, index) => index + 1);\r\n\r\n // this.rebuildOverviewUsers();\r\n // this.rebuildOverviewLines();\r\n // this.rebuildOverviewDevices();\r\n }\r\n\r\n setSelectedUserCreationType(type: UserCreationType): void {\r\n this.selectedUserCreationType = type;\r\n }\r\n\r\n public resetUserDetailsStepState(): void {\r\n this.userDetailsFormValue = null;\r\n this.userDetailsForm = {\r\n userId: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n };\r\n this.selectedLdapUser = null;\r\n this.ldapUsers = [];\r\n this.ldapUsersTotal = 0;\r\n\r\n if (this.templateLinesSnapshot) {\r\n this.lines = JSON.parse(JSON.stringify(this.templateLinesSnapshot));\r\n }\r\n\r\n this.devices.forEach(device => {\r\n device.name = '';\r\n });\r\n this.deviceProfiles.forEach(profile => {\r\n profile.name = '';\r\n });\r\n\r\n if (this.endUser) {\r\n this.endUser.userid = '';\r\n this.endUser.firstName = '';\r\n this.endUser.lastName = '';\r\n this.endUser.email = '';\r\n this.endUser.ldapIntegrated = false;\r\n this.endUser.lines = this.lines;\r\n }\r\n\r\n this.overviewUsers = [];\r\n this.rebuildOverviewLines();\r\n this.rebuildOverviewDevices();\r\n this.rebuildOverviewDeviceProfiles();\r\n }\r\n\r\n private captureTemplateLinesSnapshot(): void {\r\n this.templateLinesSnapshot = JSON.parse(JSON.stringify(this.lines));\r\n }\r\n\r\n setUserDetailsField(field: keyof UserDetailsForm, value: string): void {\r\n this.userDetailsForm = {\r\n ...this.userDetailsForm,\r\n [field]: value\r\n };\r\n this.rebuildOverviewUsers();\r\n }\r\n\r\n applyUserDetailsFormValue(formValue: UserDetailsFormValue): void {\r\n this.userDetailsFormValue = formValue;\r\n this.userDetailsForm = {\r\n userId: formValue.userId || '',\r\n firstName: formValue.firstName || '',\r\n lastName: formValue.lastName || '',\r\n email: formValue.email || '',\r\n };\r\n\r\n formValue.lines?.forEach((lineValue, index) => {\r\n const line = this.lines[index];\r\n if (!line?.directoryNumber) {\r\n return;\r\n }\r\n line.directoryNumber.directoryNumber = lineValue.number || '';\r\n line.directoryNumber.routePartitionName = lineValue.routePartition || '';\r\n });\r\n\r\n formValue.devices?.forEach((deviceValue, index) => {\r\n const device = this.devices[index];\r\n if (!device) {\r\n return;\r\n }\r\n device.name = deviceValue.name || '';\r\n });\r\n\r\n formValue.deviceProfiles?.forEach((profileValue, index) => {\r\n const profile = this.deviceProfiles[index];\r\n if (!profile) {\r\n return;\r\n }\r\n profile.name = profileValue.name || '';\r\n });\r\n\r\n if (this.endUser) {\r\n this.endUser.userid = formValue.userId || '';\r\n this.endUser.firstName = formValue.firstName || '';\r\n this.endUser.lastName = formValue.lastName || '';\r\n this.endUser.email = formValue.email || '';\r\n }\r\n\r\n this.rebuildOverviewUsers();\r\n this.rebuildOverviewLines();\r\n this.rebuildOverviewDevices();\r\n this.rebuildOverviewDeviceProfiles();\r\n }\r\n\r\n setLineSelection(index: number, lineNumber: string | null): void {\r\n if (!this.lineSelections[index]) {\r\n return;\r\n }\r\n this.lineSelections[index] = {\r\n ...this.lineSelections[index],\r\n lineNumber\r\n };\r\n this.rebuildOverviewLines();\r\n this.rebuildOverviewDevices();\r\n }\r\n\r\n setRoutePartitionSelection(index: number, routePartitionName: string | null): void {\r\n if (!this.lineSelections[index]) {\r\n return;\r\n }\r\n this.lineSelections[index] = {\r\n ...this.lineSelections[index],\r\n routePartitionName\r\n };\r\n this.rebuildOverviewLines();\r\n }\r\n\r\n setDeviceName(index: number, name: string): void {\r\n if (!this.deviceEntries[index]) {\r\n return;\r\n }\r\n const deviceType = this.deviceEntries[index].deviceType || '';\r\n const normalizedName = deviceType.includes('8851')\r\n ? name.replace(/^SEP\\s*/i, '')\r\n : name;\r\n this.deviceEntries[index] = {\r\n ...this.deviceEntries[index],\r\n name: normalizedName\r\n };\r\n this.rebuildOverviewDevices();\r\n }\r\n\r\n getDeviceDisplayName(index: number): string {\r\n const entry = this.deviceEntries[index];\r\n if (!entry) {\r\n return '';\r\n }\r\n\r\n if (entry.deviceType?.includes('8851')) {\r\n return `SEP ${entry.name || ''}`;\r\n }\r\n\r\n if (index === 1) {\r\n const lineNumber = this.lineSelections[0]?.lineNumber;\r\n return lineNumber ? `CSF${lineNumber}` : 'CSF[DN]';\r\n }\r\n\r\n return entry.name || '';\r\n }\r\n\r\n public getSiteAllData(siteId: number): Observable<any> {\r\n return this.userCreationApiService.getSiteAllData(siteId).pipe(\r\n tap((res: any) => {\r\n if (res && res[0]) {\r\n const site = new Site(res[0] as SiteInterface);\r\n this.selectedSite = site.id;\r\n }\r\n if (res && res[1]) {\r\n this.siteDefaults = new SiteDefaults(res[1], false);\r\n this.originalSiteDefaults = new SiteDefaults(res[1], false);\r\n this.routePartitionOptions = [...this.routePartitionNamesList];\r\n }\r\n if (res && res[2]) {\r\n this.deviceTypes = res[2] as string[];\r\n }\r\n }),\r\n switchMap(res =>\r\n this.loadDeviceDefaultsForDevices(siteId).pipe(map(() => res))\r\n )\r\n );\r\n }\r\n\r\n public loadDeviceDefaultsForDevices(siteId: number): Observable<void> {\r\n const deviceTypes = this.getUniqueDeviceTypes();\r\n if (!deviceTypes.length) {\r\n return of(undefined);\r\n }\r\n\r\n const requests = deviceTypes.map(deviceType =>\r\n this.userCreationApiService.getDeviceDefaults(String(siteId), deviceType).pipe(\r\n tap(defaults => this.applyDeviceDefaultsToType(deviceType, defaults)),\r\n catchError(() => of(null))\r\n )\r\n );\r\n\r\n return forkJoin(requests).pipe(\r\n tap(() => this.deviceDefaultsLoadedSubject.next()),\r\n map(() => undefined)\r\n );\r\n }\r\n\r\n private getUniqueDeviceTypes(): string[] {\r\n const types = [\r\n ...this.devices.map(device => device.deviceType),\r\n ...this.deviceProfiles.map(profile => profile.deviceType),\r\n ].filter((type): type is string => !!type && type.trim().length > 0);\r\n return [...new Set(types)];\r\n }\r\n\r\n private applyDeviceDefaultsToType(deviceType: string, defaults: DeviceDefaultsInterface): void {\r\n const nameValidationRegex = parseDeviceNameRegexBody(defaults.deviceNameRegex);\r\n const targets = [...this.devices, ...this.deviceProfiles].filter(\r\n device => device.deviceType === deviceType\r\n );\r\n\r\n targets.forEach(device => {\r\n device.deviceDefaults = defaults;\r\n device.nameValidationRegex = nameValidationRegex;\r\n device.nameValidationCaption = defaults.deviceNameExplained;\r\n });\r\n }\r\n\r\n getDeviceNamePrefix(deviceIndex: number, isProfile = false): string | null {\r\n const device = isProfile ? this.deviceProfiles[deviceIndex] : this.devices[deviceIndex];\r\n const prefix = device?.prefix?.trim();\r\n return prefix || null;\r\n }\r\n\r\n getDeviceNameValidationCaption(deviceIndex: number, isProfile = false): string {\r\n const device = isProfile ? this.deviceProfiles[deviceIndex] : this.devices[deviceIndex];\r\n return device?.nameValidationCaption || device?.deviceDefaults?.deviceNameExplained || '';\r\n }\r\n\r\n getDeviceNameValidationOptions(deviceIndex: number, isProfile = false): {\r\n regex: string;\r\n caption: string;\r\n } | null {\r\n const device = isProfile ? this.deviceProfiles[deviceIndex] : this.devices[deviceIndex];\r\n const regex =\r\n device?.nameValidationRegex?.trim() ||\r\n parseDeviceNameRegexBody(device?.deviceDefaults?.deviceNameRegex);\r\n if (!regex) {\r\n return null;\r\n }\r\n return {\r\n regex,\r\n caption: this.getDeviceNameValidationCaption(deviceIndex, isProfile),\r\n };\r\n }\r\n\r\n public getNumberRange(siteId: string, routePartition: string): Observable<AvailableRangeInterface> {\r\n this.availableDidPatternsMappedToDn = {};\r\n const pageSize = 9999;\r\n const params = {dntype: DnRangeType.extension, routepartition: routePartition, size: pageSize, page: 0};\r\n this.availableNumbers = [];\r\n return this.userCreationApiService.getAvailableDnInRanges(siteId, params)\r\n .pipe(map((res: any) => {\r\n res.availableNumberList.forEach((availableNumber: AvailablePhoneNumberRangeInterface) => {\r\n this.setAvailableDidMappedToDn(availableNumber);\r\n this.availableNumbers = [...this.availableNumbers, ...this.getUnwrapNumberRange(availableNumber)];\r\n });\r\n })\r\n )\r\n // .pipe(this.handleError(true, false));\r\n }\r\n\r\n private rebuildOverviewUsers(): void {\r\n const userTemplate = this.selectedTemplateName || '';\r\n const hasUserData = Object.values(this.userDetailsForm).some(value => value.trim().length > 0);\r\n this.overviewUsers = hasUserData\r\n ? [{\r\n userId: this.userDetailsForm.userId,\r\n firstName: this.userDetailsForm.firstName,\r\n lastName: this.userDetailsForm.lastName,\r\n email: this.userDetailsForm.email,\r\n userTemplate\r\n }]\r\n : [];\r\n }\r\n\r\n private rebuildOverviewLines(): void {\r\n const formLines = this.userDetailsFormValue?.lines;\r\n if (formLines?.length) {\r\n this.overviewLines = formLines\r\n .filter(line => !!line?.number?.trim())\r\n .map((lineValue, index) => {\r\n const templateLine = this.lines[index];\r\n const css = this.valueToString(templateLine?.callingSearchSpace);\r\n return {\r\n number: lineValue.number,\r\n did: lineValue.lineNumber || lineValue.number,\r\n routePartitionName: lineValue.routePartition || '',\r\n css,\r\n description: this.valueToString(templateLine?.description),\r\n };\r\n });\r\n return;\r\n }\r\n\r\n this.overviewLines = this.lineSelections\r\n .map(selection => {\r\n if (!selection?.lineNumber) {\r\n return null;\r\n }\r\n const selectedLine = this.lineOptions.find(line => line.number === selection.lineNumber);\r\n if (!selectedLine) {\r\n return null;\r\n }\r\n return {\r\n number: selectedLine.number,\r\n did: selectedLine.did,\r\n routePartitionName: selection.routePartitionName || this.routePartitionOptions[0] || '',\r\n css: selectedLine.css,\r\n description: selectedLine.description\r\n };\r\n })\r\n .filter((line): line is OverviewLineRow => !!line);\r\n }\r\n\r\n private rebuildOverviewDevices(): void {\r\n const selectedLineNumbers = this.overviewLines.map(line => line.number).join(', ');\r\n const formDevices = this.userDetailsFormValue?.devices;\r\n if (formDevices?.length) {\r\n this.overviewDevices = formDevices\r\n .filter(device => !!device.deviceType?.trim() || !!device.name?.trim())\r\n .map(device => ({\r\n name: device.name || '',\r\n deviceType: device.deviceType || '',\r\n lines: selectedLineNumbers,\r\n description: `${device.protocol || ''} / ${device.buttonTemplate || ''}`.trim(),\r\n }));\r\n return;\r\n }\r\n\r\n this.overviewDevices = this.deviceEntries\r\n .map((device, index) => ({\r\n device,\r\n displayName: this.getDeviceDisplayName(index)\r\n }))\r\n .filter(({ device, displayName }) => displayName.trim().length > 0 || device.deviceType.trim().length > 0)\r\n .map(({ device, displayName }) => ({\r\n name: displayName,\r\n deviceType: device.deviceType,\r\n lines: selectedLineNumbers,\r\n description: `${device.protocol} / ${device.buttonTemplate}`\r\n }));\r\n }\r\n\r\n private rebuildOverviewDeviceProfiles(): void {\r\n const selectedLineNumbers = this.overviewLines.map(line => line.number).join(', ');\r\n const formProfiles = this.userDetailsFormValue?.deviceProfiles;\r\n if (!formProfiles?.length) {\r\n this.overviewDeviceProfiles = [];\r\n return;\r\n }\r\n\r\n this.overviewDeviceProfiles = formProfiles\r\n .filter(profile => !!profile.deviceType?.trim() || !!profile.name?.trim())\r\n .map(profile => ({\r\n name: profile.name || '',\r\n deviceType: profile.deviceType || '',\r\n lines: selectedLineNumbers,\r\n description: `${profile.protocol || ''} / ${profile.buttonTemplate || ''}`.trim(),\r\n }));\r\n }\r\n\r\n private extractTemplateFromTokenPayload(payload: any): any {\r\n if (!payload || typeof payload !== 'object') {\r\n return null;\r\n }\r\n if (Array.isArray(payload)) {\r\n return payload[0] || null;\r\n }\r\n const firstKey = Object.keys(payload)[0];\r\n return firstKey ? payload[firstKey] : null;\r\n }\r\n\r\n private uniqueByNumber(lines: LineOption[]): LineOption[] {\r\n const seen = new Set<string>();\r\n return lines.filter(line => {\r\n if (seen.has(line.number)) {\r\n return false;\r\n }\r\n seen.add(line.number);\r\n return true;\r\n });\r\n }\r\n\r\n private uniqueStrings(items: string[]): string[] {\r\n return Array.from(new Set(items));\r\n }\r\n\r\n private valueToString(value: unknown): string {\r\n return typeof value === 'string' ? value : '';\r\n }\r\n\r\n private getUnwrapNumberRange(availableNumber: any): string[] {\r\n let unwrapNumberRange = this.unwrapNumberRange(availableNumber.phoneNumberRange.from, availableNumber.phoneNumberRange.to)\r\n .map((unwrappedNumber: string) => {\r\n const dn = availableNumber.phoneNumberRange.prefix + unwrappedNumber;\r\n let str = dn;\r\n if (this.availableDidPatternsMappedToDn[dn] && this.availableDidPatternsMappedToDn[dn].length > 0) {\r\n if (this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] && this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].length > 0) {\r\n str += ' DID: ' + (this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].length > 1 ? 'multiple' :\r\n this.availableDidPatternsMappedToDn[dn][0]['mappedDids'][0]);\r\n }\r\n if (this.availableDidPatternsMappedToDn[dn][0]['vm']) {\r\n str += ' In Use - VM';\r\n }\r\n }\r\n return str;\r\n });\r\n unwrapNumberRange = unwrapNumberRange.filter((unwrappedNumber: string) => !availableNumber.usedNumbers.includes(unwrappedNumber));\r\n \r\n return unwrapNumberRange;\r\n }\r\n\r\n private unwrapNumberRange(start: string, end: string): string[] {\r\n const regExp = /(^0+)/;\r\n let leadingZeros = '';\r\n const matches = start.match(regExp);\r\n if (matches) {\r\n leadingZeros = matches[1];\r\n }\r\n const startNumeric = new Big(start);\r\n const endNumeric = new Big(end);\r\n return Array.from({length: Number(endNumeric.minus(startNumeric).plus(new Big(1)).toFixed(0))}, (v, k: number) => {\r\n const number = String(startNumeric.plus(new Big(k.toString())).toFixed(0));\r\n if ((leadingZeros + number).length > start.length) {\r\n leadingZeros = leadingZeros.substr(1);\r\n }\r\n return leadingZeros + number;\r\n });\r\n }\r\n\r\n public setAvailableDidMappedToDn(availableNumber: any): void {\r\n if (availableNumber.unUsedNumbersWithDids && availableNumber.unUsedNumbersWithDids.length) {\r\n\r\n availableNumber.unUsedNumbersWithDids.forEach((numberWithDids: any) => {\r\n const dn = numberWithDids['unUsedNumber'];\r\n this.availableDidPatternsMappedToDn[dn] = [{}];\r\n if (numberWithDids['translationPatternList'] && numberWithDids['translationPatternList'].length > 0) {\r\n this.availableDidPatternsMappedToDn[dn] = numberWithDids['translationPatternList'];\r\n this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] = [{}];\r\n if (numberWithDids['mappedDids'] && numberWithDids['mappedDids'].length > 0) {\r\n this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] = numberWithDids['mappedDids'];\r\n }\r\n }\r\n this.availableDidPatternsMappedToDn[dn][0]['vm'] = numberWithDids['vm'];\r\n });\r\n }\r\n }\r\n\r\n // TODO: replace placeholders with real API integration.\r\n loadDataFromApi(): void {\r\n // this.api.getWizardBootstrapData().subscribe(...)\r\n }\r\n\r\n private initLineWithSiteInfo(line: LineInterface) {\r\n line.directoryNumber.routePartitionName = this.siteDefaults?.routePartition || '';\r\n \r\n let callingSearchSpaceVal = this.siteDefaults?.lineCss || '';\r\n line.callingSearchSpace = callingSearchSpaceVal;\r\n }\r\n\r\n // private initTemplateDnsNamesForLines(userLines: TemplateLineLike[]): void {\r\n // const routePartition = this.siteDefaults?.routePartition || '';\r\n // if (userLines && userLines.length > 0) {\r\n // userLines.forEach((line, index) => {\r\n // line && line.directoryNumber && (line.directoryNumber.templateDirectoryNumber = line.directoryNumber.directoryNumber);\r\n // line && line.directoryNumber && (line.directoryNumber.directoryNumber = '');\r\n // return line;\r\n // });\r\n\r\n // // const routePartition = this.siteDefaults?.routePartition || '';\r\n // // if (line.lineAssociations && line.lineAssociations.length) {\r\n // // this.setLineAssociationsForDevice(line, routePartition);\r\n // // }\r\n // }\r\n // this.templateDevices.forEach(device => {\r\n // if (device.lineAssociations && device.lineAssociations.length) {\r\n // this.setLineAssociationsForDevice(device, routePartition);\r\n // }\r\n // });\r\n // }\r\n \r\n \r\n private setLineAssociationsForDevice(device: TemplateDeviceLike, routePartition: string) {\r\n const lineAssociations = device.lineAssociations || [];\r\n if(lineAssociations && lineAssociations.length) {\r\n lineAssociations.forEach(lineAssociation => {\r\n lineAssociation && lineAssociation.directoryNumber && (lineAssociation.directoryNumber.templateDirectoryNumber = lineAssociation.directoryNumber.directoryNumber || '');\r\n lineAssociation && lineAssociation.directoryNumber && (lineAssociation.directoryNumber.routePartitionName = routePartition);\r\n lineAssociation && lineAssociation.logMissedCall && (lineAssociation.logMissedCall = lineAssociation.logMissedCall || 'false');\r\n });\r\n }\r\n }\r\n\r\n private initDeviceWithSiteInfo(device: DeviceInterface) {\r\n device.newName = device.name;\r\n device.name = '';\r\n if (!device['enabledExtensionMobility']) {\r\n device.enabledExtensionMobility = this.siteDefaults?.enableEm ?? false;\r\n } else if (device['enabledExtensionMobility'].toString() === 'Yes') {\r\n device.enabledExtensionMobility = true;\r\n } else if (device['enabledExtensionMobility'].toString() === 'No') {\r\n device.enabledExtensionMobility = false;\r\n }\r\n\r\n if (device.location) {\r\n const replacedValue = this.replaceDynamicValueSiteInfo(device.location, this.currentSite?.shortName ?? '') ?? null;\r\n device.location = replacedValue;\r\n }\r\n if (device.location) {\r\n const replacedValue = this.replaceDynamicValueSiteInfo(device.devicePoolName, this.currentSite?.shortName ?? '') ?? null;\r\n device.devicePoolName = replacedValue;\r\n }\r\n if (device.location) {\r\n const replacedValue = this.replaceDynamicValueSiteInfo(device.callingSearchSpaceName, this.currentSite?.shortName ?? '') ?? null;\r\n device.callingSearchSpaceName = replacedValue;\r\n }\r\n if (device.extraOptions) {\r\n const replacedValue = this.replaceDynamicValueSiteInfo(device.extraOptions.aarCss, this.currentSite?.shortName ?? '') ?? null;\r\n device.extraOptions.aarCss = replacedValue;\r\n }\r\n if (!device.description && this.siteDefaults) {\r\n device.description = this.siteDefaults.deviceDescription;\r\n }\r\n }\r\n\r\n private replaceDynamicValueSiteInfo(fieldValue: any, siteShortName: string): string | null {\r\n if (fieldValue) {\r\n fieldValue = this.replaceDynamicValueFormat(fieldValue);\r\n const paramsToReplaces = { 'SiteShortName': siteShortName };\r\n return this.mutliStringReplace(paramsToReplaces, fieldValue);\r\n }\r\n return null;\r\n }\r\n\r\n private replaceDynamicValueFormat(str: any): string {\r\n str = str.replace(/\\[FN\\]/ig, '[FN]').replace(/\\[LN\\]/ig, '[LN]').replace(/\\[ID\\]/ig, '[UserId]')\r\n .replace(/\\[UserId\\]/ig, '[UserId]').replace(/<Match User ID>/ig, '[UserId]')\r\n .replace(/\\[Email\\]/ig, '[Email]').replace(/\\[DN\\(/ig, '[DN(')\r\n .replace(/\\[SiteShortName\\]/ig, '[SiteShortName]').replace(/\\$\\(SiteShortName\\)/ig, '[SiteShortName]')\r\n .replace(/\\$\\{SiteShortName\\}/ig, '[SiteShortName]').replace(/{SiteShortName}/ig, '[SiteShortName]')\r\n .replace(/\\[FN\\(/ig, '[FN(').replace(/\\[LN\\(/ig, '[LN(')\r\n .replace(/\\[ID\\(/ig, '[ID(');\r\n return str;\r\n }\r\n\r\n public mutliStringReplace(object: any, input: string, directoryNumber?: string, user?: any): string {\r\n var val = input;\r\n\r\n if (val.includes('[DN]') && directoryNumber && !directoryNumber.includes('Line')) {\r\n val = val.replace('[DN]', directoryNumber);\r\n }\r\n\r\n var indexOfDN = val.indexOf('[DN(');\r\n if (indexOfDN !== -1 && directoryNumber) {\r\n var digit = val.substring(indexOfDN + 4, val.indexOf(')', indexOfDN + 4));\r\n var digitCount = Number(digit) || 0;\r\n var dnDigit = (digitCount > val.length) ? directoryNumber : directoryNumber.substring(directoryNumber.length - digitCount, directoryNumber.length);\r\n val = val.replace('[DN(' + digit + ')]', dnDigit);\r\n }\r\n\r\n var indexOfFN = val.indexOf('[FN(');\r\n if (indexOfFN !== -1 && user && user.firstName) {\r\n var digit = val.substring(indexOfFN + 4, val.indexOf(')', indexOfFN + 4));\r\n var fnDigit = user.firstName.substring(0, digit);\r\n val = val.replace('[FN(' + digit + ')]', fnDigit);\r\n }\r\n var indexOfLN = val.indexOf('[LN(');\r\n if (indexOfLN !== -1 && user && user.lastName) {\r\n var digit = val.substring(indexOfLN + 4, val.indexOf(')', indexOfLN + 4));\r\n var lnDigit = user.lastName.substring(0, digit);\r\n val = val.replace('[LN(' + digit + ')]', lnDigit);\r\n }\r\n var indexOfID = val.indexOf('[ID(');\r\n if (indexOfID !== -1 && user && user.userid) {\r\n var digit = val.substring(indexOfID + 4, val.indexOf(')', indexOfID + 4));\r\n var idDigit = user.userid.substring(0, digit);\r\n val = val.replace('[ID(' + digit + ')]', idDigit);\r\n }\r\n\r\n var entries = Object.entries(object);\r\n entries.forEach((para) => {\r\n var find = '[' + para[0] + ']';\r\n var replacement = para[1] != null ? String(para[1]) : '';\r\n val = val.split(find).join(replacement);\r\n });\r\n return val;\r\n }\r\n\r\n private initTemplateDnsNamesForLines(): void {\r\n if (this.lines && this.lines.length > 0) {\r\n this.lines.forEach((line, index) => {\r\n line.directoryNumber.templateDirectoryNumber = line.directoryNumber.directoryNumber;\r\n line.directoryNumber.directoryNumber = '';\r\n return line;\r\n });\r\n\r\n const routePartition = this.siteDefaults?.routePartition || '';\r\n this.devices.forEach(device => {\r\n if (device.lineAssociations && device.lineAssociations.length) {\r\n this.setLineAssociationsForDevice(device, routePartition);\r\n }\r\n });\r\n this.deviceProfiles.forEach(deviceProfile => {\r\n if (deviceProfile.lineAssociations && deviceProfile.lineAssociations.length) {\r\n this.setLineAssociationsForDevice(deviceProfile, routePartition);\r\n }\r\n });\r\n\r\n if (this.endUser?.singleNumberReach && this.endUser.singleNumberReach.associatedLines && this.endUser.singleNumberReach.associatedLines.length) {\r\n if (this.endUser.singleNumberReach.associatedLines && this.endUser.singleNumberReach.associatedLines.length) {\r\n this.endUser.singleNumberReach.associatedLines.map(lineAssociation => {\r\n lineAssociation.directoryNumber.templateDirectoryNumber = lineAssociation.directoryNumber.directoryNumber;\r\n lineAssociation.directoryNumber.routePartitionName = routePartition;\r\n });\r\n }\r\n if (this.endUser.singleNumberReach.remoteDestinations && this.endUser.singleNumberReach.remoteDestinations.length) {\r\n this.endUser.singleNumberReach.remoteDestinations.forEach(remoteDestination => {\r\n if (remoteDestination.lineAssociations && remoteDestination.lineAssociations.length) {\r\n remoteDestination.lineAssociations.map(lineAssociation => {\r\n lineAssociation.directoryNumber.templateDirectoryNumber = lineAssociation.directoryNumber.directoryNumber;\r\n lineAssociation.directoryNumber.routePartitionName = routePartition;\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n\r\n public buildSavableEndUser(): EndUserInterface {\r\n if (!this.endUser) {\r\n throw new Error('No template user loaded');\r\n }\r\n return buildSavableEndUser(\r\n this.endUser,\r\n this.lines,\r\n this.devices,\r\n this.deviceProfiles,\r\n this.userDetailsForm,\r\n {\r\n resolveDeviceName: (index, device) => this.resolveDeviceNameForSave(index, device),\r\n resolveDeviceProfileName: (index, profile) => this.resolveDeviceNameForSave(index, profile),\r\n }\r\n );\r\n }\r\n\r\n private resolveDeviceNameForSave(_index: number, device: DeviceInterface): string {\r\n const rawName = (device.name || device.newName || '').trim();\r\n if (!rawName) {\r\n return '';\r\n }\r\n const prefix = device.prefix?.trim();\r\n if (prefix && !rawName.toUpperCase().startsWith(prefix.toUpperCase())) {\r\n return `${prefix}${rawName}`;\r\n }\r\n return rawName;\r\n }\r\n\r\n public saveNewUser(): Observable<any> {\r\n const user = this.buildSavableEndUser();\r\n const siteId = String(this.selectedSite ?? '');\r\n const templateId = String(this.selectedTemplateId ?? '');\r\n return this.userCreationApiService.saveTemplateUser(user, templateId, siteId);\r\n }\r\n}","import { Component, ViewEncapsulation } from '@angular/core';\r\n\r\n@Component({\r\n selector: 'app-loader',\r\n templateUrl: './app-loader.component.html',\r\n styleUrls: ['./app-loader.component.scss'],\r\n encapsulation: ViewEncapsulation.None,\r\n})\r\nexport class AppLoaderComponent {\r\n constructor() {\r\n }\r\n\r\n}\r\n","<div class=\"overlay\">\r\n <mat-progress-spinner\r\n class=\"page-spinner\"\r\n mode=\"indeterminate\"\r\n [diameter]=\"70\"\r\n strokeWidth=\"3\"></mat-progress-spinner>\r\n</div>\r\n","import { Component, EventEmitter, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n AsyncValidatorFn,\r\n FormArray,\r\n FormBuilder,\r\n FormGroup,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { PageEvent } from '@angular/material/paginator';\r\nimport {\r\n catchError,\r\n debounceTime,\r\n finalize,\r\n map,\r\n Observable,\r\n of,\r\n startWith,\r\n Subject,\r\n switchMap,\r\n take,\r\n takeUntil,\r\n tap,\r\n timer,\r\n} from 'rxjs';\r\nimport {\r\n LdapQueryType,\r\n LdapUsersTableResponse,\r\n ListUserInterface,\r\n UserDetailsFormValue,\r\n} from '../../../../interfaces/user-creation-wizard.interfaces';\r\nimport { UserCreationApiService } from '../../../../shared/services/user-creation-api.service';\r\nimport { deviceNameValidator } from '../../../../utils/device-name-validation';\r\nimport { UserCreationWizardService } from '../../user-creation-wizard.service';\r\n\r\nconst LDAP_PAGE_SIZE = 10;\r\n\r\n@Component({\r\n selector: 'tk-user-details-step',\r\n templateUrl: './user-details-step.component.html',\r\n styleUrls: ['./user-details-step.component.scss'],\r\n})\r\nexport class UserDetailsStepComponent implements OnInit, OnDestroy {\r\n @Output() validityChange = new EventEmitter<boolean>();\r\n\r\n userDetailsForm: FormGroup;\r\n ldapSearchForm: FormGroup;\r\n\r\n userIdCheckPending = false;\r\n loadingAvailableNumbers = false;\r\n ldapLoading = false;\r\n ldapSearchAttempted = false;\r\n\r\n readonly ldapPageSize = LDAP_PAGE_SIZE;\r\n ldapPageIndex = 0;\r\n\r\n readonly ldapQueryTypeOptions: { label: string; value: LdapQueryType }[] = [\r\n { label: 'User ID', value: 'userId' },\r\n { label: 'First Name', value: 'firstName' },\r\n { label: 'Last Name', value: 'lastName' },\r\n ];\r\n\r\n filteredAvailableNumbersByLine: string[][] = [];\r\n filteredRoutePartitionsByLine: string[][] = [];\r\n\r\n private readonly destroy$ = new Subject<void>();\r\n private readonly userIdAsyncValidator = this.createUserIdAsyncValidator();\r\n\r\n get linesFormArray(): FormArray {\r\n return this.userDetailsForm.get('lines') as FormArray;\r\n }\r\n\r\n get devicesFormArray(): FormArray {\r\n return this.userDetailsForm.get('devices') as FormArray;\r\n }\r\n\r\n get deviceProfilesFormArray(): FormArray {\r\n return this.userDetailsForm.get('deviceProfiles') as FormArray;\r\n }\r\n\r\n get selectedLdapUser(): ListUserInterface | null {\r\n return this.userCreationWizardService.selectedLdapUser;\r\n }\r\n\r\n get ldapTotalCount(): number {\r\n return this.userCreationWizardService.ldapUsersTotal;\r\n }\r\n\r\n get hasLdapUsers(): boolean {\r\n return this.userCreationWizardService.ldapUsers.length > 0;\r\n }\r\n\r\n constructor(\r\n private readonly fb: FormBuilder,\r\n private readonly userCreationApiService: UserCreationApiService,\r\n public readonly userCreationWizardService: UserCreationWizardService\r\n ) {\r\n this.ldapSearchForm = this.fb.group({\r\n queryValue: [''],\r\n queryType: ['userId' as LdapQueryType],\r\n });\r\n\r\n this.userDetailsForm = this.fb.group({\r\n userId: ['', [Validators.required], [this.userIdAsyncValidator]],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n email: ['', [Validators.required, Validators.email]],\r\n lines: this.fb.array([]),\r\n devices: this.fb.array([]),\r\n deviceProfiles: this.fb.array([]),\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const savedFormValue = this.userCreationWizardService.userDetailsFormValue;\r\n const isRestoringPreviousEntry = !!savedFormValue;\r\n\r\n if (!isRestoringPreviousEntry) {\r\n this.resetLdapSearchForm();\r\n }\r\n\r\n this.buildDynamicFormArrays(savedFormValue);\r\n if (isRestoringPreviousEntry) {\r\n this.patchUserFieldsFromSavedValue(savedFormValue);\r\n } else {\r\n this.patchUserFieldsFromService();\r\n }\r\n\r\n this.initLineFilters();\r\n this.setupFormSync();\r\n this.setupValidityEmitter();\r\n this.fetchInitialAvailableNumbers();\r\n\r\n if (!isRestoringPreviousEntry) {\r\n this.userCreationWizardService.applyUserDetailsFormValue(this.userDetailsForm.getRawValue());\r\n }\r\n\r\n this.applyDeviceNameValidators();\r\n\r\n this.userCreationWizardService.deviceDefaultsLoaded$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.applyDeviceNameValidators();\r\n this.emitValidity();\r\n });\r\n\r\n if (this.userCreationWizardService.isLdapIntegrated && this.selectedLdapUser) {\r\n this.applyLdapIntegratedFormState();\r\n }\r\n\r\n this.emitValidity();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n isStepValid(): boolean {\r\n return this.userDetailsForm.valid && !this.userIdCheckPending;\r\n }\r\n\r\n markAllAsTouched(): void {\r\n this.userDetailsForm.markAllAsTouched();\r\n this.emitValidity();\r\n }\r\n\r\n syncToService(): void {\r\n this.userCreationWizardService.applyUserDetailsFormValue(this.userDetailsForm.getRawValue());\r\n }\r\n\r\n getLineGroup(index: number): FormGroup {\r\n return this.linesFormArray.at(index) as FormGroup;\r\n }\r\n\r\n getDeviceGroup(index: number): FormGroup {\r\n return this.devicesFormArray.at(index) as FormGroup;\r\n }\r\n\r\n getDeviceProfileGroup(index: number): FormGroup {\r\n return this.deviceProfilesFormArray.at(index) as FormGroup;\r\n }\r\n\r\n getDeviceNamePrefix(index: number): string | null {\r\n return this.userCreationWizardService.getDeviceNamePrefix(index, false);\r\n }\r\n\r\n getDeviceProfileNamePrefix(index: number): string | null {\r\n return this.userCreationWizardService.getDeviceNamePrefix(index, true);\r\n }\r\n\r\n getDeviceNameValidationCaption(index: number): string {\r\n return this.userCreationWizardService.getDeviceNameValidationCaption(index, false);\r\n }\r\n\r\n getDeviceProfileNameValidationCaption(index: number): string {\r\n return this.userCreationWizardService.getDeviceNameValidationCaption(index, true);\r\n }\r\n\r\n getFilteredNumbers(lineIndex: number): string[] {\r\n return this.filteredAvailableNumbersByLine[lineIndex] ?? [];\r\n }\r\n\r\n getFilteredRoutePartitions(lineIndex: number): string[] {\r\n return this.filteredRoutePartitionsByLine[lineIndex] ?? [];\r\n }\r\n\r\n filterAvailableNumbers(lineIndex: number, event: Event): void {\r\n const raw = (event.target as HTMLInputElement | null)?.value || '';\r\n this.applyNumberFilter(lineIndex, raw);\r\n }\r\n\r\n filterRoutePartitions(lineIndex: number, event: Event): void {\r\n const raw = (event.target as HTMLInputElement | null)?.value || '';\r\n this.applyRoutePartitionFilter(lineIndex, raw);\r\n }\r\n\r\n onRoutePartitionSelected(lineIndex: number, routePartition: string): void {\r\n const lineGroup = this.linesFormArray.at(lineIndex) as FormGroup;\r\n lineGroup.get('routePartition')?.setValue(routePartition, { emitEvent: false });\r\n lineGroup.get('number')?.setValue('');\r\n this.applyRoutePartitionFilter(lineIndex, routePartition);\r\n this.loadAvailableNumbersForLine(lineIndex, routePartition);\r\n }\r\n\r\n onNumberSelected(lineIndex: number, number: string): void {\r\n const lineGroup = this.linesFormArray.at(lineIndex) as FormGroup;\r\n const displayNumber = this.extractDirectoryNumber(number);\r\n lineGroup.get('number')?.setValue(displayNumber, { emitEvent: true });\r\n }\r\n\r\n searchLdapUsers(pageIndex = 0): void {\r\n const queryValue = String(this.ldapSearchForm.get('queryValue')?.value).trim() || undefined;\r\n const siteId = this.userCreationWizardService.selectedSite;\r\n\r\n if (!siteId) {\r\n this.userCreationWizardService.setLdapUsersResult([], 0);\r\n this.ldapPageIndex = 0;\r\n this.ldapSearchAttempted = false;\r\n return;\r\n }\r\n\r\n this.ldapPageIndex = pageIndex;\r\n const queryType = this.ldapSearchForm.get('queryType')?.value as LdapQueryType;\r\n\r\n const params = {\r\n size: String(LDAP_PAGE_SIZE),\r\n page: String(pageIndex),\r\n deviceless: 'true',\r\n querytype: queryType,\r\n withEmailOnly: 'true',\r\n queryvalue: queryValue,\r\n };\r\n\r\n this.ldapLoading = true;\r\n this.userCreationApiService\r\n .getLdapUsers(String(siteId), params)\r\n .pipe(\r\n take(1),\r\n map((res: LdapUsersTableResponse) => ({\r\n users: res?.pageData ?? [],\r\n total: res?.total ?? 0,\r\n })),\r\n catchError(() => of({ users: [], total: 0 })),\r\n finalize(() => {\r\n this.ldapLoading = false;\r\n })\r\n )\r\n .subscribe(({ users, total }) => {\r\n this.ldapSearchAttempted = true;\r\n this.userCreationWizardService.setLdapUsersResult(users, total);\r\n });\r\n }\r\n\r\n onLdapPageChange(event: PageEvent): void {\r\n this.searchLdapUsers(event.pageIndex);\r\n }\r\n\r\n onAddLdapUser(row: ListUserInterface): void {\r\n this.userCreationWizardService.selectLdapUser(row);\r\n this.userDetailsForm.patchValue({\r\n userId: row.userid,\r\n firstName: row.firstName ?? '',\r\n lastName: row.lastName ?? '',\r\n email: row.email ?? '',\r\n });\r\n this.applyLdapIntegratedFormState();\r\n this.emitValidity();\r\n }\r\n\r\n onDeleteLdapUser(row: ListUserInterface): void {\r\n if (!this.userCreationWizardService.isLdapUserRowSelected(row)) {\r\n return;\r\n }\r\n this.clearLdapSelection();\r\n }\r\n\r\n onRemoveLdapTag(): void {\r\n this.clearLdapSelection();\r\n }\r\n\r\n isLdapUserRowSelected(row: ListUserInterface): boolean {\r\n return this.userCreationWizardService.isLdapUserRowSelected(row);\r\n }\r\n\r\n private clearLdapSelection(): void {\r\n this.userCreationWizardService.clearLdapUserSelection();\r\n this.userDetailsForm.patchValue({\r\n userId: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n });\r\n this.restoreManualEntryFormState();\r\n this.emitValidity();\r\n }\r\n\r\n private applyLdapIntegratedFormState(): void {\r\n this.setUserIdentityFieldsReadonly(true);\r\n this.toggleUserIdAsyncValidator(false);\r\n this.userDetailsForm.get('userId')?.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n private restoreManualEntryFormState(): void {\r\n this.setUserIdentityFieldsReadonly(false);\r\n this.toggleUserIdAsyncValidator(true);\r\n this.userDetailsForm.get('userId')?.updateValueAndValidity();\r\n }\r\n\r\n private setUserIdentityFieldsReadonly(readonly: boolean): void {\r\n ['userId', 'firstName', 'lastName', 'email'].forEach(fieldName => {\r\n const control = this.userDetailsForm.get(fieldName);\r\n if (!control) {\r\n return;\r\n }\r\n if (readonly) {\r\n control.disable({ emitEvent: false });\r\n } else {\r\n control.enable({ emitEvent: false });\r\n }\r\n });\r\n }\r\n\r\n private toggleUserIdAsyncValidator(enabled: boolean): void {\r\n const control = this.userDetailsForm.get('userId');\r\n if (!control) {\r\n return;\r\n }\r\n if (enabled) {\r\n control.setAsyncValidators([this.userIdAsyncValidator]);\r\n } else {\r\n control.clearAsyncValidators();\r\n }\r\n control.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n private setupValidityEmitter(): void {\r\n this.userDetailsForm.statusChanges\r\n .pipe(startWith(this.userDetailsForm.status), takeUntil(this.destroy$))\r\n .subscribe(() => this.emitValidity());\r\n }\r\n\r\n private emitValidity(): void {\r\n this.validityChange.emit(this.isStepValid());\r\n }\r\n\r\n private buildDynamicFormArrays(savedFormValue?: UserDetailsFormValue | null): void {\r\n const service = this.userCreationWizardService;\r\n const linesArray = this.linesFormArray;\r\n const devicesArray = this.devicesFormArray;\r\n const profilesArray = this.deviceProfilesFormArray;\r\n\r\n while (linesArray.length) {\r\n linesArray.removeAt(0);\r\n }\r\n while (devicesArray.length) {\r\n devicesArray.removeAt(0);\r\n }\r\n while (profilesArray.length) {\r\n profilesArray.removeAt(0);\r\n }\r\n\r\n service.lines.forEach((line, index) => {\r\n const savedLine = savedFormValue?.lines?.[index];\r\n const lineGroup = this.fb.group({\r\n lineNumber: [\r\n {\r\n value: line.directoryNumber?.templateDirectoryNumber || '',\r\n disabled: true,\r\n },\r\n ],\r\n number: [\r\n savedLine?.number ?? line.directoryNumber?.directoryNumber ?? '',\r\n Validators.required,\r\n ],\r\n routePartition: [\r\n savedLine?.routePartition ?? line.directoryNumber?.routePartitionName ?? '',\r\n Validators.required,\r\n ],\r\n });\r\n linesArray.push(lineGroup);\r\n this.setupLineListeners(index, lineGroup);\r\n });\r\n\r\n service.devices.forEach((device, index) => {\r\n const savedDevice = savedFormValue?.devices?.[index];\r\n devicesArray.push(\r\n this.fb.group({\r\n deviceType: [{ value: device.deviceType || '', disabled: true }],\r\n protocol: [{ value: device.protocol || '', disabled: true }],\r\n buttonTemplate: [{ value: device.buttonTemplate || '', disabled: true }],\r\n name: [\r\n savedDevice?.name ?? device.name ?? '',\r\n this.buildDeviceNameValidators(index, false),\r\n ],\r\n })\r\n );\r\n });\r\n\r\n service.deviceProfiles.forEach((profile, index) => {\r\n const savedProfile = savedFormValue?.deviceProfiles?.[index];\r\n profilesArray.push(\r\n this.fb.group({\r\n deviceType: [{ value: profile.deviceType || '', disabled: true }],\r\n protocol: [{ value: profile.protocol || '', disabled: true }],\r\n buttonTemplate: [{ value: profile.buttonTemplate || '', disabled: true }],\r\n name: [\r\n savedProfile?.name ?? profile.name ?? '',\r\n this.buildDeviceNameValidators(index, true),\r\n ],\r\n })\r\n );\r\n });\r\n }\r\n\r\n private buildDeviceNameValidators(deviceIndex: number, isProfile: boolean): ValidatorFn[] {\r\n const validators: ValidatorFn[] = isProfile ? [] : [Validators.required];\r\n const options = this.userCreationWizardService.getDeviceNameValidationOptions(\r\n deviceIndex,\r\n isProfile\r\n );\r\n if (options) {\r\n validators.push(deviceNameValidator(options));\r\n }\r\n return validators;\r\n }\r\n\r\n private applyDeviceNameValidators(): void {\r\n this.devicesFormArray.controls.forEach((_, index) => {\r\n const nameControl = this.getDeviceGroup(index).get('name');\r\n nameControl?.setValidators(this.buildDeviceNameValidators(index, false));\r\n nameControl?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n this.deviceProfilesFormArray.controls.forEach((_, index) => {\r\n const nameControl = this.getDeviceProfileGroup(index).get('name');\r\n nameControl?.setValidators(this.buildDeviceNameValidators(index, true));\r\n nameControl?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n }\r\n\r\n private resetLdapSearchForm(): void {\r\n this.ldapSearchForm.reset({\r\n queryValue: '',\r\n queryType: 'userId' as LdapQueryType,\r\n });\r\n this.ldapSearchAttempted = false;\r\n this.ldapPageIndex = 0;\r\n this.userIdCheckPending = false;\r\n }\r\n\r\n private patchUserFieldsFromSavedValue(saved: UserDetailsFormValue): void {\r\n this.userDetailsForm.patchValue({\r\n userId: saved.userId || '',\r\n firstName: saved.firstName || '',\r\n lastName: saved.lastName || '',\r\n email: saved.email || '',\r\n });\r\n }\r\n\r\n private patchUserFieldsFromService(): void {\r\n const service = this.userCreationWizardService;\r\n const endUser = service.endUser;\r\n this.userDetailsForm.patchValue({\r\n userId: endUser?.userid || service.userDetailsForm.userId || '',\r\n firstName: endUser?.firstName || service.userDetailsForm.firstName || '',\r\n lastName: endUser?.lastName || service.userDetailsForm.lastName || '',\r\n email: endUser?.email || service.userDetailsForm.email || '',\r\n });\r\n this.userDetailsForm.markAsPristine();\r\n this.userDetailsForm.markAsUntouched();\r\n }\r\n\r\n private setupLineListeners(lineIndex: number, lineGroup: FormGroup): void {\r\n lineGroup\r\n .get('routePartition')\r\n ?.valueChanges.pipe(debounceTime(300), takeUntil(this.destroy$))\r\n .subscribe(value => {\r\n this.applyRoutePartitionFilter(lineIndex, String(value ?? ''));\r\n });\r\n\r\n lineGroup\r\n .get('number')\r\n ?.valueChanges.pipe(debounceTime(150), takeUntil(this.destroy$))\r\n .subscribe(value => {\r\n this.applyNumberFilter(lineIndex, String(value ?? ''));\r\n });\r\n }\r\n\r\n private initLineFilters(): void {\r\n const partitions = this.userCreationWizardService.routePartitionOptions;\r\n const numbers = this.userCreationWizardService.availableNumbers;\r\n this.filteredRoutePartitionsByLine = this.linesFormArray.controls.map((_, index) => {\r\n const current = String(\r\n (this.linesFormArray.at(index) as FormGroup).get('routePartition')?.value ?? ''\r\n );\r\n return this.filterOptions(partitions, current);\r\n });\r\n this.filteredAvailableNumbersByLine = this.linesFormArray.controls.map((_, index) => {\r\n const current = String((this.linesFormArray.at(index) as FormGroup).get('number')?.value ?? '');\r\n return this.filterOptions(numbers, current);\r\n });\r\n }\r\n\r\n private setupFormSync(): void {\r\n this.userDetailsForm.valueChanges\r\n .pipe(debounceTime(200), takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.userCreationWizardService.applyUserDetailsFormValue(\r\n this.userDetailsForm.getRawValue()\r\n );\r\n });\r\n }\r\n\r\n private fetchInitialAvailableNumbers(): void {\r\n const firstPartition =\r\n this.linesFormArray.length > 0\r\n ? String((this.linesFormArray.at(0) as FormGroup).get('routePartition')?.value ?? '').trim()\r\n : this.userCreationWizardService.firstLineRoutePartition ||\r\n this.userCreationWizardService.siteDefaultRoutePartition ||\r\n '';\r\n\r\n if (firstPartition) {\r\n this.loadAvailableNumbersForLine(0, firstPartition, false);\r\n }\r\n }\r\n\r\n private loadAvailableNumbersForLine(\r\n lineIndex: number,\r\n routePartition: string,\r\n clearNumber = true\r\n ): void {\r\n const siteId = this.userCreationWizardService.selectedSite;\r\n if (!siteId || !routePartition.trim()) {\r\n return;\r\n }\r\n\r\n if (clearNumber) {\r\n (this.linesFormArray.at(lineIndex) as FormGroup).get('number')?.setValue('');\r\n }\r\n\r\n this.loadingAvailableNumbers = true;\r\n this.userCreationWizardService\r\n .getNumberRange(String(siteId), routePartition)\r\n .pipe(\r\n take(1),\r\n catchError(() => of(null)),\r\n finalize(() => {\r\n this.loadingAvailableNumbers = false;\r\n this.refreshNumberFilters();\r\n })\r\n )\r\n .subscribe();\r\n }\r\n\r\n private refreshNumberFilters(): void {\r\n const numbers = this.userCreationWizardService.availableNumbers;\r\n this.filteredAvailableNumbersByLine = this.linesFormArray.controls.map((_, index) => {\r\n const current = String((this.linesFormArray.at(index) as FormGroup).get('number')?.value ?? '');\r\n return this.filterOptions(numbers, current);\r\n });\r\n }\r\n\r\n private applyNumberFilter(lineIndex: number, raw: string): void {\r\n const value = raw.trim().toLowerCase();\r\n const source = this.userCreationWizardService.availableNumbers || [];\r\n this.filteredAvailableNumbersByLine[lineIndex] = value.length\r\n ? source.filter(n => !!n && n.toLowerCase().includes(value))\r\n : [...source];\r\n }\r\n\r\n private applyRoutePartitionFilter(lineIndex: number, raw: string): void {\r\n const value = raw.trim().toLowerCase();\r\n const source = this.userCreationWizardService.routePartitionOptions || [];\r\n this.filteredRoutePartitionsByLine[lineIndex] = value.length\r\n ? source.filter(n => !!n && n.toLowerCase().includes(value))\r\n : [...source];\r\n }\r\n\r\n private filterOptions(source: string[], raw: string): string[] {\r\n const value = raw.trim().toLowerCase();\r\n if (!value.length) {\r\n return [...source];\r\n }\r\n return source.filter(item => !!item && item.toLowerCase().includes(value));\r\n }\r\n\r\n private extractDirectoryNumber(value: string): string {\r\n const trimmed = value.trim();\r\n const spaceIndex = trimmed.indexOf(' ');\r\n return spaceIndex > -1 ? trimmed.substring(0, spaceIndex) : trimmed;\r\n }\r\n\r\n private createUserIdAsyncValidator(): AsyncValidatorFn {\r\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\r\n if (this.userCreationWizardService.isLdapIntegrated) {\r\n this.userIdCheckPending = false;\r\n return of(null);\r\n }\r\n\r\n const userId = String(control.value ?? '').trim();\r\n const siteId = this.userCreationWizardService.selectedSite;\r\n if (!userId || !siteId) {\r\n this.userIdCheckPending = false;\r\n this.emitValidity();\r\n return of(null);\r\n }\r\n\r\n this.userIdCheckPending = true;\r\n this.emitValidity();\r\n\r\n return timer(500).pipe(\r\n switchMap(() =>\r\n this.userCreationApiService\r\n .checkUserIdExisting(\r\n String(siteId),\r\n encodeURIComponent(encodeURIComponent(userId))\r\n )\r\n .pipe(\r\n map(() => ({ userIdExists: true })),\r\n catchError(() => of(null))\r\n )\r\n ),\r\n tap(() => {\r\n this.userIdCheckPending = false;\r\n this.emitValidity();\r\n }),\r\n finalize(() => {\r\n this.userIdCheckPending = false;\r\n this.emitValidity();\r\n })\r\n );\r\n };\r\n }\r\n}\r\n","<app-loader *ngIf=\"loadingAvailableNumbers\"></app-loader>\r\n<section class=\"details-step-content\">\r\n <form [formGroup]=\"userDetailsForm\">\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">User details</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"details-step-section__part\">\r\n <div class=\"details-inline-fields\">\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">User ID</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput placeholder=\"User ID\" formControlName=\"userId\" />\r\n <mat-error *ngIf=\"userDetailsForm.get('userId')?.hasError('required') && userDetailsForm.get('userId')?.touched\">\r\n User ID is required\r\n </mat-error>\r\n <mat-error *ngIf=\"userDetailsForm.get('userId')?.hasError('userIdExists') && userDetailsForm.get('userId')?.touched\">\r\n User ID already exists\r\n </mat-error>\r\n <mat-hint *ngIf=\"userIdCheckPending\">Checking user ID...</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">First Name</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput placeholder=\"First Name\" formControlName=\"firstName\" />\r\n <mat-error *ngIf=\"userDetailsForm.get('firstName')?.hasError('required') && userDetailsForm.get('firstName')?.touched\">\r\n First name is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Last Name</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput placeholder=\"Last Name\" formControlName=\"lastName\" />\r\n <mat-error *ngIf=\"userDetailsForm.get('lastName')?.hasError('required') && userDetailsForm.get('lastName')?.touched\">\r\n Last name is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Email</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput placeholder=\"Email\" formControlName=\"email\" />\r\n <mat-error *ngIf=\"userDetailsForm.get('email')?.invalid && userDetailsForm.get('email')?.touched\">\r\n <span *ngIf=\"userDetailsForm.get('email')?.hasError('required')\">Email is required</span>\r\n <span *ngIf=\"userDetailsForm.get('email')?.hasError('email')\">Please enter a valid email</span>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">User Template</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input\r\n matInput\r\n placeholder=\"User Template\"\r\n [value]=\"userCreationWizardService.selectedTemplateName || ''\"\r\n [disabled]=\"true\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"details-step-section__part\">\r\n <mat-accordion class=\"details-user-accordion\">\r\n <mat-expansion-panel togglePosition=\"before\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>Choose an existing or a LDAP user</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"details-user-accordion__content\">\r\n <div class=\"details-ldap-search\" [formGroup]=\"ldapSearchForm\">\r\n <mat-form-field\r\n class=\"details-ldap-search__input\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n >\r\n <input\r\n matInput\r\n placeholder=\"Search\"\r\n formControlName=\"queryValue\"\r\n (keyup.enter)=\"searchLdapUsers()\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"details-ldap-search__select\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n >\r\n <mat-select formControlName=\"queryType\">\r\n <mat-option *ngFor=\"let option of ldapQueryTypeOptions\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-chip-list *ngIf=\"selectedLdapUser\" class=\"details-ldap-search__chip\">\r\n <mat-chip removable (removed)=\"onRemoveLdapTag()\">\r\n {{ selectedLdapUser.userid }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </mat-chip-list>\r\n\r\n <button\r\n mat-button\r\n class=\"details-ldap-search__btn\"\r\n type=\"button\"\r\n [disabled]=\"ldapLoading\"\r\n (click)=\"searchLdapUsers()\"\r\n >\r\n Search\r\n </button>\r\n </div>\r\n\r\n <app-loader *ngIf=\"ldapLoading\"></app-loader>\r\n\r\n <p\r\n *ngIf=\"!ldapLoading && ldapSearchAttempted && !hasLdapUsers\"\r\n class=\"details-ldap-table__empty\"\r\n >\r\n No users found\r\n </p>\r\n\r\n <table\r\n *ngIf=\"!ldapLoading && hasLdapUsers\"\r\n mat-table\r\n [dataSource]=\"userCreationWizardService.ldapUsers\"\r\n class=\"details-ldap-table\"\r\n >\r\n <ng-container matColumnDef=\"userId\">\r\n <th mat-header-cell *matHeaderCellDef>User Id</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.userid }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"firstName\">\r\n <th mat-header-cell *matHeaderCellDef>First Name</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.firstName }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"lastName\">\r\n <th mat-header-cell *matHeaderCellDef>Last Name</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.lastName }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"email\">\r\n <th mat-header-cell *matHeaderCellDef>Email</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.email }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"add\">\r\n <th mat-header-cell *matHeaderCellDef>Add</th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <button\r\n *ngIf=\"!isLdapUserRowSelected(row); else deleteLdapUserBtn\"\r\n mat-button\r\n class=\"details-ldap-table__add-btn\"\r\n type=\"button\"\r\n (click)=\"onAddLdapUser(row)\"\r\n >\r\n Add User\r\n </button>\r\n <ng-template #deleteLdapUserBtn>\r\n <button\r\n mat-button\r\n class=\"details-ldap-table__add-btn details-ldap-table__add-btn--delete\"\r\n type=\"button\"\r\n (click)=\"onDeleteLdapUser(row)\"\r\n >\r\n Delete user\r\n </button>\r\n </ng-template>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"userCreationWizardService.ldapTableColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: userCreationWizardService.ldapTableColumns\"></tr>\r\n </table>\r\n\r\n <mat-paginator\r\n *ngIf=\"!ldapLoading && hasLdapUsers\"\r\n class=\"details-ldap-paginator\"\r\n [length]=\"ldapTotalCount\"\r\n [pageSize]=\"ldapPageSize\"\r\n [pageIndex]=\"ldapPageIndex\"\r\n [pageSizeOptions]=\"[ldapPageSize]\"\r\n [hidePageSize]=\"true\"\r\n [disabled]=\"ldapLoading\"\r\n (page)=\"onLdapPageChange($event)\"\r\n ></mat-paginator>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Lines</h3>\r\n <div class=\"details-step-section__content\" formArrayName=\"lines\">\r\n <div class=\"line-route-list\">\r\n <div\r\n class=\"line-route-row\"\r\n *ngFor=\"let lineGroup of linesFormArray.controls; let idx = index\"\r\n [formGroupName]=\"idx\"\r\n >\r\n <div class=\"line-info\">\r\n <mat-form-field\r\n class=\"details-step-input line-route-field\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n hideRequiredMarker\r\n >\r\n <input matInput placeholder=\"Line number\" formControlName=\"lineNumber\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"details-step-input line-route-field\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n hideRequiredMarker\r\n >\r\n <input\r\n matInput\r\n placeholder=\"Search for a number\"\r\n formControlName=\"number\"\r\n [matAutocomplete]=\"numberAuto\"\r\n (input)=\"filterAvailableNumbers(idx, $event)\"\r\n />\r\n <mat-autocomplete\r\n #numberAuto=\"matAutocomplete\"\r\n [panelWidth]=\"'auto'\"\r\n (optionSelected)=\"onNumberSelected(idx, $event.option.value)\"\r\n >\r\n <mat-option *ngFor=\"let option of getFilteredNumbers(idx)\" [value]=\"option\">\r\n {{ option }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"getLineGroup(idx).get('number')?.invalid && getLineGroup(idx).get('number')?.touched\">\r\n Number is required\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"details-step-input line-route-field\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n hideRequiredMarker\r\n >\r\n <input\r\n matInput\r\n placeholder=\"Select route partition\"\r\n formControlName=\"routePartition\"\r\n [matAutocomplete]=\"routePartitionAuto\"\r\n (input)=\"filterRoutePartitions(idx, $event)\"\r\n />\r\n <mat-autocomplete\r\n #routePartitionAuto=\"matAutocomplete\"\r\n (optionSelected)=\"onRoutePartitionSelected(idx, $event.option.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let routePartition of getFilteredRoutePartitions(idx)\"\r\n [value]=\"routePartition\"\r\n >\r\n {{ routePartition }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"getLineGroup(idx).get('routePartition')?.invalid && getLineGroup(idx).get('routePartition')?.touched\">\r\n Route partition is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Devices</h3>\r\n <div class=\"details-step-section__content\" formArrayName=\"devices\">\r\n <div class=\"devices-rows\">\r\n <div\r\n class=\"details-inline-fields details-inline-fields--four\"\r\n *ngFor=\"let deviceGroup of devicesFormArray.controls; let idx = index\"\r\n [formGroupName]=\"idx\"\r\n >\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Device type</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"deviceType\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Protocol</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"protocol\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Button Template</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"buttonTemplate\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Name</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <span matPrefix *ngIf=\"getDeviceNamePrefix(idx) as devicePrefix\">{{ devicePrefix }}</span>\r\n <input matInput placeholder=\"Name\" formControlName=\"name\" />\r\n <mat-error *ngIf=\"getDeviceGroup(idx).get('name')?.hasError('deviceName') && getDeviceGroup(idx).get('name')?.touched\">\r\n {{ getDeviceGroup(idx).get('name')?.getError('deviceName')?.caption || getDeviceNameValidationCaption(idx) || 'Please enter a valid device name' }}\r\n </mat-error>\r\n <mat-error *ngIf=\"getDeviceGroup(idx).get('name')?.hasError('required') && getDeviceGroup(idx).get('name')?.touched\">\r\n Name is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"details-step-section\" *ngIf=\"deviceProfilesFormArray.length\">\r\n <h3 class=\"details-step-section__title\">Device profiles</h3>\r\n <div class=\"details-step-section__content\" formArrayName=\"deviceProfiles\">\r\n <div class=\"devices-rows\">\r\n <div\r\n class=\"details-inline-fields details-inline-fields--four\"\r\n *ngFor=\"let profileGroup of deviceProfilesFormArray.controls; let idx = index\"\r\n [formGroupName]=\"idx\"\r\n >\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Device type</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"deviceType\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Protocol</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"protocol\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Button Template</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"buttonTemplate\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Name</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <span matPrefix *ngIf=\"getDeviceProfileNamePrefix(idx) as profilePrefix\">{{ profilePrefix }}</span>\r\n <input matInput placeholder=\"Name\" formControlName=\"name\" />\r\n <mat-error *ngIf=\"getDeviceProfileGroup(idx).get('name')?.hasError('deviceName') && getDeviceProfileGroup(idx).get('name')?.touched\">\r\n {{ getDeviceProfileGroup(idx).get('name')?.getError('deviceName')?.caption || getDeviceProfileNameValidationCaption(idx) || 'Please enter a valid device name' }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </form>\r\n</section>\r\n","import { Component } from \"@angular/core\";\r\nimport { UserCreationWizardService } from \"../../user-creation-wizard.service\";\r\n\r\n@Component({\r\n selector: 'tk-user-overview-step',\r\n templateUrl: './user-overview-step.component.html',\r\n styleUrls: ['./user-overview-step.component.scss']\r\n})\r\nexport class UserOverviewStepComponent {\r\n readonly USER_DETAILS_COLS = ['User ID', 'First name', 'Last name', 'Email', 'User templates'];\r\n readonly LINES_COLS = ['Number', 'DID', 'Route partition name', 'CSS', 'Description'];\r\n readonly DEVICES_COLS = ['Name', 'Device type', 'Lines', 'Description'];\r\n\r\n constructor(\r\n public userCreationWizardService: UserCreationWizardService\r\n ) {}\r\n}","<section class=\"details-step-content\">\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">User details</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"USER_DETAILS_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of USER_DETAILS_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let user of userCreationWizardService.overviewUsers\">\r\n <span>{{ user.userId }}</span>\r\n <span>{{ user.firstName }}</span>\r\n <span>{{ user.lastName }}</span>\r\n <span>{{ user.email }}</span>\r\n <span>{{ user.userTemplate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Lines</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"LINES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of LINES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let line of userCreationWizardService.overviewLines\">\r\n <span>{{ line.number }}</span>\r\n <span>{{ line.did }}</span>\r\n <span>{{ line.routePartitionName }}</span>\r\n <span>{{ line.css }}</span>\r\n <span>{{ line.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Devices</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDevices\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <ng-container *ngIf=\"userCreationWizardService.overviewDeviceProfiles.length\">\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Device profiles</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDeviceProfiles\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <!-- <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Single Number Reach</h3>\r\n <div class=\"details-step-section__content\"></div>\r\n </section>\r\n </div> -->\r\n\r\n <!-- <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Features</h3>\r\n <div class=\"details-step-section__content\">\r\n <span style=\"margin-right: 1rem;\">Voicemail</span> 557046\r\n </div>\r\n </section>\r\n </div> -->\r\n</section>\r\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { UserCreationWizardService } from \"../../user-creation-wizard.service\";\r\nimport { USER_CREATION_TYPES } from '../../../../app.constants';\r\nimport { FormBuilder, FormControl } from \"@angular/forms\";\r\nimport { distinctUntilChanged, filter, finalize, forkJoin, of, startWith, Subject, switchMap, takeUntil, tap } from \"rxjs\";\r\nimport { UserCreationApiService } from \"../../../../shared/services/user-creation-api.service\";\r\nimport { Site } from \"../../../../classes/site\";\r\nimport { UserTemplateInterface } from \"../../../../interfaces/user-creation-wizard.interfaces\";\r\n\r\n@Component({\r\n selector: 'tk-user-template-step',\r\n templateUrl: './user-template-step.component.html',\r\n styleUrls: ['./user-template-step.component.scss']\r\n})\r\nexport class UserTemplateStepComponent {\r\n @Input() customerId!: number;\r\n @Output() validityChange = new EventEmitter<boolean>();\r\n\r\n public formGroup = this.fb.group({\r\n userType: [USER_CREATION_TYPES.CUCM],\r\n siteId: [null],\r\n userTemplateId: [''],\r\n });\r\n\r\n public userCreationType = USER_CREATION_TYPES.CUCM;\r\n\r\n public readonly USER_CREATION_TYPES = USER_CREATION_TYPES;\r\n // readonly defaultTemplateName = 'User 8851 Office';\r\n // readonly fallbackTemplateId = '-1';\r\n\r\n private readonly destroy$ = new Subject<void>();\r\n\r\n private sitesList: Site[] = [];\r\n\r\n public readonly sitesList$ = this.userCreationService.sitesList$.pipe(\r\n takeUntil(this.destroy$),\r\n tap((res) => this.sitesList = res)\r\n );\r\n public readonly templatesList$ = this.userCreationService.templatesList$.pipe(\r\n tap((templates) => {\r\n this.templates = templates || [];\r\n const templateControl = this.formGroup.get('userTemplateId');\r\n const currentTemplateId = templateControl?.value;\r\n const selectedSiteId = this.formGroup.get('siteId')?.value;\r\n // const defaultTemplate = this.templates.find(\r\n // template => template.name === this.defaultTemplateName\r\n // );\r\n\r\n const hasSelectedSite = selectedSiteId !== null && selectedSiteId !== undefined;\r\n // if (hasSelectedSite && defaultTemplate && String(currentTemplateId || '') !== String(defaultTemplate.id)) {\r\n // templateControl?.setValue(String(defaultTemplate.id));\r\n // }\r\n }),\r\n takeUntil(this.destroy$)\r\n );\r\n\r\n isTemplateSelectable = false;\r\n templates: UserTemplateInterface[] = [];\r\n loadingSites = false;\r\n loadingSiteData = false;\r\n\r\n get isLoading(): boolean {\r\n return this.loadingSites || this.loadingSiteData;\r\n }\r\n\r\n public readonly templateToggleFormControl = new FormControl(false);\r\n\r\n constructor(\r\n public userCreationWizardService: UserCreationWizardService,\r\n private readonly userCreationService: UserCreationApiService,\r\n private readonly fb: FormBuilder,\r\n ) {}\r\n\r\n ngOnInit() {\r\n\r\n this.formGroup!.get('userType')!.valueChanges\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((value) => {\r\n const isOnlyWithLocations = value === USER_CREATION_TYPES.MT ? true : false;\r\n this.getSites(isOnlyWithLocations).subscribe();\r\n this.reseFieldstForm();\r\n });\r\n\r\n this.formGroup!.get('siteId')!.valueChanges\r\n .pipe(\r\n // filter((value) => value !== null && value !== undefined),\r\n tap((value) => {\r\n // this.formGroup.get('userTemplateId')?.setValue(this.fallbackTemplateId);\r\n const selectedSite = this.sitesList.find(site => String(site.id) === String(value));\r\n if (selectedSite) {\r\n this.userCreationWizardService.setCurrentSite(selectedSite);\r\n }\r\n return this.userCreationWizardService.setSelectedSite(value);\r\n }),\r\n takeUntil(this.destroy$),\r\n switchMap((value) => {\r\n if (value === null || value === undefined || value === '') {\r\n this.loadingSiteData = false;\r\n return of(null);\r\n }\r\n\r\n this.loadingSiteData = true;\r\n return forkJoin([\r\n this.userCreationService.fetchAllUserTemplates(Number(value)),\r\n this.userCreationWizardService.getSiteAllData(Number(value)),\r\n ]).pipe(finalize(() => {\r\n this.loadingSiteData = false;\r\n }));\r\n }),\r\n )\r\n .subscribe();\r\n // .subscribe((value) => {\r\n // console.log(value);\r\n // })\r\n\r\n this.formGroup!.get('userTemplateId')!.valueChanges\r\n .pipe(\r\n filter((value) => value !== null && value !== undefined && String(value).trim().length > 0),\r\n takeUntil(this.destroy$),\r\n switchMap((value) => {\r\n // if (String(value) === this.fallbackTemplateId) {\r\n // this.userCreationWizardService.setSelectedTemplate(this.defaultTemplateName);\r\n // return of(null);\r\n // }\r\n return this.userCreationService.getUserTemplateToken(String(value), String(String(this.customerId)))\r\n .pipe(\r\n tap((payload) => {\r\n const selectedTemplate = this.templates.find(template => String(template.id) === String(value));\r\n this.userCreationWizardService.setSelectedTemplate(selectedTemplate);\r\n this.userCreationWizardService.applyTemplateTokenPayload(payload);\r\n })\r\n );\r\n })\r\n )\r\n .subscribe();\r\n\r\n this.templateToggleFormControl.valueChanges\r\n .pipe(startWith(true), takeUntil(this.destroy$), distinctUntilChanged())\r\n .subscribe((value) => {\r\n if(value === true) {\r\n const siteId = this.formGroup.get('siteId')?.value || 7095;\r\n this.userCreationService.fetchAllUserTemplates(siteId)\r\n .subscribe();\r\n } else {\r\n this.formGroup.get('userTemplateId')?.reset();\r\n }\r\n });\r\n\r\n this.getData();\r\n\r\n this.formGroup.statusChanges\r\n .pipe(startWith(this.formGroup.status), takeUntil(this.destroy$))\r\n .subscribe(() => this.validityChange.emit(this.isStepValid()));\r\n }\r\n\r\n reseFieldstForm() {\r\n this.formGroup.get('siteId')?.reset();\r\n this.formGroup.get('userTemplateId')?.reset();\r\n this.userCreationWizardService.setSelectedTemplate();\r\n this.userCreationWizardService.resetTemplateDrivenData();\r\n }\r\n\r\n private getData() {\r\n const isOnlyWithLocations = this.formGroup!.get('userType')?.value === USER_CREATION_TYPES.MT ? true : false;\r\n\r\n this.userCreationService.checkControlHubIntegration(String(this.customerId))\r\n .pipe(switchMap(() => this.getSites(isOnlyWithLocations)))\r\n .subscribe();\r\n }\r\n\r\n private getSites(isOnlyWithLocations: boolean) {\r\n this.loadingSites = true;\r\n return this.userCreationService.getAllCustomerSites(String(this.customerId), isOnlyWithLocations).pipe(\r\n finalize(() => {\r\n this.loadingSites = false;\r\n })\r\n );\r\n }\r\n\r\n public isCUCM(site: Site) {\r\n return site?.cucm?.id === 2542;\r\n }\r\n\r\n public getSelectedSiteName(): string {\r\n const siteId = this.formGroup.get('siteId')?.value;\r\n const foundedSite = this.sitesList.find((site: any) => site.id === siteId);\r\n return siteId && foundedSite ? foundedSite.name : '';\r\n }\r\n\r\n public getSelectedTemplateName(): string {\r\n const templateId = this.formGroup.get('userTemplateId')?.value;\r\n const foundedTemplate = this.templates.find((template: any) => String(template.id) === String(templateId));\r\n return templateId && foundedTemplate ? foundedTemplate.name : '';\r\n }\r\n\r\n isStepValid(): boolean {\r\n const siteId = this.formGroup.get('siteId')?.value;\r\n const templateId = this.formGroup.get('userTemplateId')?.value;\r\n return siteId !== null && siteId !== undefined && String(templateId || '').trim().length > 0;\r\n }\r\n\r\n markStepTouched(): void {\r\n this.formGroup.get('siteId')?.markAsTouched();\r\n this.formGroup.get('userTemplateId')?.markAsTouched();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","<app-loader *ngIf=\"isLoading\"></app-loader>\r\n<section class=\"template-step-content\">\r\n <ng-container [formGroup]=\"formGroup\">\r\n <!-- <div class=\"template-step-field template-step-field--user-type\">\r\n <label class=\"template-step-label\">User type</label>\r\n <mat-radio-group class=\"user-type-mat-radio-group\" formControlName=\"userType\">\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationCucm\" [value]=\"USER_CREATION_TYPES.CUCM\">\r\n UCM/DI\r\n </mat-radio-button>\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationMT\" [value]=\"USER_CREATION_TYPES.MT\">\r\n MT\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div> -->\r\n\r\n <div class=\"template-step-field\">\r\n <label class=\"template-step-label\">Select site</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Site name\"\r\n formControlName=\"siteId\">\r\n\r\n <mat-select-trigger>\r\n {{ getSelectedSiteName() }}\r\n </mat-select-trigger>\r\n\r\n <mat-option *ngFor=\"let site of sitesList$ | async\" [value]=\"site.id\">\r\n <div class=\"option-row\">\r\n <span class=\"name\">{{ site.name }}</span>\r\n <span *ngIf=\"site.name === 'Berlin' else notBerlinSite\" class=\"type\">{{ 'Webex Calling' }}</span>\r\n <ng-template #notBerlinSite>\r\n <span class=\"type\">{{ isCUCM(site) ? 'UCM' : 'Webex Calling DI' }}</span>\r\n </ng-template>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngIf=\"formGroup.get('userType')?.value === USER_CREATION_TYPES.CUCM\">\r\n <div class=\"template-step-field\">\r\n <!-- <label class=\"template-step-label\">Would you like to use a template for the user creation?</label> -->\r\n <!-- <mat-radio-group [formControl]=\"templateToggleFormControl\">\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"true\">\r\n {{ 'Yes' }}\r\n </mat-radio-button>\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"false\">\r\n {{ 'No' }}\r\n </mat-radio-button>\r\n </mat-radio-group> -->\r\n\r\n <!-- <ng-container *ngIf=\"templateToggleFormControl.value === true\"> -->\r\n <label class=\"template-step-label\">Select user template</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Templates\"\r\n formControlName=\"userTemplateId\">\r\n <mat-select-trigger>\r\n <span matTooltip=\"'A new user will be created based on the selected template, including a Cisco 8851 physical device with a single line configured, without SNR (Single Number Reach) and without voicemail.'\">\r\n {{ getSelectedTemplateName() }}\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngFor=\"let template of templatesList$ | async\" [value]=\"template.id\" [disabled]=\"template.name.includes('Jabber User')\">\r\n {{ template.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- </ng-container> -->\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n</section>\r\n","import { Component, EventEmitter, inject, Input, OnDestroy, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\r\nimport { StepperSelectionEvent } from '@angular/cdk/stepper';\r\nimport { MatStepper } from '@angular/material/stepper';\r\nimport { APIService } from '../../shared/api/api.service';\r\nimport { NotificationService } from '../../shared/services/notification.service';\r\nimport { UserDetailsStepComponent } from './components/user-details-step/user-details-step.component';\r\nimport { UserTemplateStepComponent } from './components/user-template-step/user-template-step.component';\r\nimport { UserCreationWizardService } from './user-creation-wizard.service';\r\n\r\nexport const USER_CREATED_SUCCESSFLLY = 'User created successfully';\r\n\r\n@Component({\r\n selector: 'tk-user-creation-wizard',\r\n templateUrl: './user-creation-wizard.component.html',\r\n styleUrls: ['./user-creation-wizard.component.scss'],\r\n encapsulation: ViewEncapsulation.None\r\n})\r\nexport class UserCreationWizardComponent implements OnInit, OnDestroy {\r\n private readonly apiService = inject(APIService);\r\n private readonly userCreationWizardService = inject(UserCreationWizardService);\r\n\r\n @Input() title = 'Create User';\r\n \r\n @Input() host!: string;\r\n @Input() token!: string;\r\n @Input() customerId!: number;\r\n\r\n @Output() cancel = new EventEmitter<void>();\r\n @Output() submit = new EventEmitter<void>();\r\n isSubmitting = false;\r\n private submitTimerId: number | null = null;\r\n selectedIndex = 0;\r\n templateStepValid = false;\r\n detailsStepValid = false;\r\n\r\n @ViewChild(UserTemplateStepComponent) templateStep?: UserTemplateStepComponent;\r\n @ViewChild(UserDetailsStepComponent) detailsStep?: UserDetailsStepComponent;\r\n\r\n public isLoading = false;\r\n\r\n constructor(private notificationService: NotificationService) { }\r\n\r\n ngOnInit(): void {\r\n this.apiService.token = this.token;\r\n this.apiService.apiUrl = this.host;\r\n }\r\n\r\n onCancel(): void {\r\n this.cancel.emit();\r\n }\r\n\r\n onStepSelectionChange(event: StepperSelectionEvent): void {\r\n this.selectedIndex = event.selectedIndex;\r\n\r\n if (event.selectedIndex === 1 && event.previouslySelectedIndex === 0) {\r\n this.userCreationWizardService.resetUserDetailsStepState();\r\n this.detailsStepValid = false;\r\n }\r\n }\r\n\r\n onStepperNext(stepper: MatStepper): void {\r\n if (stepper.selectedIndex === 0) {\r\n if (!this.templateStep?.isStepValid()) {\r\n this.templateStep?.markStepTouched();\r\n return;\r\n }\r\n }\r\n\r\n if (stepper.selectedIndex === 1) {\r\n if (!this.detailsStep?.isStepValid()) {\r\n this.detailsStep?.markAllAsTouched();\r\n return;\r\n }\r\n this.detailsStep?.syncToService();\r\n }\r\n\r\n stepper.next();\r\n }\r\n\r\n onSubmit(): void {\r\n if (this.isSubmitting) {\r\n return;\r\n }\r\n\r\n this.isSubmitting = true;\r\n\r\n // const delayMs = 3000 + Math.floor(Math.random() * 1001);\r\n // this.submitTimerId = window.setTimeout(() => {\r\n // this.isSubmitting = false;\r\n // this.submitTimerId = null;\r\n // this.notificationService.success('User created successfully!');\r\n // this.submit.emit();\r\n // }, delayMs);\r\n this._saveChanges();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n if (this.submitTimerId) {\r\n window.clearTimeout(this.submitTimerId);\r\n this.submitTimerId = null;\r\n }\r\n }\r\n\r\n private _saveChanges() {\r\n this.isLoading = true;\r\n this.userCreationWizardService.saveNewUser()\r\n .subscribe((res) => {\r\n this.isLoading = false;\r\n this.isSubmitting = false;\r\n this.notificationService.success('User created successfully!');\r\n this.submit.emit();\r\n }, (error: any) => {\r\n this.isLoading = false;\r\n this.isSubmitting = false;\r\n if (typeof error === 'string' && error.indexOf(USER_CREATED_SUCCESSFLLY) > -1) {\r\n this.notificationService.success('User created successfully!');\r\n this.submit.emit();\r\n } else {\r\n this.notificationService.error(error?.error?.message || 'An error occurred while creating the user. Please try again.');\r\n }\r\n });\r\n }\r\n}\r\n","<app-notification></app-notification>\r\n<app-loader *ngIf=\"isLoading\"></app-loader>\r\n<div class=\"move-user-stepper-container\" [attr.aria-busy]=\"isSubmitting\">\r\n <header class=\"move-user-header\">\r\n <div class=\"move-user-header__title\">{{ title }}</div>\r\n <div class=\"move-user-header__close\">\r\n <span class=\"app-icon user-creation-close-icon\" (click)=\"onCancel()\"></span>\r\n </div>\r\n </header>\r\n\r\n <div id=\"user-creation-stepper\">\r\n <mat-stepper [linear]=\"false\" labelPosition=\"bottom\" #stepper\r\n [selectedIndex]=\"selectedIndex\"\r\n (selectionChange)=\"onStepSelectionChange($event)\">\r\n\r\n <mat-step>\r\n <div class=\"step-title\">Step 1: User creation with template</div>\r\n <ng-template matStepLabel>User creation</ng-template>\r\n\r\n <ng-container *ngIf=\"selectedIndex === 0\">\r\n <div class=\"move-user-tab-content-box\">\r\n <tk-user-template-step\r\n [customerId]=\"customerId\"\r\n (validityChange)=\"templateStepValid = $event\"\r\n ></tk-user-template-step>\r\n </div>\r\n </ng-container>\r\n </mat-step>\r\n\r\n <mat-step>\r\n <div class=\"step-title\">Step 2 : User details</div>\r\n <ng-template matStepLabel>User details</ng-template>\r\n\r\n <ng-container *ngIf=\"selectedIndex === 1\">\r\n <div class=\"move-user-tab-content-box\">\r\n <tk-user-details-step (validityChange)=\"detailsStepValid = $event\"></tk-user-details-step>\r\n </div>\r\n </ng-container>\r\n </mat-step>\r\n\r\n <mat-step>\r\n <div class=\"step-title\">Step 3: Review</div>\r\n <ng-template matStepLabel>Review</ng-template>\r\n\r\n <ng-container *ngIf=\"selectedIndex === 2\">\r\n <div class=\"move-user-tab-content-box\">\r\n <tk-user-overview-step></tk-user-overview-step>\r\n </div>\r\n </ng-container>\r\n </mat-step>\r\n </mat-stepper>\r\n\r\n <div class=\"wizard-actions\">\r\n <ng-container [ngSwitch]=\"stepper.selectedIndex\">\r\n <ng-container *ngSwitchCase=\"0\">\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-primary\"\r\n type=\"button\"\r\n [disabled]=\"!templateStepValid\"\r\n (click)=\"onStepperNext(stepper)\"\r\n >\r\n Next\r\n </button>\r\n <button mat-button class=\"uc-btn uc-btn-secondary\" type=\"button\" (click)=\"onCancel()\">\r\n Cancel\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"1\">\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-primary\"\r\n type=\"button\"\r\n [disabled]=\"!detailsStepValid\"\r\n (click)=\"onStepperNext(stepper)\"\r\n >\r\n Next\r\n </button>\r\n <button mat-button class=\"uc-btn uc-btn-secondary\" type=\"button\" (click)=\"stepper.previous()\">\r\n Previous\r\n </button>\r\n </ng-container>\r\n\r\n <ng-container *ngSwitchCase=\"2\">\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-primary\"\r\n type=\"button\"\r\n [disabled]=\"isSubmitting\"\r\n (click)=\"onSubmit()\"\r\n >\r\n <span class=\"uc-btn__inline-content\">\r\n <span class=\"uc-btn__spinner\" *ngIf=\"isSubmitting\" aria-hidden=\"true\"></span>\r\n <span>{{ isSubmitting ? 'Creating...' : 'Create' }}</span>\r\n </span>\r\n </button>\r\n <button\r\n mat-button\r\n class=\"uc-btn uc-btn-secondary\"\r\n type=\"button\"\r\n [disabled]=\"isSubmitting\"\r\n (click)=\"stepper.previous()\"\r\n >\r\n Previous\r\n </button>\r\n </ng-container>\r\n </ng-container>\r\n </div>\r\n </div>\r\n\r\n <div class=\"wizard-loading-overlay\" [class.wizard-loading-overlay--visible]=\"isSubmitting\" aria-hidden=\"true\"></div>\r\n</div>","import { CommonModule } from \"@angular/common\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatExpansionModule } from \"@angular/material/expansion\";\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatStepperModule } from \"@angular/material/stepper\";\r\nimport { NotificationsComponent } from \"./shared/components/notification/notification.component\";\r\nimport { MaterialModule } from \"./shared/material.module\";\r\nimport { NotificationService } from \"./shared/services/notification.service\";\r\nimport { UserCreationApiService } from \"./shared/services/user-creation-api.service\";\r\nimport { SharedModule } from \"./shared/shared.module\";\r\nimport { UserDetailsStepComponent } from \"./widgets/user-creation-wizard/components/user-details-step/user-details-step.component\";\r\nimport { UserOverviewStepComponent } from \"./widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component\";\r\nimport { UserTemplateStepComponent } from \"./widgets/user-creation-wizard/components/user-template-step/user-template-step.component\";\r\nimport { UserCreationWizardComponent } from \"./widgets/user-creation-wizard/user-creation-wizard.component\";\r\nimport { UserCreationWizardService } from \"./widgets/user-creation-wizard/user-creation-wizard.service\";\r\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\r\nimport { TranslateLoader, TranslateModule } from \"@ngx-translate/core\";\r\nimport { TruncatePipe } from \"./shared/pipes/truncate.pipe\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\r\n\r\nexport function HttpLoaderFactory(http: HttpClient) {\r\n return new TranslateHttpLoader(http);\r\n}\r\n\r\n@NgModule({\r\n declarations: [\r\n UserCreationWizardComponent,\r\n UserTemplateStepComponent,\r\n NotificationsComponent,\r\n UserDetailsStepComponent,\r\n UserOverviewStepComponent,\r\n AppLoaderComponent,\r\n TruncatePipe,\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n MaterialModule,\r\n MatStepperModule,\r\n MatExpansionModule,\r\n FormsModule, \r\n ReactiveFormsModule,\r\n MatRadioModule,\r\n TranslateModule.forRoot({\r\n loader: {\r\n provide: TranslateLoader,\r\n useFactory: HttpLoaderFactory,\r\n deps: [HttpClient]\r\n }\r\n }),\r\n ],\r\n exports: [\r\n UserCreationWizardComponent,\r\n ],\r\n providers: [\r\n UserCreationApiService,\r\n UserCreationWizardService,\r\n NotificationService,\r\n ]\r\n})\r\nexport class UserCreationModule {}","/*\r\n * Public API Surface of @tuki-io/tuki-widgets\r\n */\r\n\r\n// Shared Components\r\n// export * from './shared/shared.module';\r\n\r\n// Widget Modules\r\nexport * from './src/user-creation.module';\r\n\r\n// Components\r\n// export * from './shared/components/index';\r\nexport * from './src/widgets/user-creation-wizard/user-creation-wizard.component';\r\n\r\n// Types\r\n// export * from './shared/types/data-table';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NotificationService","i4.TruncatePipe","getSavableData","i1","i2.UserCreationApiService","i3.UserCreationWizardService","i4","i6","i10","i16.AppLoaderComponent","i1.UserCreationWizardService","i3","i5","i7","i8","i9.AppLoaderComponent","i5.UserTemplateStepComponent","i6.NotificationsComponent","i7.UserDetailsStepComponent","i8.UserOverviewStepComponent"],"mappings":"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"}
1
+ {"version":3,"file":"tuki-io-tuki-widgets-user-creation.mjs","sources":["../../../../projects/tuki/widgets/user-creation/src/environments/environment.ts","../../../../projects/tuki/widgets/user-creation/src/classes/notification.ts","../../../../projects/tuki/widgets/user-creation/src/shared/services/notification.service.ts","../../../../projects/tuki/widgets/user-creation/src/app.constants.ts","../../../../projects/tuki/widgets/user-creation/src/shared/pipes/truncate.pipe.ts","../../../../projects/tuki/widgets/user-creation/src/shared/components/notification/notification.component.ts","../../../../projects/tuki/widgets/user-creation/src/shared/components/notification/notification.component.html","../../../../projects/tuki/widgets/user-creation/src/shared/material.module.ts","../../../../projects/tuki/widgets/user-creation/src/shared/api/api.service.ts","../../../../projects/tuki/widgets/user-creation/src/shared/services/user-creation-api.service.ts","../../../../projects/tuki/widgets/user-creation/src/shared/shared.module.ts","../../../../projects/tuki/widgets/user-creation/src/utils/device-name-validation.ts","../../../../projects/tuki/widgets/user-creation/src/shared/services/utils.ts","../../../../projects/tuki/widgets/user-creation/src/classes/site.ts","../../../../projects/tuki/widgets/user-creation/src/utils/model.ts","../../../../projects/tuki/widgets/user-creation/src/interfaces/user-creation-wizard.interfaces.ts","../../../../projects/tuki/widgets/user-creation/src/utils/build-savable-end-user.ts","../../../../projects/tuki/widgets/user-creation/src/utils/device-default-prefix.ts","../../../../projects/tuki/widgets/user-creation/src/utils/parse-device-name-rule.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.service.ts","../../../../projects/tuki/widgets/user-creation/src/utils/app-loader/app-loader.ts","../../../../projects/tuki/widgets/user-creation/src/utils/app-loader/app-loader.component.html","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-details-step/user-details-step.component.html","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component.html","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/components/user-template-step/user-template-step.component.html","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.ts","../../../../projects/tuki/widgets/user-creation/src/widgets/user-creation-wizard/user-creation-wizard.component.html","../../../../projects/tuki/widgets/user-creation/src/user-creation.module.ts","../../../../projects/tuki/widgets/user-creation/public-api.ts","../../../../projects/tuki/widgets/user-creation/tuki-io-tuki-widgets-user-creation.ts"],"sourcesContent":["export const environment = {\n production: false,\n // apiUrl: 'http://localhost:4200',\n apiUrl: 'http://192.168.0.191:8080',\n notificationsLifetime: 30000,\n longNotificationsLifetime: 45000,\n cashCleanTimer: 900000,\n cashArrayLength: 10000,\n matomoUrl: 'http://192.168.0.136/matomo/',\n};\n","import { environment } from '../environments/environment';\n\nconst TTL_DEFAULT = environment.notificationsLifetime;\nconst TTL_LONG_DEFAULT = environment.longNotificationsLifetime;\n\nexport enum NotificationType {\n info = 'info',\n error = 'error',\n success = 'success',\n warning = 'warning'\n}\n\nexport class Notification {\n id?: number;\n type?: NotificationType;\n message?: string;\n ttl: number = TTL_DEFAULT;\n timerId?: any;\n\n constructor(data: any) {\n Object.assign(this, data || {});\n\n if(this.ttl === undefined) {\n this.ttl = this.message && this.message.length && this.message.length < 80 ? TTL_DEFAULT : TTL_LONG_DEFAULT;\n }\n }\n\n isInfo(): boolean {\n return this.type === NotificationType.info;\n }\n isError(): boolean {\n return this.type === NotificationType.error;\n }\n isSuccess(): boolean {\n return this.type === NotificationType.success;\n }\n isWarning(): boolean {\n return this.type === NotificationType.warning;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Notification } from '../../classes/notification';\nimport { Subject } from 'rxjs';\nconst SUCCESS_TIME = 5000;\nconst INACTIVE_SESSION_MESSAGE = 'Your session was lost due to inactivity. Please login again';\nconst INACTIVE_SESSION = 'SESSION_INACTIVE';\n\n@Injectable()\nexport class NotificationService {\n\n public listChange = new Subject();\n\n private max = 0;\n private list: Notification[] = [];\n\n constructor(\n ) {\n }\n\n error(message: string, ttl?: number): void {\n this.notify('error', message, ttl);\n }\n\n success(message: string, ttl?: number): void {\n this.notify('success', message, (!ttl) ? SUCCESS_TIME : ttl);\n }\n\n warning(message: string, ttl?: number): void {\n this.notify('warning', message, ttl);\n }\n\n info(message: string, ttl?: number): void {\n this.notify('info', message, ttl);\n }\n private notify(type: string, message: string, ttl?: number): void {\n const found = this.list.find((n: Notification) => n.message === message);\n if (found) {\n this.remove(found);\n }\n const notification = new Notification({\n id: ++this.max,\n type, message, ttl\n });\n if (notification.ttl > 0) {\n notification.timerId = setTimeout(() => this.remove(notification, true), notification.ttl);\n }\n this.list.push(notification);\n this.listChange.next(this.list);\n }\n\n remove(notification: Notification, auto?: boolean): void {\n if (!auto && notification.timerId) {\n // clear timeout in case of manual remove\n clearInterval(notification.timerId);\n }\n this.list = this.list.filter(n => n.id !== notification.id);\n this.listChange.next(this.list);\n }\n\n private removeInactiveSessionError(): void {\n if (!this.list || !this.list.length) {\n return;\n }\n this.list = this.list.filter(n => n.message !== INACTIVE_SESSION_MESSAGE && n.message !== INACTIVE_SESSION);\n this.listChange.next(this.list);\n }\n\n}\n","export const API = {\n WEBEX_CHECK_CONTROL_HUB_INTEGRATION: \"/webex/api/search/webex/customers/:customerId/controlhubexists\",\n SITES: \"/dcp/api/customers/:customerId/sites\",\n SITE: \"/dcp/api/sites/:siteId\",\n DEVICE_TYPES: \"/dcp/api/provision/options/:siteId/devicetypes\",\n SITE_SETTINGS: \"/dcp/api/sites/:siteId/settings\",\n VM_USER_TEMPLATES: \"/dcp/api/provision/options/:siteId/vmusertemplates\",\n EXISTING_USERS: \"/dcp/api/provision/:siteId/users\",\n USER_TEMPLATES_UPLOAD_LIST: \"/dcp/api/searchbulkupdate/uploadedusertemplatelist\",\n USER_TEMPLATE_TOKEN: \"/dcp/api/bulkupdate/:customerId/usertemplate/:id/token\",\n AVAILABLE_DN_IN_RANGES: \"/dcp/api/sites/:siteId/available-dn-in-ranges\",\n USER_CHECK_ID_EXISTING: \"/dcp/api/provision/:siteId/users/:userId\",\n LDAP_USERS: \"/dcp/api/provision/:siteId/users\",\n USERS: \"/dcp/api/provision/:siteId/users\",\n CREATE_NEW_USER_FROM_TEMPLATE: \"/dcp/api/provision/newUserFromUserTemplate\",\n DEVICE_DEFAULTS: \"/api/provision/options/:siteId/devicedefaults/:deviceType\",\n}\n\nexport const USER_CREATION_TYPES = {\n CUCM: 'CUCM',\n MT: 'MT'\n};\n\nexport const MAX_INTEGER = 2147483647;\n\nexport const CUTTING_SYMBOLS = [\n \" \",\n \"_\",\n \"-\"\n ];\n\nexport const BREADCRUMB_LENGTH_LIMIT = 20;\nexport const DEFAULT_CUTTING_LENGTH = 15;","import { Pipe, PipeTransform } from '@angular/core';\nimport { CUTTING_SYMBOLS, BREADCRUMB_LENGTH_LIMIT, DEFAULT_CUTTING_LENGTH } from '../../app.constants';\n\n@Pipe({\n name: 'truncate'\n})\nexport class TruncatePipe implements PipeTransform {\n\n transform(value: string | undefined, args?: any[]): string {\n if(!value) {\n return '';\n }\n if (args) {\n const limit = args.length > 0 ? parseInt(args[0], 10) : 20;\n const trail = args.length > 1 ? args[1] : '...';\n return value.length > limit ? value.substring(0, limit) + trail : value;\n }\n if (value.length <= BREADCRUMB_LENGTH_LIMIT) {\n return value;\n }\n const foundSymbol = CUTTING_SYMBOLS.find((symbol) => value.includes(symbol, DEFAULT_CUTTING_LENGTH));\n const cutIndex = foundSymbol ? value.indexOf(foundSymbol, DEFAULT_CUTTING_LENGTH) : BREADCRUMB_LENGTH_LIMIT;\n return value.substring(0, cutIndex) + '...';\n }\n\n}\n","import { ChangeDetectionStrategy, ChangeDetectorRef, Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subscription } from 'rxjs';\nimport { NotificationService } from '../../../shared/services/notification.service';\nimport { Notification } from '../../../classes/notification';\n\n@Component({\n selector: 'app-notification',\n templateUrl: './notification.component.html',\n styleUrls: ['./notification.component.scss'],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class NotificationsComponent implements OnInit, OnDestroy {\n public list!: Notification[];\n public isReadMore!: boolean;\n private listSubscription!: Subscription;\n\n constructor(\n public notificationService: NotificationService,\n private ref: ChangeDetectorRef\n ) {\n }\n\n ngOnInit() {\n this.listChangeSubscribe();\n }\n\n ngOnDestroy() {\n this.listSubscription.unsubscribe();\n }\n\n public readMore(): void {\n this.isReadMore = !this.isReadMore;\n }\n\n public removeNotification(notification: Notification): void {\n this.notificationService.remove(notification);\n }\n\n private listChangeSubscribe(): void {\n this.listSubscription = this.notificationService.listChange\n .subscribe((list: any) => {\n this.list = list;\n this.ref.detectChanges();\n });\n }\n}\n","\n\n<div class=\"notification-block\" role=\"alert\" aria-live=\"assertive\">\n <div class=\"notification\"\n *ngFor=\"let notification of list\"\n [ngClass]=\"{'error': notification.isError(), 'success': notification.isSuccess()}\">\n\n <div class=\"flex-box\">\n <div class=\"notification-icons-block\">\n <i *ngIf=\"notification.isError()\" class=\"fa fa-exclamation-triangle\"></i>\n <i *ngIf=\"notification.isWarning()\" class=\"fa fa-hand-paper-o\"></i>\n <i *ngIf=\"notification.isSuccess()\" class=\"fa fa-check\"></i>\n <i *ngIf=\"notification.isInfo()\" class=\"fa fa-info-circle\"></i>\n </div>\n <div *ngIf=\"!isReadMore\" class=\"message-block\">\n {{notification.message | truncate:[93]}}\n </div>\n <div *ngIf=\"isReadMore\" class=\"message-block\">\n {{notification.message}}\n </div>\n </div>\n <div class=\"read-more-error link clickable\" *ngIf=\"notification.message && notification.message.length > 93\"\n (click)=\"readMore()\">{{(isReadMore ? 'Collapse' : 'Read More')}}</div>\n <button\n class=\"close\"\n mat-icon-button\n (click)=\"removeNotification(notification)\">\n <img class=\"notification-icon-close\" src=\"assets/icons/close_icon_modal.svg\" alt=\"\">\n </button>\n </div>\n</div>\n\n","import { NgModule } from \"@angular/core\";\r\nimport { MatProgressBarModule } from \"@angular/material/progress-bar\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { MatTooltipModule } from \"@angular/material/tooltip\";\r\nimport { MatCheckboxModule } from \"@angular/material/checkbox\";\r\nimport { MatButtonModule } from \"@angular/material/button\";\r\nimport { MatIconModule } from \"@angular/material/icon\";\r\nimport { MatFormFieldModule } from \"@angular/material/form-field\";\r\nimport { MatInputModule } from \"@angular/material/input\";\r\nimport { MatSelectModule } from \"@angular/material/select\";\r\nimport { MatAutocompleteModule } from \"@angular/material/autocomplete\";\r\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatChipsModule } from '@angular/material/chips';\r\n\r\n@NgModule({\r\n imports: [\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatAutocompleteModule,\r\n MatProgressSpinnerModule,\r\n MatPaginatorModule,\r\n MatChipsModule,\r\n ],\r\n exports: [\r\n MatProgressBarModule,\r\n MatTooltipModule,\r\n MatTableModule,\r\n MatCheckboxModule,\r\n MatButtonModule,\r\n MatIconModule,\r\n MatFormFieldModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatAutocompleteModule,\r\n MatProgressSpinnerModule,\r\n MatPaginatorModule,\r\n MatChipsModule,\r\n ]\r\n})\r\nexport class MaterialModule { }","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpHeaders } from '@angular/common/http';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class APIService {\r\n token!: string;\r\n apiUrl!: string;\r\n\r\n constructor(\r\n private httpClient: HttpClient\r\n ) { }\r\n\r\n fetch(url: string, params?: any, cache?: boolean): Observable<any> {\r\n const headers = this.getHeaders(cache);\r\n params = params || {};\r\n return this.httpClient.get(this.apiUrl + url, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n post(url: string, body: any, params = {}): Observable<any> {\r\n body = body || null;\r\n const headers = this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, { params: this.prepareEncodedParams(params), headers });\r\n }\r\n\r\n // use when response extended data is necessary:\r\n postExtended(url: string, body = null, params = {}, headers = {}) {\r\n headers = headers || this.getHeaders();\r\n return this.httpClient.post(this.apiUrl + url, body, {\r\n headers,\r\n observe: 'response',\r\n params: this.prepareEncodedParams(params)\r\n });\r\n }\r\n\r\n put(url: string, body = null, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.put(this.apiUrl + url, body, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n delete(url: string, params = {}) {\r\n const headers = this.getHeaders();\r\n return this.httpClient.delete(this.apiUrl + url, { headers, params: this.prepareEncodedParams(params) });\r\n }\r\n\r\n fetchPagination(url: string, pageSize: number, pageNumber: number, additionalParams = {}, cache?: boolean): Observable<any> {\r\n const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));\r\n const params = Object.assign(copyAdditionalParams, { size: pageSize.toString(), page: pageNumber.toString() });\r\n return this.fetch(url, params, cache) as Observable<any>;\r\n }\r\n\r\n private prepareEncodedParams(params: any) {\r\n const result: any = {};\r\n\r\n if (!params) {\r\n return {};\r\n }\r\n for (const key of Object.keys(params)) {\r\n if (params[key]) {\r\n const stringParam = params[key].toString();\r\n result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;\r\n }\r\n }\r\n return result;\r\n }\r\n\r\n private getHeaders(cache?: boolean): HttpHeaders {\r\n let headers = new HttpHeaders();\r\n if (cache) {\r\n headers = headers.append('_Cache', 'true ');\r\n }\r\n const token = this.token || this.getParameterByName('token');\r\n headers = headers.append('Authorization', 'Bearer ' + token);\r\n return headers;\r\n }\r\n\r\n private getParameterByName(name: any, url = window.location.href) {\r\n name = name.replace(/[\\[\\]]/g, '\\\\$&');\r\n var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),\r\n results = regex.exec(url);\r\n if (!results) return null;\r\n if (!results[2]) return '';\r\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\r\n }\r\n}","import { inject, Injectable } from \"@angular/core\";\nimport { BehaviorSubject, forkJoin, map, Observable, tap } from \"rxjs\";\nimport { Site, SiteDefaults, SiteInterface, SiteTemplateInterface } from \"../../classes/site\";\nimport { DeviceDefaultsInterface, UserTemplateInterface } from \"../../interfaces/user-creation-wizard.interfaces\";\n// import { APIService } from \"./api.service\";\nimport { API, MAX_INTEGER } from \"../../app.constants\";\nimport { APIService } from \"../api/api.service\";\n\n@Injectable()\nexport class UserCreationApiService {\n\n private _allSites: Site[] = [];\n private readonly sitesListSubject$ = new BehaviorSubject<Site[]>([]);\n public readonly sitesList$ = this.sitesListSubject$.asObservable();\n\n private readonly templatesListSubject$ = new BehaviorSubject<UserTemplateInterface[]>([]);\n public readonly templatesList$ = this.templatesListSubject$.asObservable();\n\n private apiService = inject(APIService);\n\n constructor() { }\n\n public getSitesList() {\n\n }\n\n public checkControlHubIntegration(customerId: string) {\n const URL = API.WEBEX_CHECK_CONTROL_HUB_INTEGRATION.replace(':customerId', String(customerId));\n return this.apiService.fetch(URL);\n // .pipe(this.handleError(true, true));\n }\n\n public getAllCustomerSites(customerId: string, onlySitesWithLocation?: boolean): Observable<Site[]> {\n const params: { [key: string]: string } = {};\n if (onlySitesWithLocation) {\n params['onlySitesWithLocation'] = 'true';\n }\n return this.apiService.fetchPagination(API.SITES.replace(':customerId', String(customerId)), MAX_INTEGER, 0, params, false)\n .pipe(\n tap((res: any) => {\n // this._allSites = [];\n // if (res.pageData && res.pageData.length) {\n // this.assignAllSites(customerId, res.pageData);\n // }\n // this.allCustomerSites$.next(true);\n // return this._allSites;\n this.sitesListSubject$.next([...res.pageData]);\n })\n )\n // .pipe(this.handleError(true));\n }\n\n public getSiteAllData(siteId: number): Observable<any> {\n // this.dataPending = true;\n return forkJoin([\n this.getSite(siteId),\n this.getSiteDefaults(siteId, false),\n // this.getDeviceTypes(siteId),\n // this.getVoiceMailUserTemplates(siteId)\n ]);\n }\n\n public getSite(siteId: number, isEdit?: boolean): Observable<SiteInterface> {\n return this.apiService.fetch(API.SITE.replace(':siteId', String(siteId)), null, false);\n }\n\n public getDeviceTypes(siteId: number | string): Observable<string[]> {\n return this.apiService.fetch(API.DEVICE_TYPES.replace(':siteId', String(siteId)), null, true)\n // .pipe(\n // map((types: string[]) => {\n // // this.deviceTypes = types)\n // })\n // );\n // .pipe(this.handleError(false, true));\n }\n\n public getSiteDefaults(siteId: number, directAccess: boolean, sharedLineSiteIds?: string): Observable<SiteDefaults> {\n const params = { directAccess: directAccess };\n // if (sharedLineSiteIds) {\n // params['sharedLineSiteIds'] = sharedLineSiteIds;\n // }\n return this.apiService.fetch(API.SITE_SETTINGS.replace(':siteId', String(siteId)), params)\n // .pipe(map((siteDefaults: SiteTemplateInterface) => {\n // // this.siteDefaults = new SiteDefaults(siteDefaults, !!sharedLineSiteIds);\n // // const copiedSiteDefaults = JSON.parse(JSON.stringify(siteDefaults));\n // // this.originalSiteDefaults = new SiteDefaults(copiedSiteDefaults, !!sharedLineSiteIds);\n // }));\n // .pipe(this.handleError(true, true));\n }\n\n public getVoiceMailUserTemplates(siteId: number) {\n return this.apiService.fetch(API.VM_USER_TEMPLATES.replace(':siteId', String(siteId)), null, true)\n .pipe(map((templates: string[]) => {\n // this.voiceMailTemplates = templates;\n }));\n // .pipe(this.handleError(false, true));\n }\n\n public fetchAllUserTemplates(siteId: number): Observable<UserTemplateInterface[]> {\n const params = {\n siteId: siteId,\n };\n return this.apiService.fetch(API.USER_TEMPLATES_UPLOAD_LIST, params)\n .pipe(tap((result: UserTemplateInterface[]) => {\n this.templatesListSubject$.next(result);\n }));\n }\n\n public getUserTemplateToken(id: string, customerId: string): Observable<any> {\n return this.apiService.fetch(API.USER_TEMPLATE_TOKEN.replace(':customerId', customerId).replace(':id', id))\n // .pipe(this.handleError(false, true));\n }\n\n public getAvailableDnInRanges(siteId: string, params: any): any {\n return this.apiService.fetch(API.AVAILABLE_DN_IN_RANGES.replace(':siteId', siteId), params);\n }\n\n public getLdapUsers(siteId: string, params: any): Observable<any> {\n return this.apiService.fetch(API.LDAP_USERS.replace(':siteId', siteId), params);\n }\n\n public checkUserIdExisting(siteId: string, userId: string): Observable<any> {\n return this.apiService.fetch(API.USER_CHECK_ID_EXISTING.replace(':siteId', siteId).replace(':userId', userId));\n }\n\n public saveTemplateUser(user: any, templateId: string, siteId: string): Observable<any> {\n return this.apiService.post(API.CREATE_NEW_USER_FROM_TEMPLATE, user, { siteId: siteId, templateId: templateId });\n }\n\n public getDeviceDefaults(siteId: string, deviceType: string): Observable<DeviceDefaultsInterface> {\n const encodedType = encodeURIComponent(deviceType);\n return this.apiService.fetch(\n API.DEVICE_DEFAULTS.replace(':siteId', siteId).replace(':deviceType', encodedType)\n );\n }\n}\n","import { NgModule } from \"@angular/core\";\r\nimport { CommonModule } from \"@angular/common\";\r\nimport { MaterialModule } from \"./material.module\";\r\nimport { NgApexchartsModule } from \"ng-apexcharts\"\r\nimport { MatTableModule } from \"@angular/material/table\";\r\nimport { HttpClientModule } from \"@angular/common/http\";\r\nimport { ReactiveFormsModule, FormsModule } from \"@angular/forms\";\r\n\r\n@NgModule({\r\n declarations: [],\r\n imports: [\r\n CommonModule,\r\n MaterialModule,\r\n NgApexchartsModule,\r\n HttpClientModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n ],\r\n exports: [\r\n MaterialModule,\r\n ReactiveFormsModule,\r\n FormsModule,\r\n MatTableModule,\r\n NgApexchartsModule,\r\n HttpClientModule,\r\n ]\r\n})\r\nexport class SharedModule {}","import { AbstractControl, ValidationErrors, ValidatorFn } from '@angular/forms';\n\nexport interface DeviceNameValidatorOptions {\n regex: string;\n caption?: string | null;\n}\n\nexport function deviceNameValidator(options: DeviceNameValidatorOptions): ValidatorFn {\n return (control: AbstractControl): ValidationErrors | null => {\n const raw = String(control.value ?? '').trim();\n if (!raw || !options.regex?.trim()) {\n return null;\n }\n\n try {\n const rule = new RegExp(`^(?:${options.regex})$`);\n if (!rule.test(raw)) {\n return {\n deviceName: {\n caption: options.caption || options.regex,\n },\n };\n }\n } catch {\n return null;\n }\n\n return null;\n };\n}\n","export const getSavableData = (model: any, exclude?: Array<string>) => {\n let result = Object.keys(model);\n if (exclude && exclude.length) {\n result = result.filter(key => !exclude.some(item => item === key));\n }\n return result.reduce((result: any, key) => {\n if (model[key] instanceof Array && model[key].length && model[key][0].getSavableData) {\n result[key] = model[key].map((item: any) => item.getSavableData());\n } else if (model[key] instanceof Object && model[key].getSavableData) {\n result[key] = model[key].getSavableData();\n } else {\n result[key] = model[key];\n }\n return result;\n }, {});\n};","import { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { getSavableData } from '../shared/services/utils';\n\nexport interface SiteInterface {\n id: number;\n name: string;\n country: any;\n locationName: string;\n isAfterTtu: boolean;\n shortName: string;\n ttuEnableDate?: string;\n cucm: any;\n cuc: any;\n hasActivated?: boolean;\n // hqStatus: boolean;\n deactivateDate?: string;\n siteUniqueId?: number;\n form: FormGroup;\n\n initForm: () => void;\n getSavableData: () => void;\n getId: () => void;\n}\n\n\nexport class Site implements SiteInterface {\n id!: number;\n name!: string;\n country: any;\n locationName!: string;\n isAfterTtu!: boolean;\n shortName!: string;\n ttuEnableDate?: string;\n cucm: any;\n cuc: any;\n hasActivated?: boolean;\n // hqStatus: boolean;\n deactivateDate?: string;\n address1?: string;\n address2?: string;\n city?: string;\n state?: string;\n zipCode?: string;\n form!: FormGroup;\n\n constructor(site?: SiteInterface) {\n Object.assign(this, site);\n this.initForm();\n }\n\n initForm() {\n const formBuilder = new FormBuilder();\n const formSettings = {\n name: [this.name || '', [Validators.required]],\n shortName: [this.shortName || '', [Validators.required]],\n cucm: [this.cucm || ''],\n cuc: [this.cuc || ''],\n address1: [this.address1 || ''],\n zipCode: [this.country || ''],\n city: [this.city || ''],\n state: [this.state || ''],\n country: [this.country || '', [Validators.required]],\n isAfterTtu: [this.isAfterTtu || ''],\n ttuEnableDate: [this.ttuEnableDate || '']\n };\n\n this.form = formBuilder.group(formSettings);\n }\n\n getSavableData() {\n const nonSavableData = ['form'];\n return getSavableData(this, nonSavableData);\n }\n\n getId() {\n return this.id;\n }\n}\n\nexport interface SiteTemplateInterface {\n id: number;\n routePartitionFilter: string | string[];\n devicePoolFilter: string | string[];\n cssFilter: string | string[] | undefined;\n voicemailProfileFilter: string | string[];\n lineCss: string;\n deviceCss: string;\n callForwardAllCss: string;\n location: string;\n voicemailUserTemplate: string;\n routePartition: string;\n devicePool: string;\n voicemailProfile: string;\n externalCallerId: string;\n huntPilotPartition: string;\n callPickupGroupPartition: string;\n meetMeConferencePartition: string;\n callParkPartition: string;\n userLocale: string;\n networkLocale: string;\n cucmGroup: string;\n softkeyTemplates: string;\n phoneButtonTemplate: string;\n phoneSecurityProfile: string;\n sipProfile: string;\n rdpCss: string;\n rdpRerouteCss: string;\n commonPhoneProfile: string;\n subscribeCss: string;\n enableEm: boolean | string;\n forwardHuntBusyCSS: string;\n forwardHuntNoAnswerCSS: string;\n forwardBusyInternalCss: string;\n forwardBusyExternalCss: string;\n forwardNoAnswerInternalCss: string;\n forwardNoAnswerExternalCss: string;\n forwardNoCoverageInternalCss: string;\n forwardNoCoverageExternalCss: string;\n forwardOnCtiFailureCss: string;\n forwardUnregisteredInternalCss: string;\n forwardUnregisteredExternalCss: string;\n rdpExternalCallerId: string;\n noAnswerRingDuration: string;\n ucServiceProfile: string;\n phoneSystem: string;\n maxNumberOfCalls: string;\n busyTrigger: string;\n didPartition: string;\n didCss: string;\n vossCompatibilitySiteCode: string;\n vossCompatibilityRidCode: string;\n dialPlanType: string;\n emService: string;\n emergencyPartition?: string;\n cucPartition: string;\n alertingName?: string;\n displayCallerId?: string;\n lineTextLabel?: string;\n textLabel?: string;\n internalTranslationPartition?: string;\n internalTranslationCss?: string;\n plarCss?: string;\n lineDescription?: string;\n deviceDescription?: string;\n sharedSitesCssFilter?: string[];\n sharedSitesRPFilter?: string[];\n reroutingCss?: string;\n udpDeviceType: string;\n udpDeviceProtocol: string;\n udpButtonTemplate: string;\n userUserLocale: string;\n userAccessControlGroups?: string;\n}\n\nexport class SiteDefaults implements SiteTemplateInterface {\n id!: number;\n routePartitionFilter: string[];\n devicePoolFilter: string[];\n cssFilter: string[];\n voicemailProfileFilter: string[];\n lineCss!: string;\n deviceCss!: string;\n callForwardAllCss!: string;\n location!: string;\n voicemailUserTemplate!: string;\n routePartition!: string;\n devicePool!: string;\n voicemailProfile!: string;\n externalCallerId!: string;\n huntPilotPartition!: string;\n callPickupGroupPartition!: string;\n meetMeConferencePartition!: string;\n callParkPartition!: string;\n userLocale!: string;\n networkLocale!: string;\n cucmGroup!: string;\n softkeyTemplates!: string;\n phoneButtonTemplate!: string;\n phoneSecurityProfile!: string;\n sipProfile!: string;\n rdpCss!: string;\n rdpRerouteCss!: string;\n commonPhoneProfile!: string;\n subscribeCss!: string;\n enableEm!: boolean;\n forwardHuntBusyCSS!: string;\n forwardHuntNoAnswerCSS!: string;\n forwardBusyInternalCss!: string;\n forwardBusyExternalCss!: string;\n forwardNoAnswerInternalCss!: string;\n forwardNoAnswerExternalCss!: string;\n forwardNoCoverageInternalCss!: string;\n forwardNoCoverageExternalCss!: string;\n forwardOnCtiFailureCss!: string;\n forwardUnregisteredInternalCss!: string;\n forwardUnregisteredExternalCss!: string;\n rdpExternalCallerId!: string;\n noAnswerRingDuration!: string;\n ucServiceProfile!: string;\n phoneSystem!: string;\n maxNumberOfCalls!: string;\n busyTrigger!: string;\n didPartition!: string;\n didCss!: string;\n vossCompatibilitySiteCode!: string;\n vossCompatibilityRidCode!: string;\n dialPlanType!: string;\n emService!: string;\n cucPartition!: string;\n alertingName?: string;\n displayCallerId?: string;\n textLabel?: string;\n internalTranslationPartition?: string;\n internalTranslationCss?: string;\n plarCss?: string;\n lineDescription?: string;\n deviceDescription?: string;\n sharedSitesCssFilter!: string[];\n sharedSitesRPFilter!: string[];\n udpDeviceType!: string;\n udpDeviceProtocol!: string;\n udpButtonTemplate!: string;\n userUserLocale!: string;\n userAccessControlGroups?: string;\n\n constructor(siteDefaults?: SiteTemplateInterface, isSharedLineSite?: boolean) {\n this.routePartitionFilter = [];\n this.devicePoolFilter = [];\n this.cssFilter = [];\n this.voicemailProfileFilter = [];\n if (siteDefaults) {\n Object.assign(this, siteDefaults);\n this.enableEm = siteDefaults.enableEm === 'true';\n this.routePartitionFilter.sort();\n this.devicePoolFilter.sort();\n this.cssFilter.sort();\n this.voicemailProfileFilter.sort();\n }\n if (isSharedLineSite) {\n this.cssFilter = siteDefaults?.sharedSitesCssFilter || [];\n this.routePartitionFilter = siteDefaults?.sharedSitesRPFilter || [];\n }\n }\n}\n\nexport interface UserTemplateInterface {\n id: number;\n name: string;\n description: string;\n customerId: number;\n endUser: any;\n userRequiredFields?: string[];\n deviceRequiredFields?: string[];\n lineRequiredFields?: string[];\n editMode?: boolean;\n isChanged?: boolean;\n type?: string;\n ownerType?: string;\n globalTemplate?: boolean;\n}\n","export const getSavableData = (model: any, exclude?: Array<string>) => {\n let result = Object.keys(model);\n if (exclude && exclude.length) {\n result = result.filter(key => !exclude.some(item => item === key));\n }\n return result.reduce((result: any, key) => {\n if (model[key] instanceof Array && model[key].length && model[key][0].getSavableData) {\n result[key] = model[key].map((item: any) => item.getSavableData());\n } else if (model[key] instanceof Object && model[key].getSavableData) {\n result[key] = model[key].getSavableData();\n } else {\n result[key] = model[key];\n }\n return result;\n }, {});\n};","import { getSavableData } from '../utils/model';\n\nexport interface LdapUserRow {\n userId: string;\n firstName: string;\n lastName: string;\n email: string;\n}\n\nexport type LdapQueryType = 'userId' | 'firstName' | 'lastName';\n\nexport interface OverviewUserRow extends LdapUserRow {\n userTemplate: string;\n}\n\nexport interface OverviewLineRow {\n number: string;\n did: string;\n routePartitionName: string;\n css: string;\n description: string;\n}\n\nexport interface OverviewDeviceRow {\n name: string;\n deviceType: string;\n lines: string;\n description: string;\n}\n\nexport type UserCreationType = 'CUCM' | 'MT';\n\nexport interface UserDetailsForm {\n userId: string;\n firstName: string;\n lastName: string;\n email: string;\n}\n\nexport interface UserDetailsLineFormValue {\n lineNumber: string;\n number: string;\n routePartition: string;\n}\n\nexport interface UserDetailsDeviceFormValue {\n deviceType: string;\n protocol: string;\n buttonTemplate: string;\n name: string;\n}\n\nexport interface UserDetailsFormValue {\n userId: string;\n firstName: string;\n lastName: string;\n email: string;\n lines: UserDetailsLineFormValue[];\n devices: UserDetailsDeviceFormValue[];\n deviceProfiles: UserDetailsDeviceFormValue[];\n}\n\nexport interface LineOption {\n number: string;\n did: string;\n css: string;\n description: string;\n}\n\nexport interface SelectedLineRow {\n lineNumber: string | null;\n routePartitionName: string | null;\n}\n\nexport interface DeviceEntry {\n deviceType: string;\n protocol: string;\n buttonTemplate: string;\n name: string;\n}\n\nexport interface TemplateLineLike {\n directoryNumber?: {\n directoryNumber?: string;\n routePartitionName?: string | null;\n templateDirectoryNumber?: string | null;\n };\n description?: string | null;\n callingSearchSpace?: string | { name?: string | null } | null;\n didPatterns?: Array<{ pattern?: string | null }> | null;\n}\n\nexport interface TemplateDeviceLike {\n deviceType?: string | null;\n protocol?: string | null;\n buttonTemplate?: string | null;\n name?: string | null;\n lineAssociations?: Array<{\n logMissedCall?: boolean | string | null;\n directoryNumber?: {\n directoryNumber?: string;\n routePartitionName?: string | null;\n templateDirectoryNumber?: string | null;\n } | null;\n }>;\n}\n\nexport interface TemplateEndUserLike {\n userid?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n email?: string | null;\n lines?: TemplateLineLike[] | null;\n devices?: TemplateDeviceLike[] | null;\n}\n\n\nexport interface UserTemplateInterface {\n id: number;\n name: string;\n description: string;\n createOrUpload: string | null;\n userTemplateSettings: UserTemplateSetting[];\n customerId: number;\n userRequiredFields: string[];\n deviceRequiredFields: string[];\n udpRequiredFields: string[];\n lineRequiredFields: string[];\n endUser: EndUserInterface;\n type: string;\n globalTemplate: boolean;\n}\n\nexport interface UserTemplateSetting {\n // Add fields if needed\n}\n\n// export class User implements EndUserInterface {\n// userid?: string;\n// firstName?: string;\n// lastName?: string;\n// middleName?: string;\n// email?: string;\n// domain?: string;\n// department?: string;\n// telephoneNumber?: string;\n// homeNumber?: string;\n// mobileNumber?: string;\n// pagerNumber?: string;\n// displayName?: string;\n// ldapIntegrated?: boolean;\n// sparkLicenses: Array<any>;\n// extensionMobility: any;\n// singleNumberReach?: SingleNumberReach;\n// primaryLineReference: LineDirectory;\n// voicemail: Voicemail;\n// devices: Array<Device>;\n// deviceProfiles: Array<Device>;\n// lines: Array<Line>;\n// features: Array<string>;\n// ucServiceProfile: string;\n// subscribeCss: string;\n// presenceGroup: string;\n// allowDeviceControlFromCti: boolean;\n// enableCrossClusterEm: boolean;\n// enableUserToHostConferenceNow: boolean;\n// attendeesAccessCode: string;\n// manager: string;\n// title: string;\n// associatedPc: string;\n// userProfile: string;\n// enableMobileVoiceAccess: boolean;\n// mlppUserIdNumber: string;\n// mlppPrecedencePattern: string;\n// userLocale: string;\n// siteId: number;\n// siteName: string;\n// location: string;\n// lineAppearances: Array<LineAppearance>;\n// meetMes: Array<MeetMeConferencing>;\n// token: string;\n// mlppPassword: string;\n// password?: string;\n// digestCredentials?: string;\n// newUserid: string;\n// homeCluster: boolean;\n// directoryUri: string;\n// createUserMode: boolean;\n// pin: string;\n// migrationVmUnchanged: boolean;\n// migrationImPUnchanged: boolean;\n// telecomManagerRule: boolean;\n// userTemplateUdpDeviceTypesRules: UdpDeviceTypesRule[];\n// deletedUserTemplateUdpDeviceTypesRules: UdpDeviceTypesRule[];\n// hasModifiedCache = false;\n\n// vmOnlyUser?: boolean;\n\n// constructor(user: EndUserInterface, devicesStates = null, deviceProfilesStates = null, linesStates = null) {\n// Object.assign(this, user || {});\n// this.extensionMobility = new ExtensionMobility(this.extensionMobility);\n// this.singleNumberReach = new SingleNumberReach(this.singleNumberReach);\n// this.primaryLineReference = new LineDirectory(this.primaryLineReference);\n// this.voicemail = new Voicemail(this.voicemail);\n// this.devices = !this.devices ? [] : this.devices.map(device => new Device(device));\n// this.userTemplateUdpDeviceTypesRules = !this.userTemplateUdpDeviceTypesRules ? [] : this.userTemplateUdpDeviceTypesRules.map(rule => new UdpDeviceTypesRule(rule));\n// this.deviceProfiles = !this.deviceProfiles ? [] : this.deviceProfiles\n// .map(device => new Device(device, appValidators, DeviceKind.deviceProfile));\n// this.lines = !this.lines ? [] : this.lines.map(line => new Line(line));\n// this.lineAppearances = !this.lineAppearances ? [] : this.lineAppearances.map(lineAppearance => new LineAppearance(lineAppearance));\n// this.meetMes = !this.meetMes ? [] : this.meetMes.map(meetMe => new MeetMeConferencing(meetMe));\n// this.sparkLicenses = !this.sparkLicenses ? [] : this.sparkLicenses.map(spark => new Spark(spark));\n// this.features = this.features || [];\n// this.password = null;\n// this.digestCredentials = null;\n// this.deletedUserTemplateUdpDeviceTypesRules = [];\n// }\n\n// getSavableData() {\n// const excludedFields: string[] = ['form', 'editMode$', 'viewMode', 'token', 'hasModifiedCache', 'deletedUserTemplateUdpDeviceTypesRules'];\n// return getSavableData(this, excludedFields);\n// }\n// }\n\nexport class EndUser implements Partial<EndUserInterface> {\n lines: LineInterface[] = [];\n voicemail: Voicemail;\n constructor(init?: EndUserInterface) {\n Object.assign(this, init || {});\n this.voicemail = new Voicemail(init?.voicemail);\n }\n}\n\nexport interface EndUserInterface {\n userid?: string | null;\n email?: string | null;\n firstName?: string | null;\n lastName?: string | null;\n domain?: string | null;\n customerId?: number | null;\n department?: string | null;\n userProfile?: string | null;\n manager?: string | null;\n enableMobileVoiceAccess?: boolean | null;\n associatedPc?: string | null;\n userLocale?: string | null;\n digestCredentials?: string | null;\n middleName?: string | null;\n title?: string | null;\n telephoneNumber?: string | null;\n homeNumber?: string | null;\n mobileNumber?: string | null;\n pagerNumber?: string | null;\n displayName?: string | null;\n directoryUri?: string | null;\n presenceGroup?: string | null;\n subscribeCss?: string | null;\n allowDeviceControlFromCti?: boolean | null;\n enableCrossClusterEm?: boolean | null;\n mlppUserIdNumber?: string | null;\n mlppPrecedencePattern?: string | null;\n createUserMode?: boolean;\n enableMobility?: boolean | null;\n devices?: DeviceInterface[];\n deviceProfiles?: DeviceInterface[];\n lines: LineInterface[];\n singleNumberReach?: {\n associatedLines?: LineInterface[] | null;\n remoteDestinations?: {\n lineAssociations?: LineInterface[] | null;\n }[] | null;\n remoteDestinationProfileName?: string | null;\n } | null;\n primaryLineReference?: unknown | null;\n voicemail?: Voicemail;\n features?: Feature[];\n migrationVmUnchanged?: boolean | null;\n migrationImPUnchanged?: boolean | null;\n ucServiceProfile?: string | null;\n telecomManagerRule?: boolean;\n userTemplateUdpDeviceTypesRules?: UserTemplateUdpDeviceTypesRule[];\n ldapIntegrated?: boolean | null;\n}\n\nexport interface CallInfoDisplay {\n callerName?: string | null;\n callerNumber?: string | null;\n redirectedNumber?: string | null;\n dialedNumber?: string | null;\n}\n\nexport interface DidPattern {\n calledPartyTransformationMask?: string | null;\n pattern?: string | null;\n}\n\nexport interface ProtocolSpecificDefaults {\n buttonTemplates: string[];\n securityProfiles: string[];\n supportedExpansionModules: string[];\n supportsSoftkeyTemplates: boolean;\n supportsBLF: boolean;\n supportsEM: boolean;\n supportsMultipleCallDisplay: boolean;\n}\n\nexport interface DeviceDefaultsInterface {\n deviceType: string;\n deviceNameRegex: string;\n deviceNameExplained: string;\n networkLocales: string[];\n protocolProtocolSpecificDefault: Record<string, ProtocolSpecificDefaults>;\n}\n\nexport interface DeviceInterface {\n deviceType: string | null;\n protocol: string | null;\n name: string | null;\n newName: string | null;\n prefix: string | null;\n description?: string | null;\n buttonTemplate: string | null;\n location: string | null;\n devicePoolName: string | null;\n softkeyTemplate: string | null;\n entityChangeType: string | null;\n createDeviceMode?: boolean;\n callingSearchSpaceName: string | null;\n commonPhoneConfigName: string | null;\n securityProfile: string | null;\n userLocale: string | null;\n networkLocale: string | null;\n enabledExtensionMobility: boolean | null;\n firstExpansionModule: string | null;\n secondExpansionModule: string | null;\n withUdp: boolean;\n lineAssociations: LineAssociation[];\n sipProfile: string | null;\n subscribeCallingSearchSpaceName: string | null;\n extraOptions: DeviceExtraOptions;\n userDeviceType: string | null;\n builtInBridge: string | null;\n services: Service[];\n speedDials: SpeedDial[];\n busyLampFields: BusyLampField[];\n webexUUID: string | null;\n pkid: string | null;\n deviceDefaults?: DeviceDefaultsInterface | null;\n nameValidationRegex?: string | null;\n nameValidationCaption?: string | null;\n}\n\nexport interface LineAssociation {\n linePkid: string | null;\n index: number;\n position: string | null;\n directoryNumber: DirectoryNumber;\n e164Mask: string | null;\n textLabel: string | null;\n displayLabel: string | null;\n displayLabelAscii: string | null;\n maxNumberOfCalls: number | null;\n busyTrigger: number | null;\n recordingOption: string | null;\n recordingProfile: string | null;\n recordingMediaSource: string | null;\n visualMWI: boolean | null;\n audibleMWI: boolean | null;\n ringSetting_idle: string | null;\n ringSetting_active: string | null;\n pickupAAS_idle: string | null;\n pickupAAS_active: string | null;\n monitorCSS: string | null;\n logMissedCall: boolean | string | null;\n callInfoDisplay: CallInfoDisplay | string | null;\n lineLocalId: string;\n didPattern: DidPattern | string | null;\n entityChangeType?: string | null;\n sharedDevices: SharedDevice[];\n sharedUsers: SharedUser[];\n ownerUserId: string[];\n associated: boolean;\n patternUsage: string | null;\n alertingName: string | null;\n populateWithDid: boolean;\n}\n\nexport interface DirectoryNumber {\n // directoryNumber: string | null;\n // routePartitionName: string | null;\n // pkid: string | null;\n // dnType: string | null;\n // subType: string | null;\n\n directoryNumber: string;\n templateDirectoryNumber?: string;\n routePartitionName: string;\n pkid?: string | null;\n dnType?: string | null;\n subType?: string | null;\n displayValue?: string;\n}\n\nexport interface DeviceExtraOptions {\n mediaResourceGroupList: string | null;\n userHoldMOHAudioSourceId: string | null;\n userHoldMOHAudioSourceName: string | null;\n networkMOHAudioSourceId: string | null;\n networkMOHAudioSourceName: string | null;\n aarCss: string | null;\n aarGroup: string | null;\n privacy: string | null;\n deviceMobilityMode: string | null;\n mobilityUserId: string | null;\n phonePersonalization: string | null;\n servicesProvisioning: string | null;\n phoneLoadName: string | null;\n phoneIdleBLFAlertSetting: string | null;\n phoneBusyBLFAlertSetting: string | null;\n useTrustedRelayPoint: boolean | null;\n alwaysUsePrimeLine: boolean | null;\n alwaysUsePrimeLineForVoiceMessage: boolean | null;\n geolocation: string | null;\n ignorePresentationIndicators: boolean | null;\n loggedIntoHuntGroup: boolean | null;\n enabledExtensionMobility: boolean | null;\n remoteDevice: string | null;\n protectedDevice: boolean | null;\n hotlineDevice: boolean;\n commonDeviceConfigName: string | null;\n useDevicePoolCgpnIngressDN: boolean | null;\n cgpnIngressDN: string | null;\n useDevicePoolCgpnTransformCss: boolean | null;\n cgpnTransformationCss: string | null;\n packetCaptureMode: string | null;\n packetCaptureDuration: number | null;\n blfPresenceGroup: string | null;\n sipDialRules: string | null;\n mtpPreferredOriginatingCodec: string | null;\n rerouteCss: string | null;\n subscribeCss: string | null;\n digestUser: string | null;\n mtpRequired: boolean | null;\n unattendedPort: boolean | null;\n requireDtmfReception: boolean | null;\n informationUrl: string | null;\n directoryUrl: string | null;\n messagesUrl: string | null;\n servicesUrl: string | null;\n authenticationUrl: string | null;\n proxyServerUrl: string | null;\n idleUrl: string | null;\n idleTimeout: number | null;\n secureAuthenticationUrl: string | null;\n secureDirectoryUrl: string | null;\n secureIdleUrl: string | null;\n secureInformationUrl: string | null;\n secureMessageUrl: string | null;\n secureServicesUrl: string | null;\n mlppDomain: string | null;\n mlppIndication: string | null;\n mlppPreemption: string | null;\n confidentialAccessMode: string | null;\n confidentialAccessLevel: string | null;\n confidentialAccessLevelName: string | null;\n doNotDisturb: boolean | null;\n dndOption: string | null;\n dndIncomingCallAlert: string | null;\n disableSpeakerphone: boolean | null;\n disableSpeakerphoneAndHeadset: boolean | null;\n forwardingDelay: number | null;\n pcPort: boolean | null;\n settingsAccess: string | null;\n gratuitousARP: boolean | null;\n pcVoiceVlanAccess: string | null;\n videoCapabilities: string | null;\n webAccess: boolean | null;\n daysDisplayNotActive: number | null;\n displayOnTime: string | null;\n displayOnDuration: number | null;\n displayIdleTimeout: number | null;\n wirelessHeadsetHookswitchControl: boolean | null;\n minRingVolume: number | null;\n showAllCallsOnPL: boolean | null;\n lineMode: string | null;\n latentCapabilityRegistration: boolean | null;\n actionableAlert: boolean | null;\n revertToAllCalls: boolean | null;\n widebandHeadsetUIControl: boolean | null;\n widebandHeadset: boolean | null;\n authentication802: boolean | null;\n spanToPcPort: boolean | null;\n headsetMonitor: boolean | null;\n headsetRecording: boolean | null;\n updatedFields: string[];\n enableCdpSwPort: boolean | null;\n enableCdpPcPort: boolean | null;\n enableLldpPcPort: boolean | null;\n defaultWallpaperFile: string | null;\n analogGatewayPortInformation: string | null;\n loadServer: string | null;\n peerFirmwareSharing: string | null;\n}\n\nexport interface LineInterface {\n directoryNumber: DirectoryNumber;\n callingSearchSpace: string | null;\n description: string | null;\n localId: string;\n entityChangeType: string | null;\n alertingName: string | null;\n asciiAlertingName: string | null;\n callForwardAll: CallForward;\n callForwardAllSecondaryCSS: CallForward;\n callForwardBusyInternal: CallForward;\n callForwardBusyExternal: CallForward;\n callForwardNoAnswerInternal: CallForward;\n callForwardNoAnswerExternal: CallForward;\n callForwardNoCoverageInternal: CallForward;\n callForwardNoCoverageExternal: CallForward;\n callForwardOnCTIFailure: CallForward;\n callForwardUnregisteredInternal: CallForward;\n callForwardUnregisteredExternal: CallForward;\n voiceMailProfile: string | null;\n noAnswerRingDuration: number | null;\n autoAnswer: string | null;\n callPickupGroup: string | null;\n aarSettings: AarSettings;\n parkMonitoringInternal: string | null;\n parkMonitoringExternal: string | null;\n urgentPriority: string | null;\n blfPresenceGroup: string | null;\n userHoldMOHAudioSourceId: string | null;\n userHoldMOHAudioSourceName: string | null;\n networkMOHAudioSourceId: string | null;\n networkMOHAudioSourceName: string | null;\n rejectAnonymousCall: boolean | null;\n enterpriseAltNum: string | null;\n e164AltNum: string | null;\n directoryUris: string[];\n callForwardAlternateParty: CallForward;\n mlppNoAnswerRingDuration: number | null;\n confidentialAccessMode: string | null;\n confidentialAccessLevel: string | null;\n confidentialAccessLevelName: string | null;\n callControlAgentProfile: string | null;\n holdReversionRingDuration: number | null;\n holdReversionNotificationInterval: number | null;\n partyEntranceTone: string | null;\n pstnFailover: string | null;\n newToUser: boolean | null;\n didPatterns: string[];\n}\n\nexport interface CallForward {\n forwardToVoiceMail: boolean | null;\n destination: string | null;\n callingSearchSpace: string | null;\n duration: number | null;\n}\n\nexport interface AarSettings {\n aarDestinationMask: string | null;\n aarGroup: string | null;\n aarVoiceMailEnabled: boolean | null;\n aarKeepCallHistory: boolean | null;\n}\n\nexport interface DeviceProfile {\n}\n\nexport interface Feature {\n}\n\nexport interface UserTemplateUdpDeviceTypesRule {\n id: number;\n originalDeviceType: string;\n protocol: string;\n newDeviceType: string;\n originNewDeviceType: string;\n entityChangeType: string;\n newProtocol: string;\n isTemplateRule: boolean;\n localId: number;\n}\n\nexport interface SharedDevice {\n}\n\nexport interface SharedUser {\n}\n\nexport interface Service {\n}\n\nexport interface SpeedDial {\n}\n\nexport interface BusyLampField {\n}\n\nexport enum DnRangeType {\n extension = 'EXTENSION',\n cpg = 'CPG',\n callpark = 'CALLPARK',\n huntgroup = 'HUNTGROUP',\n meetme = 'MEETME',\n did = 'DID'\n}\n\nexport interface DnRangeInterface {\n from: string;\n to: string;\n prefix: string;\n routePartition: string;\n dnType: DnRangeType;\n tempIdx: number;\n}\n\nexport interface AvailablePhoneNumberRangeInterface {\n phoneNumberRange: DnRangeInterface;\n usedNumbers: string[];\n requestedNumber: string;\n unUsedNumbersWithDids: any[];\n}\n\nexport interface AvailableRangeInterface {\n availableNumberList: AvailablePhoneNumberRangeInterface[];\n}\n\nexport enum UserViewType {\n details = 0,\n devices = 1,\n lines = 2,\n snr = 3,\n features = 4,\n overview = 5\n}\n\nexport interface ListUserInterface {\n userid: string;\n firstName?: string;\n lastName?: string;\n email?: string;\n telephoneNumber?: string;\n viewMode?: UserViewType;\n devices: DeviceInterface[];\n deviceProfiles: DeviceInterface[];\n lines?: LineInterface[];\n siteId?: number;\n siteName?: string;\n checked?: boolean;\n}\n\nexport interface LdapUsersTableResponse {\n total: number;\n pageData: ListUserInterface[];\n}\n\n// export class ExtensionMobility implements ExtensionMobilityInterface {\n// deviceType: string = '';\n// deviceProfileName: string = '';\n// buttonTemplate: string = '';\n// services: string[] = [];\n// protocol: string = '';\n// userLocale: string = '';\n// lineAssociations: LineAssociation[] = [];\n// speedDials: SpeedDial[] = [];\n\n// constructor(extensionMobility: ExtensionMobilityInterface) {\n// Object.assign(this, extensionMobility || {});\n// }\n\n// getSavableData() {\n// return getSavableData(this);\n// }\n\n// }\n// export class ExtensionMobilityInterface {\n// deviceType?: string;\n// deviceProfileName?: string;\n// buttonTemplate?: string;\n// services?: string[];\n// protocol?: string;\n// userLocale?: string;\n// lineAssociations: LineAssociation[] = [];\n// speedDials: SpeedDial[] = [];\n\n// constructor(extensionMobility: ExtensionMobilityInterface) {\n// Object.assign(this, extensionMobility || {});\n// this.speedDials.map(dial => new SpeedDial(dial, false));\n// }\n\n// getSavableData() {\n// return getSavableData(this);\n// }\n\n// }\n\n// export interface SingleNumberReachInterface {\n// remoteDestinationProfileName: string;\n// remoteDestinations?: RemoteDestinationInterface[];\n// devicePool?: string;\n// css?: string;\n// rerouteCss?: string;\n// }\n\n// export interface RemoteDestinationInterface {\n// name: string;\n// destination: string;\n// answerTooSoonTimer: number;\n// answerTooLateTimer: number;\n// delayBeforeRingingCell: number;\n// lineAssociations: LineDirectoryInterface[];\n// snrVoicemailPolicy?: string;\n// enableMoveToMobile?: boolean;\n// ringSchedule?: RingScheduleInterface;\n// todError?: boolean;\n// enableSingleNumberReach?: boolean;\n// }\n\n// export interface SingleNumberReachInterface {\n// remoteDestinationProfileName: string;\n// remoteDestinations?: RemoteDestinationInterface[];\n// devicePool?: string;\n// css?: string;\n// rerouteCss?: string;\n// }\n\n\nexport class Voicemail implements Partial<VoicemailInterface> {\n callHandlerObjectId?: string;\n extension: string = '';\n vmUserTemplate: string = '';\n emailAddress: string = '';\n vmPassword?: any;\n vmMailbox?: any;\n vmUnifiedMessagingAccount?: any[];\n notificationDevices?: any[];\n alternateExtensions?: any[];\n language?: any;\n messageActions?: any;\n callerInput?: any;\n webAppPasswordSettings?: any;\n vmPasswordSettings?: any;\n greetings: any[] = [];\n pkid?: string;\n pin: string = '';\n // non-savable data\n changeExtensionByNewLine: number = 0;\n\n constructor(vm?: VoicemailInterface) {\n if (vm && vm.extension) {\n Object.assign(this, vm);\n if (this.extension && this.extension.startsWith('+')) {\n this.extension = '\\\\' + this.extension;\n }\n if (this.extension) {\n // this.notificationDevices = this.initDevices();\n // this.greetings = !this.greetings ? [] : this.greetings.map(greetings => new GreetingDetail(greetings));\n }\n } else {\n this.extension = '';\n this.vmUserTemplate = '';\n }\n }\n\n getSavableData() {\n const nonSavableData = ['vmMailbox', 'notificationDevices', 'changeExtensionByNewLine'];\n return getSavableData(this, nonSavableData);\n }\n}\n\nexport interface VoicemailInterface {\n callHandlerObjectId?: string;\n extension: string;\n vmUserTemplate?: string;\n vmPassword?: any;\n vmMailbox?: any;\n vmUnifiedMessagingAccount?: any[];\n notificationDevices?: any[];\n alternateExtensions?: any[];\n language?: any;\n messageActions?: any;\n webAppPassword?: any;\n vmPasswordSettings?: any;\n pkid?: string;\n}","import {\n DeviceInterface,\n EndUserInterface,\n LineAssociation,\n LineInterface,\n UserDetailsForm,\n} from '../interfaces/user-creation-wizard.interfaces';\n\nexport const ENTITY_CHANGE_TYPE = {\n ADDED: 'added',\n UPDATED: 'updated',\n EXISTING: 'existing',\n REMOVED: 'removed',\n} as const;\n\nexport interface CallInfoDisplayPayload {\n callerName?: string | null;\n callerNumber?: string | null;\n redirectedNumber?: string | null;\n dialedNumber?: string | null;\n}\n\nexport interface DidPatternPayload {\n calledPartyTransformationMask?: string | null;\n pattern?: string | null;\n [key: string]: unknown;\n}\n\nexport interface BuildSavableEndUserOptions {\n resolveDeviceName?: (index: number, device: DeviceInterface) => string;\n resolveDeviceProfileName?: (index: number, device: DeviceInterface) => string;\n}\n\nfunction deepClone<T>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction toApiBooleanString(value: unknown): string {\n if (value === true || value === 'true') {\n return 'true';\n }\n if (value === false || value === 'false') {\n return 'false';\n }\n return value == null || value === '' ? '' : String(value);\n}\n\nfunction toApiStringValue(value: unknown): string {\n if (value === true) {\n return 'true';\n }\n if (value === false) {\n return 'false';\n }\n return value == null ? '' : String(value);\n}\n\nfunction normalizeCallInfoDisplay(\n callInfoDisplay: unknown\n): CallInfoDisplayPayload | null {\n if (!callInfoDisplay) {\n return null;\n }\n if (typeof callInfoDisplay === 'string') {\n try {\n const parsed = JSON.parse(callInfoDisplay);\n return normalizeCallInfoDisplay(parsed);\n } catch {\n return null;\n }\n }\n if (typeof callInfoDisplay !== 'object') {\n return null;\n }\n const source = callInfoDisplay as Record<string, unknown>;\n return {\n callerName: source['callerName'] != null ? toApiBooleanString(source['callerName']) : null,\n callerNumber: source['callerNumber'] != null ? toApiBooleanString(source['callerNumber']) : null,\n redirectedNumber: source['redirectedNumber'] != null ? toApiBooleanString(source['redirectedNumber']) : null,\n dialedNumber: source['dialedNumber'] != null ? toApiBooleanString(source['dialedNumber']) : null,\n };\n}\n\nfunction normalizeDidPattern(\n didPattern: unknown,\n line?: LineInterface,\n directoryNumber?: string\n): DidPatternPayload | null {\n if (didPattern && typeof didPattern === 'object') {\n return didPattern as DidPatternPayload;\n }\n if (typeof didPattern === 'string' && didPattern.trim()) {\n return { calledPartyTransformationMask: didPattern };\n }\n const dn = directoryNumber || line?.directoryNumber?.directoryNumber;\n if (dn) {\n return { calledPartyTransformationMask: dn };\n }\n return null;\n}\n\nfunction normalizeDirectoryNumber(\n directoryNumber: LineAssociation['directoryNumber']\n): LineAssociation['directoryNumber'] {\n const { displayValue: _displayValue, ...rest } = directoryNumber;\n return {\n directoryNumber: rest.directoryNumber ?? '',\n routePartitionName: rest.routePartitionName ?? '',\n templateDirectoryNumber: rest.templateDirectoryNumber,\n pkid: rest.pkid || null,\n dnType: rest.dnType || null,\n subType: rest.subType ?? null,\n };\n}\n\nfunction prepareLineAssociation(\n association: LineAssociation,\n line?: LineInterface\n): LineAssociation {\n const prepared = deepClone(association);\n const lineDn = line?.directoryNumber;\n\n if (lineDn) {\n prepared.directoryNumber = {\n ...prepared.directoryNumber,\n directoryNumber: lineDn.directoryNumber || '',\n routePartitionName: lineDn.routePartitionName || '',\n templateDirectoryNumber:\n lineDn.templateDirectoryNumber ??\n prepared.directoryNumber?.templateDirectoryNumber,\n } as LineAssociation['directoryNumber'];\n }\n\n prepared.directoryNumber = normalizeDirectoryNumber(prepared.directoryNumber);\n prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;\n prepared.logMissedCall = toApiBooleanString(prepared.logMissedCall) as unknown as LineAssociation['logMissedCall'] || 'false';\n prepared.callInfoDisplay = normalizeCallInfoDisplay(prepared.callInfoDisplay) as unknown as LineAssociation['callInfoDisplay'];\n prepared.didPattern = normalizeDidPattern(\n prepared.didPattern,\n line,\n prepared.directoryNumber?.directoryNumber\n ) as unknown as LineAssociation['didPattern'];\n prepared.visualMWI = toApiStringValue(prepared.visualMWI) as unknown as LineAssociation['visualMWI'];\n prepared.audibleMWI = toApiStringValue(prepared.audibleMWI) as unknown as LineAssociation['audibleMWI'];\n prepared.associated = prepared.associated ?? true;\n\n return prepared;\n}\n\nfunction prepareLine(line: LineInterface): LineInterface {\n const prepared = deepClone(line);\n prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;\n if (prepared.directoryNumber) {\n prepared.directoryNumber = normalizeDirectoryNumber(prepared.directoryNumber);\n }\n return prepared;\n}\n\nfunction syncDeviceLineAssociations(device: DeviceInterface, lines: LineInterface[]): void {\n device.lineAssociations = (device.lineAssociations || []).map((association, index) =>\n prepareLineAssociation(association, lines[index])\n );\n}\n\nfunction prepareDeviceForSave(\n device: DeviceInterface,\n userId: string,\n lines: LineInterface[],\n deviceName: string\n): DeviceInterface {\n const prepared = deepClone(device);\n const resolvedName = deviceName.trim();\n\n prepared.name = resolvedName;\n prepared.newName = resolvedName;\n prepared.entityChangeType = prepared.entityChangeType || ENTITY_CHANGE_TYPE.ADDED;\n prepared.createDeviceMode = prepared.createDeviceMode ?? false;\n\n if (prepared.extraOptions) {\n prepared.extraOptions.mobilityUserId = userId;\n }\n\n syncDeviceLineAssociations(prepared, lines);\n return prepared;\n}\n\nfunction resolvePrimaryLineReference(user: EndUserInterface): unknown | null {\n const firstDeviceAssociation = user.devices?.[0]?.lineAssociations?.[0]?.directoryNumber;\n if (firstDeviceAssociation) {\n return firstDeviceAssociation;\n }\n const firstLineDn = user.lines?.[0]?.directoryNumber;\n return firstLineDn ?? null;\n}\n\nexport function buildSavableEndUser(\n endUser: EndUserInterface,\n lines: LineInterface[],\n devices: DeviceInterface[],\n deviceProfiles: DeviceInterface[],\n form: UserDetailsForm,\n options: BuildSavableEndUserOptions = {}\n): EndUserInterface {\n const user = deepClone(endUser);\n\n user.userid = form.userId || user.userid || '';\n user.firstName = form.firstName || user.firstName || '';\n user.lastName = form.lastName || user.lastName || '';\n user.email = form.email || user.email || '';\n user.createUserMode = false;\n\n user.lines = (lines || []).map(line => prepareLine(line));\n user.devices = (devices || []).map((device, index) =>\n prepareDeviceForSave(\n device,\n user.userid || '',\n user.lines,\n options.resolveDeviceName?.(index, device) ?? device.name ?? device.newName ?? ''\n )\n );\n user.deviceProfiles = (deviceProfiles || []).map((profile, index) =>\n prepareDeviceForSave(\n profile,\n user.userid || '',\n user.lines,\n options.resolveDeviceProfileName?.(index, profile) ?? profile.name ?? profile.newName ?? ''\n )\n );\n\n user.primaryLineReference = resolvePrimaryLineReference(user);\n\n const snr = user.singleNumberReach as { remoteDestinationProfileName?: string | null } | null | undefined;\n if (snr && !snr.remoteDestinationProfileName) {\n user.singleNumberReach = null as EndUserInterface['singleNumberReach'];\n }\n\n return user;\n}\n","import { DeviceInterface } from '../interfaces/user-creation-wizard.interfaces';\n\n/** Matches device types like `Cisco 8851`. */\nexport const CISCO_DIGIT_DEVICE_TYPE_PATTERN = /^Cisco\\s+\\d+$/i;\n\nexport const DEFAULT_SEP_DEVICE_PREFIX = 'SEP';\n\nexport function applyDefaultDevicePrefixIfMissing(device: Pick<DeviceInterface, 'prefix' | 'deviceType'>): void {\n if (device.prefix?.trim()) {\n return;\n }\n\n const deviceType = device.deviceType?.trim() ?? '';\n if (CISCO_DIGIT_DEVICE_TYPE_PATTERN.test(deviceType)) {\n device.prefix = DEFAULT_SEP_DEVICE_PREFIX;\n }\n}\n","/**\n * Strips a leading device-prefix group from `deviceNameRegex`, returning the pattern\n * to validate the name field value (without matPrefix).\n *\n * - `([sS][eE][pP]|BAT)[0-9a-fA-F]{12}` → `[0-9a-fA-F]{12}`\n * - `[a-zA-Z0-9]{1,15}` → `[a-zA-Z0-9]{1,15}` (unchanged)\n */\nexport function parseDeviceNameRegexBody(deviceNameRegex: string | null | undefined): string {\n const fullRegex = deviceNameRegex?.trim() ?? '';\n if (!fullRegex) {\n return '';\n }\n\n return stripLeadingPrefixGroup(fullRegex);\n}\n\nfunction stripLeadingPrefixGroup(regex: string): string {\n const parenMatch = regex.match(/^(\\(.+?\\))(.+)$/s);\n if (parenMatch?.[2]?.trim()) {\n return parenMatch[2];\n }\n\n const literalMatch = regex.match(/^([A-Za-z]+)(\\[.+\\])$/s);\n if (literalMatch?.[2]?.trim()) {\n return literalMatch[2];\n }\n\n return regex;\n}\n","import { inject, Injectable } from \"@angular/core\";\r\nimport { UserCreationApiService } from \"../../shared/services/user-creation-api.service\";\r\nimport { API } from \"../../app.constants\";\r\n// import { AvailablePhoneNumberRangeInterface, AvailableRangeInterface, DnRangeType, LineInterface } from \"projects/tuki/widgets/users-list/src/classes/line\";\r\nimport { APIService } from \"../../shared/api/api.service\";\r\nimport { catchError, forkJoin, map, Observable, of, Subject, switchMap, tap } from \"rxjs\";\r\nimport Big from \"big.js\";\r\nimport { SiteDefaults } from \"../../classes/site\";\r\nimport { Site, SiteInterface, SiteTemplateInterface } from \"../../classes/site\";\r\nimport {\r\n DeviceEntry,\r\n EndUserInterface,\r\n LineOption,\r\n OverviewDeviceRow,\r\n OverviewLineRow,\r\n OverviewUserRow,\r\n SelectedLineRow,\r\n TemplateDeviceLike,\r\n TemplateEndUserLike,\r\n TemplateLineLike,\r\n UserCreationType,\r\n UserDetailsForm,\r\n UserDetailsFormValue,\r\n UserTemplateInterface,\r\n LineInterface,\r\n DeviceInterface,\r\n DeviceDefaultsInterface,\r\n AvailablePhoneNumberRangeInterface,\r\n AvailableRangeInterface,\r\n DnRangeType,\r\n ListUserInterface,\r\n EndUser,\r\n} from \"../../interfaces/user-creation-wizard.interfaces\";\r\nimport { buildSavableEndUser } from \"../../utils/build-savable-end-user\";\r\nimport { applyDefaultDevicePrefixIfMissing } from \"../../utils/device-default-prefix\";\r\nimport { parseDeviceNameRegexBody } from \"../../utils/parse-device-name-rule\";\r\n\r\n@Injectable()\r\nexport class UserCreationWizardService {\r\n private readonly userCreationApiService = inject(UserCreationApiService);\r\n\r\n readonly ldapTableColumns: string[] = ['userId', 'firstName', 'lastName', 'email', 'add'];\r\n readonly userCreationTypes: UserCreationType[] = ['CUCM', 'MT'];\r\n\r\n private template: UserTemplateInterface | null = null;\r\n public endUser: EndUserInterface | null = null;\r\n public lines: LineInterface[] = [];\r\n public devices: DeviceInterface[] = [];\r\n public deviceProfiles: DeviceInterface[] = [];\r\n private templateLinesSnapshot: LineInterface[] | null = null;\r\n private _currentSite: Site | null = null;\r\n\r\n get currentSite(): Site | null {\r\n return this._currentSite;\r\n }\r\n\r\n siteOptions: string[] = [];\r\n templateOptions: string[] = [];\r\n lineOptions: LineOption[] = [];\r\n routePartitionOptions: string[] = [];\r\n deviceRows: number[] = [];\r\n ldapUsers: ListUserInterface[] = [];\r\n overviewUsers: OverviewUserRow[] = [];\r\n overviewLines: OverviewLineRow[] = [];\r\n overviewDevices: OverviewDeviceRow[] = [];\r\n overviewDeviceProfiles: OverviewDeviceRow[] = [];\r\n userDetailsFormValue: UserDetailsFormValue | null = null;\r\n userDetailsForm: UserDetailsForm = {\r\n userId: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n };\r\n lineSelections: SelectedLineRow[] = [];\r\n deviceEntries: DeviceEntry[] = [];\r\n availableNumbers: string[] = [];\r\n deviceTypes: string[] = [];\r\n siteDefaults: SiteDefaults | null = null;\r\n originalSiteDefaults: SiteDefaults | null = null;\r\n templateLines: TemplateLineLike[] = [];\r\n templateDevices: TemplateDeviceLike[] = [];\r\n templateUserDetails: TemplateEndUserLike = {};\r\n\r\n selectedSite: number | null = null;\r\n selectedTemplateName: string | null = null;\r\n selectedTemplateId: number | null = null;\r\n selectedUserCreationType: UserCreationType = 'CUCM';\r\n availableDidPatternsMappedToDn: any = {};\r\n\r\n private readonly deviceDefaultsLoadedSubject = new Subject<void>();\r\n readonly deviceDefaultsLoaded$ = this.deviceDefaultsLoadedSubject.asObservable();\r\n\r\n get firstLineRoutePartition(): string {\r\n return this.lines[0]?.directoryNumber?.routePartitionName ?? '';\r\n }\r\n\r\n get siteDefaultRoutePartition(): string {\r\n return this.siteDefaults?.routePartition || '';\r\n }\r\n\r\n get routePartitionNamesList(): string[] {\r\n return this.siteDefaults ? this.siteDefaults.routePartitionFilter : [];\r\n }\r\n\r\n selectedLdapUser: ListUserInterface | null = null;\r\n ldapUsersTotal = 0;\r\n\r\n constructor() {\r\n // this.loadPlaceholderData();\r\n }\r\n\r\n get isLdapIntegrated(): boolean {\r\n return !!this.endUser?.ldapIntegrated;\r\n }\r\n\r\n selectLdapUser(user: ListUserInterface): void {\r\n this.selectedLdapUser = user;\r\n if (this.endUser) {\r\n this.endUser.ldapIntegrated = true;\r\n this.endUser.userid = user.userid;\r\n this.endUser.firstName = user.firstName ?? '';\r\n this.endUser.lastName = user.lastName ?? '';\r\n this.endUser.email = user.email ?? '';\r\n }\r\n this.userDetailsForm = {\r\n userId: user.userid,\r\n firstName: user.firstName ?? '',\r\n lastName: user.lastName ?? '',\r\n email: user.email ?? '',\r\n };\r\n this.rebuildOverviewUsers();\r\n }\r\n\r\n clearLdapUserSelection(): void {\r\n this.selectedLdapUser = null;\r\n if (this.endUser) {\r\n this.endUser.ldapIntegrated = false;\r\n this.endUser.userid = '';\r\n this.endUser.firstName = '';\r\n this.endUser.lastName = '';\r\n this.endUser.email = '';\r\n }\r\n this.userDetailsForm = {\r\n userId: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n };\r\n this.rebuildOverviewUsers();\r\n }\r\n\r\n isLdapUserRowSelected(row: ListUserInterface): boolean {\r\n return this.selectedLdapUser?.userid === row.userid;\r\n }\r\n\r\n setLdapUsersResult(users: ListUserInterface[], total: number): void {\r\n this.ldapUsers = users;\r\n this.ldapUsersTotal = total;\r\n }\r\n\r\n public setSelectedSite(site: number | null): void {\r\n this.selectedSite = site || null;\r\n }\r\n\r\n setSelectedTemplate(template?: UserTemplateInterface | undefined): void {\r\n this.selectedTemplateName = template?.name || null;\r\n this.selectedTemplateId = template?.id || null;\r\n this.rebuildOverviewUsers();\r\n }\r\n\r\n public setCurrentSite(site: Site): void {\r\n this._currentSite = site;\r\n }\r\n\r\n resetTemplateDrivenData(): void {\r\n this.lineOptions = [];\r\n this.routePartitionOptions = [];\r\n this.lineSelections = [];\r\n this.deviceEntries = [];\r\n this.deviceRows = [];\r\n this.rebuildOverviewLines();\r\n this.rebuildOverviewDevices();\r\n }\r\n\r\n applyTemplateTokenPayload(payload: UserTemplateInterface): void {\r\n this.template = this.extractTemplateFromTokenPayload(payload);\r\n this.endUser = new EndUser(this.template?.endUser);\r\n this.lines = this.endUser && Array.isArray(this.endUser.lines) ? this.endUser.lines : [];\r\n this.devices = this.endUser && Array.isArray(this.endUser.devices) ? this.endUser.devices : [];\r\n this.deviceProfiles = this.endUser && Array.isArray(this.endUser.deviceProfiles) ? this.endUser.deviceProfiles : [];\r\n\r\n this.initTemplateDnsNamesForLines();\r\n\r\n // this.userDetailsForm = {\r\n // userId: this.valueToString(this.endUser?.userid ?? ''),\r\n // firstName: this.valueToString(this.endUser?.firstName ?? ''),\r\n // lastName: this.valueToString(this.endUser?.lastName ?? ''),\r\n // email: this.valueToString(this.endUser?.email ?? '')\r\n // };\r\n\r\n // const mappedLineOptions: LineOption[] = linesFromTemplate\r\n // .map(line => ({\r\n // number: this.valueToString(line?.directoryNumber?.directoryNumber),\r\n // did: this.valueToString(line?.didPatterns?.[0]?.pattern || line?.directoryNumber?.directoryNumber),\r\n // css: this.valueToString(\r\n // typeof line?.callingSearchSpace === 'string'\r\n // ? line.callingSearchSpace\r\n // : line?.callingSearchSpace?.name\r\n // ),\r\n // description: this.valueToString(line?.description)\r\n // }))\r\n // .filter(line => line.number.trim().length > 0);\r\n\r\n this.devices.forEach(device => {\r\n this.initDeviceWithSiteInfo(device);\r\n applyDefaultDevicePrefixIfMissing(device);\r\n });\r\n this.deviceProfiles.forEach(device => this.initDeviceWithSiteInfo(device));\r\n this.lines.forEach(line => this.initLineWithSiteInfo(line));\r\n\r\n this.captureTemplateLinesSnapshot();\r\n\r\n if (this.selectedSite) {\r\n this.loadDeviceDefaultsForDevices(this.selectedSite).subscribe();\r\n }\r\n\r\n // if (mappedLineOptions.length) {\r\n // this.lineOptions = this.uniqueByNumber(mappedLineOptions);\r\n // this.lineSelections = this.lineOptions.map(line => ({\r\n // lineNumber: line.number,\r\n // routePartitionName: linesFromTemplate.find(\r\n // source => (source?.directoryNumber?.directoryNumber || '') === line.number\r\n // )?.directoryNumber?.routePartitionName || null\r\n // }));\r\n // } else {\r\n // const lineAssociations = devicesFromTemplate.flatMap(device => device.lineAssociations || []);\r\n // const associatedLineOptions: LineOption[] = lineAssociations\r\n // .map(association => {\r\n // const number = association?.directoryNumber?.directoryNumber || '';\r\n // return {\r\n // number,\r\n // did: number,\r\n // css: '',\r\n // description: ''\r\n // };\r\n // })\r\n // .filter(line => line.number.trim().length > 0);\r\n\r\n // this.lineOptions = this.uniqueByNumber(associatedLineOptions);\r\n // this.lineSelections = this.lineOptions.map(line => ({\r\n // lineNumber: line.number,\r\n // routePartitionName: lineAssociations.find(\r\n // source => (source?.directoryNumber?.directoryNumber || '') === line.number\r\n // )?.directoryNumber?.routePartitionName || null\r\n // }));\r\n\r\n // this.templateLines.forEach((line: any) => this.initLineWithSiteInfo(line));\r\n // this.initTemplateDnsNamesForLines(this.templateLines);\r\n // }\r\n\r\n // const routePartitions = this.lineSelections\r\n // .map(line => line.routePartitionName)\r\n // .filter((value): value is string => !!value && value.trim().length > 0);\r\n // this.routePartitionOptions = this.uniqueStrings(routePartitions);\r\n\r\n // this.deviceEntries = devicesFromTemplate.map(device => ({\r\n // deviceType: this.valueToString(device.deviceType),\r\n // protocol: this.valueToString(device.protocol),\r\n // buttonTemplate: this.valueToString(device.buttonTemplate),\r\n // name: this.valueToString(device.name)\r\n // }));\r\n // this.deviceRows = this.deviceEntries.map((_, index) => index + 1);\r\n\r\n // this.rebuildOverviewUsers();\r\n // this.rebuildOverviewLines();\r\n // this.rebuildOverviewDevices();\r\n }\r\n\r\n setSelectedUserCreationType(type: UserCreationType): void {\r\n this.selectedUserCreationType = type;\r\n }\r\n\r\n public resetUserDetailsStepState(): void {\r\n this.userDetailsFormValue = null;\r\n this.userDetailsForm = {\r\n userId: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n };\r\n this.selectedLdapUser = null;\r\n this.ldapUsers = [];\r\n this.ldapUsersTotal = 0;\r\n\r\n if (this.templateLinesSnapshot) {\r\n this.lines = JSON.parse(JSON.stringify(this.templateLinesSnapshot));\r\n }\r\n\r\n this.devices.forEach(device => {\r\n device.name = '';\r\n });\r\n this.deviceProfiles.forEach(profile => {\r\n profile.name = '';\r\n });\r\n\r\n if (this.endUser) {\r\n this.endUser.userid = '';\r\n this.endUser.firstName = '';\r\n this.endUser.lastName = '';\r\n this.endUser.email = '';\r\n this.endUser.ldapIntegrated = false;\r\n this.endUser.lines = this.lines;\r\n }\r\n\r\n this.overviewUsers = [];\r\n this.rebuildOverviewLines();\r\n this.rebuildOverviewDevices();\r\n this.rebuildOverviewDeviceProfiles();\r\n }\r\n\r\n private captureTemplateLinesSnapshot(): void {\r\n this.templateLinesSnapshot = JSON.parse(JSON.stringify(this.lines));\r\n }\r\n\r\n setUserDetailsField(field: keyof UserDetailsForm, value: string): void {\r\n this.userDetailsForm = {\r\n ...this.userDetailsForm,\r\n [field]: value\r\n };\r\n this.rebuildOverviewUsers();\r\n }\r\n\r\n applyUserDetailsFormValue(formValue: UserDetailsFormValue): void {\r\n this.userDetailsFormValue = formValue;\r\n this.userDetailsForm = {\r\n userId: formValue.userId || '',\r\n firstName: formValue.firstName || '',\r\n lastName: formValue.lastName || '',\r\n email: formValue.email || '',\r\n };\r\n\r\n formValue.lines?.forEach((lineValue, index) => {\r\n const line = this.lines[index];\r\n if (!line?.directoryNumber) {\r\n return;\r\n }\r\n line.directoryNumber.directoryNumber = lineValue.number || '';\r\n line.directoryNumber.routePartitionName = lineValue.routePartition || '';\r\n });\r\n\r\n formValue.devices?.forEach((deviceValue, index) => {\r\n const device = this.devices[index];\r\n if (!device) {\r\n return;\r\n }\r\n device.name = deviceValue.name || '';\r\n });\r\n\r\n formValue.deviceProfiles?.forEach((profileValue, index) => {\r\n const profile = this.deviceProfiles[index];\r\n if (!profile) {\r\n return;\r\n }\r\n profile.name = profileValue.name || '';\r\n });\r\n\r\n if (this.endUser) {\r\n this.endUser.userid = formValue.userId || '';\r\n this.endUser.firstName = formValue.firstName || '';\r\n this.endUser.lastName = formValue.lastName || '';\r\n this.endUser.email = formValue.email || '';\r\n }\r\n\r\n this.rebuildOverviewUsers();\r\n this.rebuildOverviewLines();\r\n this.rebuildOverviewDevices();\r\n this.rebuildOverviewDeviceProfiles();\r\n }\r\n\r\n setLineSelection(index: number, lineNumber: string | null): void {\r\n if (!this.lineSelections[index]) {\r\n return;\r\n }\r\n this.lineSelections[index] = {\r\n ...this.lineSelections[index],\r\n lineNumber\r\n };\r\n this.rebuildOverviewLines();\r\n this.rebuildOverviewDevices();\r\n }\r\n\r\n setRoutePartitionSelection(index: number, routePartitionName: string | null): void {\r\n if (!this.lineSelections[index]) {\r\n return;\r\n }\r\n this.lineSelections[index] = {\r\n ...this.lineSelections[index],\r\n routePartitionName\r\n };\r\n this.rebuildOverviewLines();\r\n }\r\n\r\n setDeviceName(index: number, name: string): void {\r\n if (!this.deviceEntries[index]) {\r\n return;\r\n }\r\n const deviceType = this.deviceEntries[index].deviceType || '';\r\n const normalizedName = deviceType.includes('8851')\r\n ? name.replace(/^SEP\\s*/i, '')\r\n : name;\r\n this.deviceEntries[index] = {\r\n ...this.deviceEntries[index],\r\n name: normalizedName\r\n };\r\n this.rebuildOverviewDevices();\r\n }\r\n\r\n getDeviceDisplayName(index: number): string {\r\n const entry = this.deviceEntries[index];\r\n if (!entry) {\r\n return '';\r\n }\r\n\r\n if (entry.deviceType?.includes('8851')) {\r\n return `SEP ${entry.name || ''}`;\r\n }\r\n\r\n if (index === 1) {\r\n const lineNumber = this.lineSelections[0]?.lineNumber;\r\n return lineNumber ? `CSF${lineNumber}` : 'CSF[DN]';\r\n }\r\n\r\n return entry.name || '';\r\n }\r\n\r\n public getSiteAllData(siteId: number): Observable<any> {\r\n return this.userCreationApiService.getSiteAllData(siteId).pipe(\r\n tap((res: any) => {\r\n if (res && res[0]) {\r\n const site = new Site(res[0] as SiteInterface);\r\n this.selectedSite = site.id;\r\n }\r\n if (res && res[1]) {\r\n this.siteDefaults = new SiteDefaults(res[1], false);\r\n this.originalSiteDefaults = new SiteDefaults(res[1], false);\r\n this.routePartitionOptions = [...this.routePartitionNamesList];\r\n }\r\n if (res && res[2]) {\r\n this.deviceTypes = res[2] as string[];\r\n }\r\n }),\r\n switchMap(res =>\r\n this.loadDeviceDefaultsForDevices(siteId).pipe(map(() => res))\r\n )\r\n );\r\n }\r\n\r\n public loadDeviceDefaultsForDevices(siteId: number): Observable<void> {\r\n const deviceTypes = this.getUniqueDeviceTypes();\r\n if (!deviceTypes.length) {\r\n return of(undefined);\r\n }\r\n\r\n const requests = deviceTypes.map(deviceType =>\r\n this.userCreationApiService.getDeviceDefaults(String(siteId), deviceType).pipe(\r\n tap(defaults => this.applyDeviceDefaultsToType(deviceType, defaults)),\r\n catchError(() => of(null))\r\n )\r\n );\r\n\r\n return forkJoin(requests).pipe(\r\n tap(() => this.deviceDefaultsLoadedSubject.next()),\r\n map(() => undefined)\r\n );\r\n }\r\n\r\n private getUniqueDeviceTypes(): string[] {\r\n const types = [\r\n ...this.devices.map(device => device.deviceType),\r\n ...this.deviceProfiles.map(profile => profile.deviceType),\r\n ].filter((type): type is string => !!type && type.trim().length > 0);\r\n return [...new Set(types)];\r\n }\r\n\r\n private applyDeviceDefaultsToType(deviceType: string, defaults: DeviceDefaultsInterface): void {\r\n const nameValidationRegex = parseDeviceNameRegexBody(defaults.deviceNameRegex);\r\n const targets = [...this.devices, ...this.deviceProfiles].filter(\r\n device => device.deviceType === deviceType\r\n );\r\n\r\n targets.forEach(device => {\r\n device.deviceDefaults = defaults;\r\n device.nameValidationRegex = nameValidationRegex;\r\n device.nameValidationCaption = defaults.deviceNameExplained;\r\n });\r\n }\r\n\r\n getDeviceNamePrefix(deviceIndex: number, isProfile = false): string | null {\r\n const device = isProfile ? this.deviceProfiles[deviceIndex] : this.devices[deviceIndex];\r\n const prefix = device?.prefix?.trim();\r\n return prefix || null;\r\n }\r\n\r\n getDeviceNameValidationCaption(deviceIndex: number, isProfile = false): string {\r\n const device = isProfile ? this.deviceProfiles[deviceIndex] : this.devices[deviceIndex];\r\n return device?.nameValidationCaption || device?.deviceDefaults?.deviceNameExplained || '';\r\n }\r\n\r\n getDeviceNameValidationOptions(deviceIndex: number, isProfile = false): {\r\n regex: string;\r\n caption: string;\r\n } | null {\r\n const device = isProfile ? this.deviceProfiles[deviceIndex] : this.devices[deviceIndex];\r\n const regex =\r\n device?.nameValidationRegex?.trim() ||\r\n parseDeviceNameRegexBody(device?.deviceDefaults?.deviceNameRegex);\r\n if (!regex) {\r\n return null;\r\n }\r\n return {\r\n regex,\r\n caption: this.getDeviceNameValidationCaption(deviceIndex, isProfile),\r\n };\r\n }\r\n\r\n public getNumberRange(siteId: string, routePartition: string): Observable<AvailableRangeInterface> {\r\n this.availableDidPatternsMappedToDn = {};\r\n const pageSize = 9999;\r\n const params = {dntype: DnRangeType.extension, routepartition: routePartition, size: pageSize, page: 0};\r\n this.availableNumbers = [];\r\n return this.userCreationApiService.getAvailableDnInRanges(siteId, params)\r\n .pipe(map((res: any) => {\r\n res.availableNumberList.forEach((availableNumber: AvailablePhoneNumberRangeInterface) => {\r\n this.setAvailableDidMappedToDn(availableNumber);\r\n this.availableNumbers = [...this.availableNumbers, ...this.getUnwrapNumberRange(availableNumber)];\r\n });\r\n })\r\n )\r\n // .pipe(this.handleError(true, false));\r\n }\r\n\r\n private rebuildOverviewUsers(): void {\r\n const userTemplate = this.selectedTemplateName || '';\r\n const hasUserData = Object.values(this.userDetailsForm).some(value => value.trim().length > 0);\r\n this.overviewUsers = hasUserData\r\n ? [{\r\n userId: this.userDetailsForm.userId,\r\n firstName: this.userDetailsForm.firstName,\r\n lastName: this.userDetailsForm.lastName,\r\n email: this.userDetailsForm.email,\r\n userTemplate\r\n }]\r\n : [];\r\n }\r\n\r\n private rebuildOverviewLines(): void {\r\n const formLines = this.userDetailsFormValue?.lines;\r\n if (formLines?.length) {\r\n this.overviewLines = formLines\r\n .filter(line => !!line?.number?.trim())\r\n .map((lineValue, index) => {\r\n const templateLine = this.lines[index];\r\n const css = this.valueToString(templateLine?.callingSearchSpace);\r\n return {\r\n number: lineValue.number,\r\n did: lineValue.lineNumber || lineValue.number,\r\n routePartitionName: lineValue.routePartition || '',\r\n css,\r\n description: this.valueToString(templateLine?.description),\r\n };\r\n });\r\n return;\r\n }\r\n\r\n this.overviewLines = this.lineSelections\r\n .map(selection => {\r\n if (!selection?.lineNumber) {\r\n return null;\r\n }\r\n const selectedLine = this.lineOptions.find(line => line.number === selection.lineNumber);\r\n if (!selectedLine) {\r\n return null;\r\n }\r\n return {\r\n number: selectedLine.number,\r\n did: selectedLine.did,\r\n routePartitionName: selection.routePartitionName || this.routePartitionOptions[0] || '',\r\n css: selectedLine.css,\r\n description: selectedLine.description\r\n };\r\n })\r\n .filter((line): line is OverviewLineRow => !!line);\r\n }\r\n\r\n private rebuildOverviewDevices(): void {\r\n const selectedLineNumbers = this.overviewLines.map(line => line.number).join(', ');\r\n const formDevices = this.userDetailsFormValue?.devices;\r\n if (formDevices?.length) {\r\n this.overviewDevices = formDevices\r\n .filter(device => !!device.deviceType?.trim() || !!device.name?.trim())\r\n .map(device => ({\r\n name: device.name || '',\r\n deviceType: device.deviceType || '',\r\n lines: selectedLineNumbers,\r\n description: `${device.protocol || ''} / ${device.buttonTemplate || ''}`.trim(),\r\n }));\r\n return;\r\n }\r\n\r\n this.overviewDevices = this.deviceEntries\r\n .map((device, index) => ({\r\n device,\r\n displayName: this.getDeviceDisplayName(index)\r\n }))\r\n .filter(({ device, displayName }) => displayName.trim().length > 0 || device.deviceType.trim().length > 0)\r\n .map(({ device, displayName }) => ({\r\n name: displayName,\r\n deviceType: device.deviceType,\r\n lines: selectedLineNumbers,\r\n description: `${device.protocol} / ${device.buttonTemplate}`\r\n }));\r\n }\r\n\r\n private rebuildOverviewDeviceProfiles(): void {\r\n const selectedLineNumbers = this.overviewLines.map(line => line.number).join(', ');\r\n const formProfiles = this.userDetailsFormValue?.deviceProfiles;\r\n if (!formProfiles?.length) {\r\n this.overviewDeviceProfiles = [];\r\n return;\r\n }\r\n\r\n this.overviewDeviceProfiles = formProfiles\r\n .filter(profile => !!profile.deviceType?.trim() || !!profile.name?.trim())\r\n .map(profile => ({\r\n name: profile.name || '',\r\n deviceType: profile.deviceType || '',\r\n lines: selectedLineNumbers,\r\n description: `${profile.protocol || ''} / ${profile.buttonTemplate || ''}`.trim(),\r\n }));\r\n }\r\n\r\n private extractTemplateFromTokenPayload(payload: any): any {\r\n if (!payload || typeof payload !== 'object') {\r\n return null;\r\n }\r\n if (Array.isArray(payload)) {\r\n return payload[0] || null;\r\n }\r\n const firstKey = Object.keys(payload)[0];\r\n return firstKey ? payload[firstKey] : null;\r\n }\r\n\r\n private uniqueByNumber(lines: LineOption[]): LineOption[] {\r\n const seen = new Set<string>();\r\n return lines.filter(line => {\r\n if (seen.has(line.number)) {\r\n return false;\r\n }\r\n seen.add(line.number);\r\n return true;\r\n });\r\n }\r\n\r\n private uniqueStrings(items: string[]): string[] {\r\n return Array.from(new Set(items));\r\n }\r\n\r\n private valueToString(value: unknown): string {\r\n return typeof value === 'string' ? value : '';\r\n }\r\n\r\n private getUnwrapNumberRange(availableNumber: any): string[] {\r\n let unwrapNumberRange = this.unwrapNumberRange(availableNumber.phoneNumberRange.from, availableNumber.phoneNumberRange.to)\r\n .map((unwrappedNumber: string) => {\r\n const dn = availableNumber.phoneNumberRange.prefix + unwrappedNumber;\r\n let str = dn;\r\n if (this.availableDidPatternsMappedToDn[dn] && this.availableDidPatternsMappedToDn[dn].length > 0) {\r\n if (this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] && this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].length > 0) {\r\n str += ' DID: ' + (this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].length > 1 ? 'multiple' :\r\n this.availableDidPatternsMappedToDn[dn][0]['mappedDids'][0]);\r\n }\r\n if (this.availableDidPatternsMappedToDn[dn][0]['vm']) {\r\n str += ' In Use - VM';\r\n }\r\n }\r\n return str;\r\n });\r\n unwrapNumberRange = unwrapNumberRange.filter((unwrappedNumber: string) => !availableNumber.usedNumbers.includes(unwrappedNumber));\r\n \r\n return unwrapNumberRange;\r\n }\r\n\r\n private unwrapNumberRange(start: string, end: string): string[] {\r\n const regExp = /(^0+)/;\r\n let leadingZeros = '';\r\n const matches = start.match(regExp);\r\n if (matches) {\r\n leadingZeros = matches[1];\r\n }\r\n const startNumeric = new Big(start);\r\n const endNumeric = new Big(end);\r\n return Array.from({length: Number(endNumeric.minus(startNumeric).plus(new Big(1)).toFixed(0))}, (v, k: number) => {\r\n const number = String(startNumeric.plus(new Big(k.toString())).toFixed(0));\r\n if ((leadingZeros + number).length > start.length) {\r\n leadingZeros = leadingZeros.substr(1);\r\n }\r\n return leadingZeros + number;\r\n });\r\n }\r\n\r\n public setAvailableDidMappedToDn(availableNumber: any): void {\r\n if (availableNumber.unUsedNumbersWithDids && availableNumber.unUsedNumbersWithDids.length) {\r\n\r\n availableNumber.unUsedNumbersWithDids.forEach((numberWithDids: any) => {\r\n const dn = numberWithDids['unUsedNumber'];\r\n this.availableDidPatternsMappedToDn[dn] = [{}];\r\n if (numberWithDids['translationPatternList'] && numberWithDids['translationPatternList'].length > 0) {\r\n this.availableDidPatternsMappedToDn[dn] = numberWithDids['translationPatternList'];\r\n this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] = [{}];\r\n if (numberWithDids['mappedDids'] && numberWithDids['mappedDids'].length > 0) {\r\n this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] = numberWithDids['mappedDids'];\r\n }\r\n }\r\n this.availableDidPatternsMappedToDn[dn][0]['vm'] = numberWithDids['vm'];\r\n });\r\n }\r\n }\r\n\r\n // TODO: replace placeholders with real API integration.\r\n loadDataFromApi(): void {\r\n // this.api.getWizardBootstrapData().subscribe(...)\r\n }\r\n\r\n private initLineWithSiteInfo(line: LineInterface) {\r\n line.directoryNumber.routePartitionName = this.siteDefaults?.routePartition || '';\r\n \r\n let callingSearchSpaceVal = this.siteDefaults?.lineCss || '';\r\n line.callingSearchSpace = callingSearchSpaceVal;\r\n }\r\n\r\n // private initTemplateDnsNamesForLines(userLines: TemplateLineLike[]): void {\r\n // const routePartition = this.siteDefaults?.routePartition || '';\r\n // if (userLines && userLines.length > 0) {\r\n // userLines.forEach((line, index) => {\r\n // line && line.directoryNumber && (line.directoryNumber.templateDirectoryNumber = line.directoryNumber.directoryNumber);\r\n // line && line.directoryNumber && (line.directoryNumber.directoryNumber = '');\r\n // return line;\r\n // });\r\n\r\n // // const routePartition = this.siteDefaults?.routePartition || '';\r\n // // if (line.lineAssociations && line.lineAssociations.length) {\r\n // // this.setLineAssociationsForDevice(line, routePartition);\r\n // // }\r\n // }\r\n // this.templateDevices.forEach(device => {\r\n // if (device.lineAssociations && device.lineAssociations.length) {\r\n // this.setLineAssociationsForDevice(device, routePartition);\r\n // }\r\n // });\r\n // }\r\n \r\n \r\n private setLineAssociationsForDevice(device: TemplateDeviceLike, routePartition: string) {\r\n const lineAssociations = device.lineAssociations || [];\r\n if(lineAssociations && lineAssociations.length) {\r\n lineAssociations.forEach(lineAssociation => {\r\n lineAssociation && lineAssociation.directoryNumber && (lineAssociation.directoryNumber.templateDirectoryNumber = lineAssociation.directoryNumber.directoryNumber || '');\r\n lineAssociation && lineAssociation.directoryNumber && (lineAssociation.directoryNumber.routePartitionName = routePartition);\r\n lineAssociation && lineAssociation.logMissedCall && (lineAssociation.logMissedCall = lineAssociation.logMissedCall || 'false');\r\n });\r\n }\r\n }\r\n\r\n private initDeviceWithSiteInfo(device: DeviceInterface) {\r\n device.newName = device.name;\r\n device.name = '';\r\n if (!device['enabledExtensionMobility']) {\r\n device.enabledExtensionMobility = this.siteDefaults?.enableEm ?? false;\r\n } else if (device['enabledExtensionMobility'].toString() === 'Yes') {\r\n device.enabledExtensionMobility = true;\r\n } else if (device['enabledExtensionMobility'].toString() === 'No') {\r\n device.enabledExtensionMobility = false;\r\n }\r\n\r\n if (device.location) {\r\n const replacedValue = this.replaceDynamicValueSiteInfo(device.location, this.currentSite?.shortName ?? '') ?? null;\r\n device.location = replacedValue;\r\n }\r\n if (device.location) {\r\n const replacedValue = this.replaceDynamicValueSiteInfo(device.devicePoolName, this.currentSite?.shortName ?? '') ?? null;\r\n device.devicePoolName = replacedValue;\r\n }\r\n if (device.location) {\r\n const replacedValue = this.replaceDynamicValueSiteInfo(device.callingSearchSpaceName, this.currentSite?.shortName ?? '') ?? null;\r\n device.callingSearchSpaceName = replacedValue;\r\n }\r\n if (device.extraOptions) {\r\n const replacedValue = this.replaceDynamicValueSiteInfo(device.extraOptions.aarCss, this.currentSite?.shortName ?? '') ?? null;\r\n device.extraOptions.aarCss = replacedValue;\r\n }\r\n if (!device.description && this.siteDefaults) {\r\n device.description = this.siteDefaults.deviceDescription;\r\n }\r\n }\r\n\r\n private replaceDynamicValueSiteInfo(fieldValue: any, siteShortName: string): string | null {\r\n if (fieldValue) {\r\n fieldValue = this.replaceDynamicValueFormat(fieldValue);\r\n const paramsToReplaces = { 'SiteShortName': siteShortName };\r\n return this.mutliStringReplace(paramsToReplaces, fieldValue);\r\n }\r\n return null;\r\n }\r\n\r\n private replaceDynamicValueFormat(str: any): string {\r\n str = str.replace(/\\[FN\\]/ig, '[FN]').replace(/\\[LN\\]/ig, '[LN]').replace(/\\[ID\\]/ig, '[UserId]')\r\n .replace(/\\[UserId\\]/ig, '[UserId]').replace(/<Match User ID>/ig, '[UserId]')\r\n .replace(/\\[Email\\]/ig, '[Email]').replace(/\\[DN\\(/ig, '[DN(')\r\n .replace(/\\[SiteShortName\\]/ig, '[SiteShortName]').replace(/\\$\\(SiteShortName\\)/ig, '[SiteShortName]')\r\n .replace(/\\$\\{SiteShortName\\}/ig, '[SiteShortName]').replace(/{SiteShortName}/ig, '[SiteShortName]')\r\n .replace(/\\[FN\\(/ig, '[FN(').replace(/\\[LN\\(/ig, '[LN(')\r\n .replace(/\\[ID\\(/ig, '[ID(');\r\n return str;\r\n }\r\n\r\n public mutliStringReplace(object: any, input: string, directoryNumber?: string, user?: any): string {\r\n var val = input;\r\n\r\n if (val.includes('[DN]') && directoryNumber && !directoryNumber.includes('Line')) {\r\n val = val.replace('[DN]', directoryNumber);\r\n }\r\n\r\n var indexOfDN = val.indexOf('[DN(');\r\n if (indexOfDN !== -1 && directoryNumber) {\r\n var digit = val.substring(indexOfDN + 4, val.indexOf(')', indexOfDN + 4));\r\n var digitCount = Number(digit) || 0;\r\n var dnDigit = (digitCount > val.length) ? directoryNumber : directoryNumber.substring(directoryNumber.length - digitCount, directoryNumber.length);\r\n val = val.replace('[DN(' + digit + ')]', dnDigit);\r\n }\r\n\r\n var indexOfFN = val.indexOf('[FN(');\r\n if (indexOfFN !== -1 && user && user.firstName) {\r\n var digit = val.substring(indexOfFN + 4, val.indexOf(')', indexOfFN + 4));\r\n var fnDigit = user.firstName.substring(0, digit);\r\n val = val.replace('[FN(' + digit + ')]', fnDigit);\r\n }\r\n var indexOfLN = val.indexOf('[LN(');\r\n if (indexOfLN !== -1 && user && user.lastName) {\r\n var digit = val.substring(indexOfLN + 4, val.indexOf(')', indexOfLN + 4));\r\n var lnDigit = user.lastName.substring(0, digit);\r\n val = val.replace('[LN(' + digit + ')]', lnDigit);\r\n }\r\n var indexOfID = val.indexOf('[ID(');\r\n if (indexOfID !== -1 && user && user.userid) {\r\n var digit = val.substring(indexOfID + 4, val.indexOf(')', indexOfID + 4));\r\n var idDigit = user.userid.substring(0, digit);\r\n val = val.replace('[ID(' + digit + ')]', idDigit);\r\n }\r\n\r\n var entries = Object.entries(object);\r\n entries.forEach((para) => {\r\n var find = '[' + para[0] + ']';\r\n var replacement = para[1] != null ? String(para[1]) : '';\r\n val = val.split(find).join(replacement);\r\n });\r\n return val;\r\n }\r\n\r\n private initTemplateDnsNamesForLines(): void {\r\n if (this.lines && this.lines.length > 0) {\r\n this.lines.forEach((line, index) => {\r\n line.directoryNumber.templateDirectoryNumber = line.directoryNumber.directoryNumber;\r\n line.directoryNumber.directoryNumber = '';\r\n return line;\r\n });\r\n\r\n const routePartition = this.siteDefaults?.routePartition || '';\r\n this.devices.forEach(device => {\r\n if (device.lineAssociations && device.lineAssociations.length) {\r\n this.setLineAssociationsForDevice(device, routePartition);\r\n }\r\n });\r\n this.deviceProfiles.forEach(deviceProfile => {\r\n if (deviceProfile.lineAssociations && deviceProfile.lineAssociations.length) {\r\n this.setLineAssociationsForDevice(deviceProfile, routePartition);\r\n }\r\n });\r\n\r\n if (this.endUser?.singleNumberReach && this.endUser.singleNumberReach.associatedLines && this.endUser.singleNumberReach.associatedLines.length) {\r\n if (this.endUser.singleNumberReach.associatedLines && this.endUser.singleNumberReach.associatedLines.length) {\r\n this.endUser.singleNumberReach.associatedLines.map(lineAssociation => {\r\n lineAssociation.directoryNumber.templateDirectoryNumber = lineAssociation.directoryNumber.directoryNumber;\r\n lineAssociation.directoryNumber.routePartitionName = routePartition;\r\n });\r\n }\r\n if (this.endUser.singleNumberReach.remoteDestinations && this.endUser.singleNumberReach.remoteDestinations.length) {\r\n this.endUser.singleNumberReach.remoteDestinations.forEach(remoteDestination => {\r\n if (remoteDestination.lineAssociations && remoteDestination.lineAssociations.length) {\r\n remoteDestination.lineAssociations.map(lineAssociation => {\r\n lineAssociation.directoryNumber.templateDirectoryNumber = lineAssociation.directoryNumber.directoryNumber;\r\n lineAssociation.directoryNumber.routePartitionName = routePartition;\r\n });\r\n }\r\n });\r\n }\r\n }\r\n\r\n }\r\n }\r\n\r\n\r\n public buildSavableEndUser(): EndUserInterface {\r\n if (!this.endUser) {\r\n throw new Error('No template user loaded');\r\n }\r\n return buildSavableEndUser(\r\n this.endUser,\r\n this.lines,\r\n this.devices,\r\n this.deviceProfiles,\r\n this.userDetailsForm,\r\n {\r\n resolveDeviceName: (index, device) => this.resolveDeviceNameForSave(index, device),\r\n resolveDeviceProfileName: (index, profile) => this.resolveDeviceNameForSave(index, profile),\r\n }\r\n );\r\n }\r\n\r\n private resolveDeviceNameForSave(_index: number, device: DeviceInterface): string {\r\n const rawName = (device.name || device.newName || '').trim();\r\n if (!rawName) {\r\n return '';\r\n }\r\n const prefix = device.prefix?.trim();\r\n if (prefix && !rawName.toUpperCase().startsWith(prefix.toUpperCase())) {\r\n return `${prefix}${rawName}`;\r\n }\r\n return rawName;\r\n }\r\n\r\n public saveNewUser(): Observable<any> {\r\n const user = this.buildSavableEndUser();\r\n const siteId = String(this.selectedSite ?? '');\r\n const templateId = String(this.selectedTemplateId ?? '');\r\n return this.userCreationApiService.saveTemplateUser(user, templateId, siteId);\r\n }\r\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, OnDestroy, OnInit, Output } from '@angular/core';\r\nimport {\r\n AbstractControl,\r\n AsyncValidatorFn,\r\n FormArray,\r\n FormBuilder,\r\n FormGroup,\r\n ValidationErrors,\r\n ValidatorFn,\r\n Validators,\r\n} from '@angular/forms';\r\nimport { PageEvent } from '@angular/material/paginator';\r\nimport {\r\n catchError,\r\n debounceTime,\r\n finalize,\r\n map,\r\n Observable,\r\n of,\r\n startWith,\r\n Subject,\r\n switchMap,\r\n take,\r\n takeUntil,\r\n tap,\r\n timer,\r\n} from 'rxjs';\r\nimport {\r\n LdapQueryType,\r\n LdapUsersTableResponse,\r\n ListUserInterface,\r\n UserDetailsFormValue,\r\n} from '../../../../interfaces/user-creation-wizard.interfaces';\r\nimport { UserCreationApiService } from '../../../../shared/services/user-creation-api.service';\r\nimport { deviceNameValidator } from '../../../../utils/device-name-validation';\r\nimport { UserCreationWizardService } from '../../user-creation-wizard.service';\r\n\r\nconst LDAP_PAGE_SIZE = 10;\r\n\r\n@Component({\r\n selector: 'tk-user-details-step',\r\n templateUrl: './user-details-step.component.html',\r\n styleUrls: ['./user-details-step.component.scss'],\r\n})\r\nexport class UserDetailsStepComponent implements OnInit, OnDestroy {\r\n @Output() validityChange = new EventEmitter<boolean>();\r\n\r\n userDetailsForm: FormGroup;\r\n ldapSearchForm: FormGroup;\r\n\r\n userIdCheckPending = false;\r\n loadingAvailableNumbers = false;\r\n ldapLoading = false;\r\n ldapSearchAttempted = false;\r\n\r\n readonly ldapPageSize = LDAP_PAGE_SIZE;\r\n ldapPageIndex = 0;\r\n\r\n readonly ldapQueryTypeOptions: { label: string; value: LdapQueryType }[] = [\r\n { label: 'User ID', value: 'userId' },\r\n { label: 'First Name', value: 'firstName' },\r\n { label: 'Last Name', value: 'lastName' },\r\n ];\r\n\r\n filteredAvailableNumbersByLine: string[][] = [];\r\n filteredRoutePartitionsByLine: string[][] = [];\r\n\r\n private readonly destroy$ = new Subject<void>();\r\n private readonly userIdAsyncValidator = this.createUserIdAsyncValidator();\r\n\r\n get linesFormArray(): FormArray {\r\n return this.userDetailsForm.get('lines') as FormArray;\r\n }\r\n\r\n get devicesFormArray(): FormArray {\r\n return this.userDetailsForm.get('devices') as FormArray;\r\n }\r\n\r\n get deviceProfilesFormArray(): FormArray {\r\n return this.userDetailsForm.get('deviceProfiles') as FormArray;\r\n }\r\n\r\n get selectedLdapUser(): ListUserInterface | null {\r\n return this.userCreationWizardService.selectedLdapUser;\r\n }\r\n\r\n get ldapTotalCount(): number {\r\n return this.userCreationWizardService.ldapUsersTotal;\r\n }\r\n\r\n get hasLdapUsers(): boolean {\r\n return this.userCreationWizardService.ldapUsers.length > 0;\r\n }\r\n\r\n constructor(\r\n private readonly fb: FormBuilder,\r\n private readonly userCreationApiService: UserCreationApiService,\r\n public readonly userCreationWizardService: UserCreationWizardService\r\n ) {\r\n this.ldapSearchForm = this.fb.group({\r\n queryValue: [''],\r\n queryType: ['userId' as LdapQueryType],\r\n });\r\n\r\n this.userDetailsForm = this.fb.group({\r\n userId: ['', [Validators.required], [this.userIdAsyncValidator]],\r\n firstName: ['', Validators.required],\r\n lastName: ['', Validators.required],\r\n email: ['', [Validators.required, Validators.email]],\r\n lines: this.fb.array([]),\r\n devices: this.fb.array([]),\r\n deviceProfiles: this.fb.array([]),\r\n });\r\n }\r\n\r\n ngOnInit(): void {\r\n const savedFormValue = this.userCreationWizardService.userDetailsFormValue;\r\n const isRestoringPreviousEntry = !!savedFormValue;\r\n\r\n if (!isRestoringPreviousEntry) {\r\n this.resetLdapSearchForm();\r\n }\r\n\r\n this.buildDynamicFormArrays(savedFormValue);\r\n if (isRestoringPreviousEntry) {\r\n this.patchUserFieldsFromSavedValue(savedFormValue);\r\n } else {\r\n this.patchUserFieldsFromService();\r\n }\r\n\r\n this.initLineFilters();\r\n this.setupFormSync();\r\n this.setupValidityEmitter();\r\n this.fetchInitialAvailableNumbers();\r\n\r\n if (!isRestoringPreviousEntry) {\r\n this.userCreationWizardService.applyUserDetailsFormValue(this.userDetailsForm.getRawValue());\r\n }\r\n\r\n this.applyDeviceNameValidators();\r\n\r\n this.userCreationWizardService.deviceDefaultsLoaded$\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.applyDeviceNameValidators();\r\n this.emitValidity();\r\n });\r\n\r\n if (this.userCreationWizardService.isLdapIntegrated && this.selectedLdapUser) {\r\n this.applyLdapIntegratedFormState();\r\n }\r\n\r\n this.emitValidity();\r\n }\r\n\r\n ngOnDestroy(): void {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n\r\n isStepValid(): boolean {\r\n return this.userDetailsForm.valid && !this.userIdCheckPending;\r\n }\r\n\r\n markAllAsTouched(): void {\r\n this.userDetailsForm.markAllAsTouched();\r\n this.emitValidity();\r\n }\r\n\r\n syncToService(): void {\r\n this.userCreationWizardService.applyUserDetailsFormValue(this.userDetailsForm.getRawValue());\r\n }\r\n\r\n getLineGroup(index: number): FormGroup {\r\n return this.linesFormArray.at(index) as FormGroup;\r\n }\r\n\r\n getDeviceGroup(index: number): FormGroup {\r\n return this.devicesFormArray.at(index) as FormGroup;\r\n }\r\n\r\n getDeviceProfileGroup(index: number): FormGroup {\r\n return this.deviceProfilesFormArray.at(index) as FormGroup;\r\n }\r\n\r\n getDeviceNamePrefix(index: number): string | null {\r\n return this.userCreationWizardService.getDeviceNamePrefix(index, false);\r\n }\r\n\r\n getDeviceProfileNamePrefix(index: number): string | null {\r\n return this.userCreationWizardService.getDeviceNamePrefix(index, true);\r\n }\r\n\r\n getDeviceNameValidationCaption(index: number): string {\r\n return this.userCreationWizardService.getDeviceNameValidationCaption(index, false);\r\n }\r\n\r\n getDeviceProfileNameValidationCaption(index: number): string {\r\n return this.userCreationWizardService.getDeviceNameValidationCaption(index, true);\r\n }\r\n\r\n getFilteredNumbers(lineIndex: number): string[] {\r\n return this.filteredAvailableNumbersByLine[lineIndex] ?? [];\r\n }\r\n\r\n getFilteredRoutePartitions(lineIndex: number): string[] {\r\n return this.filteredRoutePartitionsByLine[lineIndex] ?? [];\r\n }\r\n\r\n filterAvailableNumbers(lineIndex: number, event: Event): void {\r\n const raw = (event.target as HTMLInputElement | null)?.value || '';\r\n this.applyNumberFilter(lineIndex, raw);\r\n }\r\n\r\n filterRoutePartitions(lineIndex: number, event: Event): void {\r\n const raw = (event.target as HTMLInputElement | null)?.value || '';\r\n this.applyRoutePartitionFilter(lineIndex, raw);\r\n }\r\n\r\n onRoutePartitionSelected(lineIndex: number, routePartition: string): void {\r\n const lineGroup = this.linesFormArray.at(lineIndex) as FormGroup;\r\n lineGroup.get('routePartition')?.setValue(routePartition, { emitEvent: false });\r\n lineGroup.get('number')?.setValue('');\r\n this.applyRoutePartitionFilter(lineIndex, routePartition);\r\n this.loadAvailableNumbersForLine(lineIndex, routePartition);\r\n }\r\n\r\n onNumberSelected(lineIndex: number, number: string): void {\r\n const lineGroup = this.linesFormArray.at(lineIndex) as FormGroup;\r\n const displayNumber = this.extractDirectoryNumber(number);\r\n lineGroup.get('number')?.setValue(displayNumber, { emitEvent: true });\r\n }\r\n\r\n searchLdapUsers(pageIndex = 0): void {\r\n const queryValue = String(this.ldapSearchForm.get('queryValue')?.value).trim() || undefined;\r\n const siteId = this.userCreationWizardService.selectedSite;\r\n\r\n if (!siteId) {\r\n this.userCreationWizardService.setLdapUsersResult([], 0);\r\n this.ldapPageIndex = 0;\r\n this.ldapSearchAttempted = false;\r\n return;\r\n }\r\n\r\n this.ldapPageIndex = pageIndex;\r\n const queryType = this.ldapSearchForm.get('queryType')?.value as LdapQueryType;\r\n\r\n const params = {\r\n size: String(LDAP_PAGE_SIZE),\r\n page: String(pageIndex),\r\n deviceless: 'true',\r\n querytype: queryType,\r\n withEmailOnly: 'true',\r\n queryvalue: queryValue,\r\n };\r\n\r\n this.ldapLoading = true;\r\n this.userCreationApiService\r\n .getLdapUsers(String(siteId), params)\r\n .pipe(\r\n take(1),\r\n map((res: LdapUsersTableResponse) => ({\r\n users: res?.pageData ?? [],\r\n total: res?.total ?? 0,\r\n })),\r\n catchError(() => of({ users: [], total: 0 })),\r\n finalize(() => {\r\n this.ldapLoading = false;\r\n })\r\n )\r\n .subscribe(({ users, total }) => {\r\n this.ldapSearchAttempted = true;\r\n this.userCreationWizardService.setLdapUsersResult(users, total);\r\n });\r\n }\r\n\r\n onLdapPageChange(event: PageEvent): void {\r\n this.searchLdapUsers(event.pageIndex);\r\n }\r\n\r\n onAddLdapUser(row: ListUserInterface): void {\r\n this.userCreationWizardService.selectLdapUser(row);\r\n this.userDetailsForm.patchValue({\r\n userId: row.userid,\r\n firstName: row.firstName ?? '',\r\n lastName: row.lastName ?? '',\r\n email: row.email ?? '',\r\n });\r\n this.applyLdapIntegratedFormState();\r\n this.emitValidity();\r\n }\r\n\r\n onDeleteLdapUser(row: ListUserInterface): void {\r\n if (!this.userCreationWizardService.isLdapUserRowSelected(row)) {\r\n return;\r\n }\r\n this.clearLdapSelection();\r\n }\r\n\r\n onRemoveLdapTag(): void {\r\n this.clearLdapSelection();\r\n }\r\n\r\n isLdapUserRowSelected(row: ListUserInterface): boolean {\r\n return this.userCreationWizardService.isLdapUserRowSelected(row);\r\n }\r\n\r\n private clearLdapSelection(): void {\r\n this.userCreationWizardService.clearLdapUserSelection();\r\n this.userDetailsForm.patchValue({\r\n userId: '',\r\n firstName: '',\r\n lastName: '',\r\n email: '',\r\n });\r\n this.restoreManualEntryFormState();\r\n this.emitValidity();\r\n }\r\n\r\n private applyLdapIntegratedFormState(): void {\r\n this.setUserIdentityFieldsReadonly(true);\r\n this.toggleUserIdAsyncValidator(false);\r\n this.userDetailsForm.get('userId')?.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n private restoreManualEntryFormState(): void {\r\n this.setUserIdentityFieldsReadonly(false);\r\n this.toggleUserIdAsyncValidator(true);\r\n this.userDetailsForm.get('userId')?.updateValueAndValidity();\r\n }\r\n\r\n private setUserIdentityFieldsReadonly(readonly: boolean): void {\r\n ['userId', 'firstName', 'lastName', 'email'].forEach(fieldName => {\r\n const control = this.userDetailsForm.get(fieldName);\r\n if (!control) {\r\n return;\r\n }\r\n if (readonly) {\r\n control.disable({ emitEvent: false });\r\n } else {\r\n control.enable({ emitEvent: false });\r\n }\r\n });\r\n }\r\n\r\n private toggleUserIdAsyncValidator(enabled: boolean): void {\r\n const control = this.userDetailsForm.get('userId');\r\n if (!control) {\r\n return;\r\n }\r\n if (enabled) {\r\n control.setAsyncValidators([this.userIdAsyncValidator]);\r\n } else {\r\n control.clearAsyncValidators();\r\n }\r\n control.updateValueAndValidity({ emitEvent: false });\r\n }\r\n\r\n private setupValidityEmitter(): void {\r\n this.userDetailsForm.statusChanges\r\n .pipe(startWith(this.userDetailsForm.status), takeUntil(this.destroy$))\r\n .subscribe(() => this.emitValidity());\r\n }\r\n\r\n private emitValidity(): void {\r\n this.validityChange.emit(this.isStepValid());\r\n }\r\n\r\n private buildDynamicFormArrays(savedFormValue?: UserDetailsFormValue | null): void {\r\n const service = this.userCreationWizardService;\r\n const linesArray = this.linesFormArray;\r\n const devicesArray = this.devicesFormArray;\r\n const profilesArray = this.deviceProfilesFormArray;\r\n\r\n while (linesArray.length) {\r\n linesArray.removeAt(0);\r\n }\r\n while (devicesArray.length) {\r\n devicesArray.removeAt(0);\r\n }\r\n while (profilesArray.length) {\r\n profilesArray.removeAt(0);\r\n }\r\n\r\n service.lines.forEach((line, index) => {\r\n const savedLine = savedFormValue?.lines?.[index];\r\n const lineGroup = this.fb.group({\r\n lineNumber: [\r\n {\r\n value: line.directoryNumber?.templateDirectoryNumber || '',\r\n disabled: true,\r\n },\r\n ],\r\n number: [\r\n savedLine?.number ?? line.directoryNumber?.directoryNumber ?? '',\r\n Validators.required,\r\n ],\r\n routePartition: [\r\n savedLine?.routePartition ?? line.directoryNumber?.routePartitionName ?? '',\r\n Validators.required,\r\n ],\r\n });\r\n linesArray.push(lineGroup);\r\n this.setupLineListeners(index, lineGroup);\r\n });\r\n\r\n service.devices.forEach((device, index) => {\r\n const savedDevice = savedFormValue?.devices?.[index];\r\n devicesArray.push(\r\n this.fb.group({\r\n deviceType: [{ value: device.deviceType || '', disabled: true }],\r\n protocol: [{ value: device.protocol || '', disabled: true }],\r\n buttonTemplate: [{ value: device.buttonTemplate || '', disabled: true }],\r\n name: [\r\n savedDevice?.name ?? device.name ?? '',\r\n this.buildDeviceNameValidators(index, false),\r\n ],\r\n })\r\n );\r\n });\r\n\r\n service.deviceProfiles.forEach((profile, index) => {\r\n const savedProfile = savedFormValue?.deviceProfiles?.[index];\r\n profilesArray.push(\r\n this.fb.group({\r\n deviceType: [{ value: profile.deviceType || '', disabled: true }],\r\n protocol: [{ value: profile.protocol || '', disabled: true }],\r\n buttonTemplate: [{ value: profile.buttonTemplate || '', disabled: true }],\r\n name: [\r\n savedProfile?.name ?? profile.name ?? '',\r\n this.buildDeviceNameValidators(index, true),\r\n ],\r\n })\r\n );\r\n });\r\n }\r\n\r\n private buildDeviceNameValidators(deviceIndex: number, isProfile: boolean): ValidatorFn[] {\r\n const validators: ValidatorFn[] = isProfile ? [] : [Validators.required];\r\n const options = this.userCreationWizardService.getDeviceNameValidationOptions(\r\n deviceIndex,\r\n isProfile\r\n );\r\n if (options) {\r\n validators.push(deviceNameValidator(options));\r\n }\r\n return validators;\r\n }\r\n\r\n private applyDeviceNameValidators(): void {\r\n this.devicesFormArray.controls.forEach((_, index) => {\r\n const nameControl = this.getDeviceGroup(index).get('name');\r\n nameControl?.setValidators(this.buildDeviceNameValidators(index, false));\r\n nameControl?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n\r\n this.deviceProfilesFormArray.controls.forEach((_, index) => {\r\n const nameControl = this.getDeviceProfileGroup(index).get('name');\r\n nameControl?.setValidators(this.buildDeviceNameValidators(index, true));\r\n nameControl?.updateValueAndValidity({ emitEvent: false });\r\n });\r\n }\r\n\r\n private resetLdapSearchForm(): void {\r\n this.ldapSearchForm.reset({\r\n queryValue: '',\r\n queryType: 'userId' as LdapQueryType,\r\n });\r\n this.ldapSearchAttempted = false;\r\n this.ldapPageIndex = 0;\r\n this.userIdCheckPending = false;\r\n }\r\n\r\n private patchUserFieldsFromSavedValue(saved: UserDetailsFormValue): void {\r\n this.userDetailsForm.patchValue({\r\n userId: saved.userId || '',\r\n firstName: saved.firstName || '',\r\n lastName: saved.lastName || '',\r\n email: saved.email || '',\r\n });\r\n }\r\n\r\n private patchUserFieldsFromService(): void {\r\n const service = this.userCreationWizardService;\r\n const endUser = service.endUser;\r\n this.userDetailsForm.patchValue({\r\n userId: endUser?.userid || service.userDetailsForm.userId || '',\r\n firstName: endUser?.firstName || service.userDetailsForm.firstName || '',\r\n lastName: endUser?.lastName || service.userDetailsForm.lastName || '',\r\n email: endUser?.email || service.userDetailsForm.email || '',\r\n });\r\n this.userDetailsForm.markAsPristine();\r\n this.userDetailsForm.markAsUntouched();\r\n }\r\n\r\n private setupLineListeners(lineIndex: number, lineGroup: FormGroup): void {\r\n lineGroup\r\n .get('routePartition')\r\n ?.valueChanges.pipe(debounceTime(300), takeUntil(this.destroy$))\r\n .subscribe(value => {\r\n this.applyRoutePartitionFilter(lineIndex, String(value ?? ''));\r\n });\r\n\r\n lineGroup\r\n .get('number')\r\n ?.valueChanges.pipe(debounceTime(150), takeUntil(this.destroy$))\r\n .subscribe(value => {\r\n this.applyNumberFilter(lineIndex, String(value ?? ''));\r\n });\r\n }\r\n\r\n private initLineFilters(): void {\r\n const partitions = this.userCreationWizardService.routePartitionOptions;\r\n const numbers = this.userCreationWizardService.availableNumbers;\r\n this.filteredRoutePartitionsByLine = this.linesFormArray.controls.map((_, index) => {\r\n const current = String(\r\n (this.linesFormArray.at(index) as FormGroup).get('routePartition')?.value ?? ''\r\n );\r\n return this.filterOptions(partitions, current);\r\n });\r\n this.filteredAvailableNumbersByLine = this.linesFormArray.controls.map((_, index) => {\r\n const current = String((this.linesFormArray.at(index) as FormGroup).get('number')?.value ?? '');\r\n return this.filterOptions(numbers, current);\r\n });\r\n }\r\n\r\n private setupFormSync(): void {\r\n this.userDetailsForm.valueChanges\r\n .pipe(debounceTime(200), takeUntil(this.destroy$))\r\n .subscribe(() => {\r\n this.userCreationWizardService.applyUserDetailsFormValue(\r\n this.userDetailsForm.getRawValue()\r\n );\r\n });\r\n }\r\n\r\n private fetchInitialAvailableNumbers(): void {\r\n const firstPartition =\r\n this.linesFormArray.length > 0\r\n ? String((this.linesFormArray.at(0) as FormGroup).get('routePartition')?.value ?? '').trim()\r\n : this.userCreationWizardService.firstLineRoutePartition ||\r\n this.userCreationWizardService.siteDefaultRoutePartition ||\r\n '';\r\n\r\n if (firstPartition) {\r\n this.loadAvailableNumbersForLine(0, firstPartition, false);\r\n }\r\n }\r\n\r\n private loadAvailableNumbersForLine(\r\n lineIndex: number,\r\n routePartition: string,\r\n clearNumber = true\r\n ): void {\r\n const siteId = this.userCreationWizardService.selectedSite;\r\n if (!siteId || !routePartition.trim()) {\r\n return;\r\n }\r\n\r\n if (clearNumber) {\r\n (this.linesFormArray.at(lineIndex) as FormGroup).get('number')?.setValue('');\r\n }\r\n\r\n this.loadingAvailableNumbers = true;\r\n this.userCreationWizardService\r\n .getNumberRange(String(siteId), routePartition)\r\n .pipe(\r\n take(1),\r\n catchError(() => of(null)),\r\n finalize(() => {\r\n this.loadingAvailableNumbers = false;\r\n this.refreshNumberFilters();\r\n })\r\n )\r\n .subscribe();\r\n }\r\n\r\n private refreshNumberFilters(): void {\r\n const numbers = this.userCreationWizardService.availableNumbers;\r\n this.filteredAvailableNumbersByLine = this.linesFormArray.controls.map((_, index) => {\r\n const current = String((this.linesFormArray.at(index) as FormGroup).get('number')?.value ?? '');\r\n return this.filterOptions(numbers, current);\r\n });\r\n }\r\n\r\n private applyNumberFilter(lineIndex: number, raw: string): void {\r\n const value = raw.trim().toLowerCase();\r\n const source = this.userCreationWizardService.availableNumbers || [];\r\n this.filteredAvailableNumbersByLine[lineIndex] = value.length\r\n ? source.filter(n => !!n && n.toLowerCase().includes(value))\r\n : [...source];\r\n }\r\n\r\n private applyRoutePartitionFilter(lineIndex: number, raw: string): void {\r\n const value = raw.trim().toLowerCase();\r\n const source = this.userCreationWizardService.routePartitionOptions || [];\r\n this.filteredRoutePartitionsByLine[lineIndex] = value.length\r\n ? source.filter(n => !!n && n.toLowerCase().includes(value))\r\n : [...source];\r\n }\r\n\r\n private filterOptions(source: string[], raw: string): string[] {\r\n const value = raw.trim().toLowerCase();\r\n if (!value.length) {\r\n return [...source];\r\n }\r\n return source.filter(item => !!item && item.toLowerCase().includes(value));\r\n }\r\n\r\n private extractDirectoryNumber(value: string): string {\r\n const trimmed = value.trim();\r\n const spaceIndex = trimmed.indexOf(' ');\r\n return spaceIndex > -1 ? trimmed.substring(0, spaceIndex) : trimmed;\r\n }\r\n\r\n private createUserIdAsyncValidator(): AsyncValidatorFn {\r\n return (control: AbstractControl): Observable<ValidationErrors | null> => {\r\n if (this.userCreationWizardService.isLdapIntegrated) {\r\n this.userIdCheckPending = false;\r\n return of(null);\r\n }\r\n\r\n const userId = String(control.value ?? '').trim();\r\n const siteId = this.userCreationWizardService.selectedSite;\r\n if (!userId || !siteId) {\r\n this.userIdCheckPending = false;\r\n this.emitValidity();\r\n return of(null);\r\n }\r\n\r\n this.userIdCheckPending = true;\r\n this.emitValidity();\r\n\r\n return timer(500).pipe(\r\n switchMap(() =>\r\n this.userCreationApiService\r\n .checkUserIdExisting(\r\n String(siteId),\r\n encodeURIComponent(encodeURIComponent(userId))\r\n )\r\n .pipe(\r\n map(() => ({ userIdExists: true })),\r\n catchError(() => of(null))\r\n )\r\n ),\r\n tap(() => {\r\n this.userIdCheckPending = false;\r\n this.emitValidity();\r\n }),\r\n finalize(() => {\r\n this.userIdCheckPending = false;\r\n this.emitValidity();\r\n })\r\n );\r\n };\r\n }\r\n}\r\n","<app-loader *ngIf=\"loadingAvailableNumbers\"></app-loader>\r\n<section class=\"details-step-content\">\r\n <form [formGroup]=\"userDetailsForm\">\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">User details</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"details-step-section__part\">\r\n <div class=\"details-inline-fields\">\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">User ID</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput placeholder=\"User ID\" formControlName=\"userId\" />\r\n <mat-error *ngIf=\"userDetailsForm.get('userId')?.hasError('required') && userDetailsForm.get('userId')?.touched\">\r\n User ID is required\r\n </mat-error>\r\n <mat-error *ngIf=\"userDetailsForm.get('userId')?.hasError('userIdExists') && userDetailsForm.get('userId')?.touched\">\r\n User ID already exists\r\n </mat-error>\r\n <mat-hint *ngIf=\"userIdCheckPending\">Checking user ID...</mat-hint>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">First Name</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput placeholder=\"First Name\" formControlName=\"firstName\" />\r\n <mat-error *ngIf=\"userDetailsForm.get('firstName')?.hasError('required') && userDetailsForm.get('firstName')?.touched\">\r\n First name is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Last Name</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput placeholder=\"Last Name\" formControlName=\"lastName\" />\r\n <mat-error *ngIf=\"userDetailsForm.get('lastName')?.hasError('required') && userDetailsForm.get('lastName')?.touched\">\r\n Last name is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Email</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput placeholder=\"Email\" formControlName=\"email\" />\r\n <mat-error *ngIf=\"userDetailsForm.get('email')?.invalid && userDetailsForm.get('email')?.touched\">\r\n <span *ngIf=\"userDetailsForm.get('email')?.hasError('required')\">Email is required</span>\r\n <span *ngIf=\"userDetailsForm.get('email')?.hasError('email')\">Please enter a valid email</span>\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">User Template</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input\r\n matInput\r\n placeholder=\"User Template\"\r\n [value]=\"userCreationWizardService.selectedTemplateName || ''\"\r\n [disabled]=\"true\"\r\n />\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div class=\"details-step-section__part\">\r\n <mat-accordion class=\"details-user-accordion\">\r\n <mat-expansion-panel togglePosition=\"before\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>Choose an existing or a LDAP user</mat-panel-title>\r\n </mat-expansion-panel-header>\r\n <div class=\"details-user-accordion__content\">\r\n <div class=\"details-ldap-search\" [formGroup]=\"ldapSearchForm\">\r\n <mat-form-field\r\n class=\"details-ldap-search__input\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n >\r\n <input\r\n matInput\r\n placeholder=\"Search\"\r\n formControlName=\"queryValue\"\r\n (keyup.enter)=\"searchLdapUsers()\"\r\n />\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"details-ldap-search__select\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n >\r\n <mat-select formControlName=\"queryType\">\r\n <mat-option *ngFor=\"let option of ldapQueryTypeOptions\" [value]=\"option.value\">\r\n {{ option.label }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n\r\n <mat-chip-list *ngIf=\"selectedLdapUser\" class=\"details-ldap-search__chip\">\r\n <mat-chip removable (removed)=\"onRemoveLdapTag()\">\r\n {{ selectedLdapUser.userid }}\r\n <mat-icon matChipRemove>cancel</mat-icon>\r\n </mat-chip>\r\n </mat-chip-list>\r\n\r\n <button\r\n mat-button\r\n class=\"details-ldap-search__btn\"\r\n type=\"button\"\r\n [disabled]=\"ldapLoading\"\r\n (click)=\"searchLdapUsers()\"\r\n >\r\n Search\r\n </button>\r\n </div>\r\n\r\n <app-loader *ngIf=\"ldapLoading\"></app-loader>\r\n\r\n <p\r\n *ngIf=\"!ldapLoading && ldapSearchAttempted && !hasLdapUsers\"\r\n class=\"details-ldap-table__empty\"\r\n >\r\n No users found\r\n </p>\r\n\r\n <table\r\n *ngIf=\"!ldapLoading && hasLdapUsers\"\r\n mat-table\r\n [dataSource]=\"userCreationWizardService.ldapUsers\"\r\n class=\"details-ldap-table\"\r\n >\r\n <ng-container matColumnDef=\"userId\">\r\n <th mat-header-cell *matHeaderCellDef>User Id</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.userid }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"firstName\">\r\n <th mat-header-cell *matHeaderCellDef>First Name</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.firstName }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"lastName\">\r\n <th mat-header-cell *matHeaderCellDef>Last Name</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.lastName }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"email\">\r\n <th mat-header-cell *matHeaderCellDef>Email</th>\r\n <td mat-cell *matCellDef=\"let row\">{{ row.email }}</td>\r\n </ng-container>\r\n\r\n <ng-container matColumnDef=\"add\">\r\n <th mat-header-cell *matHeaderCellDef>Add</th>\r\n <td mat-cell *matCellDef=\"let row\">\r\n <button\r\n *ngIf=\"!isLdapUserRowSelected(row); else deleteLdapUserBtn\"\r\n mat-button\r\n class=\"details-ldap-table__add-btn\"\r\n type=\"button\"\r\n (click)=\"onAddLdapUser(row)\"\r\n >\r\n Add User\r\n </button>\r\n <ng-template #deleteLdapUserBtn>\r\n <button\r\n mat-button\r\n class=\"details-ldap-table__add-btn details-ldap-table__add-btn--delete\"\r\n type=\"button\"\r\n (click)=\"onDeleteLdapUser(row)\"\r\n >\r\n Delete user\r\n </button>\r\n </ng-template>\r\n </td>\r\n </ng-container>\r\n\r\n <tr mat-header-row *matHeaderRowDef=\"userCreationWizardService.ldapTableColumns\"></tr>\r\n <tr mat-row *matRowDef=\"let row; columns: userCreationWizardService.ldapTableColumns\"></tr>\r\n </table>\r\n\r\n <mat-paginator\r\n *ngIf=\"!ldapLoading && hasLdapUsers\"\r\n class=\"details-ldap-paginator\"\r\n [length]=\"ldapTotalCount\"\r\n [pageSize]=\"ldapPageSize\"\r\n [pageIndex]=\"ldapPageIndex\"\r\n [pageSizeOptions]=\"[ldapPageSize]\"\r\n [hidePageSize]=\"true\"\r\n [disabled]=\"ldapLoading\"\r\n (page)=\"onLdapPageChange($event)\"\r\n ></mat-paginator>\r\n </div>\r\n </mat-expansion-panel>\r\n </mat-accordion>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Lines</h3>\r\n <div class=\"details-step-section__content\" formArrayName=\"lines\">\r\n <div class=\"line-route-list\">\r\n <div\r\n class=\"line-route-row\"\r\n *ngFor=\"let lineGroup of linesFormArray.controls; let idx = index\"\r\n [formGroupName]=\"idx\"\r\n >\r\n <div class=\"line-info\">\r\n <mat-form-field\r\n class=\"details-step-input line-route-field\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n hideRequiredMarker\r\n >\r\n <input matInput placeholder=\"Line number\" formControlName=\"lineNumber\" />\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"details-step-input line-route-field\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n hideRequiredMarker\r\n >\r\n <input\r\n matInput\r\n placeholder=\"Search for a number\"\r\n formControlName=\"number\"\r\n [matAutocomplete]=\"numberAuto\"\r\n (input)=\"filterAvailableNumbers(idx, $event)\"\r\n />\r\n <mat-autocomplete\r\n #numberAuto=\"matAutocomplete\"\r\n [panelWidth]=\"'auto'\"\r\n (optionSelected)=\"onNumberSelected(idx, $event.option.value)\"\r\n >\r\n <mat-option *ngFor=\"let option of getFilteredNumbers(idx)\" [value]=\"option\">\r\n {{ option }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"getLineGroup(idx).get('number')?.invalid && getLineGroup(idx).get('number')?.touched\">\r\n Number is required\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <mat-form-field\r\n class=\"details-step-input line-route-field\"\r\n appearance=\"outline\"\r\n floatLabel=\"never\"\r\n hideRequiredMarker\r\n >\r\n <input\r\n matInput\r\n placeholder=\"Select route partition\"\r\n formControlName=\"routePartition\"\r\n [matAutocomplete]=\"routePartitionAuto\"\r\n (input)=\"filterRoutePartitions(idx, $event)\"\r\n />\r\n <mat-autocomplete\r\n #routePartitionAuto=\"matAutocomplete\"\r\n (optionSelected)=\"onRoutePartitionSelected(idx, $event.option.value)\"\r\n >\r\n <mat-option\r\n *ngFor=\"let routePartition of getFilteredRoutePartitions(idx)\"\r\n [value]=\"routePartition\"\r\n >\r\n {{ routePartition }}\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error *ngIf=\"getLineGroup(idx).get('routePartition')?.invalid && getLineGroup(idx).get('routePartition')?.touched\">\r\n Route partition is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Devices</h3>\r\n <div class=\"details-step-section__content\" formArrayName=\"devices\">\r\n <div class=\"devices-rows\">\r\n <div\r\n class=\"details-inline-fields details-inline-fields--four\"\r\n *ngFor=\"let deviceGroup of devicesFormArray.controls; let idx = index\"\r\n [formGroupName]=\"idx\"\r\n >\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Device type</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"deviceType\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Protocol</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"protocol\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Button Template</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"buttonTemplate\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Name</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <span matPrefix *ngIf=\"getDeviceNamePrefix(idx) as devicePrefix\">{{ devicePrefix }}</span>\r\n <input matInput placeholder=\"Name\" formControlName=\"name\" />\r\n <mat-error *ngIf=\"getDeviceGroup(idx).get('name')?.hasError('deviceName') && getDeviceGroup(idx).get('name')?.touched\">\r\n {{ getDeviceGroup(idx).get('name')?.getError('deviceName')?.caption || getDeviceNameValidationCaption(idx) || 'Please enter a valid device name' }}\r\n </mat-error>\r\n <mat-error *ngIf=\"getDeviceGroup(idx).get('name')?.hasError('required') && getDeviceGroup(idx).get('name')?.touched\">\r\n Name is required\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n\r\n <section class=\"details-step-section\" *ngIf=\"deviceProfilesFormArray.length\">\r\n <h3 class=\"details-step-section__title\">Device profiles</h3>\r\n <div class=\"details-step-section__content\" formArrayName=\"deviceProfiles\">\r\n <div class=\"devices-rows\">\r\n <div\r\n class=\"details-inline-fields details-inline-fields--four\"\r\n *ngFor=\"let profileGroup of deviceProfilesFormArray.controls; let idx = index\"\r\n [formGroupName]=\"idx\"\r\n >\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Device type</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"deviceType\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Protocol</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"protocol\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Button Template</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <input matInput formControlName=\"buttonTemplate\" />\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"details-inline-field\">\r\n <label class=\"details-inline-field__label\">Name</label>\r\n <mat-form-field class=\"details-step-input\" appearance=\"outline\">\r\n <span matPrefix *ngIf=\"getDeviceProfileNamePrefix(idx) as profilePrefix\">{{ profilePrefix }}</span>\r\n <input matInput placeholder=\"Name\" formControlName=\"name\" />\r\n <mat-error *ngIf=\"getDeviceProfileGroup(idx).get('name')?.hasError('deviceName') && getDeviceProfileGroup(idx).get('name')?.touched\">\r\n {{ getDeviceProfileGroup(idx).get('name')?.getError('deviceName')?.caption || getDeviceProfileNameValidationCaption(idx) || 'Please enter a valid device name' }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </form>\r\n</section>\r\n","import { Component } from \"@angular/core\";\r\nimport { UserCreationWizardService } from \"../../user-creation-wizard.service\";\r\n\r\n@Component({\r\n selector: 'tk-user-overview-step',\r\n templateUrl: './user-overview-step.component.html',\r\n styleUrls: ['./user-overview-step.component.scss']\r\n})\r\nexport class UserOverviewStepComponent {\r\n readonly USER_DETAILS_COLS = ['User ID', 'First name', 'Last name', 'Email', 'User templates'];\r\n readonly LINES_COLS = ['Number', 'DID', 'Route partition name', 'CSS', 'Description'];\r\n readonly DEVICES_COLS = ['Name', 'Device type', 'Lines', 'Description'];\r\n\r\n constructor(\r\n public userCreationWizardService: UserCreationWizardService\r\n ) {}\r\n}","<section class=\"details-step-content\">\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">User details</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"USER_DETAILS_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of USER_DETAILS_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let user of userCreationWizardService.overviewUsers\">\r\n <span>{{ user.userId }}</span>\r\n <span>{{ user.firstName }}</span>\r\n <span>{{ user.lastName }}</span>\r\n <span>{{ user.email }}</span>\r\n <span>{{ user.userTemplate }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Lines</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"LINES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of LINES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let line of userCreationWizardService.overviewLines\">\r\n <span>{{ line.number }}</span>\r\n <span>{{ line.did }}</span>\r\n <span>{{ line.routePartitionName }}</span>\r\n <span>{{ line.css }}</span>\r\n <span>{{ line.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Devices</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDevices\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n\r\n <ng-container *ngIf=\"userCreationWizardService.overviewDeviceProfiles.length\">\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Device profiles</h3>\r\n <div class=\"details-step-section__content\">\r\n <div class=\"preview-list\" [style.--preview-cols]=\"DEVICES_COLS.length\">\r\n <div class=\"preview-list__header\">\r\n <span *ngFor=\"let col of DEVICES_COLS\">{{ col }}</span>\r\n </div>\r\n <div class=\"preview-list__row\" *ngFor=\"let device of userCreationWizardService.overviewDeviceProfiles\">\r\n <span>{{ device.name }}</span>\r\n <span>{{ device.deviceType }}</span>\r\n <span>{{ device.lines }}</span>\r\n <span>{{ device.description }}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </section>\r\n </div>\r\n </ng-container>\r\n\r\n <div class=\"details-step-divider\"></div>\r\n\r\n <!-- <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Single Number Reach</h3>\r\n <div class=\"details-step-section__content\"></div>\r\n </section>\r\n </div> -->\r\n\r\n <!-- <div class=\"details-step-divider\"></div>\r\n\r\n <div class=\"details-step-sections\">\r\n <section class=\"details-step-section\">\r\n <h3 class=\"details-step-section__title\">Features</h3>\r\n <div class=\"details-step-section__content\">\r\n <span style=\"margin-right: 1rem;\">Voicemail</span> 557046\r\n </div>\r\n </section>\r\n </div> -->\r\n</section>\r\n","import { Component, EventEmitter, Input, Output } from \"@angular/core\";\r\nimport { UserCreationWizardService } from \"../../user-creation-wizard.service\";\r\nimport { USER_CREATION_TYPES } from '../../../../app.constants';\r\nimport { FormBuilder, FormControl } from \"@angular/forms\";\r\nimport { distinctUntilChanged, filter, finalize, forkJoin, of, startWith, Subject, switchMap, takeUntil, tap } from \"rxjs\";\r\nimport { UserCreationApiService } from \"../../../../shared/services/user-creation-api.service\";\r\nimport { Site } from \"../../../../classes/site\";\r\nimport { UserTemplateInterface } from \"../../../../interfaces/user-creation-wizard.interfaces\";\r\n\r\n@Component({\r\n selector: 'tk-user-template-step',\r\n templateUrl: './user-template-step.component.html',\r\n styleUrls: ['./user-template-step.component.scss']\r\n})\r\nexport class UserTemplateStepComponent {\r\n @Input() customerId!: number;\r\n @Output() validityChange = new EventEmitter<boolean>();\r\n\r\n public formGroup = this.fb.group({\r\n userType: [USER_CREATION_TYPES.CUCM],\r\n siteId: [null],\r\n userTemplateId: [''],\r\n });\r\n\r\n public userCreationType = USER_CREATION_TYPES.CUCM;\r\n\r\n public readonly USER_CREATION_TYPES = USER_CREATION_TYPES;\r\n // readonly defaultTemplateName = 'User 8851 Office';\r\n // readonly fallbackTemplateId = '-1';\r\n\r\n private readonly destroy$ = new Subject<void>();\r\n\r\n private sitesList: Site[] = [];\r\n\r\n public readonly sitesList$ = this.userCreationService.sitesList$.pipe(\r\n takeUntil(this.destroy$),\r\n tap((res) => this.sitesList = res)\r\n );\r\n public readonly templatesList$ = this.userCreationService.templatesList$.pipe(\r\n tap((templates) => {\r\n this.templates = templates || [];\r\n const templateControl = this.formGroup.get('userTemplateId');\r\n const currentTemplateId = templateControl?.value;\r\n const selectedSiteId = this.formGroup.get('siteId')?.value;\r\n // const defaultTemplate = this.templates.find(\r\n // template => template.name === this.defaultTemplateName\r\n // );\r\n\r\n const hasSelectedSite = selectedSiteId !== null && selectedSiteId !== undefined;\r\n // if (hasSelectedSite && defaultTemplate && String(currentTemplateId || '') !== String(defaultTemplate.id)) {\r\n // templateControl?.setValue(String(defaultTemplate.id));\r\n // }\r\n }),\r\n takeUntil(this.destroy$)\r\n );\r\n\r\n isTemplateSelectable = false;\r\n templates: UserTemplateInterface[] = [];\r\n loadingSites = false;\r\n loadingSiteData = false;\r\n\r\n get isLoading(): boolean {\r\n return this.loadingSites || this.loadingSiteData;\r\n }\r\n\r\n public readonly templateToggleFormControl = new FormControl(false);\r\n\r\n constructor(\r\n public userCreationWizardService: UserCreationWizardService,\r\n private readonly userCreationService: UserCreationApiService,\r\n private readonly fb: FormBuilder,\r\n ) {}\r\n\r\n ngOnInit() {\r\n\r\n this.formGroup!.get('userType')!.valueChanges\r\n .pipe(takeUntil(this.destroy$))\r\n .subscribe((value) => {\r\n const isOnlyWithLocations = value === USER_CREATION_TYPES.MT ? true : false;\r\n this.getSites(isOnlyWithLocations).subscribe();\r\n this.reseFieldstForm();\r\n });\r\n\r\n this.formGroup!.get('siteId')!.valueChanges\r\n .pipe(\r\n // filter((value) => value !== null && value !== undefined),\r\n tap((value) => {\r\n // this.formGroup.get('userTemplateId')?.setValue(this.fallbackTemplateId);\r\n const selectedSite = this.sitesList.find(site => String(site.id) === String(value));\r\n if (selectedSite) {\r\n this.userCreationWizardService.setCurrentSite(selectedSite);\r\n }\r\n return this.userCreationWizardService.setSelectedSite(value);\r\n }),\r\n takeUntil(this.destroy$),\r\n switchMap((value) => {\r\n if (value === null || value === undefined || value === '') {\r\n this.loadingSiteData = false;\r\n return of(null);\r\n }\r\n\r\n this.loadingSiteData = true;\r\n return forkJoin([\r\n this.userCreationService.fetchAllUserTemplates(Number(value)),\r\n this.userCreationWizardService.getSiteAllData(Number(value)),\r\n ]).pipe(finalize(() => {\r\n this.loadingSiteData = false;\r\n }));\r\n }),\r\n )\r\n .subscribe();\r\n // .subscribe((value) => {\r\n // console.log(value);\r\n // })\r\n\r\n this.formGroup!.get('userTemplateId')!.valueChanges\r\n .pipe(\r\n filter((value) => value !== null && value !== undefined && String(value).trim().length > 0),\r\n takeUntil(this.destroy$),\r\n switchMap((value) => {\r\n // if (String(value) === this.fallbackTemplateId) {\r\n // this.userCreationWizardService.setSelectedTemplate(this.defaultTemplateName);\r\n // return of(null);\r\n // }\r\n return this.userCreationService.getUserTemplateToken(String(value), String(String(this.customerId)))\r\n .pipe(\r\n tap((payload) => {\r\n const selectedTemplate = this.templates.find(template => String(template.id) === String(value));\r\n this.userCreationWizardService.setSelectedTemplate(selectedTemplate);\r\n this.userCreationWizardService.applyTemplateTokenPayload(payload);\r\n })\r\n );\r\n })\r\n )\r\n .subscribe();\r\n\r\n this.templateToggleFormControl.valueChanges\r\n .pipe(startWith(true), takeUntil(this.destroy$), distinctUntilChanged())\r\n .subscribe((value) => {\r\n if(value === true) {\r\n const siteId = this.formGroup.get('siteId')?.value || 7095;\r\n this.userCreationService.fetchAllUserTemplates(siteId)\r\n .subscribe();\r\n } else {\r\n this.formGroup.get('userTemplateId')?.reset();\r\n }\r\n });\r\n\r\n this.getData();\r\n\r\n this.formGroup.statusChanges\r\n .pipe(startWith(this.formGroup.status), takeUntil(this.destroy$))\r\n .subscribe(() => this.validityChange.emit(this.isStepValid()));\r\n }\r\n\r\n reseFieldstForm() {\r\n this.formGroup.get('siteId')?.reset();\r\n this.formGroup.get('userTemplateId')?.reset();\r\n this.userCreationWizardService.setSelectedTemplate();\r\n this.userCreationWizardService.resetTemplateDrivenData();\r\n }\r\n\r\n private getData() {\r\n const isOnlyWithLocations = this.formGroup!.get('userType')?.value === USER_CREATION_TYPES.MT ? true : false;\r\n\r\n this.userCreationService.checkControlHubIntegration(String(this.customerId))\r\n .pipe(switchMap(() => this.getSites(isOnlyWithLocations)))\r\n .subscribe();\r\n }\r\n\r\n private getSites(isOnlyWithLocations: boolean) {\r\n this.loadingSites = true;\r\n return this.userCreationService.getAllCustomerSites(String(this.customerId), isOnlyWithLocations).pipe(\r\n finalize(() => {\r\n this.loadingSites = false;\r\n })\r\n );\r\n }\r\n\r\n public isCUCM(site: Site) {\r\n return site?.cucm?.id === 2542;\r\n }\r\n\r\n public getSelectedSiteName(): string {\r\n const siteId = this.formGroup.get('siteId')?.value;\r\n const foundedSite = this.sitesList.find((site: any) => site.id === siteId);\r\n return siteId && foundedSite ? foundedSite.name : '';\r\n }\r\n\r\n public getSelectedTemplateName(): string {\r\n const templateId = this.formGroup.get('userTemplateId')?.value;\r\n const foundedTemplate = this.templates.find((template: any) => String(template.id) === String(templateId));\r\n return templateId && foundedTemplate ? foundedTemplate.name : '';\r\n }\r\n\r\n isStepValid(): boolean {\r\n const siteId = this.formGroup.get('siteId')?.value;\r\n const templateId = this.formGroup.get('userTemplateId')?.value;\r\n return siteId !== null && siteId !== undefined && String(templateId || '').trim().length > 0;\r\n }\r\n\r\n markStepTouched(): void {\r\n this.formGroup.get('siteId')?.markAsTouched();\r\n this.formGroup.get('userTemplateId')?.markAsTouched();\r\n }\r\n\r\n ngOnDestroy() {\r\n this.destroy$.next();\r\n this.destroy$.complete();\r\n }\r\n}","<app-loader *ngIf=\"isLoading\"></app-loader>\r\n<section class=\"template-step-content\">\r\n <ng-container [formGroup]=\"formGroup\">\r\n <!-- <div class=\"template-step-field template-step-field--user-type\">\r\n <label class=\"template-step-label\">User type</label>\r\n <mat-radio-group class=\"user-type-mat-radio-group\" formControlName=\"userType\">\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationCucm\" [value]=\"USER_CREATION_TYPES.CUCM\">\r\n UCM/DI\r\n </mat-radio-button>\r\n <mat-radio-button class=\"user-type-mat-radio\" id=\"userCreationMT\" [value]=\"USER_CREATION_TYPES.MT\">\r\n MT\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div> -->\r\n\r\n <div class=\"template-step-field\">\r\n <label class=\"template-step-label\">Select site</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Site name\"\r\n formControlName=\"siteId\">\r\n\r\n <mat-select-trigger>\r\n {{ getSelectedSiteName() }}\r\n </mat-select-trigger>\r\n\r\n <mat-option *ngFor=\"let site of sitesList$ | async\" [value]=\"site.id\">\r\n <div class=\"option-row\">\r\n <span class=\"name\">{{ site.name }}</span>\r\n <span *ngIf=\"site.name === 'Berlin' else notBerlinSite\" class=\"type\">{{ 'Webex Calling' }}</span>\r\n <ng-template #notBerlinSite>\r\n <span class=\"type\">{{ isCUCM(site) ? 'UCM' : 'Webex Calling DI' }}</span>\r\n </ng-template>\r\n </div>\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n\r\n <ng-container *ngIf=\"formGroup.get('userType')?.value === USER_CREATION_TYPES.CUCM\">\r\n <div class=\"template-step-field\">\r\n <!-- <label class=\"template-step-label\">Would you like to use a template for the user creation?</label> -->\r\n <!-- <mat-radio-group [formControl]=\"templateToggleFormControl\">\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"true\">\r\n {{ 'Yes' }}\r\n </mat-radio-button>\r\n <mat-radio-button [color]=\"'primary'\" [value]=\"false\">\r\n {{ 'No' }}\r\n </mat-radio-button>\r\n </mat-radio-group> -->\r\n\r\n <!-- <ng-container *ngIf=\"templateToggleFormControl.value === true\"> -->\r\n <label class=\"template-step-label\">Select user template</label>\r\n <mat-form-field class=\"template-step-select\" appearance=\"outline\">\r\n <mat-select\r\n placeholder=\"Templates\"\r\n formControlName=\"userTemplateId\">\r\n <mat-select-trigger>\r\n <span matTooltip=\"'A new user will be created based on the selected template, including a Cisco 8851 physical device with a single line configured, without SNR (Single Number Reach) and without voicemail.'\">\r\n {{ getSelectedTemplateName() }}\r\n </span>\r\n </mat-select-trigger>\r\n <mat-option *ngFor=\"let template of templatesList$ | async\" [value]=\"template.id\" [disabled]=\"template.name.includes('Jabber User')\">\r\n {{ template.name }}\r\n </mat-option>\r\n </mat-select>\r\n </mat-form-field>\r\n <!-- </ng-container> -->\r\n </div>\r\n </ng-container>\r\n \r\n </ng-container>\r\n</section>\r\n","import { Component, EventEmitter, inject, Input, OnDestroy, OnInit, Output, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { StepperSelectionEvent } from '@angular/cdk/stepper';\nimport { MatStepper } from '@angular/material/stepper';\nimport { APIService } from '../../shared/api/api.service';\nimport { NotificationService } from '../../shared/services/notification.service';\nimport { UserDetailsStepComponent } from './components/user-details-step/user-details-step.component';\nimport { UserTemplateStepComponent } from './components/user-template-step/user-template-step.component';\nimport { UserCreationWizardService } from './user-creation-wizard.service';\n\nexport const USER_CREATED_SUCCESSFLLY = 'User created successfully';\n\n@Component({\n selector: 'tk-user-creation-wizard',\n templateUrl: './user-creation-wizard.component.html',\n styleUrls: ['./user-creation-wizard.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class UserCreationWizardComponent implements OnInit, OnDestroy {\n private readonly apiService = inject(APIService);\n private readonly userCreationWizardService = inject(UserCreationWizardService);\n\n @Input() title = 'Create User';\n \n @Input() host!: string;\n @Input() token!: string;\n @Input() customerId!: number;\n\n @Output() cancel = new EventEmitter<void>();\n @Output() submit = new EventEmitter<void>();\n isSubmitting = false;\n private submitTimerId: number | null = null;\n selectedIndex = 0;\n templateStepValid = false;\n detailsStepValid = false;\n\n @ViewChild(UserTemplateStepComponent) templateStep?: UserTemplateStepComponent;\n @ViewChild(UserDetailsStepComponent) detailsStep?: UserDetailsStepComponent;\n\n public isLoading = false;\n\n constructor(private notificationService: NotificationService) { }\n\n ngOnInit(): void {\n this.apiService.token = this.token;\n this.apiService.apiUrl = this.host;\n }\n\n onCancel(): void {\n this.cancel.emit();\n }\n\n onStepSelectionChange(event: StepperSelectionEvent): void {\n this.selectedIndex = event.selectedIndex;\n\n if (event.selectedIndex === 1 && event.previouslySelectedIndex === 0) {\n this.userCreationWizardService.resetUserDetailsStepState();\n this.detailsStepValid = false;\n }\n }\n\n onStepperNext(stepper: MatStepper): void {\n if (stepper.selectedIndex === 0) {\n if (!this.templateStep?.isStepValid()) {\n this.templateStep?.markStepTouched();\n return;\n }\n }\n\n if (stepper.selectedIndex === 1) {\n if (!this.detailsStep?.isStepValid()) {\n this.detailsStep?.markAllAsTouched();\n return;\n }\n this.detailsStep?.syncToService();\n }\n\n stepper.next();\n }\n\n onSubmit(): void {\n if (this.isSubmitting) {\n return;\n }\n\n this.isSubmitting = true;\n\n // const delayMs = 3000 + Math.floor(Math.random() * 1001);\n // this.submitTimerId = window.setTimeout(() => {\n // this.isSubmitting = false;\n // this.submitTimerId = null;\n // this.notificationService.success('User created successfully!');\n // this.submit.emit();\n // }, delayMs);\n this._saveChanges();\n }\n\n ngOnDestroy(): void {\n if (this.submitTimerId) {\n window.clearTimeout(this.submitTimerId);\n this.submitTimerId = null;\n }\n }\n\n private _saveChanges() {\n this.isLoading = true;\n this.userCreationWizardService.saveNewUser()\n .subscribe((res) => {\n this.isLoading = false;\n this.isSubmitting = false;\n this.notificationService.success('User created successfully!');\n this.submit.emit();\n }, (error: any) => {\n this.isLoading = false;\n this.isSubmitting = false;\n if (typeof error === 'string' && error.indexOf(USER_CREATED_SUCCESSFLLY) > -1) {\n this.notificationService.success('User created successfully!');\n this.submit.emit();\n } else {\n this.notificationService.error(error?.error?.message || 'An error occurred while creating the user. Please try again.');\n }\n });\n }\n}\n","<app-notification></app-notification>\n<app-loader *ngIf=\"isLoading\"></app-loader>\n<div class=\"move-user-stepper-container\" [attr.aria-busy]=\"isSubmitting\">\n <header class=\"move-user-header\">\n <div class=\"move-user-header__title\">{{ title }}</div>\n <div class=\"move-user-header__close\">\n <span class=\"app-icon user-creation-close-icon\" (click)=\"onCancel()\"></span>\n </div>\n </header>\n\n <div id=\"user-creation-stepper\">\n <mat-stepper [linear]=\"false\" labelPosition=\"bottom\" #stepper\n [selectedIndex]=\"selectedIndex\"\n (selectionChange)=\"onStepSelectionChange($event)\">\n\n <mat-step>\n <div class=\"step-title\">Step 1: User creation with template</div>\n <ng-template matStepLabel>User creation</ng-template>\n\n <ng-container *ngIf=\"selectedIndex === 0\">\n <div class=\"move-user-tab-content-box\">\n <tk-user-template-step\n [customerId]=\"customerId\"\n (validityChange)=\"templateStepValid = $event\"\n ></tk-user-template-step>\n </div>\n </ng-container>\n </mat-step>\n\n <mat-step>\n <div class=\"step-title\">Step 2 : User details</div>\n <ng-template matStepLabel>User details</ng-template>\n\n <ng-container *ngIf=\"selectedIndex === 1\">\n <div class=\"move-user-tab-content-box\">\n <tk-user-details-step (validityChange)=\"detailsStepValid = $event\"></tk-user-details-step>\n </div>\n </ng-container>\n </mat-step>\n\n <mat-step>\n <div class=\"step-title\">Step 3: Review</div>\n <ng-template matStepLabel>Review</ng-template>\n\n <ng-container *ngIf=\"selectedIndex === 2\">\n <div class=\"move-user-tab-content-box\">\n <tk-user-overview-step></tk-user-overview-step>\n </div>\n </ng-container>\n </mat-step>\n </mat-stepper>\n\n <div class=\"wizard-actions\">\n <ng-container [ngSwitch]=\"stepper.selectedIndex\">\n <ng-container *ngSwitchCase=\"0\">\n <button\n mat-button\n class=\"uc-btn uc-btn-primary\"\n type=\"button\"\n [disabled]=\"!templateStepValid\"\n (click)=\"onStepperNext(stepper)\"\n >\n Next\n </button>\n <button mat-button class=\"uc-btn uc-btn-secondary\" type=\"button\" (click)=\"onCancel()\">\n Cancel\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"1\">\n <button\n mat-button\n class=\"uc-btn uc-btn-primary\"\n type=\"button\"\n [disabled]=\"!detailsStepValid\"\n (click)=\"onStepperNext(stepper)\"\n >\n Next\n </button>\n <button mat-button class=\"uc-btn uc-btn-secondary\" type=\"button\" (click)=\"stepper.previous()\">\n Previous\n </button>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"2\">\n <button\n mat-button\n class=\"uc-btn uc-btn-primary\"\n type=\"button\"\n [disabled]=\"isSubmitting\"\n (click)=\"onSubmit()\"\n >\n <span class=\"uc-btn__inline-content\">\n <span class=\"uc-btn__spinner\" *ngIf=\"isSubmitting\" aria-hidden=\"true\"></span>\n <span>{{ isSubmitting ? 'Creating...' : 'Create' }}</span>\n </span>\n </button>\n <button\n mat-button\n class=\"uc-btn uc-btn-secondary\"\n type=\"button\"\n [disabled]=\"isSubmitting\"\n (click)=\"stepper.previous()\"\n >\n Previous\n </button>\n </ng-container>\n </ng-container>\n </div>\n </div>\n\n <div class=\"wizard-loading-overlay\" [class.wizard-loading-overlay--visible]=\"isSubmitting\" aria-hidden=\"true\"></div>\n</div>","import { CommonModule } from \"@angular/common\";\r\nimport { NgModule } from \"@angular/core\";\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatExpansionModule } from \"@angular/material/expansion\";\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatStepperModule } from \"@angular/material/stepper\";\r\nimport { NotificationsComponent } from \"./shared/components/notification/notification.component\";\r\nimport { MaterialModule } from \"./shared/material.module\";\r\nimport { NotificationService } from \"./shared/services/notification.service\";\r\nimport { UserCreationApiService } from \"./shared/services/user-creation-api.service\";\r\nimport { SharedModule } from \"./shared/shared.module\";\r\nimport { UserDetailsStepComponent } from \"./widgets/user-creation-wizard/components/user-details-step/user-details-step.component\";\r\nimport { UserOverviewStepComponent } from \"./widgets/user-creation-wizard/components/user-overview-step/user-overview-step.component\";\r\nimport { UserTemplateStepComponent } from \"./widgets/user-creation-wizard/components/user-template-step/user-template-step.component\";\r\nimport { UserCreationWizardComponent } from \"./widgets/user-creation-wizard/user-creation-wizard.component\";\r\nimport { UserCreationWizardService } from \"./widgets/user-creation-wizard/user-creation-wizard.service\";\r\nimport { AppLoaderComponent } from './utils/app-loader/app-loader';\r\nimport { TranslateLoader, TranslateModule } from \"@ngx-translate/core\";\r\nimport { TruncatePipe } from \"./shared/pipes/truncate.pipe\";\r\nimport { HttpClient } from \"@angular/common/http\";\r\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\r\n\r\nexport function HttpLoaderFactory(http: HttpClient) {\r\n return new TranslateHttpLoader(http);\r\n}\r\n\r\n@NgModule({\r\n declarations: [\r\n UserCreationWizardComponent,\r\n UserTemplateStepComponent,\r\n NotificationsComponent,\r\n UserDetailsStepComponent,\r\n UserOverviewStepComponent,\r\n AppLoaderComponent,\r\n TruncatePipe,\r\n ],\r\n imports: [\r\n CommonModule,\r\n SharedModule,\r\n MaterialModule,\r\n MatStepperModule,\r\n MatExpansionModule,\r\n FormsModule, \r\n ReactiveFormsModule,\r\n MatRadioModule,\r\n TranslateModule.forRoot({\r\n loader: {\r\n provide: TranslateLoader,\r\n useFactory: HttpLoaderFactory,\r\n deps: [HttpClient]\r\n }\r\n }),\r\n ],\r\n exports: [\r\n UserCreationWizardComponent,\r\n ],\r\n providers: [\r\n UserCreationApiService,\r\n UserCreationWizardService,\r\n NotificationService,\r\n ]\r\n})\r\nexport class UserCreationModule {}","/*\r\n * Public API Surface of @tuki-io/tuki-widgets\r\n */\r\n\r\n// Shared Components\r\n// export * from './shared/shared.module';\r\n\r\n// Widget Modules\r\nexport * from './src/user-creation.module';\r\n\r\n// Components\r\n// export * from './shared/components/index';\r\nexport * from './src/widgets/user-creation-wizard/user-creation-wizard.component';\r\n\r\n// Types\r\n// export * from './shared/types/data-table';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["i1.NotificationService","i4.TruncatePipe","getSavableData","i1","i2.UserCreationApiService","i3.UserCreationWizardService","i4","i6","i10","i16.AppLoaderComponent","i1.UserCreationWizardService","i3","i5","i7","i8","i9.AppLoaderComponent","i5.UserTemplateStepComponent","i6.NotificationsComponent","i7.UserDetailsStepComponent","i8.UserOverviewStepComponent"],"mappings":"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"}