@tuki-io/tuki-widgets 0.0.26 → 0.0.28

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 (374) hide show
  1. package/.editorconfig +16 -0
  2. package/.vscode/extensions.json +4 -0
  3. package/.vscode/launch.json +20 -0
  4. package/.vscode/tasks.json +42 -0
  5. package/README.md +10 -9
  6. package/angular.json +41 -0
  7. package/package.json +40 -43
  8. package/projects/tuki/widgets/README.md +24 -0
  9. package/projects/tuki/widgets/karma.conf.js +44 -0
  10. package/projects/tuki/widgets/ng-package.json +7 -0
  11. package/projects/tuki/widgets/package.json +13 -0
  12. package/projects/tuki/widgets/src/lib/widgets.component.spec.ts +23 -0
  13. package/projects/tuki/widgets/src/lib/widgets.component.ts +20 -0
  14. package/projects/tuki/widgets/src/lib/widgets.module.ts +16 -0
  15. package/projects/tuki/widgets/src/lib/widgets.service.spec.ts +16 -0
  16. package/projects/tuki/widgets/src/lib/widgets.service.ts +9 -0
  17. package/{public-api.d.ts → projects/tuki/widgets/src/public-api.ts} +4 -0
  18. package/projects/tuki/widgets/src/test.ts +27 -0
  19. package/projects/tuki/widgets/tsconfig.lib.json +36 -0
  20. package/projects/tuki/widgets/tsconfig.lib.prod.json +10 -0
  21. package/projects/tuki/widgets/tsconfig.spec.json +17 -0
  22. package/projects/tuki/widgets/user-device-manage/ng-package.json +7 -0
  23. package/projects/tuki/widgets/user-device-manage/public-api.ts +8 -0
  24. package/projects/tuki/widgets/user-device-manage/src/app.constants.ts +96 -0
  25. package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-left.svg +5 -0
  26. package/projects/tuki/widgets/user-device-manage/src/assets/icons/arrow-right.svg +5 -0
  27. package/projects/tuki/widgets/user-device-manage/src/assets/icons/close_icon_x.svg +3 -0
  28. package/projects/tuki/widgets/user-device-manage/src/assets/icons/delete_icon.svg +5 -0
  29. package/projects/tuki/widgets/user-device-manage/src/assets/icons/dragger-vertical-icon.svg +3 -0
  30. package/projects/tuki/widgets/user-device-manage/src/assets/icons/icon_user.svg +1 -0
  31. package/projects/tuki/widgets/user-device-manage/src/assets/icons/vartical_divider_icon.svg +3 -0
  32. package/projects/tuki/widgets/user-device-manage/src/classes/device.ts +292 -0
  33. package/projects/tuki/widgets/user-device-manage/src/classes/line-association-interface.ts +50 -0
  34. package/projects/tuki/widgets/user-device-manage/src/classes/line-association.ts +177 -0
  35. package/projects/tuki/widgets/user-device-manage/src/classes/line-call-info-display.ts +21 -0
  36. package/projects/tuki/widgets/user-device-manage/src/classes/line-directory.ts +41 -0
  37. package/projects/tuki/widgets/user-device-manage/src/classes/line.ts +144 -0
  38. package/projects/tuki/widgets/user-device-manage/src/classes/notification.ts +40 -0
  39. package/projects/tuki/widgets/user-device-manage/src/classes/recording-options.ts +6 -0
  40. package/projects/tuki/widgets/user-device-manage/src/classes/simplified-user.ts +169 -0
  41. package/projects/tuki/widgets/user-device-manage/src/classes/site-defaults.ts +167 -0
  42. package/projects/tuki/widgets/user-device-manage/src/classes/translation-pattern.ts +50 -0
  43. package/projects/tuki/widgets/user-device-manage/src/classes/types.ts +19 -0
  44. package/projects/tuki/widgets/user-device-manage/src/classes/user-interface.ts +225 -0
  45. package/projects/tuki/widgets/user-device-manage/src/classes/user.ts +8 -0
  46. package/projects/tuki/widgets/user-device-manage/src/common-functions.ts +16 -0
  47. package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.html +14 -0
  48. package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.scss +79 -0
  49. package/projects/tuki/widgets/user-device-manage/src/confirm-dialog/info-dialog.component.ts +35 -0
  50. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.css +97 -0
  51. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.html +21 -0
  52. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/associated-line-row/associated-line-row.component.ts +28 -0
  53. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.css +20 -0
  54. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.html +6 -0
  55. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-details-box/device-associated-line-details-box.component.ts +13 -0
  56. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.html +6 -0
  57. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.scss +4 -0
  58. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line-extension/device-associated-line-extension.component.ts +63 -0
  59. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.html +241 -0
  60. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.scss +500 -0
  61. package/projects/tuki/widgets/user-device-manage/src/device-associated-line/device-associated-line.component.ts +194 -0
  62. package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.html +27 -0
  63. package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.scss +131 -0
  64. package/projects/tuki/widgets/user-device-manage/src/device-list/device-list.component.ts +25 -0
  65. package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.html +209 -0
  66. package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.scss +502 -0
  67. package/projects/tuki/widgets/user-device-manage/src/device-manage-widget.component.ts +354 -0
  68. package/projects/tuki/widgets/user-device-manage/src/environments/environment.prod.ts +9 -0
  69. package/projects/tuki/widgets/user-device-manage/src/environments/environment.ts +10 -0
  70. package/projects/tuki/widgets/user-device-manage/src/interseptors/auth.interceptor.ts +35 -0
  71. package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.html +50 -0
  72. package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.scss +8 -0
  73. package/projects/tuki/widgets/user-device-manage/src/lazy-loading-select/lazy-loading-select.component.ts +81 -0
  74. package/projects/tuki/widgets/user-device-manage/src/material.module.ts +87 -0
  75. package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.html +33 -0
  76. package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.scss +84 -0
  77. package/projects/tuki/widgets/user-device-manage/src/notifications/notification.component.ts +46 -0
  78. package/projects/tuki/widgets/user-device-manage/src/removeKynFromIBM.service.ts +25 -0
  79. package/projects/tuki/widgets/user-device-manage/src/services/api.service.ts +87 -0
  80. package/projects/tuki/widgets/user-device-manage/src/services/common-functions.ts +17 -0
  81. package/projects/tuki/widgets/user-device-manage/src/services/device.service.ts +95 -0
  82. package/projects/tuki/widgets/user-device-manage/src/services/dns.service.ts +111 -0
  83. package/projects/tuki/widgets/user-device-manage/src/services/line.service.ts +89 -0
  84. package/projects/tuki/widgets/user-device-manage/src/services/notification.service.ts +68 -0
  85. package/projects/tuki/widgets/user-device-manage/src/services/removeKynFromIBM.service.ts +25 -0
  86. package/projects/tuki/widgets/user-device-manage/src/services/site-settings.service.ts +82 -0
  87. package/projects/tuki/widgets/user-device-manage/src/services/sorting-utils.service.ts +203 -0
  88. package/projects/tuki/widgets/user-device-manage/src/services/user.service.ts +283 -0
  89. package/projects/tuki/widgets/user-device-manage/src/services/utils.service.ts +87 -0
  90. package/projects/tuki/widgets/user-device-manage/src/services/validation.service.ts +829 -0
  91. package/projects/tuki/widgets/user-device-manage/src/styles/_variables.scss +90 -0
  92. package/projects/tuki/widgets/user-device-manage/src/styles/form.scss +231 -0
  93. package/projects/tuki/widgets/user-device-manage/src/styles/icons.scss +32 -0
  94. package/projects/tuki/widgets/user-device-manage/src/styles/styles.scss +110 -0
  95. package/projects/tuki/widgets/user-device-manage/src/styles/tables.scss +30 -0
  96. package/projects/tuki/widgets/user-device-manage/src/user-device-manage.module.ts +73 -0
  97. package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.component.html +6 -0
  98. package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.component.scss +11 -0
  99. package/projects/tuki/widgets/user-device-manage/src/utils/app-loader/app-loader.ts +13 -0
  100. package/projects/tuki/widgets/user-manage/ng-package.json +7 -0
  101. package/projects/tuki/widgets/user-manage/src/app.constants.ts +50 -0
  102. package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-left.svg +5 -0
  103. package/projects/tuki/widgets/user-manage/src/assets/icons/arrow-right.svg +5 -0
  104. package/projects/tuki/widgets/user-manage/src/assets/icons/delete_icon.svg +5 -0
  105. package/projects/tuki/widgets/user-manage/src/assets/icons/dragger-vertical-icon.svg +3 -0
  106. package/projects/tuki/widgets/user-manage/src/assets/icons/icon_user.svg +1 -0
  107. package/projects/tuki/widgets/user-manage/src/assets/icons/vartical_divider_icon.svg +3 -0
  108. package/projects/tuki/widgets/user-manage/src/classes/device.ts +232 -0
  109. package/projects/tuki/widgets/user-manage/src/classes/line-association-interface.ts +43 -0
  110. package/projects/tuki/widgets/user-manage/src/classes/line-association.ts +161 -0
  111. package/projects/tuki/widgets/user-manage/src/classes/line-call-info-display.ts +21 -0
  112. package/projects/tuki/widgets/user-manage/src/classes/line-directory.ts +42 -0
  113. package/projects/tuki/widgets/user-manage/src/classes/line.ts +144 -0
  114. package/projects/tuki/widgets/user-manage/src/classes/notification.ts +39 -0
  115. package/projects/tuki/widgets/user-manage/src/classes/pagination.ts +18 -0
  116. package/projects/tuki/widgets/user-manage/src/classes/recording-options.ts +6 -0
  117. package/projects/tuki/widgets/user-manage/src/classes/simplified-user.ts +165 -0
  118. package/projects/tuki/widgets/user-manage/src/classes/table-data.ts +6 -0
  119. package/projects/tuki/widgets/user-manage/src/classes/translation-pattern.ts +49 -0
  120. package/projects/tuki/widgets/user-manage/src/classes/user-interface.ts +225 -0
  121. package/projects/tuki/widgets/user-manage/src/classes/user-list.ts +42 -0
  122. package/projects/tuki/widgets/user-manage/src/classes/user.ts +8 -0
  123. package/projects/tuki/widgets/user-manage/src/common-functions.ts +16 -0
  124. package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.html +27 -0
  125. package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.scss +131 -0
  126. package/projects/tuki/widgets/user-manage/src/device-list/device-list.component.ts +25 -0
  127. package/projects/tuki/widgets/user-manage/src/environments/environment.prod.ts +9 -0
  128. package/projects/tuki/widgets/user-manage/src/environments/environment.ts +10 -0
  129. package/projects/tuki/widgets/user-manage/src/interseptors/auth.interceptor.ts +35 -0
  130. package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.html +50 -0
  131. package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.scss +8 -0
  132. package/projects/tuki/widgets/user-manage/src/lazy-loading-select/lazy-loading-select.component.ts +81 -0
  133. package/projects/tuki/widgets/user-manage/src/material.module.ts +85 -0
  134. package/projects/tuki/widgets/user-manage/src/notifications/notification.component.html +33 -0
  135. package/projects/tuki/widgets/user-manage/src/notifications/notification.component.scss +84 -0
  136. package/projects/tuki/widgets/user-manage/src/notifications/notification.component.ts +46 -0
  137. package/projects/tuki/widgets/user-manage/src/removeKynFromIBM.service.ts +25 -0
  138. package/projects/tuki/widgets/user-manage/src/services/api.service.ts +90 -0
  139. package/projects/tuki/widgets/user-manage/src/services/dns.service.ts +116 -0
  140. package/projects/tuki/widgets/user-manage/src/services/line.service.ts +31 -0
  141. package/projects/tuki/widgets/user-manage/src/services/notification.service.ts +68 -0
  142. package/projects/tuki/widgets/user-manage/src/services/removeKynFromIBM.service.ts +25 -0
  143. package/projects/tuki/widgets/user-manage/src/services/site-settings.service.ts +35 -0
  144. package/projects/tuki/widgets/user-manage/src/services/sorting-utils.service.ts +203 -0
  145. package/projects/tuki/widgets/user-manage/src/services/user.service.ts +242 -0
  146. package/projects/tuki/widgets/user-manage/src/services/users-search.service.ts +58 -0
  147. package/projects/tuki/widgets/user-manage/src/services/utils.service.ts +71 -0
  148. package/projects/tuki/widgets/user-manage/src/styles/_variables.scss +90 -0
  149. package/projects/tuki/widgets/user-manage/src/styles/form.scss +231 -0
  150. package/projects/tuki/widgets/user-manage/src/styles/icons.scss +32 -0
  151. package/projects/tuki/widgets/user-manage/src/styles/styles.scss +110 -0
  152. package/projects/tuki/widgets/user-manage/src/styles/tables.scss +30 -0
  153. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.html +10 -0
  154. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.scss +429 -0
  155. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.ts +63 -0
  156. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.html +32 -0
  157. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.scss +444 -0
  158. package/projects/tuki/widgets/user-manage/src/user-calling/user-calling.component.ts +89 -0
  159. package/projects/tuki/widgets/user-manage/src/user-details/notification.service.ts +68 -0
  160. package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.html +29 -0
  161. package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.scss +64 -0
  162. package/projects/tuki/widgets/user-manage/src/user-info/user-info.component.ts +19 -0
  163. package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.html +292 -0
  164. package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.scss +463 -0
  165. package/projects/tuki/widgets/user-manage/src/user-manage-widget.component.ts +212 -0
  166. package/projects/tuki/widgets/user-manage/src/user-manage.module.ts +63 -0
  167. package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.component.html +6 -0
  168. package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.component.scss +11 -0
  169. package/projects/tuki/widgets/user-manage/src/utils/app-loader/app-loader.ts +13 -0
  170. package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.html +26 -0
  171. package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.scss +41 -0
  172. package/projects/tuki/widgets/user-manage/src/utils/pagination/pagination.component.ts +41 -0
  173. package/projects/tuki/widgets/users-list/ng-package.json +6 -0
  174. package/projects/tuki/widgets/users-list/src/app.constants.ts +50 -0
  175. package/projects/tuki/widgets/users-list/src/assets/icons/close_icon_modal.svg +3 -0
  176. package/projects/tuki/widgets/users-list/src/assets/icons/icon_user.svg +1 -0
  177. package/projects/tuki/widgets/users-list/src/classes/device.ts +225 -0
  178. package/projects/tuki/widgets/users-list/src/classes/line.ts +144 -0
  179. package/projects/tuki/widgets/users-list/src/classes/notification.ts +38 -0
  180. package/projects/tuki/widgets/users-list/src/classes/pagination.ts +18 -0
  181. package/projects/tuki/widgets/users-list/src/classes/simlified-user.ts +74 -0
  182. package/projects/tuki/widgets/users-list/src/classes/table-data.ts +6 -0
  183. package/projects/tuki/widgets/users-list/src/classes/user-interface.ts +225 -0
  184. package/projects/tuki/widgets/users-list/src/classes/user-list.ts +47 -0
  185. package/projects/tuki/widgets/users-list/src/classes/user.ts +8 -0
  186. package/projects/tuki/widgets/users-list/src/material.module.ts +94 -0
  187. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.css +183 -0
  188. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.html +93 -0
  189. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-stepper/move-user-stepper.component.ts +95 -0
  190. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.css +38 -0
  191. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.html +11 -0
  192. package/projects/tuki/widgets/users-list/src/move-user-wizard/move-user-wizard.component.ts +34 -0
  193. package/projects/tuki/widgets/users-list/src/services/api-webex.service.ts +13 -0
  194. package/projects/tuki/widgets/users-list/src/services/api.service.ts +90 -0
  195. package/projects/tuki/widgets/users-list/src/services/dns.service.ts +128 -0
  196. package/projects/tuki/widgets/users-list/src/services/events-communication.service.ts +11 -0
  197. package/projects/tuki/widgets/users-list/src/services/notification.service.ts +68 -0
  198. package/projects/tuki/widgets/users-list/src/services/removeKynFromIBM.service.ts +25 -0
  199. package/projects/tuki/widgets/users-list/src/services/user.service.ts +168 -0
  200. package/projects/tuki/widgets/users-list/src/services/users-search.service.ts +135 -0
  201. package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.html +14 -0
  202. package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.scss +79 -0
  203. package/projects/tuki/widgets/users-list/src/user-list-confirm-dialog/user-list-confirm-dialog.component.ts +35 -0
  204. package/projects/tuki/widgets/users-list/src/users-list.component.css +4 -0
  205. package/projects/tuki/widgets/users-list/src/users-list.component.css.map +1 -0
  206. package/projects/tuki/widgets/users-list/src/users-list.component.html +86 -0
  207. package/projects/tuki/widgets/users-list/src/users-list.component.scss +572 -0
  208. package/projects/tuki/widgets/users-list/src/users-list.component.ts +283 -0
  209. package/projects/tuki/widgets/users-list/src/users-list.module.ts +51 -0
  210. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.css +11 -0
  211. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.css.map +1 -0
  212. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.html +6 -0
  213. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.component.scss +11 -0
  214. package/projects/tuki/widgets/users-list/src/utils/app-loader/app-loader.ts +13 -0
  215. package/projects/tuki/widgets/users-list/src/utils/common-functions.ts +16 -0
  216. package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.html +33 -0
  217. package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.scss +84 -0
  218. package/projects/tuki/widgets/users-list/src/utils/notifications/notification.component.ts +46 -0
  219. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.css +45 -0
  220. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.css.map +1 -0
  221. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.html +26 -0
  222. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.scss +41 -0
  223. package/projects/tuki/widgets/users-list/src/utils/pagination/pagination.component.ts +41 -0
  224. package/projects/tuki/widgets/users-list/src/utils/utils.service.ts +71 -0
  225. package/tsconfig.json +46 -0
  226. package/esm2020/lib/widgets.component.mjs +0 -22
  227. package/esm2020/lib/widgets.module.mjs +0 -21
  228. package/esm2020/lib/widgets.service.mjs +0 -14
  229. package/esm2020/public-api.mjs +0 -7
  230. package/esm2020/tuki-io-tuki-widgets.mjs +0 -5
  231. package/esm2020/user-manage/public-api.mjs +0 -7
  232. package/esm2020/user-manage/src/app.constants.mjs +0 -50
  233. package/esm2020/user-manage/src/classes/device.mjs +0 -24
  234. package/esm2020/user-manage/src/classes/line-association-interface.mjs +0 -2
  235. package/esm2020/user-manage/src/classes/line-association.mjs +0 -110
  236. package/esm2020/user-manage/src/classes/line-call-info-display.mjs +0 -10
  237. package/esm2020/user-manage/src/classes/line-directory.mjs +0 -27
  238. package/esm2020/user-manage/src/classes/line.mjs +0 -18
  239. package/esm2020/user-manage/src/classes/notification.mjs +0 -32
  240. package/esm2020/user-manage/src/classes/pagination.mjs +0 -8
  241. package/esm2020/user-manage/src/classes/recording-options.mjs +0 -7
  242. package/esm2020/user-manage/src/classes/simplified-user.mjs +0 -109
  243. package/esm2020/user-manage/src/classes/table-data.mjs +0 -2
  244. package/esm2020/user-manage/src/classes/translation-pattern.mjs +0 -32
  245. package/esm2020/user-manage/src/classes/user-list.mjs +0 -10
  246. package/esm2020/user-manage/src/common-functions.mjs +0 -19
  247. package/esm2020/user-manage/src/environments/environment.mjs +0 -11
  248. package/esm2020/user-manage/src/interseptors/auth.interceptor.mjs +0 -36
  249. package/esm2020/user-manage/src/lazy-loading-select/lazy-loading-select.component.mjs +0 -74
  250. package/esm2020/user-manage/src/material.module.mjs +0 -188
  251. package/esm2020/user-manage/src/notifications/notification.component.mjs +0 -35
  252. package/esm2020/user-manage/src/removeKynFromIBM.service.mjs +0 -25
  253. package/esm2020/user-manage/src/services/api.service.mjs +0 -79
  254. package/esm2020/user-manage/src/services/dns.service.mjs +0 -110
  255. package/esm2020/user-manage/src/services/line.service.mjs +0 -34
  256. package/esm2020/user-manage/src/services/notification.service.mjs +0 -62
  257. package/esm2020/user-manage/src/services/removeKynFromIBM.service.mjs +0 -25
  258. package/esm2020/user-manage/src/services/site-settings.service.mjs +0 -36
  259. package/esm2020/user-manage/src/services/sorting-utils.service.mjs +0 -197
  260. package/esm2020/user-manage/src/services/user.service.mjs +0 -207
  261. package/esm2020/user-manage/src/services/users-search.service.mjs +0 -49
  262. package/esm2020/user-manage/src/services/utils.service.mjs +0 -73
  263. package/esm2020/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.mjs +0 -65
  264. package/esm2020/user-manage/src/user-calling/user-calling.component.mjs +0 -78
  265. package/esm2020/user-manage/src/user-info/user-info.component.mjs +0 -20
  266. package/esm2020/user-manage/src/user-manage-widget.component.mjs +0 -193
  267. package/esm2020/user-manage/src/user-manage.module.mjs +0 -96
  268. package/esm2020/user-manage/src/utils/app-loader/app-loader.mjs +0 -14
  269. package/esm2020/user-manage/src/utils/pagination/pagination.component.mjs +0 -43
  270. package/esm2020/user-manage/tuki-io-tuki-widgets-user-manage.mjs +0 -5
  271. package/esm2020/users-list/public-api.mjs +0 -9
  272. package/esm2020/users-list/src/app.constants.mjs +0 -46
  273. package/esm2020/users-list/src/classes/device.mjs +0 -7
  274. package/esm2020/users-list/src/classes/line.mjs +0 -18
  275. package/esm2020/users-list/src/classes/notification.mjs +0 -31
  276. package/esm2020/users-list/src/classes/pagination.mjs +0 -8
  277. package/esm2020/users-list/src/classes/simlified-user.mjs +0 -50
  278. package/esm2020/users-list/src/classes/table-data.mjs +0 -2
  279. package/esm2020/users-list/src/classes/user-list.mjs +0 -13
  280. package/esm2020/users-list/src/material.module.mjs +0 -195
  281. package/esm2020/users-list/src/services/api-webex.service.mjs +0 -17
  282. package/esm2020/users-list/src/services/api.service.mjs +0 -78
  283. package/esm2020/users-list/src/services/events-communication.service.mjs +0 -14
  284. package/esm2020/users-list/src/services/notification.service.mjs +0 -62
  285. package/esm2020/users-list/src/services/removeKynFromIBM.service.mjs +0 -25
  286. package/esm2020/users-list/src/services/user.service.mjs +0 -129
  287. package/esm2020/users-list/src/services/users-search.service.mjs +0 -99
  288. package/esm2020/users-list/src/users-list.component.mjs +0 -187
  289. package/esm2020/users-list/src/users-list.module.mjs +0 -62
  290. package/esm2020/users-list/src/utils/app-loader/app-loader.mjs +0 -14
  291. package/esm2020/users-list/src/utils/common-functions.mjs +0 -19
  292. package/esm2020/users-list/src/utils/pagination/pagination.component.mjs +0 -43
  293. package/esm2020/users-list/src/utils/utils.service.mjs +0 -73
  294. package/esm2020/users-list/tuki-io-tuki-widgets-users-list.mjs +0 -5
  295. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs +0 -2074
  296. package/fesm2015/tuki-io-tuki-widgets-user-manage.mjs.map +0 -1
  297. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs +0 -1100
  298. package/fesm2015/tuki-io-tuki-widgets-users-list.mjs.map +0 -1
  299. package/fesm2015/tuki-io-tuki-widgets.mjs +0 -63
  300. package/fesm2015/tuki-io-tuki-widgets.mjs.map +0 -1
  301. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs +0 -2057
  302. package/fesm2020/tuki-io-tuki-widgets-user-manage.mjs.map +0 -1
  303. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs +0 -1093
  304. package/fesm2020/tuki-io-tuki-widgets-users-list.mjs.map +0 -1
  305. package/fesm2020/tuki-io-tuki-widgets.mjs +0 -63
  306. package/fesm2020/tuki-io-tuki-widgets.mjs.map +0 -1
  307. package/index.d.ts +0 -5
  308. package/lib/widgets.component.d.ts +0 -8
  309. package/lib/widgets.module.d.ts +0 -7
  310. package/lib/widgets.service.d.ts +0 -6
  311. package/user-manage/index.d.ts +0 -5
  312. package/user-manage/src/app.constants.d.ts +0 -29
  313. package/user-manage/src/classes/device.d.ts +0 -186
  314. package/user-manage/src/classes/line-association-interface.d.ts +0 -40
  315. package/user-manage/src/classes/line-association.d.ts +0 -55
  316. package/user-manage/src/classes/line-call-info-display.d.ts +0 -11
  317. package/user-manage/src/classes/line-directory.d.ts +0 -16
  318. package/user-manage/src/classes/line.d.ts +0 -140
  319. package/user-manage/src/classes/notification.d.ts +0 -18
  320. package/user-manage/src/classes/pagination.d.ts +0 -13
  321. package/user-manage/src/classes/recording-options.d.ts +0 -5
  322. package/user-manage/src/classes/simplified-user.d.ts +0 -50
  323. package/user-manage/src/classes/table-data.d.ts +0 -5
  324. package/user-manage/src/classes/translation-pattern.d.ts +0 -18
  325. package/user-manage/src/classes/user-list.d.ts +0 -34
  326. package/user-manage/src/common-functions.d.ts +0 -1
  327. package/user-manage/src/environments/environment.d.ts +0 -9
  328. package/user-manage/src/interseptors/auth.interceptor.d.ts +0 -9
  329. package/user-manage/src/lazy-loading-select/lazy-loading-select.component.d.ts +0 -35
  330. package/user-manage/src/material.module.d.ts +0 -28
  331. package/user-manage/src/notifications/notification.component.d.ts +0 -19
  332. package/user-manage/src/removeKynFromIBM.service.d.ts +0 -8
  333. package/user-manage/src/services/api.service.d.ts +0 -21
  334. package/user-manage/src/services/dns.service.d.ts +0 -14
  335. package/user-manage/src/services/line.service.d.ts +0 -17
  336. package/user-manage/src/services/notification.service.d.ts +0 -18
  337. package/user-manage/src/services/removeKynFromIBM.service.d.ts +0 -8
  338. package/user-manage/src/services/site-settings.service.d.ts +0 -9
  339. package/user-manage/src/services/sorting-utils.service.d.ts +0 -26
  340. package/user-manage/src/services/user.service.d.ts +0 -43
  341. package/user-manage/src/services/users-search.service.d.ts +0 -25
  342. package/user-manage/src/services/utils.service.d.ts +0 -9
  343. package/user-manage/src/user-calling/user-calling-extension/user-calling-extension.component.d.ts +0 -24
  344. package/user-manage/src/user-calling/user-calling.component.d.ts +0 -30
  345. package/user-manage/src/user-info/user-info.component.d.ts +0 -9
  346. package/user-manage/src/user-manage-widget.component.d.ts +0 -39
  347. package/user-manage/src/user-manage.module.d.ts +0 -20
  348. package/user-manage/src/utils/app-loader/app-loader.d.ts +0 -6
  349. package/user-manage/src/utils/pagination/pagination.component.d.ts +0 -18
  350. package/users-list/index.d.ts +0 -5
  351. package/users-list/src/app.constants.d.ts +0 -28
  352. package/users-list/src/classes/device.d.ts +0 -224
  353. package/users-list/src/classes/line.d.ts +0 -140
  354. package/users-list/src/classes/notification.d.ts +0 -18
  355. package/users-list/src/classes/pagination.d.ts +0 -13
  356. package/users-list/src/classes/simlified-user.d.ts +0 -25
  357. package/users-list/src/classes/table-data.d.ts +0 -5
  358. package/users-list/src/classes/user-list.d.ts +0 -36
  359. package/users-list/src/material.module.d.ts +0 -29
  360. package/users-list/src/services/api-webex.service.d.ts +0 -8
  361. package/users-list/src/services/api.service.d.ts +0 -21
  362. package/users-list/src/services/events-communication.service.d.ts +0 -8
  363. package/users-list/src/services/notification.service.d.ts +0 -18
  364. package/users-list/src/services/removeKynFromIBM.service.d.ts +0 -8
  365. package/users-list/src/services/user.service.d.ts +0 -32
  366. package/users-list/src/services/users-search.service.d.ts +0 -31
  367. package/users-list/src/users-list.component.d.ts +0 -49
  368. package/users-list/src/users-list.module.d.ts +0 -13
  369. package/users-list/src/utils/app-loader/app-loader.d.ts +0 -6
  370. package/users-list/src/utils/common-functions.d.ts +0 -1
  371. package/users-list/src/utils/pagination/pagination.component.d.ts +0 -18
  372. package/users-list/src/utils/utils.service.d.ts +0 -9
  373. /package/{user-manage/public-api.d.ts → projects/tuki/widgets/user-manage/public-api.ts} +0 -0
  374. /package/{users-list/public-api.d.ts → projects/tuki/widgets/users-list/public-api.ts} +0 -0
@@ -1,2074 +0,0 @@
1
- import * as i0 from '@angular/core';
2
- import { Injectable, Component, ViewEncapsulation, Input, NgModule, ChangeDetectionStrategy, EventEmitter, Output } from '@angular/core';
3
- import * as i1 from '@angular/common/http';
4
- import { HttpHeaders, HttpErrorResponse, HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http';
5
- import { map, catchError } from 'rxjs/operators';
6
- import { Subject, of, forkJoin, throwError, BehaviorSubject, Observable } from 'rxjs';
7
- import * as i4 from '@angular/forms';
8
- import { FormBuilder, Validators, FormsModule, ReactiveFormsModule } from '@angular/forms';
9
- import { BrowserModule } from '@angular/platform-browser';
10
- import * as i5 from '@angular/material/progress-spinner';
11
- import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
12
- import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
13
- import * as i3 from '@angular/common';
14
- import { CommonModule } from '@angular/common';
15
- import { MatExpansionModule } from '@angular/material/expansion';
16
- import { MatDatepickerModule } from '@angular/material/datepicker';
17
- import { MatAutocompleteModule } from '@angular/material/autocomplete';
18
- import { MatChipsModule } from '@angular/material/chips';
19
- import { MatListModule } from '@angular/material/list';
20
- import { MatSidenavModule } from '@angular/material/sidenav';
21
- import { MatTreeModule } from '@angular/material/tree';
22
- import { DragDropModule } from '@angular/cdk/drag-drop';
23
- import { MatButtonModule } from '@angular/material/button';
24
- import * as i7$1 from '@angular/material/input';
25
- import { MatInputModule } from '@angular/material/input';
26
- import * as i7 from '@angular/material/core';
27
- import { MatNativeDateModule } from '@angular/material/core';
28
- import { MatTooltipModule } from '@angular/material/tooltip';
29
- import * as i6$1 from '@angular/material/form-field';
30
- import { MatFormFieldModule } from '@angular/material/form-field';
31
- import { MatStepperModule } from '@angular/material/stepper';
32
- import * as i8$1 from '@angular/material/tabs';
33
- import { MatTabsModule } from '@angular/material/tabs';
34
- import { MatCardModule } from '@angular/material/card';
35
- import * as i8 from '@angular/material/select';
36
- import { MatSelectModule } from '@angular/material/select';
37
- import { MatCheckboxModule } from '@angular/material/checkbox';
38
- import * as i9 from '@angular/material/slide-toggle';
39
- import { MatSlideToggleModule } from '@angular/material/slide-toggle';
40
- import { MatTableModule } from '@angular/material/table';
41
- import * as i6 from '@angular/material/paginator';
42
- import { MatPaginatorModule } from '@angular/material/paginator';
43
- import * as i5$1 from '@angular/material/divider';
44
- import { Big } from 'big.js';
45
-
46
- class APIService {
47
- constructor(httpClient) {
48
- this.httpClient = httpClient;
49
- this.apiUrl = window.location.protocol + '//' + window.location.hostname + '/dcp';
50
- }
51
- fetch(url, params, cache) {
52
- const headers = this.getHeaders(cache);
53
- params = params || {};
54
- return this.httpClient.get(this.apiUrl + url, { params: this.prepareEncodedParams(params), headers });
55
- }
56
- post(url, body, params = {}) {
57
- body = body || null;
58
- const headers = this.getHeaders();
59
- return this.httpClient.post(this.apiUrl + url, body, { params: this.prepareEncodedParams(params), headers });
60
- }
61
- // use when response extended data is necessary:
62
- postExtended(url, body = null, params = {}, headers = {}) {
63
- headers = headers || this.getHeaders();
64
- return this.httpClient.post(this.apiUrl + url, body, {
65
- headers,
66
- observe: 'response',
67
- params: this.prepareEncodedParams(params)
68
- });
69
- }
70
- put(url, body = null, params = {}) {
71
- const headers = this.getHeaders();
72
- return this.httpClient.put(this.apiUrl + url, body, { headers, params: this.prepareEncodedParams(params) });
73
- }
74
- delete(url, params = {}) {
75
- const headers = this.getHeaders();
76
- return this.httpClient.delete(this.apiUrl + url, { headers, params: this.prepareEncodedParams(params) });
77
- }
78
- fetchPagination(url, pageSize, pageNumber, additionalParams = {}, cache) {
79
- const copyAdditionalParams = JSON.parse(JSON.stringify(additionalParams));
80
- const params = Object.assign(copyAdditionalParams, { size: pageSize.toString(), page: pageNumber.toString() });
81
- return this.fetch(url, params, cache);
82
- }
83
- prepareEncodedParams(params) {
84
- const result = {};
85
- if (!params) {
86
- return {};
87
- }
88
- for (const key of Object.keys(params)) {
89
- if (params[key]) {
90
- const stringParam = params[key].toString();
91
- result[key] = stringParam.includes('+') ? encodeURIComponent(stringParam) : stringParam;
92
- }
93
- }
94
- return result;
95
- }
96
- getHeaders(cache) {
97
- let headers = new HttpHeaders();
98
- if (cache) {
99
- headers = headers.append('_Cache', 'true ');
100
- }
101
- const token = this.token || this.getParameterByName('token');
102
- headers = headers.append('Authorization', 'Bearer ' + token);
103
- return headers;
104
- }
105
- getParameterByName(name, url = window.location.href) {
106
- name = name.replace(/[\[\]]/g, '\\$&');
107
- var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'), results = regex.exec(url);
108
- if (!results)
109
- return null;
110
- if (!results[2])
111
- return '';
112
- return decodeURIComponent(results[2].replace(/\+/g, ' '));
113
- }
114
- }
115
- APIService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: APIService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable });
116
- APIService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: APIService });
117
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: APIService, decorators: [{
118
- type: Injectable
119
- }], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
120
-
121
- const API = {
122
- USER_TOKEN: '/api/provision/:siteId/users/:userId/token',
123
- UPDATE_USER_FIELDS: '/api/provision/:siteId/userFields/:token',
124
- PERSIST_USER_CACHE: '/api/provision/:siteId/saveUser/:token',
125
- USER_BY_ID: '/api/provision/:siteId/users/:userId',
126
- QUICK_USERS_SEARCH: "/api/search/quickusers",
127
- LOCATION: "/api/provision/options/:siteId/locations",
128
- USER_LOCALES: "/api/provision/options/:siteId/userlocales",
129
- USER_PROFILES: "/api/provision/options/:siteId/userprofiles",
130
- AVAILABLE_DN_IN_RANGES: "/api/sites/:siteId/available-dn-in-ranges",
131
- DELETE_LINE: "/api/provision/:siteId/deleteLine/:pkid/:token",
132
- DISASSOCIATE_LINE: "/api/provision/:siteId/:deviceName/deleteLineAssociation/:linePkid/:token",
133
- CHECK_DELETE_LINE: "/api/provision/:siteId/checklinedeletion",
134
- ASSOCIATE_LINE: "/api/provision/:siteId/:deviceName/createLineAssociation/:token",
135
- CHECK_DESTINATION_NUMBER: "/api/provision/:siteId/check-dn",
136
- UPDATE_LINE_FIELDS: "/api/provision/:siteId/lineFields/:pkid/:token",
137
- UPDATE_DEVICE_FIELDS: "/api/provision/:siteId/deviceFields/:deviceName/:token"
138
- };
139
- const REGEX_PATTERN = {
140
- EMAIL: '^(([^<>()\\[\\]\\\\.,;:\\s@"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@"]+)*)|(".+"))' +
141
- '@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,62}[a-zA-Z0-9])' +
142
- '?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,62}[a-zA-Z0-9])?)*$'
143
- };
144
- const PAGINATION_DEFAULTS = {
145
- SIZE: 10,
146
- INDEX: 0
147
- };
148
- const PAGINATION_SIZE_OPTIONS = [
149
- 10,
150
- 50,
151
- 100,
152
- 500
153
- ];
154
- const CUCS_TO_IGNORE = [
155
- 189,
156
- 194,
157
- 191,
158
- 190
159
- ];
160
- const CUCMS_TO_IGNORE = [
161
- 249,
162
- 255,
163
- 251,
164
- 250
165
- ];
166
- const RECORDING_MEDIA_SOURCE = [
167
- "Gateway Preferred",
168
- "Phone Preferred"
169
- ];
170
-
171
- const urlMap = {
172
- locations: API.LOCATION,
173
- userLocales: API.USER_LOCALES,
174
- userProfiles: API.USER_PROFILES
175
- };
176
- class SiteSettingsService {
177
- constructor(apiService) {
178
- this.apiService = apiService;
179
- }
180
- getSelectionOptions(siteId, token) {
181
- if (!siteId) {
182
- return;
183
- }
184
- // @ts-ignore
185
- const URL = urlMap[token];
186
- return this.apiService.fetch(URL.replace(':siteId', String(siteId)), null, true)
187
- // @ts-ignore
188
- .pipe(map((options) => {
189
- // @ts-ignore
190
- this[token] = options ? options.sort() : [];
191
- // @ts-ignore
192
- return this[token];
193
- }));
194
- }
195
- }
196
- SiteSettingsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SiteSettingsService, deps: [{ token: APIService }], target: i0.ɵɵFactoryTarget.Injectable });
197
- SiteSettingsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SiteSettingsService });
198
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SiteSettingsService, decorators: [{
199
- type: Injectable
200
- }], ctorParameters: function () { return [{ type: APIService }]; } });
201
-
202
- const getSavableData = (model, exclude) => {
203
- let result = Object.keys(model);
204
- if (exclude && exclude.length) {
205
- result = result.filter(key => !exclude.some(item => item === key));
206
- }
207
- return result.reduce((result, key) => {
208
- if (model[key] instanceof Array && model[key].length && model[key][0].getSavableData) {
209
- result[key] = model[key].map((item) => item.getSavableData());
210
- }
211
- else if (model[key] instanceof Object && model[key].getSavableData) {
212
- result[key] = model[key].getSavableData();
213
- }
214
- else {
215
- result[key] = model[key];
216
- }
217
- return result;
218
- }, {});
219
- };
220
-
221
- class LineDirectory {
222
- constructor(lineDirectory) {
223
- Object.assign(this, lineDirectory || {});
224
- // @ts-ignore
225
- if (this.directoryNumber && this.routePartitionName) {
226
- this.displayValue = `${this.directoryNumber}/${this.routePartitionName}`;
227
- }
228
- this.initForm();
229
- }
230
- getSavableData() {
231
- return getSavableData(this, ['form', 'displayValue', 'templateDirectoryNumber']);
232
- }
233
- equal(itemToCompare) {
234
- return JSON.stringify(this.getSavableData()) === JSON.stringify(itemToCompare.getSavableData());
235
- }
236
- initForm() {
237
- const formBuilder = new FormBuilder();
238
- const formSettings = {
239
- directoryNumber: [{ value: this.directoryNumber || '', disabled: true }, [Validators.required]],
240
- routePartitionName: [{ value: this.routePartitionName || '', disabled: true }]
241
- };
242
- this.form = formBuilder.group(formSettings);
243
- }
244
- }
245
-
246
- class LineCallInfoDisplay {
247
- constructor(lineCallInfoDisplay) {
248
- Object.assign(this, lineCallInfoDisplay || {});
249
- }
250
- getSavableData() {
251
- return getSavableData(this, ['form']);
252
- }
253
- }
254
-
255
- class TranslationPattern {
256
- constructor(translationPattern) {
257
- Object.assign(this, translationPattern || {});
258
- this.initForm();
259
- }
260
- getSavableData() {
261
- return getSavableData(this, ['form', 'isNewForExistingLine']);
262
- }
263
- initForm() {
264
- const formBuilder = new FormBuilder();
265
- const formSettings = {
266
- pattern: [{ value: this.pattern || '' }],
267
- calledPartyTransformationMask: [{ value: this.calledPartyTransformationMask || '' }]
268
- };
269
- this.form = formBuilder.group(formSettings);
270
- }
271
- getSiteId() {
272
- if (this.site && this.site.id != null) {
273
- return this.site.id;
274
- }
275
- if (this.hasMultipleSiteIds()) {
276
- return this.multipleSitesId.split(',')[0];
277
- }
278
- return null;
279
- }
280
- hasMultipleSiteIds() {
281
- return this.hasMultipleSites && !!this.multipleSitesId && this.multipleSitesId.length > 0;
282
- }
283
- }
284
-
285
- class LineAssociation {
286
- constructor(lineAssociation) {
287
- this.sharedUsers = [];
288
- this.sharedDevices = [];
289
- Object.assign(this, lineAssociation || {});
290
- if (lineAssociation) {
291
- this.index = lineAssociation.index || null;
292
- this.position = lineAssociation.position || null;
293
- this.e164Mask = lineAssociation.e164Mask || '';
294
- this.textLabel = lineAssociation.textLabel || '';
295
- this.displayLabel = lineAssociation.displayLabel || '';
296
- this.displayLabelAscii = lineAssociation.displayLabelAscii || '';
297
- this.linePkid = lineAssociation.linePkid || lineAssociation.pkid || '';
298
- this.maxNumberOfCalls = lineAssociation.maxNumberOfCalls || null;
299
- this.busyTrigger = lineAssociation.busyTrigger || null;
300
- this.directoryNumber = new LineDirectory(lineAssociation.directoryNumber);
301
- this.didPattern = new TranslationPattern(lineAssociation.didPattern);
302
- this.recordingOption = lineAssociation.recordingOption || RecordingOptions.disabled;
303
- this.recordingProfile = lineAssociation.recordingProfile || '';
304
- this.recordingMediaSource = lineAssociation.recordingMediaSource || RECORDING_MEDIA_SOURCE[0];
305
- this.visualMWI = lineAssociation.visualMWI || '';
306
- this.audibleMWI = lineAssociation.audibleMWI || '';
307
- this.ringSetting_idle = lineAssociation.ringSetting_idle || '';
308
- this.ringSetting_active = lineAssociation.ringSetting_active || '';
309
- this.pickupAAS_idle = lineAssociation.pickupAAS_idle || '';
310
- this.pickupAAS_active = lineAssociation.pickupAAS_active || '';
311
- this.monitorCSS = lineAssociation.monitorCSS || '';
312
- this.logMissedCall = lineAssociation.logMissedCall || true;
313
- this.callInfoDisplay = new LineCallInfoDisplay(lineAssociation.callInfoDisplay);
314
- this.lineLocalId = lineAssociation.lineLocalId || lineAssociation.localId || '';
315
- this.callingSearchSpace = lineAssociation.callingSearchSpace || '';
316
- this.ownerUserId = lineAssociation.ownerUserId;
317
- this.associated = lineAssociation.associated;
318
- this.alertingName = lineAssociation.alertingName;
319
- this.description = lineAssociation.description;
320
- this.patternUsage = lineAssociation.patternUsage;
321
- this.plarDestinationNumber = lineAssociation.plarDestinationNumber;
322
- this.prefixDigits = lineAssociation.prefixDigits;
323
- this.plarDescription = lineAssociation.plarDescription;
324
- this.plarEnabled = lineAssociation.plarEnabled;
325
- this.populateWithDid = lineAssociation.populateWithDid;
326
- }
327
- this.initForm();
328
- }
329
- getSavableData() {
330
- const excludedFields = ['viewMode', 'form', 'callingSearchSpace', 'plarDestinationNumber', 'prefixDigits', 'plarDescription', 'plarEnabled'];
331
- return getSavableData(this, excludedFields);
332
- }
333
- getDnSavableData() {
334
- }
335
- initForm() {
336
- // TEMP simplified line form
337
- const formBuilder = new FormBuilder();
338
- const formSettings = {
339
- directoryNumber: [this.directoryNumber.directoryNumber || ''],
340
- };
341
- this.form = formBuilder.group(formSettings);
342
- }
343
- /*initForm(appValidators: ValidationService) {
344
- const formBuilder = new FormBuilder();
345
- const formSettings = {
346
- displayLabel: [this.displayLabel || '', [Validators.maxLength(30), Validators.pattern('[^%&\\[{}|"<>\\]]*')]],
347
- alertingName: [this.alertingName || ''],
348
- description: [this.description || ''],
349
- e164Mask: [this.e164Mask || '', [appValidators.e164MaskLabel]],
350
- displayLabelAscii: [this.displayLabelAscii || '', [appValidators.displayLabelAscii]],
351
- textLabel: [this.textLabel || '', [Validators.maxLength(30), Validators.pattern('[^"]*')]],
352
- maxNumberOfCalls: [this.maxNumberOfCalls || '', [ Validators.min(0)]],
353
- busyTrigger: [this.busyTrigger || '', [Validators.min(0), Validators.max(this.maxNumberOfCalls || 200)]],
354
- recordingOption: [this.recordingOption || ''],
355
- recordingProfile: [this.recordingProfile || '', [appValidators.conditionalRequired('recordingOption',
356
- [RecordingOptions.auto_enabled, RecordingOptions.selective_enabled])]],
357
- recordingMediaSource: [this.recordingMediaSource || ''],
358
- visualMWI: [this.visualMWI || ''],
359
- audibleMWI: [this.audibleMWI || ''],
360
- ringSetting_idle: [this.ringSetting_idle || ''],
361
- ringSetting_active: [this.ringSetting_active || ''],
362
- pickupAAS_idle: [this.pickupAAS_idle || ''],
363
- pickupAAS_active: [this.pickupAAS_active || ''],
364
- monitorCSS: [this.monitorCSS || ''],
365
- logMissedCall: [this.logMissedCall === 'true'],
366
- callerName: [this.callInfoDisplay && this.callInfoDisplay.callerName === 'true'],
367
- callerNumber: [this.callInfoDisplay && this.callInfoDisplay.callerNumber === 'true'],
368
- redirectedNumber: [this.callInfoDisplay && this.callInfoDisplay.redirectedNumber === 'true'],
369
- dialedNumber: [this.callInfoDisplay && this.callInfoDisplay.dialedNumber === 'true' ]
370
- };
371
- this.form = formBuilder.group(formSettings);
372
- if (this.directoryNumber) {
373
- this.form.addControl('directoryNumber', this.directoryNumber.form);
374
- }
375
- if (this.didPattern) {
376
- this.form.addControl('didPattern', this.didPattern.form);
377
- }
378
- }*/
379
- equals(line) {
380
- if (!line) {
381
- return false;
382
- }
383
- return this.directoryNumber.directoryNumber === line.directoryNumber.directoryNumber &&
384
- this.directoryNumber.routePartitionName === line.directoryNumber.routePartitionName;
385
- }
386
- }
387
-
388
- class Device {
389
- constructor(device) {
390
- var _a;
391
- if (device) {
392
- this.name = device.name;
393
- this.deviceType = device.deviceType;
394
- this.pkiid = device.pkiid;
395
- this.lineAssociations = ((_a = device.lineAssociations) === null || _a === void 0 ? void 0 : _a.length) ?
396
- device.lineAssociations.map((line) => new LineAssociation(line)) : [];
397
- }
398
- }
399
- getSavableData() {
400
- const excludedFields = ['form'];
401
- return getSavableData(this, excludedFields);
402
- }
403
- }
404
- var RecordingOptions;
405
- (function (RecordingOptions) {
406
- RecordingOptions["disabled"] = "Call Recording Disabled";
407
- RecordingOptions["auto_enabled"] = "Automatic Call Recording Enabled";
408
- RecordingOptions["selective_enabled"] = "Selective Call Recording Enabled";
409
- })(RecordingOptions || (RecordingOptions = {}));
410
-
411
- class SimplifiedUser {
412
- constructor(user, isLdap) {
413
- // isLdap TEMP because of token response issue
414
- if (user) {
415
- this.userid = user.userid;
416
- this.email = user.email;
417
- this.firstName = user.firstName;
418
- this.lastName = user.lastName;
419
- this.siteId = user.siteId;
420
- this.siteName = user.siteName;
421
- this.token = user.token;
422
- this.department = user.department;
423
- this.manager = user.manager;
424
- this.associatedPc = user.associatedPc;
425
- this.digestCredentials = user.digestCredentials;
426
- this.userProfile = user.userProfile;
427
- this.enableMobileVoiceAccess = user.enableMobileVoiceAccess;
428
- this.ldapIntegrated = user.ldapIntegrated || isLdap || false;
429
- this.userLocale = user.userLocale;
430
- this.confirmDigestCredentials = user.confirmDigestCredentials;
431
- this.middleName = user.middleName;
432
- this.telephoneNumber = user.telephoneNumber;
433
- this.mobileNumber = user.mobileNumber;
434
- this.directoryUri = user.directoryUri;
435
- this.title = user.title;
436
- this.homeNumber = user.homeNumber;
437
- this.pagerNumber = user.pagerNumber;
438
- this.displayName = user.displayName;
439
- if (user.devices && user.devices.length) {
440
- this.devices = user.devices.map((device) => new Device(device));
441
- if (user.lines && user.lines.length) {
442
- this.devices.forEach(device => {
443
- if (device && device.lineAssociations && device.lineAssociations.length) {
444
- device.lineAssociations.forEach(lineAssociation => {
445
- lineAssociation.callingSearchSpace = this.getLineVal(lineAssociation, user.lines, 'callingSearchSpace');
446
- lineAssociation.textLabel = lineAssociation.textLabel || this.getLineVal(lineAssociation, user.lines, 'textLabel') || '';
447
- lineAssociation.alertingName = lineAssociation.alertingName || this.getLineVal(lineAssociation, user.lines, 'alertingName') || '';
448
- });
449
- }
450
- });
451
- }
452
- }
453
- }
454
- this.initForm();
455
- }
456
- getLineVal(lineAssociation, lines, token) {
457
- const lineForVal = lines.find((line) => line.directoryNumber.directoryNumber === lineAssociation.directoryNumber.directoryNumber);
458
- return lineForVal && lineForVal[token] || '';
459
- }
460
- getUserDetailsSavableData() {
461
- const excludedFields = ['devices', 'deviceProfiles', 'lines', 'singleNumberReach', 'vmPassword', 'vmUnifiedMessagingAccount', 'alternateExtensions', 'callerInput', 'lineAppearances', 'meetMes', 'webAppPasswordSettings', 'form'];
462
- return getSavableData(this, excludedFields);
463
- }
464
- initForm() {
465
- const formBuilder = new FormBuilder();
466
- const formSettings = {
467
- userid: [{ value: this.userid || '', disabled: this.ldapIntegrated }, [Validators.required, Validators.maxLength(128)]],
468
- email: [{ value: this.email || '', disabled: this.ldapIntegrated }, [
469
- Validators.pattern(REGEX_PATTERN.EMAIL),
470
- Validators.required
471
- ]],
472
- firstName: [{ value: this.firstName || '', disabled: this.ldapIntegrated }],
473
- lastName: [{ value: this.lastName || '', disabled: this.ldapIntegrated }, Validators.required],
474
- department: [{ value: this.department || '', disabled: false }],
475
- middleName: [{ value: this.middleName || '', disabled: false }],
476
- title: [{ value: this.title || '', disabled: false }],
477
- telephoneNumber: [{ value: this.telephoneNumber || '', disabled: false }],
478
- homeNumber: [{ value: this.homeNumber || '', disabled: false }],
479
- mobileNumber: [{ value: this.mobileNumber || '', disabled: false }],
480
- pagerNumber: [{ value: this.pagerNumber || '', disabled: false }],
481
- displayName: [{ value: this.displayName || '', disabled: false }],
482
- manager: [{ value: this.manager || '', disabled: false }],
483
- associatedPc: [this.associatedPc || ''],
484
- directoryUri: [this.directoryUri || ''],
485
- userProfile: [this.userProfile],
486
- enableMobileVoiceAccess: [this.enableMobileVoiceAccess],
487
- ldapIntegrated: [this.ldapIntegrated],
488
- userLocale: [this.userLocale || ''],
489
- digestCredentials: [''],
490
- confirmDigestCredentials: ['']
491
- };
492
- this.form = formBuilder.group(formSettings);
493
- }
494
- toggleEditMode() {
495
- this.editMode = !this.editMode;
496
- /*['userid', 'email', 'firstName', 'lastName'].forEach(token => {
497
- if (this.editMode) {
498
- this.form.get(token)?.enable();
499
- } else {
500
- this.form.get(token)?.disable();
501
- }
502
- })*/
503
- }
504
- getSavableData() {
505
- const excludedFields = ['form', 'editMode', 'viewMode', 'token', 'hasModifiedCache', 'confirmDigestCredentials'];
506
- return getSavableData(this, excludedFields);
507
- }
508
- equal(userToCompare) {
509
- if (!userToCompare) {
510
- return false;
511
- }
512
- return JSON.stringify(this.getSavableData()) === JSON.stringify(userToCompare.getSavableData());
513
- }
514
- }
515
-
516
- class UtilsService {
517
- static sortSortArrayByProperty(array, sortBy) {
518
- if (!array) {
519
- return null;
520
- }
521
- return array.sort((a, b) => {
522
- if (!a[sortBy] && !b[sortBy]) {
523
- return 0;
524
- }
525
- if (a[sortBy] && !b[sortBy]) {
526
- return 1;
527
- }
528
- if (!a[sortBy] && b[sortBy]) {
529
- return -1;
530
- }
531
- const positionA = a[sortBy];
532
- const positionB = b[sortBy];
533
- return (positionA < positionB) ? -1 : (positionA > positionB) ? 1 : 0;
534
- });
535
- }
536
- static diff(origObject, updatedObj, path, keysToIgnore) {
537
- let result = [];
538
- if (Object.is(origObject, updatedObj)) {
539
- return undefined;
540
- }
541
- if (!updatedObj || typeof updatedObj !== 'object') {
542
- return updatedObj;
543
- }
544
- const concat = Array.from(new Set([...Object.keys(origObject || {}), ...Object.keys(updatedObj || {})]));
545
- const filter = keysToIgnore ? concat.filter(key => !keysToIgnore.includes(key)) : concat;
546
- filter
547
- .forEach(key => {
548
- if (typeof updatedObj[key] === 'object' && typeof origObject[key] === 'object') {
549
- if (UtilsService.differs(updatedObj[key], origObject[key])) {
550
- const newPath = `${path}${path ? '.' : ''}${key}`;
551
- const values = UtilsService.diff(origObject[key], updatedObj[key], newPath, keysToIgnore);
552
- if (values !== undefined) {
553
- result = [...result, ...values];
554
- }
555
- }
556
- }
557
- else if (updatedObj && !origObject || updatedObj[key] !== origObject[key] && !Object.is(origObject[key], updatedObj[key])) {
558
- const value = updatedObj ? UtilsService.formatIfEmpty(updatedObj[key]) : null;
559
- result.push(`${path}${path ? '.' : ''}${key}=${value}`);
560
- }
561
- });
562
- return result;
563
- }
564
- static formatIfEmpty(value) {
565
- if (value) {
566
- return value;
567
- }
568
- switch (typeof value) {
569
- case 'boolean':
570
- return value;
571
- case 'string':
572
- return '';
573
- default:
574
- return null;
575
- }
576
- }
577
- static differs(obj1, obj2) {
578
- return JSON.stringify(obj1) !== JSON.stringify(obj2);
579
- }
580
- }
581
- UtilsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
582
- UtilsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UtilsService });
583
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UtilsService, decorators: [{
584
- type: Injectable
585
- }] });
586
-
587
- const string_array = function (original, updated, fullKey) {
588
- if (!updated || !SortingUtilsService.differs(original, updated)) {
589
- return null;
590
- }
591
- return `${fullKey}=${updated.join(',')}`;
592
- };
593
- const line_reference = function (original, updated, fullKey) {
594
- if (!updated || !SortingUtilsService.differs(original, updated)) {
595
- return null;
596
- }
597
- // @ts-ignore
598
- return Object.keys(updated).map(key => `${fullKey}.${key}=${updated[key]}`);
599
- };
600
- const nullable = function (original, updated, fullKey) {
601
- if (!original && updated) {
602
- // @ts-ignore
603
- return Object.keys(updated).map(key => `${fullKey}.${key}=${updated[key]}`);
604
- }
605
- else if (original && !updated) {
606
- return `${fullKey}=null`;
607
- }
608
- else {
609
- return SortingUtilsService.diff(original, updated, fullKey, []);
610
- }
611
- };
612
- class SortingUtilsService {
613
- static sortDevicesByTypeAndName(array) {
614
- if (!array) {
615
- return null;
616
- }
617
- return array.sort((a, b) => {
618
- if (a.deviceType === b.deviceType) {
619
- return (a.name < b.name) ? -1 : (a.name > b.name) ? 1 : 0;
620
- }
621
- else {
622
- return (a.deviceType < b.deviceType) ? -1 : 1;
623
- }
624
- });
625
- }
626
- static sortLinesByDirectoryName(array) {
627
- if (!array) {
628
- return null;
629
- }
630
- return array.sort((a, b) => {
631
- if (!a.directoryNumber && !b.directoryNumber) {
632
- return 0;
633
- }
634
- if (a.directoryNumber && !b.directoryNumber) {
635
- return 1;
636
- }
637
- if (!a.directoryNumber && b.directoryNumber) {
638
- return -1;
639
- }
640
- const directoryNumberA = a.directoryNumber.directoryNumber;
641
- const directoryNumberB = b.directoryNumber.directoryNumber;
642
- return (directoryNumberA < directoryNumberB) ? -1 : (directoryNumberA > directoryNumberB) ? 1 : 0;
643
- });
644
- }
645
- static sortLineAssociationsByPosition(array) {
646
- if (!array) {
647
- return null;
648
- }
649
- return array.sort((a, b) => {
650
- if (!a.position && !b.position) {
651
- return 0;
652
- }
653
- if (a.position && !b.position) {
654
- return 1;
655
- }
656
- if (!a.position && b.position) {
657
- return -1;
658
- }
659
- const positionA = a.position;
660
- const positionB = b.position;
661
- return (positionA < positionB) ? -1 : (positionA > positionB) ? 1 : 0;
662
- });
663
- }
664
- static sortSortArrayByProperty(array, sortBy) {
665
- if (!array) {
666
- return null;
667
- }
668
- return array.sort((a, b) => {
669
- if (!a[sortBy] && !b[sortBy]) {
670
- return 0;
671
- }
672
- if (a[sortBy] && !b[sortBy]) {
673
- return 1;
674
- }
675
- if (!a[sortBy] && b[sortBy]) {
676
- return -1;
677
- }
678
- const positionA = a[sortBy];
679
- const positionB = b[sortBy];
680
- return (positionA < positionB) ? -1 : (positionA > positionB) ? 1 : 0;
681
- });
682
- }
683
- static diff(origObject, updatedObj, path, keysToIgnore) {
684
- let result = [];
685
- if (Object.is(origObject, updatedObj)) {
686
- return undefined;
687
- }
688
- if (!updatedObj || typeof updatedObj !== 'object') {
689
- return updatedObj;
690
- }
691
- const concat = Array.from(new Set([...Object.keys(origObject || {}), ...Object.keys(updatedObj || {})]));
692
- const filter = keysToIgnore ? concat.filter(key => !keysToIgnore.includes(key)) : concat;
693
- filter
694
- .forEach(key => {
695
- // @ts-ignore
696
- if (this.dictionary[key]) {
697
- // @ts-ignore
698
- const complexResult = this.dictionary[key](origObject[key], updatedObj[key], `${path}${path ? '.' : ''}${key}`);
699
- if (complexResult) {
700
- if (Array.isArray(complexResult)) {
701
- result = [...result, ...complexResult];
702
- }
703
- else {
704
- result.push(complexResult);
705
- }
706
- }
707
- }
708
- else if (typeof updatedObj[key] === 'object' && typeof origObject[key] === 'object') {
709
- if (SortingUtilsService.differs(updatedObj[key], origObject[key])) {
710
- const newPath = `${path}${path ? '.' : ''}${key}`;
711
- const values = SortingUtilsService.diff(origObject[key], updatedObj[key], newPath, keysToIgnore);
712
- if (values !== undefined) {
713
- result = [...result, ...values];
714
- }
715
- }
716
- }
717
- else if (updatedObj && !origObject || updatedObj[key] !== origObject[key] && !Object.is(origObject[key], updatedObj[key])) {
718
- const value = updatedObj ? SortingUtilsService.formatIfEmpty(updatedObj[key]) : null;
719
- result.push(`${path}${path ? '.' : ''}${key}=${value}`);
720
- }
721
- });
722
- return result;
723
- }
724
- static formatIfEmpty(value) {
725
- if (value) {
726
- return value;
727
- }
728
- switch (typeof value) {
729
- case 'boolean':
730
- return value;
731
- case 'string':
732
- return '';
733
- default:
734
- return null;
735
- }
736
- }
737
- static differs(obj1, obj2) {
738
- return JSON.stringify(obj1) !== JSON.stringify(obj2);
739
- }
740
- }
741
- SortingUtilsService.dictionary = {
742
- features: string_array,
743
- services: string_array,
744
- directoryNumber: line_reference,
745
- primaryLineReference: line_reference,
746
- speedDials: function (original, updated, fullKey) {
747
- if (!updated || !SortingUtilsService.differs(original, updated)) {
748
- return null;
749
- }
750
- // todo only changes, identification
751
- let map = [];
752
- updated.map((speedDial) => {
753
- const currentFullKey = `${fullKey}.${speedDial.index}`; // ${speedDial.type} CHECk ?
754
- map = [...map, Object.keys(speedDial).map(key => `${currentFullKey}.${key}=${speedDial[key]}`)];
755
- });
756
- return map;
757
- },
758
- lineAssociations: function (original, updated, fullKey) {
759
- if (!updated || !SortingUtilsService.differs(original, updated)) {
760
- return null;
761
- }
762
- let map = [];
763
- updated.map((lineAssociation) => {
764
- const currentFullKey = `${fullKey}.${lineAssociation.linePkid ? lineAssociation.linePkid : lineAssociation.lineLocalId}`;
765
- const originalLineAssociation = original.find(line => line.index === lineAssociation.index);
766
- if (SortingUtilsService.differs(originalLineAssociation, lineAssociation)) {
767
- const diff = SortingUtilsService.diff(originalLineAssociation, lineAssociation, currentFullKey, []);
768
- map = [...map, ...diff];
769
- }
770
- });
771
- return map;
772
- },
773
- enterpriseAltNum: nullable,
774
- e164AltNum: nullable
775
- };
776
- SortingUtilsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SortingUtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
777
- SortingUtilsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SortingUtilsService });
778
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: SortingUtilsService, decorators: [{
779
- type: Injectable
780
- }] });
781
-
782
- class LineService {
783
- generateLineAssociationFromLine(lineAssociation) {
784
- return {
785
- directoryNumber: lineAssociation ? this.generateLineDirectory(lineAssociation) : null,
786
- didPattern: lineAssociation ? this.generateDidPatternForLineAssociation(lineAssociation) : null,
787
- mappedDids: lineAssociation ? '' : 'null',
788
- index: lineAssociation ? lineAssociation.index : null,
789
- position: lineAssociation ? lineAssociation.position : null,
790
- textLabel: lineAssociation ? lineAssociation.textLabel : null,
791
- // displayLabel: lineAssociation ? lineAssociation.displayLabel : 'null',
792
- alertingName: lineAssociation ? lineAssociation.alertingName : null,
793
- callerNumber: lineAssociation ? '' : 'null'
794
- };
795
- }
796
- generateLineDirectory(lineAssociation) {
797
- return {
798
- directoryNumber: lineAssociation.directoryNumber.directoryNumber,
799
- routePartitionName: lineAssociation.directoryNumber.routePartitionName,
800
- };
801
- }
802
- generateDidPatternForLineAssociation(lineAssociation) {
803
- return {
804
- calledPartyTransformationMask: lineAssociation.directoryNumber && lineAssociation.directoryNumber.directoryNumber
805
- };
806
- }
807
- }
808
- LineService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LineService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
809
- LineService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LineService });
810
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LineService, decorators: [{
811
- type: Injectable
812
- }] });
813
-
814
- class UserService {
815
- get lineAssociation() {
816
- return this.user && this.originUser.devices && this.user.devices[0] && this.user.devices[0].lineAssociations && this.user.devices[0].lineAssociations[0];
817
- }
818
- get originLineAssociation() {
819
- return this.originUser && this.originUser.devices && this.originUser.devices[0] && this.originUser.devices[0].lineAssociations && this.originUser.devices[0].lineAssociations[0];
820
- }
821
- constructor(apiService, lineService) {
822
- this.apiService = apiService;
823
- this.lineService = lineService;
824
- this.siteId = -1;
825
- this.userId = '';
826
- this.dataPending = false;
827
- this.userIdExistPending = false;
828
- this.hasExistedUserId = false;
829
- this.onUserLineSaved$ = new Subject();
830
- }
831
- ngOnInit() {
832
- console.log(this.siteId);
833
- }
834
- fetchUserToken(siteId, userId, isLdap, isSetNewTokenOnly) {
835
- // isLdap TEMP because of token response issue
836
- this.siteId = siteId;
837
- this.userId = userId;
838
- return this.apiService.fetch(API.USER_TOKEN.replace(':siteId', String(this.siteId)).replace(':userId', encodeURIComponent(encodeURIComponent(userId))))
839
- .pipe(map((result) => {
840
- const user = result && Object.values(result)[0];
841
- const token = Object.keys(result)[0];
842
- if (user) {
843
- if (!isSetNewTokenOnly) {
844
- this.setSimplifiedUser(user);
845
- this.user.token = user.token;
846
- }
847
- this.user.token = user.token || token;
848
- this.originUser.token = user.token || token;
849
- }
850
- }));
851
- // .pipe(this.handleError(false, true));
852
- }
853
- updateUserFields(body) {
854
- if (!this.siteId) {
855
- return;
856
- }
857
- return this.apiService.post(API.UPDATE_USER_FIELDS.replace(':siteId', String(this.siteId)).replace(':token', this.user.token), body);
858
- // .pipe(this.handleError(false, true));
859
- }
860
- fetchUserById(id) {
861
- this.userIdExistPending = true;
862
- return this.apiService.fetch(API.USER_BY_ID.replace(':siteId', String(this.siteId)).replace(':userId', encodeURIComponent(encodeURIComponent(id))))
863
- .pipe(map(result => {
864
- this.userIdExistPending = false;
865
- return result;
866
- }));
867
- }
868
- persistCacheChanges() {
869
- /*const params = {
870
- excludeDeviceExtraOptions: true
871
- };*/
872
- return this.processUserChangesToCache()
873
- .pipe(map((result) => {
874
- return this.apiService.post(API.PERSIST_USER_CACHE.replace(':siteId', String(this.siteId)).replace(':token', this.user.token), {})
875
- .subscribe(() => {
876
- });
877
- // .pipe(map((user) => {
878
- // // this.setUser(user, false, this.user.token);
879
- // this.user.hasModifiedCache = false;
880
- // }))
881
- // .pipe(this.handleError(true, true));
882
- }));
883
- }
884
- processUserChangesToCache() {
885
- const calls = [];
886
- const body = UtilsService.diff(this.originUser.getUserDetailsSavableData(), this.user.getUserDetailsSavableData(), 'user');
887
- if (body === null || body === void 0 ? void 0 : body.length) {
888
- calls.push(this.updateUserFields(body));
889
- }
890
- if (!(calls === null || calls === void 0 ? void 0 : calls.length)) {
891
- return of(this.user);
892
- }
893
- return forkJoin(calls)
894
- .pipe(map((responses) => {
895
- // ApiUserResponse
896
- this.handleSaveUserResponse(responses);
897
- }));
898
- // .pipe(this.handleError(false, true));
899
- }
900
- saveNewLine() {
901
- this.dataPending = true;
902
- this.deleteLine(this.user.siteId, this.lineAssociation.linePkid, encodeURIComponent(this.user.token))
903
- .subscribe(() => {
904
- const URL = API.PERSIST_USER_CACHE.replace(':siteId', String(this.siteId)).replace(':token', this.user.token);
905
- this.apiService.post(URL, {})
906
- .subscribe(() => {
907
- this.fetchUserToken(this.siteId, this.user.userid, false, true)
908
- .subscribe(() => {
909
- this.runNewLineCreation();
910
- });
911
- });
912
- });
913
- }
914
- runNewLineCreation() {
915
- // CREATE NEW LINE
916
- const newLineBody = SortingUtilsService.diff(this.lineService.generateLineAssociationFromLine(null), this.lineService.generateLineAssociationFromLine(this.lineAssociation), 'device.lineAssociations', null);
917
- this.associateLineToUserDevice(this.user.siteId, this.user.devices[0].name, newLineBody, null, this.lineAssociation.callingSearchSpace).subscribe((response) => {
918
- var _a;
919
- if (response && response.currentUpdatedUser) {
920
- const linePkId = this.getLinePkIdFromUser(response === null || response === void 0 ? void 0 : response.currentUpdatedUser, 0);
921
- forkJoin([
922
- this.updateLineFields(this.siteId, linePkId, this.user.token, this.lineAssociation.alertingName),
923
- this.updateDeviceFields(this.siteId, (_a = this.user.devices[0]) === null || _a === void 0 ? void 0 : _a.name, this.user.token)
924
- ]).subscribe((response) => {
925
- this.originUser.devices[0].lineAssociations[0].directoryNumber.directoryNumber = this.lineAssociation.directoryNumber.directoryNumber;
926
- this.onUserLineSaved$.next(true);
927
- });
928
- }
929
- });
930
- // -----
931
- }
932
- getLinePkIdFromUser(user, index) {
933
- if (user.devices && user.devices[index] && user.devices[index].lineAssociations && user.devices[index].lineAssociations[index]) {
934
- return user.devices[index].lineAssociations[index].linePkid || user.devices[index].lineAssociations[index].lineLocalId;
935
- }
936
- }
937
- deleteLine(siteId, pkid, token) {
938
- return this.apiService.delete(API.DELETE_LINE.replace(':siteId', String(siteId)).replace(':pkid', pkid).replace(':token', encodeURIComponent(token)), {});
939
- // .pipe(this.handleError(true, false));
940
- }
941
- disassociateLine(siteId, linePkid, token, deviceName) {
942
- return this.apiService.delete(API.DISASSOCIATE_LINE.replace(':siteId', String(siteId))
943
- .replace(':linePkid', linePkid)
944
- .replace(':deviceName', deviceName)
945
- .replace(':token', encodeURIComponent(token)), {});
946
- // .pipe(this.handleError(true, false));
947
- }
948
- updateLineFields(siteId, pkid, token, alertingName) {
949
- const body = ['line.description=', `line.alertingName=${alertingName}`];
950
- return this.apiService.post(API.UPDATE_LINE_FIELDS.replace(':siteId', String(siteId)).replace(':pkid', encodeURIComponent(pkid)).replace(':token', encodeURIComponent(token)), body);
951
- // .pipe(this.handleError(true, false));
952
- }
953
- updateDeviceFields(siteId, deviceName, token) {
954
- const body = ['device.associatedDNs.0=null'];
955
- return this.apiService.post(API.UPDATE_DEVICE_FIELDS.replace(':siteId', String(siteId)).replace(':deviceName', deviceName).replace(':token', encodeURIComponent(token)), body);
956
- // .pipe(this.handleError(true, false));
957
- }
958
- checkDestinationNumber(siteId, directoryNumber, routePartitionName) {
959
- const params = {
960
- dntype: 'EXTENSION'
961
- };
962
- const body = {
963
- directoryNumber: directoryNumber,
964
- routePartitionName: routePartitionName
965
- };
966
- return this.apiService.post(API.CHECK_DESTINATION_NUMBER.replace(':siteId', siteId), body, params);
967
- }
968
- associateLineToUserDevice(siteId, deviceName, body, pkid, css) {
969
- let params = {};
970
- if (pkid) {
971
- params = { linePkid: pkid };
972
- }
973
- if (css) {
974
- // @ts-ignore
975
- params['css'] = css;
976
- }
977
- return this.apiService.post(API.ASSOCIATE_LINE.replace(':siteId', String(siteId)).replace(':deviceName', deviceName)
978
- .replace(':token', encodeURIComponent(this.user.token)), body, params);
979
- // .pipe(this.handleError(true, true));
980
- }
981
- hasUnsavedChanges() {
982
- if (this.user && this.originUser) {
983
- return !this.user.equal(this.originUser);
984
- }
985
- return false;
986
- }
987
- setSimplifiedUser(user, isLdap) {
988
- // isLdap TEMP because of token response issue
989
- this.user = new SimplifiedUser(user, isLdap);
990
- const copiedUser = JSON.parse(JSON.stringify(user));
991
- this.originUser = new SimplifiedUser(copiedUser, isLdap);
992
- }
993
- handleSaveUserResponse(responses) {
994
- if (!(responses === null || responses === void 0 ? void 0 : responses.length)) {
995
- return;
996
- }
997
- for (let len = responses.length, i = len - 1; i >= 0; i--) {
998
- if (responses[i] && responses[i].currentUpdatedUser) {
999
- // this.setUser(responses[i].currentUpdatedUser, false, this.user.token);
1000
- this.user.hasModifiedCache = true;
1001
- return;
1002
- }
1003
- }
1004
- }
1005
- }
1006
- UserService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, deps: [{ token: APIService }, { token: LineService }], target: i0.ɵɵFactoryTarget.Injectable });
1007
- UserService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService });
1008
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserService, decorators: [{
1009
- type: Injectable
1010
- }], ctorParameters: function () { return [{ type: APIService }, { type: LineService }]; } });
1011
-
1012
- class AppLoaderComponent {
1013
- constructor() {
1014
- }
1015
- }
1016
- AppLoaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppLoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1017
- AppLoaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: AppLoaderComponent, selector: "app-loader", ngImport: i0, template: "<div class=\"overlay\">\n <mat-progress-spinner\n class=\"page-spinner\"\n mode=\"indeterminate\"\n [diameter]=\"120\"></mat-progress-spinner>\n</div>\n", styles: [".overlay{position:fixed;width:100%;height:100%;inset:0;background-color:#fff3;z-index:200}\n"], dependencies: [{ kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], encapsulation: i0.ViewEncapsulation.None });
1018
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AppLoaderComponent, decorators: [{
1019
- type: Component,
1020
- args: [{ selector: 'app-loader', encapsulation: ViewEncapsulation.None, template: "<div class=\"overlay\">\n <mat-progress-spinner\n class=\"page-spinner\"\n mode=\"indeterminate\"\n [diameter]=\"120\"></mat-progress-spinner>\n</div>\n", styles: [".overlay{position:fixed;width:100%;height:100%;inset:0;background-color:#fff3;z-index:200}\n"] }]
1021
- }], ctorParameters: function () { return []; } });
1022
-
1023
- class AuthInterceptor {
1024
- constructor() {
1025
- }
1026
- intercept(request, next) {
1027
- request = request.clone({
1028
- setHeaders: {
1029
- // Authorization: basicAuthHeaderString
1030
- },
1031
- withCredentials: true
1032
- });
1033
- return next.handle(request).pipe(catchError(err => {
1034
- if (err instanceof HttpErrorResponse) {
1035
- if (err.status === 401) {
1036
- if (window.history.length < 3) {
1037
- err.error.message = '';
1038
- }
1039
- else {
1040
- err.error.message = 'SESSION_INACTIVE';
1041
- }
1042
- }
1043
- }
1044
- return throwError(err);
1045
- }));
1046
- }
1047
- }
1048
- AuthInterceptor.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1049
- AuthInterceptor.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthInterceptor });
1050
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: AuthInterceptor, decorators: [{
1051
- type: Injectable
1052
- }], ctorParameters: function () { return []; } });
1053
-
1054
- class UserInfoComponent {
1055
- }
1056
- UserInfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1057
- UserInfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserInfoComponent, selector: "app-user-info", inputs: { name: "name", active: "active", email: "email", position: "position" }, ngImport: i0, template: "<div class=\"info-holder\">\n <div class=\"content-box flex-box\">\n <div class=\"info-holder__user-image\">\n <img src=\"../../../assets/a24749b225874bb3e3a4cb5d2f42e82c.png\" alt=\"\" class=\"avatar\">\n </div>\n <div class=\"info-holder__user-information\">\n <div class=\"info-holder__user-name\">{{name}}</div>\n <div class=\"info-holder__user-breadcrumbs\">\n <div class=\"is-active\" *ngIf=\"active; else notActive\">\n <span class=\"icon-user-status icon-user-status-active\"></span>Active\n </div>\n <div class=\"icon-separator\"></div>\n <div class=\"email\">{{email}}</div>\n <div class=\"icon-separator\"></div>\n <div class=\"position\">{{position}}</div>\n </div>\n </div>\n </div>\n\n</div>\n\n<ng-template #notActive>\n <div class=\"is-active\">\n <svg width=\"8\" height=\"9\" viewBox=\"0 0 8 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4 8.5C6.20914 8.5 8 6.70914 8 4.5C8 2.29086 6.20914 0.5 4 0.5C1.79086 0.5 0 2.29086 0 4.5C0 6.70914 1.79086 8.5 4 8.5Z\" fill=\"grey\"/>\n </svg>\n <div>Not active</div>\n </div>\n</ng-template>\n", styles: [".info-holder{display:flex;gap:16px;align-items:center;font-family:Inter,sans-serif;height:102px;width:100%;background:white;margin:0 0 30px}.info-holder__user-image img{width:40px;border-radius:120px;margin:20px 0 0}.info-holder__user-information{padding:10px;margin:10px;gap:10px;display:flex;flex-direction:column}.info-holder__user-name{font-size:20px;font-weight:500}.info-holder__user-breadcrumbs{display:flex;gap:8px;font-weight:400;font-size:14px;color:#000000b3;align-items:center}.info-holder .icon-separator{height:5px;width:5px;background-color:#000000b3;border-radius:50%}.info-holder .is-active{display:flex;gap:8px;align-items:center}.icon-user-status{width:.5rem;height:.5rem;border-radius:50%;background-color:#707070;margin:0 5px 0 0}.icon-user-status.icon-user-status-active{background-color:#1d805f;display:inline-block}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
1058
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserInfoComponent, decorators: [{
1059
- type: Component,
1060
- args: [{ selector: 'app-user-info', template: "<div class=\"info-holder\">\n <div class=\"content-box flex-box\">\n <div class=\"info-holder__user-image\">\n <img src=\"../../../assets/a24749b225874bb3e3a4cb5d2f42e82c.png\" alt=\"\" class=\"avatar\">\n </div>\n <div class=\"info-holder__user-information\">\n <div class=\"info-holder__user-name\">{{name}}</div>\n <div class=\"info-holder__user-breadcrumbs\">\n <div class=\"is-active\" *ngIf=\"active; else notActive\">\n <span class=\"icon-user-status icon-user-status-active\"></span>Active\n </div>\n <div class=\"icon-separator\"></div>\n <div class=\"email\">{{email}}</div>\n <div class=\"icon-separator\"></div>\n <div class=\"position\">{{position}}</div>\n </div>\n </div>\n </div>\n\n</div>\n\n<ng-template #notActive>\n <div class=\"is-active\">\n <svg width=\"8\" height=\"9\" viewBox=\"0 0 8 9\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M4 8.5C6.20914 8.5 8 6.70914 8 4.5C8 2.29086 6.20914 0.5 4 0.5C1.79086 0.5 0 2.29086 0 4.5C0 6.70914 1.79086 8.5 4 8.5Z\" fill=\"grey\"/>\n </svg>\n <div>Not active</div>\n </div>\n</ng-template>\n", styles: [".info-holder{display:flex;gap:16px;align-items:center;font-family:Inter,sans-serif;height:102px;width:100%;background:white;margin:0 0 30px}.info-holder__user-image img{width:40px;border-radius:120px;margin:20px 0 0}.info-holder__user-information{padding:10px;margin:10px;gap:10px;display:flex;flex-direction:column}.info-holder__user-name{font-size:20px;font-weight:500}.info-holder__user-breadcrumbs{display:flex;gap:8px;font-weight:400;font-size:14px;color:#000000b3;align-items:center}.info-holder .icon-separator{height:5px;width:5px;background-color:#000000b3;border-radius:50%}.info-holder .is-active{display:flex;gap:8px;align-items:center}.icon-user-status{width:.5rem;height:.5rem;border-radius:50%;background-color:#707070;margin:0 5px 0 0}.icon-user-status.icon-user-status-active{background-color:#1d805f;display:inline-block}\n"] }]
1061
- }], propDecorators: { name: [{
1062
- type: Input
1063
- }], active: [{
1064
- type: Input
1065
- }], email: [{
1066
- type: Input
1067
- }], position: [{
1068
- type: Input
1069
- }] } });
1070
-
1071
- class MaterialModule {
1072
- }
1073
- MaterialModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1074
- MaterialModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, imports: [DragDropModule,
1075
- MatButtonModule,
1076
- MatListModule,
1077
- MatProgressSpinnerModule,
1078
- MatExpansionModule,
1079
- MatInputModule,
1080
- MatInputModule,
1081
- MatListModule,
1082
- MatTreeModule,
1083
- MatTreeModule,
1084
- MatNativeDateModule,
1085
- MatDatepickerModule,
1086
- MatTooltipModule,
1087
- MatAutocompleteModule,
1088
- MatChipsModule,
1089
- MatSidenavModule,
1090
- MatFormFieldModule,
1091
- MatStepperModule,
1092
- MatTabsModule,
1093
- MatCardModule,
1094
- MatSelectModule,
1095
- MatCheckboxModule,
1096
- MatSlideToggleModule,
1097
- MatTableModule,
1098
- MatPaginatorModule], exports: [DragDropModule,
1099
- MatButtonModule,
1100
- MatListModule,
1101
- MatProgressSpinnerModule,
1102
- MatExpansionModule,
1103
- MatInputModule,
1104
- MatInputModule,
1105
- MatListModule,
1106
- MatTreeModule,
1107
- MatTreeModule,
1108
- MatNativeDateModule,
1109
- MatDatepickerModule,
1110
- MatTooltipModule,
1111
- MatAutocompleteModule,
1112
- MatChipsModule,
1113
- MatSidenavModule,
1114
- MatFormFieldModule,
1115
- MatStepperModule,
1116
- MatTabsModule,
1117
- MatCardModule,
1118
- MatCheckboxModule,
1119
- MatSelectModule,
1120
- MatSlideToggleModule,
1121
- MatProgressSpinnerModule,
1122
- MatTableModule,
1123
- MatPaginatorModule] });
1124
- MaterialModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, imports: [DragDropModule,
1125
- MatButtonModule,
1126
- MatListModule,
1127
- MatProgressSpinnerModule,
1128
- MatExpansionModule,
1129
- MatInputModule,
1130
- MatInputModule,
1131
- MatListModule,
1132
- MatTreeModule,
1133
- MatTreeModule,
1134
- MatNativeDateModule,
1135
- MatDatepickerModule,
1136
- MatTooltipModule,
1137
- MatAutocompleteModule,
1138
- MatChipsModule,
1139
- MatSidenavModule,
1140
- MatFormFieldModule,
1141
- MatStepperModule,
1142
- MatTabsModule,
1143
- MatCardModule,
1144
- MatSelectModule,
1145
- MatCheckboxModule,
1146
- MatSlideToggleModule,
1147
- MatTableModule,
1148
- MatPaginatorModule, DragDropModule,
1149
- MatButtonModule,
1150
- MatListModule,
1151
- MatProgressSpinnerModule,
1152
- MatExpansionModule,
1153
- MatInputModule,
1154
- MatInputModule,
1155
- MatListModule,
1156
- MatTreeModule,
1157
- MatTreeModule,
1158
- MatNativeDateModule,
1159
- MatDatepickerModule,
1160
- MatTooltipModule,
1161
- MatAutocompleteModule,
1162
- MatChipsModule,
1163
- MatSidenavModule,
1164
- MatFormFieldModule,
1165
- MatStepperModule,
1166
- MatTabsModule,
1167
- MatCardModule,
1168
- MatCheckboxModule,
1169
- MatSelectModule,
1170
- MatSlideToggleModule,
1171
- MatProgressSpinnerModule,
1172
- MatTableModule,
1173
- MatPaginatorModule] });
1174
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: MaterialModule, decorators: [{
1175
- type: NgModule,
1176
- args: [{
1177
- imports: [
1178
- DragDropModule,
1179
- MatButtonModule,
1180
- MatListModule,
1181
- MatProgressSpinnerModule,
1182
- MatExpansionModule,
1183
- MatInputModule,
1184
- MatInputModule,
1185
- MatListModule,
1186
- MatTreeModule,
1187
- MatTreeModule,
1188
- MatNativeDateModule,
1189
- MatDatepickerModule,
1190
- MatTooltipModule,
1191
- MatAutocompleteModule,
1192
- MatChipsModule,
1193
- MatSidenavModule,
1194
- MatFormFieldModule,
1195
- MatStepperModule,
1196
- MatTabsModule,
1197
- MatCardModule,
1198
- MatSelectModule,
1199
- MatCheckboxModule,
1200
- MatSlideToggleModule,
1201
- MatTableModule,
1202
- MatPaginatorModule
1203
- ],
1204
- exports: [
1205
- DragDropModule,
1206
- MatButtonModule,
1207
- MatListModule,
1208
- MatProgressSpinnerModule,
1209
- MatExpansionModule,
1210
- MatInputModule,
1211
- MatInputModule,
1212
- MatListModule,
1213
- MatTreeModule,
1214
- MatTreeModule,
1215
- MatNativeDateModule,
1216
- MatDatepickerModule,
1217
- MatTooltipModule,
1218
- MatAutocompleteModule,
1219
- MatChipsModule,
1220
- MatSidenavModule,
1221
- MatFormFieldModule,
1222
- MatStepperModule,
1223
- MatTabsModule,
1224
- MatCardModule,
1225
- MatCheckboxModule,
1226
- MatSelectModule,
1227
- MatSlideToggleModule,
1228
- MatProgressSpinnerModule,
1229
- MatTableModule,
1230
- MatPaginatorModule
1231
- ],
1232
- }]
1233
- }] });
1234
-
1235
- const environment = {
1236
- production: false,
1237
- // apiUrl: 'http://localhost:4200',
1238
- apiUrl: 'http://192.168.0.191:8080',
1239
- notificationsLifetime: 30000,
1240
- longNotificationsLifetime: 45000,
1241
- cashCleanTimer: 900000,
1242
- cashArrayLength: 10000,
1243
- matomoUrl: 'http://192.168.0.136/matomo/',
1244
- };
1245
-
1246
- const TTL_DEFAULT = environment.notificationsLifetime;
1247
- const TTL_LONG_DEFAULT = environment.longNotificationsLifetime;
1248
- var NotificationType;
1249
- (function (NotificationType) {
1250
- NotificationType["info"] = "info";
1251
- NotificationType["error"] = "error";
1252
- NotificationType["success"] = "success";
1253
- NotificationType["warning"] = "warning";
1254
- })(NotificationType || (NotificationType = {}));
1255
- class Notification {
1256
- constructor(data) {
1257
- this.ttl = TTL_DEFAULT;
1258
- Object.assign(this, data || {});
1259
- if (this.ttl === undefined) {
1260
- this.ttl = this.message && this.message.length && this.message.length < 80 ? TTL_DEFAULT : TTL_LONG_DEFAULT;
1261
- }
1262
- }
1263
- isInfo() {
1264
- return this.type === NotificationType.info;
1265
- }
1266
- isError() {
1267
- return this.type === NotificationType.error;
1268
- }
1269
- isSuccess() {
1270
- return this.type === NotificationType.success;
1271
- }
1272
- isWarning() {
1273
- return this.type === NotificationType.warning;
1274
- }
1275
- }
1276
-
1277
- const SUCCESS_TIME = 5000;
1278
- const INACTIVE_SESSION_MESSAGE = 'Your session was lost due to inactivity. Please login again';
1279
- const INACTIVE_SESSION = 'SESSION_INACTIVE';
1280
- class NotificationService {
1281
- constructor() {
1282
- this.listChange = new Subject();
1283
- this.max = 0;
1284
- this.list = [];
1285
- }
1286
- error(message, ttl) {
1287
- this.notify('error', message, ttl);
1288
- }
1289
- success(message, ttl) {
1290
- this.notify('success', message, (!ttl) ? SUCCESS_TIME : ttl);
1291
- }
1292
- warning(message, ttl) {
1293
- this.notify('warning', message, ttl);
1294
- }
1295
- info(message, ttl) {
1296
- this.notify('info', message, ttl);
1297
- }
1298
- notify(type, message, ttl) {
1299
- const found = this.list.find((n) => n.message === message);
1300
- if (found) {
1301
- this.remove(found);
1302
- }
1303
- const notification = new Notification({
1304
- id: ++this.max,
1305
- type, message, ttl
1306
- });
1307
- if (notification.ttl > 0) {
1308
- notification.timerId = setTimeout(() => this.remove(notification, true), notification.ttl);
1309
- }
1310
- this.list.push(notification);
1311
- this.listChange.next(this.list);
1312
- }
1313
- remove(notification, auto) {
1314
- if (!auto && notification.timerId) {
1315
- // clear timeout in case of manual remove
1316
- clearInterval(notification.timerId);
1317
- }
1318
- this.list = this.list.filter(n => n.id !== notification.id);
1319
- this.listChange.next(this.list);
1320
- }
1321
- removeInactiveSessionError() {
1322
- if (!this.list || !this.list.length) {
1323
- return;
1324
- }
1325
- this.list = this.list.filter(n => n.message !== INACTIVE_SESSION_MESSAGE && n.message !== INACTIVE_SESSION);
1326
- this.listChange.next(this.list);
1327
- }
1328
- }
1329
- NotificationService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NotificationService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1330
- NotificationService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NotificationService });
1331
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NotificationService, decorators: [{
1332
- type: Injectable
1333
- }], ctorParameters: function () { return []; } });
1334
-
1335
- class NotificationsComponent {
1336
- constructor(notificationService, ref) {
1337
- this.notificationService = notificationService;
1338
- this.ref = ref;
1339
- }
1340
- ngOnInit() {
1341
- this.listChangeSubscribe();
1342
- }
1343
- ngOnDestroy() {
1344
- this.listSubscription.unsubscribe();
1345
- }
1346
- readMore() {
1347
- this.isReadMore = !this.isReadMore;
1348
- }
1349
- removeNotification(notification) {
1350
- this.notificationService.remove(notification);
1351
- }
1352
- listChangeSubscribe() {
1353
- this.listSubscription = this.notificationService.listChange
1354
- .subscribe((list) => {
1355
- this.list = list;
1356
- this.ref.detectChanges();
1357
- });
1358
- }
1359
- }
1360
- NotificationsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NotificationsComponent, deps: [{ token: NotificationService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1361
- NotificationsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: NotificationsComponent, selector: "app-notification", ngImport: i0, template: "<!--\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 ? 'BUTTON.COLLAPSE' : 'BUTTON.READ_MORE') | translate}}</div>\n <button\n class=\"close\"\n mat-icon-button\n matTooltip=\"{{'BUTTON.CLOSE' | translate}} {{'NOTIFICATION_MSG.' + notification.type | translate}} {{'NOTIFICATION_MSG.NOTI' | translate}}\"\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", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.notification-block{right:0;top:110px;position:absolute;width:20%;z-index:100}.notification-block .read-more-error{margin:10px 13px 3px 0;text-align:right}.notification-block .notification{padding:15px 0 10px;margin-bottom:18px;color:#333;border-radius:3px;border-top:1.5px solid #e5e1cd;background:#fcf8e3;box-shadow:0 8px 12px #091e4226,0 0 1px #091e424f;width:368px;position:relative}.notification-block .notification .notification-icons-block{text-align:center;width:56px}.notification-block .notification .message-block{font-size:14px;font-family:Poppins,Poppins,sans-serif!important;word-break:break-word;width:270px}.notification-block .notification .notification-icon-close{height:24px}.notification-block .notification.error{background:#FFE9E9;border-top:1.5px solid #E16D6D}.notification-block .notification.success{background:#e3f4dc;border-top:1.5px solid #b3d692}.notification-block .notification .fa-exclamation-triangle{color:#e16d6d!important}.notification-block .notification .fa-check{color:#a0c37f!important}.notification-block .notification .fa-info-circle,.notification-block .notification .fa-hand-paper-o{color:#bdb89e!important}.notification-block .notification .fa{font-size:20px}.notification-block .notification .close{position:absolute;top:2px;right:-5px}.notification-block .notification .close .fa{font-size:14px}.notification-block .notification .fa{margin:0;color:inherit}@media screen and (max-width: 600px){.notification-block{width:50%;min-width:150px}}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1362
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: NotificationsComponent, decorators: [{
1363
- type: Component,
1364
- args: [{ selector: 'app-notification', changeDetection: ChangeDetectionStrategy.OnPush, template: "<!--\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 ? 'BUTTON.COLLAPSE' : 'BUTTON.READ_MORE') | translate}}</div>\n <button\n class=\"close\"\n mat-icon-button\n matTooltip=\"{{'BUTTON.CLOSE' | translate}} {{'NOTIFICATION_MSG.' + notification.type | translate}} {{'NOTIFICATION_MSG.NOTI' | translate}}\"\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", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.notification-block{right:0;top:110px;position:absolute;width:20%;z-index:100}.notification-block .read-more-error{margin:10px 13px 3px 0;text-align:right}.notification-block .notification{padding:15px 0 10px;margin-bottom:18px;color:#333;border-radius:3px;border-top:1.5px solid #e5e1cd;background:#fcf8e3;box-shadow:0 8px 12px #091e4226,0 0 1px #091e424f;width:368px;position:relative}.notification-block .notification .notification-icons-block{text-align:center;width:56px}.notification-block .notification .message-block{font-size:14px;font-family:Poppins,Poppins,sans-serif!important;word-break:break-word;width:270px}.notification-block .notification .notification-icon-close{height:24px}.notification-block .notification.error{background:#FFE9E9;border-top:1.5px solid #E16D6D}.notification-block .notification.success{background:#e3f4dc;border-top:1.5px solid #b3d692}.notification-block .notification .fa-exclamation-triangle{color:#e16d6d!important}.notification-block .notification .fa-check{color:#a0c37f!important}.notification-block .notification .fa-info-circle,.notification-block .notification .fa-hand-paper-o{color:#bdb89e!important}.notification-block .notification .fa{font-size:20px}.notification-block .notification .close{position:absolute;top:2px;right:-5px}.notification-block .notification .close .fa{font-size:14px}.notification-block .notification .fa{margin:0;color:inherit}@media screen and (max-width: 600px){.notification-block{width:50%;min-width:150px}}\n"] }]
1365
- }], ctorParameters: function () { return [{ type: NotificationService }, { type: i0.ChangeDetectorRef }]; } });
1366
-
1367
- class ListUser {
1368
- constructor(user) {
1369
- this.devices = [];
1370
- this.deviceProfiles = [];
1371
- if (user) {
1372
- Object.assign(this, user);
1373
- }
1374
- }
1375
- }
1376
-
1377
- let RemoveKynFromIBMService$1 = class RemoveKynFromIBMService {
1378
- constructor() {
1379
- }
1380
- removeCUCMS(date, customerId) {
1381
- if (customerId === 8) {
1382
- return date.filter((val) => !CUCMS_TO_IGNORE.includes(Math.round(val.cucmId)));
1383
- }
1384
- return date;
1385
- }
1386
- removeCUCS(date, customerId) {
1387
- if (customerId === 8) {
1388
- return date.filter((val) => !CUCS_TO_IGNORE.includes(Math.round(val.cucId)));
1389
- }
1390
- return date;
1391
- }
1392
- };
1393
- RemoveKynFromIBMService$1.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RemoveKynFromIBMService$1, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1394
- RemoveKynFromIBMService$1.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RemoveKynFromIBMService$1 });
1395
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RemoveKynFromIBMService$1, decorators: [{
1396
- type: Injectable
1397
- }], ctorParameters: function () { return []; } });
1398
-
1399
- class UsersSearchService {
1400
- constructor(apiService, removeKynFromIBMService) {
1401
- this.apiService = apiService;
1402
- this.removeKynFromIBMService = removeKynFromIBMService;
1403
- this.siteId = -1;
1404
- this.userId = '';
1405
- this.userIdExistPending = false;
1406
- this.hasExistedUserId = false;
1407
- this.pageSize = PAGINATION_DEFAULTS.SIZE;
1408
- this.pageIndex = PAGINATION_DEFAULTS.SIZE;
1409
- this.pageSizeOptions = PAGINATION_SIZE_OPTIONS;
1410
- this.foundUsers$ = new BehaviorSubject(null);
1411
- }
1412
- getPagination() {
1413
- return {
1414
- total: this.total,
1415
- pageSizeOptions: this.pageSizeOptions,
1416
- pageSize: this.pageSize,
1417
- pageIndex: this.pageIndex
1418
- };
1419
- }
1420
- quickRegularUsersSearch() {
1421
- this.searchParams = this.searchParams || { customerid: this.customerId };
1422
- return this.apiService.fetchPagination(API.QUICK_USERS_SEARCH, this.pageSize, this.pageIndex, this.searchParams)
1423
- .pipe(map((res) => {
1424
- this.total = res.total;
1425
- // this.totals = this.totals || {};
1426
- // this.totals['users'] = res.total;
1427
- const users = res.pageData && res.pageData.length ? res.pageData.map(user => new ListUser(user)) : [];
1428
- // this.foundUsers$.next(this.removeKynFromIBMService.removeCUCMS(users, this.customerId));
1429
- this.foundUsers$.next(users);
1430
- }));
1431
- // .pipe(this.handleError(true));
1432
- }
1433
- }
1434
- UsersSearchService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UsersSearchService, deps: [{ token: APIService }, { token: RemoveKynFromIBMService$1 }], target: i0.ɵɵFactoryTarget.Injectable });
1435
- UsersSearchService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UsersSearchService });
1436
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UsersSearchService, decorators: [{
1437
- type: Injectable
1438
- }], ctorParameters: function () { return [{ type: APIService }, { type: RemoveKynFromIBMService$1 }]; } });
1439
-
1440
- class PaginationComponent {
1441
- constructor() {
1442
- this.pageEmitter = new EventEmitter();
1443
- this.pageNumberChangeEmitter = new EventEmitter();
1444
- this.pageSizeOptions = PAGINATION_SIZE_OPTIONS;
1445
- }
1446
- ngOnInit() {
1447
- }
1448
- pageEvent(event) {
1449
- this.pageEmitter.emit(event);
1450
- }
1451
- changePerPageNumber(event) {
1452
- this.pageNumberChangeEmitter.emit(event.value);
1453
- }
1454
- }
1455
- PaginationComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PaginationComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1456
- PaginationComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: PaginationComponent, selector: "app-pagination", inputs: { pagination: "pagination", showPageSizeOptions: "showPageSizeOptions", showRefreshButton: "showRefreshButton", lengthPending: "lengthPending" }, outputs: { pageEmitter: "pageEmitter", pageNumberChangeEmitter: "pageNumberChangeEmitter" }, ngImport: i0, template: "<div class=\"flex-box pagination\">\n <div class=\"page-indexes-box\">\n <mat-paginator\n [id]=\"'commonPagination'\"\n [hidePageSize]=\"true\"\n [length]=\"pagination.total\"\n [pageIndex]=\"pagination.pageIndex\"\n [pageSize]=\"pagination.pageSize\"\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\n (page)=\"pageEvent($event)\">\n </mat-paginator>\n <mat-spinner class=\"length-spinner\" [diameter]=\"20\" mode=\"indeterminate\" *ngIf=\"lengthPending\">\n </mat-spinner>\n </div>\n\n <div class=\"flex-box per-page-block\" *ngIf=\"showPageSizeOptions\">\n <div class=\"item_per_page\">Items per page:</div>\n <div class=\"select-box select-page-size\">\n <mat-select [(ngModel)]=\"pagination.pageSize\" (selectionChange)=\"changePerPageNumber($event)\" #page\n [id]=\"'commonPaginationSelect'\">\n <mat-option *ngFor=\"let option of pageSizeOptions; let i = index;\" [id]=\"'paginationSelectOpt_' + i\" [value]=\"option\">{{option}}</mat-option>\n </mat-select>\n </div>\n\n </div>\n</div>\n", styles: [".search-header-refresh-icon{align-items:center;line-height:54px;margin-left:10px}button[mat-icon-button] i{font-size:18px}mat-spinner.length-spinner{position:absolute;right:120px}h3,.search-header-refresh-icon{float:left}.page-options,.mat-paginator{float:right}.per-page-block mat-form-field{width:70px!important}.per-page-block span{margin-right:20px}.pagination{display:flex;justify-content:flex-end}.select-page-size{width:60px;margin:0 0 0 15px;padding:0 10px}.item_per_page{line-height:35px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { kind: "component", type: i6.MatPaginator, selector: "mat-paginator", inputs: ["disabled"], exportAs: ["matPaginator"] }] });
1457
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: PaginationComponent, decorators: [{
1458
- type: Component,
1459
- args: [{ selector: 'app-pagination', template: "<div class=\"flex-box pagination\">\n <div class=\"page-indexes-box\">\n <mat-paginator\n [id]=\"'commonPagination'\"\n [hidePageSize]=\"true\"\n [length]=\"pagination.total\"\n [pageIndex]=\"pagination.pageIndex\"\n [pageSize]=\"pagination.pageSize\"\n [pageSizeOptions]=\"pagination.pageSizeOptions\"\n (page)=\"pageEvent($event)\">\n </mat-paginator>\n <mat-spinner class=\"length-spinner\" [diameter]=\"20\" mode=\"indeterminate\" *ngIf=\"lengthPending\">\n </mat-spinner>\n </div>\n\n <div class=\"flex-box per-page-block\" *ngIf=\"showPageSizeOptions\">\n <div class=\"item_per_page\">Items per page:</div>\n <div class=\"select-box select-page-size\">\n <mat-select [(ngModel)]=\"pagination.pageSize\" (selectionChange)=\"changePerPageNumber($event)\" #page\n [id]=\"'commonPaginationSelect'\">\n <mat-option *ngFor=\"let option of pageSizeOptions; let i = index;\" [id]=\"'paginationSelectOpt_' + i\" [value]=\"option\">{{option}}</mat-option>\n </mat-select>\n </div>\n\n </div>\n</div>\n", styles: [".search-header-refresh-icon{align-items:center;line-height:54px;margin-left:10px}button[mat-icon-button] i{font-size:18px}mat-spinner.length-spinner{position:absolute;right:120px}h3,.search-header-refresh-icon{float:left}.page-options,.mat-paginator{float:right}.per-page-block mat-form-field{width:70px!important}.per-page-block span{margin-right:20px}.pagination{display:flex;justify-content:flex-end}.select-page-size{width:60px;margin:0 0 0 15px;padding:0 10px}.item_per_page{line-height:35px}\n"] }]
1460
- }], ctorParameters: function () { return []; }, propDecorators: { pagination: [{
1461
- type: Input
1462
- }], showPageSizeOptions: [{
1463
- type: Input
1464
- }], showRefreshButton: [{
1465
- type: Input
1466
- }], lengthPending: [{
1467
- type: Input
1468
- }], pageEmitter: [{
1469
- type: Output
1470
- }], pageNumberChangeEmitter: [{
1471
- type: Output
1472
- }] } });
1473
-
1474
- class RemoveKynFromIBMService {
1475
- constructor() {
1476
- }
1477
- removeCUCMS(date, customerId) {
1478
- if (customerId === 8) {
1479
- return date.filter((val) => !CUCMS_TO_IGNORE.includes(Math.round(val.cucmId)));
1480
- }
1481
- return date;
1482
- }
1483
- removeCUCS(date, customerId) {
1484
- if (customerId === 8) {
1485
- return date.filter((val) => !CUCS_TO_IGNORE.includes(Math.round(val.cucId)));
1486
- }
1487
- return date;
1488
- }
1489
- }
1490
- RemoveKynFromIBMService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RemoveKynFromIBMService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
1491
- RemoveKynFromIBMService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RemoveKynFromIBMService });
1492
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: RemoveKynFromIBMService, decorators: [{
1493
- type: Injectable
1494
- }], ctorParameters: function () { return []; } });
1495
-
1496
- class LazyLoadingSelectComponent {
1497
- get formControl() {
1498
- var _a;
1499
- return (_a = this.form) === null || _a === void 0 ? void 0 : _a.get(this.controlName);
1500
- }
1501
- constructor(notificationService, siteSettingsService) {
1502
- this.notificationService = notificationService;
1503
- this.siteSettingsService = siteSettingsService;
1504
- this.standalone = true;
1505
- this.appearance = 'standard';
1506
- this.changeField = new EventEmitter();
1507
- }
1508
- ngAfterContentInit() {
1509
- var _a, _b;
1510
- this.options = [(_b = (_a = this.form) === null || _a === void 0 ? void 0 : _a.get(this.controlName)) === null || _b === void 0 ? void 0 : _b.value];
1511
- }
1512
- getOptions() {
1513
- if (!this.siteId && this.options.length > 1) {
1514
- return;
1515
- }
1516
- this.optionsPending = true;
1517
- this.siteSettingsService.getSelectionOptions(this.siteId, this.optionsToken)
1518
- .subscribe(() => {
1519
- this.optionsPending = false;
1520
- // @ts-ignore
1521
- this.options = this.siteSettingsService[this.optionsToken];
1522
- }, () => {
1523
- this.optionsPending = false;
1524
- // this.notificationService.error(this.translate.instant('COMMON.LOAD_SELECT_OPTIONS_FAILED'));
1525
- });
1526
- }
1527
- onFieldChange(token) {
1528
- this.changeField.emit(token);
1529
- }
1530
- }
1531
- LazyLoadingSelectComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LazyLoadingSelectComponent, deps: [{ token: NotificationService }, { token: SiteSettingsService }], target: i0.ɵɵFactoryTarget.Component });
1532
- LazyLoadingSelectComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: LazyLoadingSelectComponent, selector: "app-lazy-loading-select", inputs: { siteId: "siteId", form: "form", standalone: "standalone", placeholder: "placeholder", controlName: "controlName", optionsToken: "optionsToken", appearance: "appearance", errorCode: "errorCode", errorText: "errorText", default: "default", id: "id" }, outputs: { changeField: "changeField" }, ngImport: i0, template: "<ng-container *ngIf=\"standalone\">\n <mat-form-field appearance=\"outline\">\n <mat-select [formControl]=\"formControl\"\n (openedChange)=\"getOptions()\"\n [placeholder]=\"placeholder\"\n (selectionChange)=\"onFieldChange(controlName)\"\n [id]=\"id\">\n <mat-option *ngIf=\"default\" [disabled]=\"default.disabled\" [value]=\"default.key\">{{default.value}}</mat-option>\n <mat-option *ngFor=\"let type of options\" [value]=\"type\">\n {{type}}\n </mat-option>\n <mat-progress-spinner class=\"field-spinner\"\n [diameter]=\"20\"\n mode=\"indeterminate\"\n *ngIf=\"optionsPending\"></mat-progress-spinner>\n </mat-select>\n <mat-error *ngIf=\"form.get(controlName)?.hasError(errorCode)\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n {{errorText}}\n </mat-error>\n </mat-form-field>\n</ng-container>\n\n<!--\nThis duplication is caused by the following bug: https://github.com/angular/components/issues/9411\nWhich doesn't allow projection in mat-form-field\n-->\n\n<ng-container *ngIf=\"!standalone\">\n <mat-select *ngIf=\"form.get(controlName)\"\n [formControl]=\"formControl\"\n (openedChange)=\"getOptions()\"\n [placeholder]=\"placeholder\"\n (selectionChange)=\"onFieldChange(controlName)\"\n [id]=\"id\"\n >\n <mat-option *ngIf=\"default\" [disabled]=\"default.disabled\" [value]=\"default.key\">{{default.value}}</mat-option>\n <mat-option *ngFor=\"let type of options\" [value]=\"type\">\n {{type}}\n </mat-option>\n <mat-progress-spinner class=\"field-spinner\"\n [diameter]=\"20\"\n mode=\"indeterminate\"\n *ngIf=\"optionsPending\"></mat-progress-spinner>\n </mat-select>\n <mat-error *ngIf=\"form.get(controlName)?.hasError(errorCode)\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n {{errorText}}\n </mat-error>\n</ng-container>\n", styles: [".field-spinner{margin-top:-30px}mat-form-field{width:300px;max-width:300px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }] });
1533
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LazyLoadingSelectComponent, decorators: [{
1534
- type: Component,
1535
- args: [{ selector: 'app-lazy-loading-select', template: "<ng-container *ngIf=\"standalone\">\n <mat-form-field appearance=\"outline\">\n <mat-select [formControl]=\"formControl\"\n (openedChange)=\"getOptions()\"\n [placeholder]=\"placeholder\"\n (selectionChange)=\"onFieldChange(controlName)\"\n [id]=\"id\">\n <mat-option *ngIf=\"default\" [disabled]=\"default.disabled\" [value]=\"default.key\">{{default.value}}</mat-option>\n <mat-option *ngFor=\"let type of options\" [value]=\"type\">\n {{type}}\n </mat-option>\n <mat-progress-spinner class=\"field-spinner\"\n [diameter]=\"20\"\n mode=\"indeterminate\"\n *ngIf=\"optionsPending\"></mat-progress-spinner>\n </mat-select>\n <mat-error *ngIf=\"form.get(controlName)?.hasError(errorCode)\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n {{errorText}}\n </mat-error>\n </mat-form-field>\n</ng-container>\n\n<!--\nThis duplication is caused by the following bug: https://github.com/angular/components/issues/9411\nWhich doesn't allow projection in mat-form-field\n-->\n\n<ng-container *ngIf=\"!standalone\">\n <mat-select *ngIf=\"form.get(controlName)\"\n [formControl]=\"formControl\"\n (openedChange)=\"getOptions()\"\n [placeholder]=\"placeholder\"\n (selectionChange)=\"onFieldChange(controlName)\"\n [id]=\"id\"\n >\n <mat-option *ngIf=\"default\" [disabled]=\"default.disabled\" [value]=\"default.key\">{{default.value}}</mat-option>\n <mat-option *ngFor=\"let type of options\" [value]=\"type\">\n {{type}}\n </mat-option>\n <mat-progress-spinner class=\"field-spinner\"\n [diameter]=\"20\"\n mode=\"indeterminate\"\n *ngIf=\"optionsPending\"></mat-progress-spinner>\n </mat-select>\n <mat-error *ngIf=\"form.get(controlName)?.hasError(errorCode)\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n {{errorText}}\n </mat-error>\n</ng-container>\n", styles: [".field-spinner{margin-top:-30px}mat-form-field{width:300px;max-width:300px}\n"] }]
1536
- }], ctorParameters: function () { return [{ type: NotificationService }, { type: SiteSettingsService }]; }, propDecorators: { siteId: [{
1537
- type: Input
1538
- }], form: [{
1539
- type: Input
1540
- }], standalone: [{
1541
- type: Input
1542
- }], placeholder: [{
1543
- type: Input
1544
- }], controlName: [{
1545
- type: Input
1546
- }], optionsToken: [{
1547
- type: Input
1548
- }], appearance: [{
1549
- type: Input
1550
- }], errorCode: [{
1551
- type: Input
1552
- }], errorText: [{
1553
- type: Input
1554
- }], default: [{
1555
- type: Input
1556
- }], id: [{
1557
- type: Input
1558
- }], changeField: [{
1559
- type: Output
1560
- }] } });
1561
-
1562
- var EntityChangeType;
1563
- (function (EntityChangeType) {
1564
- EntityChangeType["added"] = "added";
1565
- EntityChangeType["updated"] = "updated";
1566
- EntityChangeType["existing"] = "existing";
1567
- EntityChangeType["removed"] = "removed";
1568
- EntityChangeType["unassociated"] = "unassociated";
1569
- })(EntityChangeType || (EntityChangeType = {}));
1570
- var DnRangeType;
1571
- (function (DnRangeType) {
1572
- DnRangeType["extension"] = "EXTENSION";
1573
- DnRangeType["cpg"] = "CPG";
1574
- DnRangeType["callpark"] = "CALLPARK";
1575
- DnRangeType["huntgroup"] = "HUNTGROUP";
1576
- DnRangeType["meetme"] = "MEETME";
1577
- DnRangeType["did"] = "DID";
1578
- })(DnRangeType || (DnRangeType = {}));
1579
-
1580
- // import * as Big from 'big.js';
1581
- class DnsService {
1582
- constructor(apiService) {
1583
- this.apiService = apiService;
1584
- this.availableNumbers = {};
1585
- }
1586
- getNumberRange(siteId, routePartition, withdids, from, pageSize) {
1587
- // @ts-ignore
1588
- if (this.availableNumbers[routePartition] && this.availableNumbers[routePartition].length) {
1589
- return new Observable(observer => {
1590
- // @ts-ignore
1591
- observer.next(this.availableNumbers[routePartition]);
1592
- });
1593
- }
1594
- this.availableDidPatternsMappedToDn = {};
1595
- pageSize = pageSize ? pageSize : 20;
1596
- const params = { dntype: DnRangeType.extension, routepartition: routePartition, size: pageSize, page: 0 };
1597
- if (withdids) {
1598
- // @ts-ignore
1599
- params['withdids'] = 'true';
1600
- }
1601
- if (from) {
1602
- // @ts-ignore
1603
- params['from'] = from;
1604
- }
1605
- // @ts-ignore
1606
- this.availableNumbers[routePartition] = this.availableNumbers[routePartition] || [];
1607
- return this.apiService.fetch(API.AVAILABLE_DN_IN_RANGES.replace(':siteId', siteId), params)
1608
- .pipe(map((res) => {
1609
- res.availableNumberList.forEach((availableNumber) => {
1610
- this.setAvailableDidMappedToDn(availableNumber);
1611
- // @ts-ignore
1612
- this.availableNumbers[routePartition] = [...this.availableNumbers[routePartition], ...this.getUnwrapNumberRange(availableNumber)];
1613
- });
1614
- }));
1615
- // .pipe(this.handleError(true, false));
1616
- }
1617
- setAvailableDidMappedToDn(availableNumber) {
1618
- if (availableNumber.unUsedNumbersWithDids && availableNumber.unUsedNumbersWithDids.length) {
1619
- availableNumber.unUsedNumbersWithDids.forEach((numberWithDids) => {
1620
- const dn = numberWithDids['unUsedNumber'];
1621
- this.availableDidPatternsMappedToDn[dn] = [{}];
1622
- if (numberWithDids['translationPatternList'] && numberWithDids['translationPatternList'].length > 0) {
1623
- this.availableDidPatternsMappedToDn[dn] = numberWithDids['translationPatternList'];
1624
- this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] = [{}];
1625
- if (numberWithDids['mappedDids'] && numberWithDids['mappedDids'].length > 0) {
1626
- this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] = numberWithDids['mappedDids'];
1627
- }
1628
- }
1629
- this.availableDidPatternsMappedToDn[dn][0]['vm'] = numberWithDids['vm'];
1630
- });
1631
- }
1632
- }
1633
- getUnwrapNumberRange(availableNumber) {
1634
- const unwrapNumberRangeArray = this.unwrapNumberRange(availableNumber.phoneNumberRange.from, availableNumber.phoneNumberRange.to);
1635
- if (unwrapNumberRangeArray === null || unwrapNumberRangeArray === void 0 ? void 0 : unwrapNumberRangeArray.length) {
1636
- let unwrapNumberRange = unwrapNumberRangeArray.map((unwrappedNumber) => {
1637
- const dn = availableNumber.phoneNumberRange.prefix + unwrappedNumber;
1638
- let str = dn;
1639
- if (this.availableDidPatternsMappedToDn[dn] && this.availableDidPatternsMappedToDn[dn].length > 0) {
1640
- if (this.availableDidPatternsMappedToDn[dn][0]['mappedDids'] && this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].length > 0) {
1641
- str += ' DID: ' + (this.availableDidPatternsMappedToDn[dn][0]['mappedDids'].length > 1 ? 'multiple' :
1642
- this.availableDidPatternsMappedToDn[dn][0]['mappedDids'][0]);
1643
- }
1644
- if (this.availableDidPatternsMappedToDn[dn][0]['vm']) {
1645
- str += ' In Use - VM';
1646
- }
1647
- }
1648
- return str;
1649
- });
1650
- unwrapNumberRange = unwrapNumberRange.filter((unwrappedNumber) => !availableNumber.usedNumbers.includes(unwrappedNumber));
1651
- return unwrapNumberRange;
1652
- }
1653
- else {
1654
- return [];
1655
- }
1656
- }
1657
- unwrapNumberRange(start, end) {
1658
- const regExp = /(^0+)/;
1659
- let leadingZeros = '';
1660
- const matches = start.match(regExp);
1661
- if (matches) {
1662
- leadingZeros = matches[1];
1663
- }
1664
- const startNumeric = new Big(start);
1665
- const endNumeric = new Big(end);
1666
- // @ts-ignore
1667
- return Array.from({ length: (endNumeric.minus(startNumeric).plus(new Big(1)).toFixed(0)) }, (v, k) => {
1668
- const number = String(startNumeric.plus(new Big(k)).toFixed(0));
1669
- if ((leadingZeros + number).length > start.length) {
1670
- leadingZeros = leadingZeros.substr(1);
1671
- }
1672
- return leadingZeros + number;
1673
- });
1674
- }
1675
- }
1676
- DnsService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DnsService, deps: [{ token: APIService }], target: i0.ɵɵFactoryTarget.Injectable });
1677
- DnsService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DnsService });
1678
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: DnsService, decorators: [{
1679
- type: Injectable
1680
- }], ctorParameters: function () { return [{ type: APIService }]; } });
1681
-
1682
- class UserCallingExtensionComponent {
1683
- get user() {
1684
- return this.userService.user;
1685
- }
1686
- get availableNumbers() {
1687
- // @ts-ignore
1688
- return this.routePartition && this.dnsService.availableNumbers ? this.dnsService.availableNumbers[this.routePartition] : null;
1689
- }
1690
- constructor(userService, dnsService) {
1691
- this.userService = userService;
1692
- this.dnsService = dnsService;
1693
- this.onChange = new EventEmitter();
1694
- }
1695
- ngOnInit() {
1696
- this.getData();
1697
- }
1698
- onChangeField(event) {
1699
- // if (!token) {
1700
- // return;
1701
- // }
1702
- // (this.userService.user as any)[token] = this.form?.get(token)?.value;
1703
- this.onChange.emit(event === null || event === void 0 ? void 0 : event.value);
1704
- }
1705
- getData() {
1706
- if (!this.siteId || !this.routePartition) {
1707
- return;
1708
- }
1709
- this.dataPending = true;
1710
- this.dnsService.getNumberRange(String(this.siteId), this.routePartition)
1711
- .subscribe(() => {
1712
- if (this.availableNumbers) {
1713
- // @ts-ignore
1714
- this.dnsService.availableNumbers[this.routePartition].push(this.directoryNumber);
1715
- }
1716
- this.dataPending = false;
1717
- });
1718
- }
1719
- }
1720
- UserCallingExtensionComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserCallingExtensionComponent, deps: [{ token: UserService }, { token: DnsService }], target: i0.ɵɵFactoryTarget.Component });
1721
- UserCallingExtensionComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserCallingExtensionComponent, selector: "app-user-calling-extension", inputs: { control: "control", routePartition: "routePartition", directoryNumber: "directoryNumber", siteId: "siteId" }, outputs: { onChange: "onChange" }, ngImport: i0, template: "<div *ngIf=\"this.availableNumbers?.length\" class=\"user-calling-extension\">\n <mat-form-field appearance=\"outline\">\n <mat-select [formControl]=\"control\" name=\"extension\"\n (selectionChange)=\"this.onChangeField($event)\">\n <mat-option *ngFor=\"let option of this.availableNumbers; let i = index;\"[value]=\"option\">{{option}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-spinner *ngIf=\"this.dataPending\" [diameter]=\"50\"></mat-spinner>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.user-calling-extension{max-width:200px;margin:0 0 0 6px}.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(../assets/icons/icon_user.svg)}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "component", type: i5.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "component", type: i7.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }] });
1722
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserCallingExtensionComponent, decorators: [{
1723
- type: Component,
1724
- args: [{ selector: 'app-user-calling-extension', template: "<div *ngIf=\"this.availableNumbers?.length\" class=\"user-calling-extension\">\n <mat-form-field appearance=\"outline\">\n <mat-select [formControl]=\"control\" name=\"extension\"\n (selectionChange)=\"this.onChangeField($event)\">\n <mat-option *ngFor=\"let option of this.availableNumbers; let i = index;\"[value]=\"option\">{{option}}</mat-option>\n </mat-select>\n </mat-form-field>\n\n <mat-spinner *ngIf=\"this.dataPending\" [diameter]=\"50\"></mat-spinner>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.user-calling-extension{max-width:200px;margin:0 0 0 6px}.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(../assets/icons/icon_user.svg)}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}\n"] }]
1725
- }], ctorParameters: function () { return [{ type: UserService }, { type: DnsService }]; }, propDecorators: { control: [{
1726
- type: Input
1727
- }], routePartition: [{
1728
- type: Input
1729
- }], directoryNumber: [{
1730
- type: Input
1731
- }], siteId: [{
1732
- type: Input
1733
- }], onChange: [{
1734
- type: Output
1735
- }] } });
1736
-
1737
- class UserCallingComponent {
1738
- get form() {
1739
- var _a, _b, _c, _d;
1740
- return ((_b = (_a = this.userService) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.devices[0]) && ((_d = (_c = this.userService) === null || _c === void 0 ? void 0 : _c.user) === null || _d === void 0 ? void 0 : _d.devices[0].lineAssociations[0].form);
1741
- }
1742
- get formControl() {
1743
- var _a;
1744
- const control = (_a = this.form) === null || _a === void 0 ? void 0 : _a.get('directoryNumber');
1745
- return control;
1746
- }
1747
- get lineAssociation() {
1748
- var _a, _b;
1749
- return (_b = (_a = this.userService) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.devices[0].lineAssociations[0];
1750
- }
1751
- get user() {
1752
- return this.userService.user;
1753
- }
1754
- constructor(userService, dnsService) {
1755
- this.userService = userService;
1756
- this.dnsService = dnsService;
1757
- this.onExtensionChange = new EventEmitter();
1758
- }
1759
- ngOnInit() {
1760
- // this.getData();
1761
- }
1762
- onDirectoryNumberChange(value) {
1763
- if (this.lineAssociation && this.lineAssociation.directoryNumber) {
1764
- // @ts-ignore
1765
- this.userService.user.devices[0].lineAssociations[0].directoryNumber.directoryNumber = value;
1766
- this.onExtensionChange.next(true);
1767
- }
1768
- }
1769
- onChangeField(token) {
1770
- var _a, _b;
1771
- if (!token) {
1772
- return;
1773
- }
1774
- this.userService.user[token] = (_b = (_a = this.form) === null || _a === void 0 ? void 0 : _a.get(token)) === null || _b === void 0 ? void 0 : _b.value;
1775
- }
1776
- toggleEditMode() {
1777
- this.userService.user.toggleEditMode();
1778
- }
1779
- isSavingDisabled() {
1780
- return !this.userService.hasUnsavedChanges() || this.userService.hasExistedUserId;
1781
- }
1782
- onChangeExtension(value) {
1783
- if (this.lineAssociation && this.lineAssociation.directoryNumber) {
1784
- // @ts-ignore
1785
- this.userService.user.devices[0].lineAssociations[0].directoryNumber.directoryNumber = value;
1786
- }
1787
- }
1788
- getData() {
1789
- this.dataPending = true;
1790
- this.dnsService.getNumberRange(String(this.siteId), this.userId)
1791
- .subscribe({
1792
- complete: (v) => {
1793
- this.dataPending = false;
1794
- },
1795
- error: (e) => this.dataPending = false,
1796
- });
1797
- }
1798
- }
1799
- UserCallingComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserCallingComponent, deps: [{ token: UserService }, { token: DnsService }], target: i0.ɵɵFactoryTarget.Component });
1800
- UserCallingComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserCallingComponent, selector: "app-user-calling", inputs: { siteId: "siteId", userId: "userId" }, outputs: { onExtensionChange: "onExtensionChange" }, ngImport: i0, template: "<div id=\"user-calling\" class=\"info-boxes-container\" *ngIf=\"siteId && lineAssociation && form\" [formGroup]=\"form\">\n <!-- USER INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">Numbers</h3>\n <div class=\"form-holder__inputs\">\n <h4>Directory Number</h4>\n <table>\n <tr>\n <th>Type</th>\n <th>Number</th>\n <th>Extension</th>\n </tr>\n <tr >\n <td></td>\n <td></td>\n <td>\n <app-user-calling-extension\n *ngIf=\"formControl\"\n [siteId]=\"this.siteId\"\n [control]=\"formControl\"\n [routePartition]=\"this.lineAssociation?.directoryNumber?.routePartitionName\"\n [directoryNumber]=\"this.lineAssociation?.directoryNumber?.directoryNumber\"\n (onChange)=\"onDirectoryNumberChange($event)\">\n </app-user-calling-extension>\n\n </td>\n </tr>\n </table>\n </div>\n\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";#user-calling table{margin:10px 0;width:100%}#user-calling th{color:#000;text-align:left;background:#efefef;font-size:14px;font-weight:500;padding:2px 5px}.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(../assets/icons/icon_user.svg)}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important;line-height:35px!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: UserCallingExtensionComponent, selector: "app-user-calling-extension", inputs: ["control", "routePartition", "directoryNumber", "siteId"], outputs: ["onChange"] }] });
1801
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserCallingComponent, decorators: [{
1802
- type: Component,
1803
- args: [{ selector: 'app-user-calling', template: "<div id=\"user-calling\" class=\"info-boxes-container\" *ngIf=\"siteId && lineAssociation && form\" [formGroup]=\"form\">\n <!-- USER INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">Numbers</h3>\n <div class=\"form-holder__inputs\">\n <h4>Directory Number</h4>\n <table>\n <tr>\n <th>Type</th>\n <th>Number</th>\n <th>Extension</th>\n </tr>\n <tr >\n <td></td>\n <td></td>\n <td>\n <app-user-calling-extension\n *ngIf=\"formControl\"\n [siteId]=\"this.siteId\"\n [control]=\"formControl\"\n [routePartition]=\"this.lineAssociation?.directoryNumber?.routePartitionName\"\n [directoryNumber]=\"this.lineAssociation?.directoryNumber?.directoryNumber\"\n (onChange)=\"onDirectoryNumberChange($event)\">\n </app-user-calling-extension>\n\n </td>\n </tr>\n </table>\n </div>\n\n </div>\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";#user-calling table{margin:10px 0;width:100%}#user-calling th{color:#000;text-align:left;background:#efefef;font-size:14px;font-weight:500;padding:2px 5px}.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(../assets/icons/icon_user.svg)}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important;line-height:35px!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}\n"] }]
1804
- }], ctorParameters: function () { return [{ type: UserService }, { type: DnsService }]; }, propDecorators: { siteId: [{
1805
- type: Input
1806
- }], userId: [{
1807
- type: Input
1808
- }], onExtensionChange: [{
1809
- type: Output
1810
- }] } });
1811
-
1812
- class UserManageWidgetComponent {
1813
- get form() {
1814
- var _a, _b;
1815
- return (_b = (_a = this.userService) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.form;
1816
- }
1817
- get user() {
1818
- return this.userService.user;
1819
- }
1820
- get userName() {
1821
- var _a, _b;
1822
- return `${((_a = this.user) === null || _a === void 0 ? void 0 : _a.firstName) || ''} ${((_b = this.user) === null || _b === void 0 ? void 0 : _b.lastName) || ''}`;
1823
- }
1824
- get lineAssociation() {
1825
- var _a, _b;
1826
- return (_b = (_a = this.userService) === null || _a === void 0 ? void 0 : _a.user) === null || _b === void 0 ? void 0 : _b.devices[0].lineAssociations[0];
1827
- }
1828
- constructor(userService, apiService) {
1829
- this.userService = userService;
1830
- this.apiService = apiService;
1831
- this.onSave = new EventEmitter();
1832
- this.onChange = new EventEmitter();
1833
- this.userService.onUserLineSaved$
1834
- .subscribe(() => {
1835
- this.userService.persistCacheChanges()
1836
- .subscribe(() => {
1837
- this.userService.dataPending = false;
1838
- this.onSave.next("saved");
1839
- });
1840
- }, () => this.userService.dataPending = false);
1841
- }
1842
- ngOnInit() {
1843
- this.apiService.token = this.token;
1844
- this.apiService.apiUrl = this.host;
1845
- this.getData();
1846
- }
1847
- onExtensionChange() {
1848
- this.onChange.next("start extension change..");
1849
- }
1850
- onChangeField(token) {
1851
- var _a, _b, _c, _d, _e, _f, _g, _h;
1852
- this.onChange.next("start change..");
1853
- if (!token) {
1854
- return;
1855
- }
1856
- this.userService.user[token] = (_b = (_a = this.form) === null || _a === void 0 ? void 0 : _a.get(token)) === null || _b === void 0 ? void 0 : _b.value;
1857
- if (token === 'middleName') {
1858
- (_d = (_c = this.form) === null || _c === void 0 ? void 0 : _c.get(token)) === null || _d === void 0 ? void 0 : _d.setValidators([Validators.pattern('[ a-zA-Z-]+')]);
1859
- }
1860
- if (token === 'telephoneNumber' || token === 'mobileNumber' || token === 'pagerNumber' || token === 'homeNumber') {
1861
- (_f = (_e = this.form) === null || _e === void 0 ? void 0 : _e.get(token)) === null || _f === void 0 ? void 0 : _f.setValidators([Validators.pattern('[ 0-9-+]+')]);
1862
- }
1863
- (_h = (_g = this.form) === null || _g === void 0 ? void 0 : _g.get(token)) === null || _h === void 0 ? void 0 : _h.updateValueAndValidity();
1864
- this.validateUserId();
1865
- }
1866
- saveChanges() {
1867
- var _a;
1868
- if (!this.userService.hasUnsavedChanges() || ((_a = this.form) === null || _a === void 0 ? void 0 : _a.invalid)) {
1869
- return;
1870
- }
1871
- if (this.user.devices[0].lineAssociations[0] && !this.user.devices[0].lineAssociations[0].equals(this.userService.originUser.devices[0].lineAssociations[0])) {
1872
- return this.userService.saveNewLine();
1873
- }
1874
- else {
1875
- this.dataPending = true;
1876
- const subscription = this.userService.persistCacheChanges()
1877
- .subscribe(() => {
1878
- this.dataPending = false;
1879
- this.onSave.next("user has been saved successfully..");
1880
- subscription.unsubscribe();
1881
- }, () => this.dataPending = false);
1882
- }
1883
- }
1884
- toggleEditMode() {
1885
- this.userService.user.toggleEditMode();
1886
- }
1887
- isSavingDisabled() {
1888
- return !this.userService.hasUnsavedChanges() || this.userService.hasExistedUserId;
1889
- }
1890
- changeField(token) {
1891
- var _a, _b;
1892
- this.onChange.next("start change..");
1893
- const formField = (_b = (_a = this.user) === null || _a === void 0 ? void 0 : _a.form) === null || _b === void 0 ? void 0 : _b.get(token);
1894
- if (token !== 'confirmDigestCredentials') {
1895
- // @ts-ignore
1896
- this.user[token] = formField === null || formField === void 0 ? void 0 : formField.value;
1897
- }
1898
- if (token === 'digestCredentials' || token === 'confirmDigestCredentials') {
1899
- this.digestCredentialsHandler(token, formField);
1900
- }
1901
- }
1902
- digestCredentialsHandler(token, field) {
1903
- var _a, _b, _c, _d, _e, _f, _g, _h;
1904
- const fieldNameToCompare = token === 'digestCredentials' ? 'confirmDigestCredentials' : 'digestCredentials';
1905
- const fieldToCompare = this.userService.user.form.get(fieldNameToCompare);
1906
- if ((_b = (_a = this.userService.user) === null || _a === void 0 ? void 0 : _a.form) === null || _b === void 0 ? void 0 : _b.get(token)) {
1907
- (_e = (_d = (_c = this.userService.user) === null || _c === void 0 ? void 0 : _c.form) === null || _d === void 0 ? void 0 : _d.get(token)) === null || _e === void 0 ? void 0 : _e.setErrors(null);
1908
- (_h = (_g = (_f = this.userService.user) === null || _f === void 0 ? void 0 : _f.form) === null || _g === void 0 ? void 0 : _g.get(fieldNameToCompare)) === null || _h === void 0 ? void 0 : _h.setErrors(null);
1909
- /* if (!field.value && !fieldToCompare.value) {
1910
- this.userService.user?.digestCredentials = null;
1911
- return;
1912
- }
1913
-
1914
- if (!field.value && fieldToCompare.value || !fieldToCompare.value && field.value) {
1915
- const requiredFieldName = field.value ? fieldNameToCompare : token;
1916
- this.userService.user.form.get(requiredFieldName).setErrors({required: true});
1917
- return;
1918
- }
1919
- if (field.value && fieldToCompare.value && field.value !== fieldToCompare.value) {
1920
- this.userService.user.form.get(token).setErrors({mismatch: true});
1921
- this.userService.user.form.get(fieldNameToCompare).setErrors({mismatch: true});
1922
- }*/
1923
- }
1924
- }
1925
- getData() {
1926
- this.dataPending = true;
1927
- this.userService.fetchUserToken(this.siteId, this.userId, this.isLdap)
1928
- .subscribe({
1929
- complete: (v) => {
1930
- this.dataPending = false;
1931
- },
1932
- error: (e) => this.dataPending = false,
1933
- });
1934
- }
1935
- setCookie(name, value, days) {
1936
- var expires = "";
1937
- if (days) {
1938
- var date = new Date();
1939
- date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
1940
- expires = "; expires=" + date.toUTCString();
1941
- }
1942
- document.cookie = name + "=" + (value || "") + expires + "; path=/";
1943
- }
1944
- validateUserId() {
1945
- const idControl = this.form.get('userid');
1946
- if ((idControl === null || idControl === void 0 ? void 0 : idControl.value) !== '' && (idControl === null || idControl === void 0 ? void 0 : idControl.value) !== this.userService.originUser.userid) {
1947
- this.userService.fetchUserById(idControl === null || idControl === void 0 ? void 0 : idControl.value)
1948
- .subscribe((res) => {
1949
- var _a, _b;
1950
- this.userService.userIdExistPending = false;
1951
- idControl === null || idControl === void 0 ? void 0 : idControl.setErrors({ exist: true });
1952
- if ((_b = (_a = this.form) === null || _a === void 0 ? void 0 : _a.get('userid')) === null || _b === void 0 ? void 0 : _b.hasError('exist')) {
1953
- this.userService.hasExistedUserId = true;
1954
- }
1955
- else {
1956
- this.userService.hasExistedUserId = false;
1957
- }
1958
- }, ((error) => {
1959
- var _a, _b;
1960
- this.userService.userIdExistPending = false;
1961
- if (error.status !== 404) {
1962
- // this.notificationService.warning(this.translate.instant('APP_USER_MSG.CHECK_USER_ID_FAILED'));
1963
- }
1964
- else {
1965
- this.userService.user.newUserId = (_b = (_a = this.form) === null || _a === void 0 ? void 0 : _a.get('userid')) === null || _b === void 0 ? void 0 : _b.value;
1966
- }
1967
- }));
1968
- }
1969
- else {
1970
- // delete this.userService?.user?.newUserId;
1971
- }
1972
- }
1973
- save() {
1974
- this.saveChanges();
1975
- }
1976
- }
1977
- UserManageWidgetComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageWidgetComponent, deps: [{ token: UserService }, { token: APIService }], target: i0.ɵɵFactoryTarget.Component });
1978
- UserManageWidgetComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.10", type: UserManageWidgetComponent, selector: "app-user-manage-widget", inputs: { token: "token", host: "host", siteId: "siteId", userId: "userId", isLdap: "isLdap" }, outputs: { onSave: "onSave", onChange: "onChange" }, ngImport: i0, template: "<app-loader *ngIf=\"dataPending || userService.dataPending\"></app-loader>\n\n<div *ngIf=\"!dataPending\">\n <div class=\"header-box\">\n <div class=\"content-box\">\n <div class=\"header-back-block\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z\"\n fill=\"black\" fill-opacity=\"0.95\"/>\n </svg>\n Users\n </div>\n </div>\n </div>\n <app-user-info *ngIf=\"user\" [name]=\"userName\" [email]=\"user.email\" [active]=\"true\"\n [position]=\"'Member of ' + user.siteName\"></app-user-info>\n\n <mat-tab-group disableRipple class=\"content-box\">\n <mat-tab label=\"Profile\">\n <ng-container *ngTemplateOutlet=\"userProfile\">\n </ng-container>\n </mat-tab>\n <mat-tab label=\"Calling\" [disabled]=\"!lineAssociation\">\n <app-user-calling *ngIf=\"lineAssociation\" [siteId]=\"siteId\"\n (onExtensionChange)=\"onExtensionChange()\"></app-user-calling>\n </mat-tab>\n <mat-tab label=\"Devices\" [disabled]=\"true\"></mat-tab>\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\n </mat-tab-group>\n\n <ng-template #userProfile>\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n <!-- USER INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">User Details</h3>\n <div class=\"form-holder__inputs\">\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">User Id</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"userid\" matInput (input)=\"onChangeField('userid')\">\n <mat-error\n *ngIf=\"form.get('userid').hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n <mat-error *ngIf=\"form.get('userid').hasError('exist')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n User ID already exists\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Email</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"email\" matInput (input)=\"onChangeField('email')\">\n <mat-error\n *ngIf=\"form.get('email').touched && form.get('email').hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n <mat-error *ngIf=\"form.get('email').touched && form.get('email').hasError('pattern')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n Please enter valid email\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Fisrt Name</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"firstName\" matInput (input)=\"onChangeField('firstName')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Last Name</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"lastName\" matInput (input)=\"onChangeField('lastName')\">\n <mat-error\n *ngIf=\"form.get('lastName').touched && form.get('lastName').hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n </div>\n\n </div>\n\n\n <!-- USER INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">General User Info</h3>\n <div class=\"form-holder__inputs\">\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Department</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"department\" matInput type=\"text\" (input)=\"onChangeField('department')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Manager user ID</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"manager\" matInput type=\"text\" (input)=\"onChangeField('manager')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Associated PC</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"associatedPc\" matInput type=\"text\" (input)=\"onChangeField('associatedPc')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"digestCredentials\" matInput type=\"text\"\n (input)=\"onChangeField('digestCredentials')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">User profile</div>\n <div class=\"input-holder__input\">\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userProfile'\"\n [form]=\"user.form\"\n (changeField)=\"changeField('userProfile')\"\n [optionsToken]=\"'userProfiles'\"\n ></app-lazy-loading-select>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Mobile voice access</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle\n formControlName=\"enableMobileVoiceAccess\"\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\n [checked]=\"user.enableMobileVoiceAccess\">\n </mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Userlocale</div>\n <div class=\"input-holder__input\">\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userLocale'\"\n [form]=\"user.form\"\n (changeField)=\"changeField($event)\"\n [optionsToken]=\"'userLocales'\"\n [default]=\"{key: '', value: 'None', disabled: false}\">\n </app-lazy-loading-select>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Confirm digest credentials</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"confirmDigestCredentials\" matInput type=\"text\"\n (input)=\"onChangeField('confirmDigestCredentials')\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <!-- USER INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">Contact Information</h3>\n <div class=\"form-holder__inputs\">\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Middle Name</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Telephone Number</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"number\" formControlName=\"telephoneNumber\"\n (input)=\"onChangeField('telephoneNumber')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Mobile Number</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"digestCredentials\"\n (input)=\"onChangeField('digestCredentials')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Diractory URI</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Title</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"title\" (input)=\"onChangeField('title')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Home Number</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Pager Number</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Display Name</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n </form>\n </ng-template>\n</div>\n\n<!--<mat-progress-spinner *ngIf=\"dataPending\"-->\n<!-- class=\"page-spinner\"-->\n<!-- mode=\"indeterminate\"-->\n<!-- [diameter]=\"120\"></mat-progress-spinner>-->\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(../assets/icons/icon_user.svg)}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}\n"], dependencies: [{ kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i4.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i4.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i4.NumberValueAccessor, selector: "input[type=number][formControlName],input[type=number][formControl],input[type=number][ngModel]" }, { kind: "directive", type: i4.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i4.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i4.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i5$1.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error", inputs: ["id"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["color", "appearance", "hideRequiredMarker", "hintLabel", "floatLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i8$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { kind: "component", type: i8$1.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i9.MatSlideToggle, selector: "mat-slide-toggle", inputs: ["disabled", "disableRipple", "color", "tabIndex"], exportAs: ["matSlideToggle"] }, { kind: "component", type: AppLoaderComponent, selector: "app-loader" }, { kind: "component", type: UserInfoComponent, selector: "app-user-info", inputs: ["name", "active", "email", "position"] }, { kind: "component", type: LazyLoadingSelectComponent, selector: "app-lazy-loading-select", inputs: ["siteId", "form", "standalone", "placeholder", "controlName", "optionsToken", "appearance", "errorCode", "errorText", "default", "id"], outputs: ["changeField"] }, { kind: "component", type: UserCallingComponent, selector: "app-user-calling", inputs: ["siteId", "userId"], outputs: ["onExtensionChange"] }] });
1979
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageWidgetComponent, decorators: [{
1980
- type: Component,
1981
- args: [{ selector: 'app-user-manage-widget', template: "<app-loader *ngIf=\"dataPending || userService.dataPending\"></app-loader>\n\n<div *ngIf=\"!dataPending\">\n <div class=\"header-box\">\n <div class=\"content-box\">\n <div class=\"header-back-block\">\n <svg width=\"16\" height=\"16\" viewBox=\"0 0 16 16\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path\n d=\"M5.70746 7.99987L11.3539 2.35352C11.4453 2.25928 11.496 2.13287 11.495 2.00159C11.494 1.8703 11.4414 1.74467 11.3486 1.65183C11.2558 1.55899 11.1301 1.50639 10.9988 1.50539C10.8676 1.50438 10.7411 1.55506 10.6469 1.64647L4.64691 7.64647C4.55316 7.74023 4.50049 7.8674 4.50049 7.99999C4.50049 8.13259 4.55316 8.25975 4.64691 8.35352L10.6469 14.3535C10.6931 14.4011 10.7482 14.439 10.8092 14.4651C10.8702 14.4912 10.9357 14.5049 11.002 14.5054C11.0683 14.5059 11.134 14.4932 11.1954 14.468C11.2567 14.4429 11.3125 14.4058 11.3593 14.3589C11.4062 14.312 11.4433 14.2563 11.4685 14.1949C11.4936 14.1336 11.5063 14.0679 11.5058 14.0016C11.5053 13.9353 11.4916 13.8697 11.4655 13.8088C11.4394 13.7478 11.4015 13.6926 11.3539 13.6465L5.70746 7.99987Z\"\n fill=\"black\" fill-opacity=\"0.95\"/>\n </svg>\n Users\n </div>\n </div>\n </div>\n <app-user-info *ngIf=\"user\" [name]=\"userName\" [email]=\"user.email\" [active]=\"true\"\n [position]=\"'Member of ' + user.siteName\"></app-user-info>\n\n <mat-tab-group disableRipple class=\"content-box\">\n <mat-tab label=\"Profile\">\n <ng-container *ngTemplateOutlet=\"userProfile\">\n </ng-container>\n </mat-tab>\n <mat-tab label=\"Calling\" [disabled]=\"!lineAssociation\">\n <app-user-calling *ngIf=\"lineAssociation\" [siteId]=\"siteId\"\n (onExtensionChange)=\"onExtensionChange()\"></app-user-calling>\n </mat-tab>\n <mat-tab label=\"Devices\" [disabled]=\"true\"></mat-tab>\n <mat-tab label=\"Lines\" [disabled]=\"true\"></mat-tab>\n <mat-tab label=\"Features\" [disabled]=\"true\"></mat-tab>\n </mat-tab-group>\n\n <ng-template #userProfile>\n <form *ngIf=\"user && form\" [formGroup]=\"form\">\n <div class=\"info-boxes-container\">\n <!-- USER INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">User Details</h3>\n <div class=\"form-holder__inputs\">\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">User Id</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"userid\" matInput (input)=\"onChangeField('userid')\">\n <mat-error\n *ngIf=\"form.get('userid').hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n <mat-error *ngIf=\"form.get('userid').hasError('exist')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n User ID already exists\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Email</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"email\" matInput (input)=\"onChangeField('email')\">\n <mat-error\n *ngIf=\"form.get('email').touched && form.get('email').hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n <mat-error *ngIf=\"form.get('email').touched && form.get('email').hasError('pattern')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n Please enter valid email\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Fisrt Name</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"firstName\" matInput (input)=\"onChangeField('firstName')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Last Name</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"lastName\" matInput (input)=\"onChangeField('lastName')\">\n <mat-error\n *ngIf=\"form.get('lastName').touched && form.get('lastName').hasError('required')\">\n <i class=\"fa fa-exclamation-triangle\"></i>\n This field is required\n </mat-error>\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n </div>\n\n </div>\n\n\n <!-- USER INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">General User Info</h3>\n <div class=\"form-holder__inputs\">\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Department</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"department\" matInput type=\"text\" (input)=\"onChangeField('department')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Manager user ID</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"manager\" matInput type=\"text\" (input)=\"onChangeField('manager')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Associated PC</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"associatedPc\" matInput type=\"text\" (input)=\"onChangeField('associatedPc')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"digestCredentials\" matInput type=\"text\"\n (input)=\"onChangeField('digestCredentials')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">User profile</div>\n <div class=\"input-holder__input\">\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userProfile'\"\n [form]=\"user.form\"\n (changeField)=\"changeField('userProfile')\"\n [optionsToken]=\"'userProfiles'\"\n ></app-lazy-loading-select>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Mobile voice access</div>\n <div class=\"input-holder__input\">\n <mat-slide-toggle\n formControlName=\"enableMobileVoiceAccess\"\n (change)=\"onChangeField('enableMobileVoiceAccess')\"\n [checked]=\"user.enableMobileVoiceAccess\">\n </mat-slide-toggle>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Userlocale</div>\n <div class=\"input-holder__input\">\n <app-lazy-loading-select\n [siteId]=\"siteId\"\n [controlName]=\"'userLocale'\"\n [form]=\"user.form\"\n (changeField)=\"changeField($event)\"\n [optionsToken]=\"'userLocales'\"\n [default]=\"{key: '', value: 'None', disabled: false}\">\n </app-lazy-loading-select>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Confirm digest credentials</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input formControlName=\"confirmDigestCredentials\" matInput type=\"text\"\n (input)=\"onChangeField('confirmDigestCredentials')\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n <!-- USER INFO BOX-->\n <div class=\"user-info-box user-details-box\">\n <h3 class=\"user-box-title\">Contact Information</h3>\n <div class=\"form-holder__inputs\">\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Middle Name</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"middleName\" (input)=\"onChangeField('middleName')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Telephone Number</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"number\" formControlName=\"telephoneNumber\"\n (input)=\"onChangeField('telephoneNumber')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Mobile Number</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"number\" formControlName=\"mobileNumber\" (input)=\"onChangeField('mobileNumber')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Digest credentials</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"digestCredentials\"\n (input)=\"onChangeField('digestCredentials')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Diractory URI</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"directoryUri\" (input)=\"onChangeField('directoryUri')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Title</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"title\" (input)=\"onChangeField('title')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Home Number</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"number\" formControlName=\"homeNumber\" (input)=\"onChangeField('homeNumber')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Pager Number</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"number\" formControlName=\"pagerNumber\" (input)=\"onChangeField('pagerNumber')\">\n </mat-form-field>\n </div>\n </div>\n <mat-divider></mat-divider>\n <div class=\"input-holder\">\n <div class=\"input-holder__name\">Display Name</div>\n <div class=\"input-holder__input\">\n <mat-form-field appearance=\"outline\">\n <input matInput type=\"text\" formControlName=\"displayName\" (input)=\"onChangeField('displayName')\">\n </mat-form-field>\n </div>\n </div>\n </div>\n </div>\n\n </div>\n\n </form>\n </ng-template>\n</div>\n\n<!--<mat-progress-spinner *ngIf=\"dataPending\"-->\n<!-- class=\"page-spinner\"-->\n<!-- mode=\"indeterminate\"-->\n<!-- [diameter]=\"120\"></mat-progress-spinner>-->\n", styles: ["@import\"https://fonts.googleapis.com/css?family=Poppins:400,100,200,300,500,600,800,700,900\";.fa:hover{color:#0d56aa!important}.mat-icon-button{background:transparent}.icon-webex-box{width:2rem;height:2rem;font-size:.7rem;line-height:1rem;display:inline-block;background:#d0d0d0;border-radius:2rem;line-height:40px;text-align:center}.icon-webex{filter:invert(12%) sepia(14%) saturate(4%) hue-rotate(354deg) brightness(103%) contrast(90%);background-repeat:no-repeat;background-position:center;display:inline-block;height:1rem;width:1rem}.icon-webex-user{background-image:url(../assets/icons/icon_user.svg)}.icon-user-status{display:inline-block}*{margin:0}body{background:#f7f7f7}body,th,td{font-family:Poppins,Poppins,sans-serif;font-size:14px}th{color:#0000008a;text-align:left}td{box-sizing:border-box;padding:10px 5px 10px 0}.content-box{margin:auto;position:relative;width:95%}.content-box table{width:100%}.edit-icon-td{width:50px;position:relative}.edit-icon-td button{position:absolute;top:4px}.mat-progress-spinner circle,.mat-spinner circle{stroke:gray!important}.data-loader{position:absolute;top:calc(50% - 25px);left:calc(50% - 25px)}.flex-box{display:flex;justify-content:flex-start}.spinner-container{width:100%;display:flex;justify-content:center;align-items:center}.spinner-container ::ng-deep .mat-progress-spinner circle,.mat-spinner circle{stroke:#000}.user-info-box{background:white;display:grid;grid-template-columns:30% 70%;border-radius:8px;border:rgba(0,0,0,.2) 1px solid;padding:24px;font-weight:400;font-size:14px}.user-info-box h3{display:block;font-weight:500;font-size:16px}.mat-divider{margin:5px 0!important}.info-boxes-container{padding:24px 0;display:flex;flex-direction:column;gap:24px}.header-box{height:60px;width:100%;line-height:60px;background:white;border-bottom:1px solid #dedddd}.header-box .header-back-block{float:left}.header-box .header-button-block{float:right}.webex-table{width:100%;margin:auto}.webex-table tr{border-bottom:1px solid #dedede}.webex-table th{background:#f7f7f7;color:#636363;font-size:12px}.webex-table td{background:#fff;color:#636363;font-size:14px}.webex-table tr:hover td{background:#ededed;cursor:pointer}.webex-table th.mat-header-cell,.webex-table td.mat-cell,.webex-table td.mat-footer-cell{border-bottom:1px solid #dedede}.webex-table tr.mat-header-row{height:37px}.mat-form-field{padding:0 0 5px;width:93%}.mat-form-field.mat-form-field-disabled{border-bottom:none}.mat-error{color:#c73636;margin:13px 0 0}.select-box{border-radius:30px;background:#F3F6F6;border:1px solid #E2E9EF;height:35px;position:relative}.select-box select{border:none!important;background:transparent;height:100%;width:92%;margin:auto;display:block}option:focus,option:focus-visible{border:none!important;outline:none!important}option{height:30px;cursor:pointer;color:#636363}option:hover{background:#ededed!important}.mat-select{height:100%!important}.info-holder,.input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__name,.input-holder__name{font-weight:500!important;font-size:14px!important}.info-holder__inputs .input-holder,.input-holder__inputs .input-holder{display:grid;grid-template-columns:30% 70%;align-items:baseline}.info-holder__inputs .input-holder__name,.input-holder__inputs .input-holder__name{font-weight:400!important;font-size:14px!important}table{border-collapse:collapse;border-spacing:0}.mat-form-field-appearance-outline .mat-form-field-infix{padding:0!important}.mat-divider{margin:12px 0}::ng-deep .mat-form-field-wrapper{height:30px}::ng-deep .mat-form-field-flex{height:30px}::ng-deep .mat-form-field-appearance-outline .mat-form-field-outline{height:35px}:ng-deep .mat-form-field-outline .mat-form-field-outline-thick{height:35px}::ng-deep .mat-select{line-height:20px}::ng-deep .mat-form-field-infix{border-top:0px!important}::ng-deep .mat-tab-group{font-family:Inter,sans-serif}::ng-deep .mat-tab-label{font-weight:500!important;font-size:16px!important;height:auto!important;min-width:auto!important;padding:0!important;opacity:1!important;color:#000!important}::ng-deep .mat-ink-bar{background-color:#000!important;height:3px!important}::ng-deep .mat-tab-labels{gap:30px}::ng-deep .mat-progress-spinner{position:absolute!important;top:40%;left:45%}\n"] }]
1982
- }], ctorParameters: function () { return [{ type: UserService }, { type: APIService }]; }, propDecorators: { onSave: [{
1983
- type: Output
1984
- }], onChange: [{
1985
- type: Output
1986
- }], token: [{
1987
- type: Input
1988
- }], host: [{
1989
- type: Input
1990
- }], siteId: [{
1991
- type: Input
1992
- }], userId: [{
1993
- type: Input
1994
- }], isLdap: [{
1995
- type: Input
1996
- }] } });
1997
-
1998
- class UserManageModule {
1999
- }
2000
- UserManageModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2001
- UserManageModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.10", ngImport: i0, type: UserManageModule, declarations: [AppLoaderComponent,
2002
- UserInfoComponent,
2003
- NotificationsComponent,
2004
- PaginationComponent,
2005
- LazyLoadingSelectComponent,
2006
- UserManageWidgetComponent,
2007
- UserCallingComponent,
2008
- UserCallingExtensionComponent], imports: [CommonModule,
2009
- BrowserModule,
2010
- BrowserAnimationsModule,
2011
- FormsModule,
2012
- ReactiveFormsModule,
2013
- HttpClientModule,
2014
- MaterialModule], exports: [UserManageWidgetComponent] });
2015
- UserManageModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageModule, providers: [
2016
- APIService,
2017
- UserService,
2018
- NotificationService,
2019
- UsersSearchService,
2020
- RemoveKynFromIBMService,
2021
- SiteSettingsService,
2022
- DnsService,
2023
- LineService,
2024
- { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }
2025
- ], imports: [CommonModule,
2026
- BrowserModule,
2027
- BrowserAnimationsModule,
2028
- FormsModule,
2029
- ReactiveFormsModule,
2030
- HttpClientModule,
2031
- MaterialModule] });
2032
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: UserManageModule, decorators: [{
2033
- type: NgModule,
2034
- args: [{
2035
- declarations: [
2036
- AppLoaderComponent,
2037
- UserInfoComponent,
2038
- NotificationsComponent,
2039
- PaginationComponent,
2040
- LazyLoadingSelectComponent,
2041
- UserManageWidgetComponent,
2042
- UserCallingComponent,
2043
- UserCallingExtensionComponent
2044
- ],
2045
- imports: [
2046
- CommonModule,
2047
- BrowserModule,
2048
- BrowserAnimationsModule,
2049
- FormsModule,
2050
- ReactiveFormsModule,
2051
- HttpClientModule,
2052
- MaterialModule,
2053
- ],
2054
- providers: [
2055
- APIService,
2056
- UserService,
2057
- NotificationService,
2058
- UsersSearchService,
2059
- RemoveKynFromIBMService,
2060
- SiteSettingsService,
2061
- DnsService,
2062
- LineService,
2063
- { provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true }
2064
- ],
2065
- exports: [UserManageWidgetComponent]
2066
- }]
2067
- }] });
2068
-
2069
- /**
2070
- * Generated bundle index. Do not edit.
2071
- */
2072
-
2073
- export { APIService, SiteSettingsService, UserManageModule, UserManageWidgetComponent, UserService, UtilsService };
2074
- //# sourceMappingURL=tuki-io-tuki-widgets-user-manage.mjs.map