verben-authentication-ui 0.3.1 → 0.3.3

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 (288) hide show
  1. package/ng-package.json +8 -0
  2. package/package.json +8 -14
  3. package/src/lib/components/button/button.component.css +3 -0
  4. package/src/lib/components/button/button.component.html +13 -0
  5. package/src/lib/components/button/button.component.spec.ts +23 -0
  6. package/src/lib/components/button/button.component.ts +24 -0
  7. package/src/lib/components/button/button.module.ts +11 -0
  8. package/{lib/components/forgot-password/ForgotPasswordData.d.ts → src/lib/components/forgot-password/ForgotPasswordData.ts} +1 -1
  9. package/src/lib/components/forgot-password/forgot-password.component.css +29 -0
  10. package/src/lib/components/forgot-password/forgot-password.component.html +13 -0
  11. package/src/lib/components/forgot-password/forgot-password.component.spec.ts +23 -0
  12. package/src/lib/components/forgot-password/forgot-password.component.ts +86 -0
  13. package/src/lib/components/forgot-password/forgot-password.module.ts +18 -0
  14. package/src/lib/components/mail/mail.component.css +0 -0
  15. package/src/lib/components/mail/mail.component.html +11 -0
  16. package/src/lib/components/mail/mail.component.spec.ts +23 -0
  17. package/src/lib/components/mail/mail.component.ts +47 -0
  18. package/src/lib/components/mail/mail.module.ts +13 -0
  19. package/src/lib/components/mail-validation/mail-validation.component.css +59 -0
  20. package/src/lib/components/mail-validation/mail-validation.component.html +37 -0
  21. package/src/lib/components/mail-validation/mail-validation.component.spec.ts +23 -0
  22. package/src/lib/components/mail-validation/mail-validation.component.ts +66 -0
  23. package/src/lib/components/mail-validation/mail-validation.module.ts +18 -0
  24. package/src/lib/components/o-auth/o-auth.component.css +21 -0
  25. package/src/lib/components/o-auth/o-auth.component.html +60 -0
  26. package/src/lib/components/o-auth/o-auth.component.spec.ts +23 -0
  27. package/src/lib/components/o-auth/o-auth.component.ts +43 -0
  28. package/src/lib/components/o-auth/o-auth.module.ts +11 -0
  29. package/src/lib/components/otp-input/otp-input.component.css +19 -0
  30. package/src/lib/components/otp-input/otp-input.component.html +14 -0
  31. package/src/lib/components/otp-input/otp-input.component.spec.ts +23 -0
  32. package/src/lib/components/otp-input/otp-input.component.ts +73 -0
  33. package/src/lib/components/otp-input/otp-input.module.ts +15 -0
  34. package/src/lib/components/reset-password/ResetPasswordData.ts +5 -0
  35. package/src/lib/components/reset-password/reset-password.component.css +29 -0
  36. package/src/lib/components/reset-password/reset-password.component.html +22 -0
  37. package/src/lib/components/reset-password/reset-password.component.spec.ts +23 -0
  38. package/src/lib/components/reset-password/reset-password.component.ts +108 -0
  39. package/src/lib/components/reset-password/reset-password.module.ts +18 -0
  40. package/src/lib/components/sign-in/sign-in.component.css +21 -0
  41. package/src/lib/components/sign-in/sign-in.component.html +84 -0
  42. package/src/lib/components/sign-in/sign-in.component.spec.ts +23 -0
  43. package/src/lib/components/sign-in/sign-in.component.ts +184 -0
  44. package/src/lib/components/sign-in/sign-in.module.ts +17 -0
  45. package/src/lib/components/sign-up/sign-up.component.css +36 -0
  46. package/src/lib/components/sign-up/sign-up.component.html +132 -0
  47. package/src/lib/components/sign-up/sign-up.component.spec.ts +23 -0
  48. package/src/lib/components/sign-up/sign-up.component.ts +176 -0
  49. package/src/lib/components/sign-up/sign-up.module.ts +15 -0
  50. package/src/lib/components/sso/base-table-style.ts +52 -0
  51. package/src/lib/components/sso/helper.ts +15 -0
  52. package/src/lib/components/sso/sso-form/sso-form.component.css +13 -0
  53. package/src/lib/components/sso/sso-form/sso-form.component.html +109 -0
  54. package/src/lib/components/sso/sso-form/sso-form.component.spec.ts +23 -0
  55. package/src/lib/components/sso/sso-form/sso-form.component.ts +70 -0
  56. package/src/lib/components/sso/sso.columns.ts +32 -0
  57. package/src/lib/components/sso/sso.component.css +47 -0
  58. package/src/lib/components/sso/sso.component.html +208 -0
  59. package/src/lib/components/sso/sso.component.spec.ts +23 -0
  60. package/src/lib/components/sso/sso.component.ts +261 -0
  61. package/src/lib/components/sso/sso.module.ts +40 -0
  62. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.css +8 -0
  63. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.html +30 -0
  64. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.spec.ts +23 -0
  65. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.ts +183 -0
  66. package/src/lib/components/two-factor-auth-otp/two-factor-auth-otp.module.ts +15 -0
  67. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.css +17 -0
  68. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.html +45 -0
  69. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.spec.ts +23 -0
  70. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.ts +57 -0
  71. package/src/lib/components/two-factor-auth-setup/two-factor-auth-setup.module.ts +11 -0
  72. package/src/lib/components/user-management/base-table-style.ts +52 -0
  73. package/src/lib/components/user-management/helper.ts +29 -0
  74. package/src/lib/components/user-management/index.ts +4 -0
  75. package/src/lib/components/user-management/useer-management.module.ts +48 -0
  76. package/src/lib/components/user-management/user-management-form/use-management-form.component.ts +61 -0
  77. package/src/lib/components/user-management/user-management-form/user-management-form.component.css +0 -0
  78. package/src/lib/components/user-management/user-management-form/user-management-form.component.html +91 -0
  79. package/src/lib/components/user-management/user-management-form/user-management-form.component.spec.ts +23 -0
  80. package/src/lib/components/user-management/user-management.columns.ts +45 -0
  81. package/src/lib/components/user-management/user-management.component.css +26 -0
  82. package/src/lib/components/user-management/user-management.component.html +275 -0
  83. package/src/lib/components/user-management/user-management.component.spec.ts +23 -0
  84. package/src/lib/components/user-management/user-management.component.ts +380 -0
  85. package/src/lib/components/user-management/user-management.service.ts +42 -0
  86. package/src/lib/components/user-request/user-request.component.css +91 -0
  87. package/src/lib/components/user-request/user-request.component.html +165 -0
  88. package/src/lib/components/user-request/user-request.component.spec.ts +23 -0
  89. package/src/lib/components/user-request/user-request.component.ts +167 -0
  90. package/src/lib/components/user-request/user-request.module.ts +18 -0
  91. package/src/lib/components/user-request-approval/access-request.columns.ts +26 -0
  92. package/src/lib/components/user-request-approval/base-table-style.ts +52 -0
  93. package/src/lib/components/user-request-approval/facades/user-access-request.facade.ts +152 -0
  94. package/src/lib/components/user-request-approval/helper.ts +39 -0
  95. package/src/lib/components/user-request-approval/services/user-access-request.service.spec.ts +16 -0
  96. package/src/lib/components/user-request-approval/services/user-access-request.service.ts +87 -0
  97. package/src/lib/components/user-request-approval/states/user-access-request.state.ts +65 -0
  98. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.css +0 -0
  99. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.html +7 -0
  100. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.spec.ts +23 -0
  101. package/src/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.ts +22 -0
  102. package/src/lib/components/user-request-approval/user-request-approval.component.css +1 -0
  103. package/src/lib/components/user-request-approval/user-request-approval.component.html +218 -0
  104. package/src/lib/components/user-request-approval/user-request-approval.component.spec.ts +23 -0
  105. package/src/lib/components/user-request-approval/user-request-approval.component.ts +301 -0
  106. package/src/lib/components/user-request-approval/user-request-approval.module.ts +52 -0
  107. package/src/lib/components/user-request-approval/user-request-approval.service.spec.ts +16 -0
  108. package/src/lib/components/user-request-approval/user-request-approval.service.ts +58 -0
  109. package/src/lib/components/user-request-approval/user-request-form/use-request-form.component.ts +66 -0
  110. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.css +0 -0
  111. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.html +97 -0
  112. package/src/lib/components/user-request-approval/user-request-form/user-request-form.component.spec.ts +23 -0
  113. package/src/lib/models/ErrorResponse.ts +7 -0
  114. package/src/lib/models/PasswordRequestParam.ts +5 -0
  115. package/src/lib/models/ResponseKeyValue.ts +5 -0
  116. package/src/lib/models/UserRequest.ts +28 -0
  117. package/src/lib/models/auth-mechanism.ts +14 -0
  118. package/src/lib/models/base.ts +11 -0
  119. package/src/lib/models/log-in.ts +7 -0
  120. package/{lib/models/mainUser.d.ts → src/lib/models/mainUser.ts} +3 -2
  121. package/src/lib/models/object-state.ts +6 -0
  122. package/{lib/models/otpValue.d.ts → src/lib/models/otpValue.ts} +3 -1
  123. package/src/lib/models/paged.ts +9 -0
  124. package/src/lib/models/query-params.ts +7 -0
  125. package/src/lib/models/request-status.ts +4 -0
  126. package/src/lib/models/resend-otp-data.ts +8 -0
  127. package/src/lib/models/resource.ts +27 -0
  128. package/src/lib/models/sign-up.ts +11 -0
  129. package/src/lib/models/single-sign-on.ts +9 -0
  130. package/src/lib/models/status.ts +5 -0
  131. package/src/lib/models/user-access-request-status.ts +5 -0
  132. package/{lib/models/user-access-request.d.ts → src/lib/models/user-access-request.ts} +4 -3
  133. package/src/lib/models/user.ts +24 -0
  134. package/src/lib/services/environment.service.spec.ts +16 -0
  135. package/src/lib/services/environment.service.ts +23 -0
  136. package/src/lib/services/http-web-request.service.spec.ts +16 -0
  137. package/src/lib/services/http-web-request.service.ts +101 -0
  138. package/src/lib/services/util.service.spec.ts +16 -0
  139. package/src/lib/services/util.service.ts +28 -0
  140. package/{public-api.d.ts → src/public-api.ts} +21 -0
  141. package/src/styles.css +96 -0
  142. package/src/theme/tailwind-setup.css +3 -0
  143. package/src/theme/tailwind.css +980 -0
  144. package/tailwind.config.js +20 -0
  145. package/tsconfig.lib.json +15 -0
  146. package/tsconfig.lib.prod.json +11 -0
  147. package/tsconfig.spec.json +15 -0
  148. package/esm2022/lib/components/button/button.component.mjs +0 -46
  149. package/esm2022/lib/components/button/button.module.mjs +0 -20
  150. package/esm2022/lib/components/forgot-password/ForgotPasswordData.mjs +0 -2
  151. package/esm2022/lib/components/forgot-password/forgot-password.component.mjs +0 -86
  152. package/esm2022/lib/components/forgot-password/forgot-password.module.mjs +0 -34
  153. package/esm2022/lib/components/mail/mail.component.mjs +0 -69
  154. package/esm2022/lib/components/mail/mail.module.mjs +0 -21
  155. package/esm2022/lib/components/mail-validation/mail-validation.component.mjs +0 -108
  156. package/esm2022/lib/components/mail-validation/mail-validation.module.mjs +0 -34
  157. package/esm2022/lib/components/o-auth/o-auth.component.mjs +0 -25
  158. package/esm2022/lib/components/o-auth/o-auth.module.mjs +0 -19
  159. package/esm2022/lib/components/otp-input/otp-input.component.mjs +0 -75
  160. package/esm2022/lib/components/otp-input/otp-input.module.mjs +0 -23
  161. package/esm2022/lib/components/reset-password/ResetPasswordData.mjs +0 -2
  162. package/esm2022/lib/components/reset-password/reset-password.component.mjs +0 -107
  163. package/esm2022/lib/components/reset-password/reset-password.module.mjs +0 -34
  164. package/esm2022/lib/components/sign-in/sign-in.component.mjs +0 -214
  165. package/esm2022/lib/components/sign-in/sign-in.module.mjs +0 -24
  166. package/esm2022/lib/components/sign-up/sign-up.component.mjs +0 -223
  167. package/esm2022/lib/components/sign-up/sign-up.module.mjs +0 -24
  168. package/esm2022/lib/components/sso/base-table-style.mjs +0 -53
  169. package/esm2022/lib/components/sso/helper.mjs +0 -14
  170. package/esm2022/lib/components/sso/sso-form/sso-form.component.mjs +0 -74
  171. package/esm2022/lib/components/sso/sso.columns.mjs +0 -29
  172. package/esm2022/lib/components/sso/sso.component.mjs +0 -197
  173. package/esm2022/lib/components/sso/sso.module.mjs +0 -63
  174. package/esm2022/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.mjs +0 -201
  175. package/esm2022/lib/components/two-factor-auth-otp/two-factor-auth-otp.module.mjs +0 -22
  176. package/esm2022/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.mjs +0 -90
  177. package/esm2022/lib/components/two-factor-auth-setup/two-factor-auth-setup.module.mjs +0 -19
  178. package/esm2022/lib/components/user-management/base-table-style.mjs +0 -53
  179. package/esm2022/lib/components/user-management/helper.mjs +0 -26
  180. package/esm2022/lib/components/user-management/useer-management.module.mjs +0 -68
  181. package/esm2022/lib/components/user-management/user-management-form/use-management-form.component.mjs +0 -57
  182. package/esm2022/lib/components/user-management/user-management.columns.mjs +0 -43
  183. package/esm2022/lib/components/user-management/user-management.component.mjs +0 -323
  184. package/esm2022/lib/components/user-request/user-request.component.mjs +0 -180
  185. package/esm2022/lib/components/user-request/user-request.module.mjs +0 -34
  186. package/esm2022/lib/components/user-request-approval/access-request.columns.mjs +0 -24
  187. package/esm2022/lib/components/user-request-approval/base-table-style.mjs +0 -53
  188. package/esm2022/lib/components/user-request-approval/facades/user-access-request.facade.mjs +0 -128
  189. package/esm2022/lib/components/user-request-approval/helper.mjs +0 -35
  190. package/esm2022/lib/components/user-request-approval/services/user-access-request.service.mjs +0 -72
  191. package/esm2022/lib/components/user-request-approval/states/user-access-request.state.mjs +0 -59
  192. package/esm2022/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.mjs +0 -26
  193. package/esm2022/lib/components/user-request-approval/user-request-approval.component.mjs +0 -251
  194. package/esm2022/lib/components/user-request-approval/user-request-approval.module.mjs +0 -77
  195. package/esm2022/lib/components/user-request-approval/user-request-approval.service.mjs +0 -32
  196. package/esm2022/lib/components/user-request-approval/user-request-form/use-request-form.component.mjs +0 -64
  197. package/esm2022/lib/models/ErrorResponse.mjs +0 -11
  198. package/esm2022/lib/models/PasswordRequestParam.mjs +0 -2
  199. package/esm2022/lib/models/ResponseKeyValue.mjs +0 -2
  200. package/esm2022/lib/models/UserRequest.mjs +0 -2
  201. package/esm2022/lib/models/base.mjs +0 -2
  202. package/esm2022/lib/models/log-in.mjs +0 -2
  203. package/esm2022/lib/models/mainUser.mjs +0 -2
  204. package/esm2022/lib/models/object-state.mjs +0 -8
  205. package/esm2022/lib/models/otpValue.mjs +0 -2
  206. package/esm2022/lib/models/paged.mjs +0 -2
  207. package/esm2022/lib/models/query-params.mjs +0 -2
  208. package/esm2022/lib/models/request-status.mjs +0 -5
  209. package/esm2022/lib/models/sign-up.mjs +0 -2
  210. package/esm2022/lib/models/single-sign-on.mjs +0 -2
  211. package/esm2022/lib/models/status.mjs +0 -6
  212. package/esm2022/lib/models/user-access-request-status.mjs +0 -7
  213. package/esm2022/lib/models/user-access-request.mjs +0 -2
  214. package/esm2022/lib/models/user.mjs +0 -2
  215. package/esm2022/lib/services/environment.service.mjs +0 -26
  216. package/esm2022/lib/services/http-web-request.service.mjs +0 -83
  217. package/esm2022/lib/services/util.service.mjs +0 -32
  218. package/esm2022/public-api.mjs +0 -43
  219. package/esm2022/verben-authentication-ui.mjs +0 -5
  220. package/fesm2022/verben-authentication-ui.mjs +0 -3481
  221. package/fesm2022/verben-authentication-ui.mjs.map +0 -1
  222. package/index.d.ts +0 -5
  223. package/lib/components/button/button.component.d.ts +0 -17
  224. package/lib/components/button/button.module.d.ts +0 -10
  225. package/lib/components/forgot-password/forgot-password.component.d.ts +0 -28
  226. package/lib/components/forgot-password/forgot-password.module.d.ts +0 -10
  227. package/lib/components/mail/mail.component.d.ts +0 -32
  228. package/lib/components/mail/mail.module.d.ts +0 -11
  229. package/lib/components/mail-validation/mail-validation.component.d.ts +0 -42
  230. package/lib/components/mail-validation/mail-validation.module.d.ts +0 -10
  231. package/lib/components/o-auth/o-auth.component.d.ts +0 -10
  232. package/lib/components/o-auth/o-auth.module.d.ts +0 -9
  233. package/lib/components/otp-input/otp-input.component.d.ts +0 -20
  234. package/lib/components/otp-input/otp-input.module.d.ts +0 -13
  235. package/lib/components/reset-password/ResetPasswordData.d.ts +0 -5
  236. package/lib/components/reset-password/reset-password.component.d.ts +0 -30
  237. package/lib/components/reset-password/reset-password.module.d.ts +0 -10
  238. package/lib/components/sign-in/sign-in.component.d.ts +0 -77
  239. package/lib/components/sign-in/sign-in.module.d.ts +0 -13
  240. package/lib/components/sign-up/sign-up.component.d.ts +0 -66
  241. package/lib/components/sign-up/sign-up.module.d.ts +0 -13
  242. package/lib/components/sso/base-table-style.d.ts +0 -1
  243. package/lib/components/sso/helper.d.ts +0 -2
  244. package/lib/components/sso/sso-form/sso-form.component.d.ts +0 -21
  245. package/lib/components/sso/sso.columns.d.ts +0 -3
  246. package/lib/components/sso/sso.component.d.ts +0 -50
  247. package/lib/components/sso/sso.module.d.ts +0 -11
  248. package/lib/components/two-factor-auth-otp/two-factor-auth-otp.component.d.ts +0 -65
  249. package/lib/components/two-factor-auth-otp/two-factor-auth-otp.module.d.ts +0 -12
  250. package/lib/components/two-factor-auth-setup/two-factor-auth-setup.component.d.ts +0 -39
  251. package/lib/components/two-factor-auth-setup/two-factor-auth-setup.module.d.ts +0 -9
  252. package/lib/components/user-management/base-table-style.d.ts +0 -1
  253. package/lib/components/user-management/helper.d.ts +0 -2
  254. package/lib/components/user-management/useer-management.module.d.ts +0 -11
  255. package/lib/components/user-management/user-management-form/use-management-form.component.d.ts +0 -20
  256. package/lib/components/user-management/user-management.columns.d.ts +0 -3
  257. package/lib/components/user-management/user-management.component.d.ts +0 -60
  258. package/lib/components/user-request/user-request.component.d.ts +0 -56
  259. package/lib/components/user-request/user-request.module.d.ts +0 -10
  260. package/lib/components/user-request-approval/access-request.columns.d.ts +0 -3
  261. package/lib/components/user-request-approval/base-table-style.d.ts +0 -1
  262. package/lib/components/user-request-approval/facades/user-access-request.facade.d.ts +0 -23
  263. package/lib/components/user-request-approval/helper.d.ts +0 -6
  264. package/lib/components/user-request-approval/services/user-access-request.service.d.ts +0 -50
  265. package/lib/components/user-request-approval/states/user-access-request.state.d.ts +0 -21
  266. package/lib/components/user-request-approval/user-access-request-status-badge/user-access-request-status-badge.component.d.ts +0 -12
  267. package/lib/components/user-request-approval/user-request-approval.component.d.ts +0 -59
  268. package/lib/components/user-request-approval/user-request-approval.module.d.ts +0 -12
  269. package/lib/components/user-request-approval/user-request-approval.service.d.ts +0 -18
  270. package/lib/components/user-request-approval/user-request-form/use-request-form.component.d.ts +0 -21
  271. package/lib/models/ErrorResponse.d.ts +0 -6
  272. package/lib/models/PasswordRequestParam.d.ts +0 -5
  273. package/lib/models/ResponseKeyValue.d.ts +0 -5
  274. package/lib/models/UserRequest.d.ts +0 -24
  275. package/lib/models/base.d.ts +0 -10
  276. package/lib/models/log-in.d.ts +0 -7
  277. package/lib/models/object-state.d.ts +0 -6
  278. package/lib/models/paged.d.ts +0 -9
  279. package/lib/models/query-params.d.ts +0 -7
  280. package/lib/models/request-status.d.ts +0 -3
  281. package/lib/models/sign-up.d.ts +0 -9
  282. package/lib/models/single-sign-on.d.ts +0 -7
  283. package/lib/models/status.d.ts +0 -4
  284. package/lib/models/user-access-request-status.d.ts +0 -5
  285. package/lib/models/user.d.ts +0 -23
  286. package/lib/services/environment.service.d.ts +0 -16
  287. package/lib/services/http-web-request.service.d.ts +0 -23
  288. package/lib/services/util.service.d.ts +0 -8
@@ -0,0 +1,152 @@
1
+ import { Injectable } from '@angular/core';
2
+ import {
3
+ Observable,
4
+ catchError,
5
+ from,
6
+ lastValueFrom,
7
+ tap,
8
+ throwError,
9
+ } from 'rxjs';
10
+ import { UserAccessRequestState } from '../states/user-access-request.state';
11
+ import { UserAccessRequest } from '../../../models/user-access-request';
12
+ import { QueryParams } from '../../../models/query-params';
13
+ import { UserAccessRequestService } from '../services/user-access-request.service';
14
+ import { UserAccessRequestStatus } from '../../../models/user-access-request-status';
15
+
16
+ @Injectable({
17
+ providedIn: 'root',
18
+ })
19
+ export class UserAccessRequestFacade {
20
+ constructor(
21
+ private userAccessRequestService: UserAccessRequestService,
22
+ private userAccessRequestState: UserAccessRequestState
23
+ ) {}
24
+
25
+ isUpdating$(): Observable<boolean> {
26
+ return this.userAccessRequestState.isUpdating$();
27
+ }
28
+
29
+ getRequests$(): Observable<UserAccessRequest[]> {
30
+ return this.userAccessRequestState.getRequests$();
31
+ }
32
+
33
+ getQueryParams$(): Observable<QueryParams<UserAccessRequest>> {
34
+ return this.userAccessRequestState.getQueryParams$();
35
+ }
36
+
37
+ async loadRequests(): Promise<void> {
38
+ try {
39
+ this.userAccessRequestState.setUpdating(true);
40
+ const params = this.userAccessRequestState.getQueryParamsValue();
41
+
42
+ const requests =
43
+ await this.userAccessRequestService.getUserAccessRequests(
44
+ params.skip,
45
+ params.limit,
46
+ params.sortParam || 'createdDate',
47
+ params.sortOrder
48
+ );
49
+
50
+ this.userAccessRequestState.setRequests(requests.Result);
51
+ } catch (error) {
52
+ console.error('Failed to load requests:', error);
53
+ throw error;
54
+ } finally {
55
+ this.userAccessRequestState.setUpdating(false);
56
+ }
57
+ }
58
+
59
+ async loadRequestsWithParam(param: string): Promise<void> {
60
+ try {
61
+ this.userAccessRequestState.setUpdating(true);
62
+ const params = this.userAccessRequestState.getQueryParamsValue();
63
+
64
+ const requests =
65
+ await this.userAccessRequestService.getUserAccessRequestWithParam(
66
+ param,
67
+ params.skip,
68
+ params.limit,
69
+ params.sortParam || 'createdDate',
70
+ params.sortOrder
71
+ );
72
+
73
+ this.userAccessRequestState.setRequests(requests.Result);
74
+ } catch (error) {
75
+ console.error('Failed to load requests with param:', error);
76
+ throw error;
77
+ } finally {
78
+ this.userAccessRequestState.setUpdating(false);
79
+ }
80
+ }
81
+
82
+ updateQueryParams(params: Partial<QueryParams<UserAccessRequest>>): void {
83
+ this.userAccessRequestState.updateQueryParams(params);
84
+ this.loadRequests();
85
+ }
86
+
87
+ async addRequest(request: Partial<UserAccessRequest>): Promise<void> {
88
+ try {
89
+ this.userAccessRequestState.setUpdating(true);
90
+ const newRequest = { ...request } as UserAccessRequest;
91
+ this.userAccessRequestState.addRequest(newRequest);
92
+
93
+ await this.userAccessRequestService.saveUserAccessRequests([newRequest]);
94
+ await this.loadRequests(); // Reload to get server-side changes
95
+ } catch (error) {
96
+ console.error('Failed to add request:', error);
97
+ this.userAccessRequestState.removeRequest(request.Id!);
98
+ throw error;
99
+ } finally {
100
+ this.userAccessRequestState.setUpdating(false);
101
+ }
102
+ }
103
+
104
+ async updateRequest(request: UserAccessRequest): Promise<void> {
105
+ try {
106
+ this.userAccessRequestState.setUpdating(true);
107
+ await this.userAccessRequestService.saveUserAccessRequests([request]);
108
+ this.userAccessRequestState.updateRequest(request);
109
+ } catch (error) {
110
+ console.error('Failed to update request:', error);
111
+ throw error;
112
+ } finally {
113
+ this.userAccessRequestState.setUpdating(false);
114
+ }
115
+ }
116
+
117
+ async deleteRequest(requestId: string): Promise<void> {
118
+ try {
119
+ this.userAccessRequestState.setUpdating(true);
120
+ await lastValueFrom(
121
+ this.userAccessRequestService.deleteUserAccessRequests([requestId])
122
+ );
123
+ this.userAccessRequestState.removeRequest(requestId);
124
+ } catch (error) {
125
+ console.error('Failed to delete request:', error);
126
+ throw error;
127
+ } finally {
128
+ this.userAccessRequestState.setUpdating(false);
129
+ }
130
+ }
131
+
132
+ async approveRequest(request: UserAccessRequest): Promise<void> {
133
+ try {
134
+ this.userAccessRequestState.setUpdating(true);
135
+ const response =
136
+ await this.userAccessRequestService.processUserAccessRequests(
137
+ [request],
138
+ true
139
+ );
140
+ // console.log(response);
141
+ const data = (response as UserAccessRequest[])?.[0];
142
+ if (data) {
143
+ this.userAccessRequestState.updateRequest(data);
144
+ }
145
+ } catch (error) {
146
+ console.error('Failed to update request:', error);
147
+ throw error;
148
+ } finally {
149
+ this.userAccessRequestState.setUpdating(false);
150
+ }
151
+ }
152
+ }
@@ -0,0 +1,39 @@
1
+ import { ObjectState } from '../../models/object-state';
2
+ import { UserAccessRequest } from '../../models/user-access-request';
3
+ import { UserAccessRequestStatus } from '../../models/user-access-request-status';
4
+
5
+ export const roles: { id: string; name: string }[] = [
6
+ { id: 'admin', name: 'Admin' },
7
+ { id: 'manager', name: 'Manager' },
8
+ { id: 'staff', name: 'Staff' },
9
+ ];
10
+
11
+ export const mockData: UserAccessRequest[] = new Array(10)
12
+ .fill(1)
13
+ .map((id, i) => ({
14
+ FirstName: `First ${id + i}`,
15
+ LastName: `Last ${id + i}`,
16
+ OtherName: `Other ${id + i}`,
17
+ Id: id + i,
18
+ id: (id + i).toString(),
19
+ MailAddress: `user${id + i}@mail.com`,
20
+ PhoneNumber: `+23480000000${id + i}`,
21
+ RequestStatus: randomEnum(UserAccessRequestStatus),
22
+ RoleID: roles[Math.floor(Math.random() * roles.length)].id,
23
+ Password: '1234567',
24
+ ExpireOn: new Date(),
25
+ IsSeeded: false,
26
+ OTPExpireOn: new Date(),
27
+ Tenants: [],
28
+
29
+ CreatedAt: new Date(),
30
+ UpdatedAt: new Date(),
31
+ DataState: ObjectState.New,
32
+ Tenant: `Tenant${id + i}`,
33
+ }));
34
+
35
+ function randomEnum<T extends object>(anEnum: T): T[keyof T] {
36
+ const enumValues = Object.values(anEnum) as unknown as T[keyof T][];
37
+ const randomIndex = Math.floor(Math.random() * enumValues.length);
38
+ return enumValues[randomIndex];
39
+ }
@@ -0,0 +1,16 @@
1
+ import { TestBed } from '@angular/core/testing';
2
+
3
+ import { UserAccessRequestService } from './user-access-request.service';
4
+
5
+ describe('UserAccessRequestService', () => {
6
+ let service: UserAccessRequestService;
7
+
8
+ beforeEach(() => {
9
+ TestBed.configureTestingModule({});
10
+ service = TestBed.inject(UserAccessRequestService);
11
+ });
12
+
13
+ it('should be created', () => {
14
+ expect(service).toBeTruthy();
15
+ });
16
+ });
@@ -0,0 +1,87 @@
1
+ import { Injectable } from '@angular/core';
2
+
3
+ import { Observable, from } from 'rxjs';
4
+ import { HttpWebRequestService } from '../../../services/http-web-request.service';
5
+ import { UserAccessRequest } from '../../../models/user-access-request';
6
+ import { Paged } from '../../../models/paged';
7
+
8
+ @Injectable({
9
+ providedIn: 'root',
10
+ })
11
+ export class UserAccessRequestService {
12
+ private readonly BASE_URL = 'User';
13
+
14
+ constructor(private httpService: HttpWebRequestService) {}
15
+
16
+ /**
17
+ * Get user access requests with pagination and sorting
18
+ * @param skip Number of records to skip
19
+ * @param limit Number of records to take
20
+ * @param sortParam Sort parameter
21
+ * @param sortOrder Sort order ('asc' or 'desc')
22
+ * @returns Promise containing the user access requests
23
+ */
24
+ getUserAccessRequests(
25
+ skip: number,
26
+ limit: number,
27
+ sortParam: string,
28
+ sortOrder: string
29
+ ): Promise<Paged<UserAccessRequest>> {
30
+ const url = `${this.BASE_URL}/GetUserAccessRequests/${skip}/${limit}/${sortParam}/${sortOrder}`;
31
+ return this.httpService.get(url) as Promise<Paged<UserAccessRequest>>;
32
+ }
33
+
34
+ /**
35
+ * Get user access requests with additional parameter, pagination and sorting
36
+ * @param param Search parameter
37
+ * @param skip Number of records to skip
38
+ * @param limit Number of records to take
39
+ * @param sortParam Sort parameter
40
+ * @param sortOrder Sort order ('asc' or 'desc')
41
+ * @returns Promise containing the filtered user access requests
42
+ */
43
+ getUserAccessRequestWithParam(
44
+ param: string,
45
+ skip: number,
46
+ limit: number,
47
+ sortParam: string,
48
+ sortOrder: string
49
+ ): Promise<Paged<UserAccessRequest>> {
50
+ const url = `${this.BASE_URL}/GetUserAccessRequestWithParam/${param}/${skip}/${limit}/${sortParam}/${sortOrder}`;
51
+ return this.httpService.get(url) as Promise<Paged<UserAccessRequest>>;
52
+ }
53
+
54
+ /**
55
+ * Save multiple user access requests
56
+ * @param requests Array of user access requests to save
57
+ * @returns Promise containing the save operation result
58
+ */
59
+ saveUserAccessRequests(requests: UserAccessRequest[]): Promise<any> {
60
+ const url = `${this.BASE_URL}/SaveUserAccessRequests`;
61
+ return this.httpService.post(url, requests);
62
+ }
63
+
64
+ /**
65
+ * Approve or reject multiple user access requests
66
+ * @param requests Array of user access requests to save
67
+ * @param isApproval True for approval, false for decline
68
+ * @returns Promise containing the save operation result
69
+ */
70
+ processUserAccessRequests(
71
+ requests: UserAccessRequest[],
72
+ isApproval: boolean
73
+ ): Promise<any> {
74
+ const url = `${this.BASE_URL}/UserAccessRequestAction/${isApproval}`;
75
+ return this.httpService.post(url, requests);
76
+ }
77
+
78
+ /**
79
+ * Delete multiple user access requests
80
+ * @param requestIds Array of request IDs to delete
81
+ * @returns Observable containing the delete operation result
82
+ */
83
+ deleteUserAccessRequests(requestIds: string[]): Observable<any> {
84
+ const url = `${this.BASE_URL}/DeleteUserAccessRequests`;
85
+ return this.httpService.delete(`${url}?data=${requestIds.join(',')}`);
86
+ }
87
+ }
@@ -0,0 +1,65 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { BehaviorSubject, Observable } from 'rxjs';
3
+ import { QueryParams } from '../../../models/query-params';
4
+ import { UserAccessRequest } from '../../../models/user-access-request';
5
+
6
+ @Injectable({
7
+ providedIn: 'root',
8
+ })
9
+ export class UserAccessRequestState {
10
+ private updating$ = new BehaviorSubject<boolean>(false);
11
+ private requests$ = new BehaviorSubject<UserAccessRequest[]>([]);
12
+ private queryParams$ = new BehaviorSubject<QueryParams<UserAccessRequest>>({
13
+ skip: 0,
14
+ limit: 10,
15
+ sortParam: 'CreatedAt',
16
+ sortOrder: 'asc',
17
+ });
18
+
19
+ isUpdating$(): Observable<boolean> {
20
+ return this.updating$.asObservable();
21
+ }
22
+
23
+ setUpdating(isUpdating: boolean): void {
24
+ this.updating$.next(isUpdating);
25
+ }
26
+
27
+ getRequests$(): Observable<UserAccessRequest[]> {
28
+ return this.requests$.asObservable();
29
+ }
30
+
31
+ setRequests(requests: UserAccessRequest[]): void {
32
+ this.requests$.next(requests);
33
+ }
34
+
35
+ getQueryParams$(): Observable<QueryParams<UserAccessRequest>> {
36
+ return this.queryParams$.asObservable();
37
+ }
38
+
39
+ getQueryParamsValue(): QueryParams<UserAccessRequest> {
40
+ return this.queryParams$.getValue();
41
+ }
42
+
43
+ updateQueryParams(params: Partial<QueryParams<UserAccessRequest>>): void {
44
+ this.queryParams$.next({ ...this.queryParams$.getValue(), ...params });
45
+ }
46
+
47
+ addRequest(request: UserAccessRequest): void {
48
+ const currentValue = this.requests$.getValue();
49
+ this.requests$.next([...currentValue, request]);
50
+ }
51
+
52
+ updateRequest(updatedRequest: UserAccessRequest): void {
53
+ const requests = this.requests$.getValue();
54
+ const index = requests.findIndex((r) => r.Id === updatedRequest.Id);
55
+ if (index !== -1) {
56
+ requests[index] = updatedRequest;
57
+ this.requests$.next([...requests]);
58
+ }
59
+ }
60
+
61
+ removeRequest(requestId: string): void {
62
+ const currentValue = this.requests$.getValue();
63
+ this.requests$.next(currentValue.filter((r) => r.Id !== requestId));
64
+ }
65
+ }
@@ -0,0 +1,7 @@
1
+ <verbena-badge
2
+ borderRadius="9px"
3
+ [bgColor]="badgeConfig().bgColor"
4
+ [textColor]="badgeConfig().textColor"
5
+ fontSize="12px"
6
+ [text]="badgeConfig().label"
7
+ ></verbena-badge>
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { UserAccessRequestStatusBadgeComponent } from './user-access-request-status-badge.component';
4
+
5
+ describe('UserAccessRequestStatusBadgeComponent', () => {
6
+ let component: UserAccessRequestStatusBadgeComponent;
7
+ let fixture: ComponentFixture<UserAccessRequestStatusBadgeComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ imports: [UserAccessRequestStatusBadgeComponent]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(UserAccessRequestStatusBadgeComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });
@@ -0,0 +1,22 @@
1
+ import { Component, Input } from '@angular/core';
2
+ import { UserAccessRequestStatus } from '../../../models/user-access-request-status';
3
+
4
+ @Component({
5
+ selector: 'lib-user-access-request-status-badge',
6
+ templateUrl: './user-access-request-status-badge.component.html',
7
+ styleUrl: './user-access-request-status-badge.component.css',
8
+ })
9
+ export class UserAccessRequestStatusBadgeComponent {
10
+ @Input() status: UserAccessRequestStatus = UserAccessRequestStatus.Pending;
11
+
12
+ badgeConfig() {
13
+ switch (this.status) {
14
+ case UserAccessRequestStatus.Approved:
15
+ return { bgColor: '#CAE1CC', textColor: '#4ABB54', label: 'Approved' };
16
+ case UserAccessRequestStatus.Declined:
17
+ return { bgColor: '#FFDFDF', textColor: '#EB5757', label: 'Rejected' };
18
+ default:
19
+ return { bgColor: '#827C7C', textColor: '#C3C3C3', label: 'Pending' };
20
+ }
21
+ }
22
+ }
@@ -0,0 +1 @@
1
+ @import "../../../theme/tailwind.css";
@@ -0,0 +1,218 @@
1
+ <div class="space-y-8">
2
+ <verben-data-view
3
+ #vdv
4
+ [viewState]="{
5
+ isSearch: true,
6
+ isColumn: true,
7
+ isFilter: true,
8
+ isSort: true,
9
+ isExport: true,
10
+ isSelect: true,
11
+ isCreate: false,
12
+ isToggle: true,
13
+ }"
14
+ [buttonClass]="'my-custom-button-class'"
15
+ [iconClass]="'my-icon-class'"
16
+ [activeIconClass]="'my-active-icon-class'"
17
+ [selectedColumnCount]="0"
18
+ [selectedSortCount]="0"
19
+ [selectedFilterTableCount]="0"
20
+ (viewChange)="onViewChange($event)"
21
+ (stateChange)="onStateChange($event)"
22
+ >
23
+ <div table-content>
24
+ <lib-data-table
25
+ [data]="data()"
26
+ [columns]="visibleColumnDef"
27
+ [styleConfig]="styles"
28
+ (selectionChange)="onSelectionChange($event)"
29
+ >
30
+ <ng-container libColumn="createdAt">
31
+ <ng-template #cell let-value>
32
+ {{ value | date }}
33
+ </ng-template>
34
+ </ng-container>
35
+ <ng-container libColumn="actions">
36
+ <ng-template #cell let-value let-deleteRow>
37
+ <div class="flex gap-6">
38
+ <verben-svg
39
+ (click)="openDetailView(value)"
40
+ icon="edit"
41
+ [width]="15"
42
+ [height]="15"
43
+ class="cursor-pointer"
44
+ ></verben-svg>
45
+ <!-- <button (click)="openDetailView(value)">Open</button>
46
+ <button (click)="selected = cardData[rowIndex]; vdv.toggleView()">
47
+ Switch
48
+ </button> -->
49
+ <verben-svg
50
+ icon="delete"
51
+ [width]="15"
52
+ [height]="15"
53
+ (click)="deleteRow()"
54
+ class="cursor-pointer"
55
+ ></verben-svg>
56
+ </div>
57
+ </ng-template>
58
+ <ng-template #header>
59
+ <strong>Actions</strong>
60
+ </ng-template>
61
+ </ng-container>
62
+ </lib-data-table>
63
+ </div>
64
+ <div card-content>
65
+ <verben-card-data-view
66
+ borderRadius="12px"
67
+ (loadMoreClick)="loadMore()"
68
+ #vdcv
69
+ dataId="MailAddress"
70
+ border="5px"
71
+ [cardDataList]="cardData()"
72
+ rbgColor="#f5f6f9"
73
+ mg="20px"
74
+ >
75
+ <verben-left-card-data-view class="space-y-7">
76
+ <verben-left-card-data
77
+ #vlcd
78
+ [parent]="vdcv"
79
+ dataId="MailAddress"
80
+ class="bg-secondary-100 rounded-xl border-primary border-[1px]"
81
+ [cardDataList]="cardData()"
82
+ >
83
+ <ng-template #card let-item>
84
+ <div (click)="currentData = vdcv.onItemClick(item)" class="flex">
85
+ <div
86
+ (click)="currentData = vdcv.onItemClick(item)"
87
+ class="flex cursor-pointer w-full bg-secondary rounded-xl"
88
+ >
89
+ <div
90
+ class="w-3 rounded-xl rounded-tr-none rounded-br-none"
91
+ [ngClass]="
92
+ item.selected ? 'bg-primary' : 'bg-secondary-200'
93
+ "
94
+ ></div>
95
+ <div class="flex flex-col py-2 px-4 w-full">
96
+ <div class="flex items-center gap-4 justify-between">
97
+ <div class="grid gap-y-2">
98
+ <span class="font-semibold text-[#404040]">{{
99
+ item.title
100
+ }}</span>
101
+ <p class="flex items-center">
102
+ <label for="phone" class="text-[10px] font-light"
103
+ >Phone Number:</label
104
+ >
105
+ <span id="phone" class="text-sm">{{
106
+ item.data.PhoneNumber
107
+ }}</span>
108
+ </p>
109
+ </div>
110
+
111
+ <div class="grid gap-y-2">
112
+ <p class="grid">
113
+ <label for="role" class="text-[10px] font-light"
114
+ >Role</label
115
+ >
116
+ <span id="role" class="text-sm">Manager</span>
117
+ </p>
118
+
119
+ <lib-user-access-request-status-badge
120
+ [status]="item.data.RequestStatus"
121
+ ></lib-user-access-request-status-badge>
122
+ </div>
123
+ </div>
124
+
125
+ <!-- <div class="flex">
126
+ <span class="font-normal text-sm">{{ item.title }}</span>
127
+ </div>
128
+ @for (ciItem of item.body; track ciItem.value) {
129
+ <div class="">
130
+ <span class="text-muted font-light text-xs"
131
+ >{{ ciItem.title }}:</span
132
+ >
133
+ <span class="text-black">{{ ciItem.value }}</span>
134
+ </div>
135
+ } -->
136
+ </div>
137
+ </div>
138
+ </div>
139
+ </ng-template>
140
+ </verben-left-card-data>
141
+ </verben-left-card-data-view>
142
+
143
+ <verben-right-card-data-view>
144
+ <ng-template #parent>
145
+ <lib-user-request-form
146
+ [currentData]="currentData"
147
+ (switchView)="vdv.toggleView()"
148
+ (onApproval)="onApprove($event)"
149
+ ></lib-user-request-form>
150
+ </ng-template>
151
+ </verben-right-card-data-view>
152
+
153
+ <verben-card-data-view-footer class="float-right">
154
+ <div class="flex gap-2">
155
+ <!-- <span class="paginator-text"
156
+ >{{ data().length }} records loaded</span
157
+ > -->
158
+ <span></span>
159
+ <button (click)="loadMore()" class="load-more">Load more</button>
160
+ </div>
161
+ </verben-card-data-view-footer>
162
+ </verben-card-data-view>
163
+ </div>
164
+ <div column-content>
165
+ <verben-visible-column
166
+ (columnsUpdated)="onColumnsUpdated($event)"
167
+ [border]="'1px solid rgba(212, 160, 7, 1)'"
168
+ borderRadius="10px"
169
+ boxShadow="2px 2px 2px 0px silver"
170
+ bgColor="white"
171
+ width="400px"
172
+ textColor="black"
173
+ pd="1rem"
174
+ primaryColor="#FFE681"
175
+ secondaryColor="#3479E9"
176
+ [columns]="visibleColumns"
177
+ [displayedColumns]="5"
178
+ ></verben-visible-column>
179
+ </div>
180
+ <div filter-content>
181
+ <verben-table-filter
182
+ [border]="'1px solid rgba(212, 160, 7, 1)'"
183
+ borderRadius="10px"
184
+ boxShadow="2px 2px 2px 0px silver"
185
+ bgColor="white"
186
+ width="420px"
187
+ textColor="black"
188
+ pd="1rem"
189
+ primaryColor="#FFE681"
190
+ secondaryColor="#3479E9"
191
+ tertiaryColor="#404040"
192
+ [filterOptions]="filterArray"
193
+ [maxFilterLength]="3"
194
+ ></verben-table-filter>
195
+ </div>
196
+ <div sort-content>
197
+ <verben-sort-table
198
+ (selectedOptions)="onSortUpdated($event)"
199
+ [border]="'1px solid rgba(212, 160, 7, 1)'"
200
+ borderRadius="10px"
201
+ boxShadow="2px 2px 2px 0px silver"
202
+ bgColor="white"
203
+ width="400px"
204
+ textColor="black"
205
+ pd="1rem"
206
+ primaryColor="#FFE681"
207
+ secondaryColor="#3479E9"
208
+ tertiaryColor="#404040"
209
+ [enableDragAndDrop]="true"
210
+ [sortOptions]="sortOptions"
211
+ ></verben-sort-table>
212
+ </div>
213
+ <div export-content>
214
+ <lib-data-export [data]="data()" (exportDataEvent)="handleExport($event)">
215
+ </lib-data-export>
216
+ </div>
217
+ </verben-data-view>
218
+ </div>
@@ -0,0 +1,23 @@
1
+ import { ComponentFixture, TestBed } from '@angular/core/testing';
2
+
3
+ import { UserRequestApprovalComponent } from './user-request-approval.component';
4
+
5
+ describe('UserRequestApprovalComponent', () => {
6
+ let component: UserRequestApprovalComponent;
7
+ let fixture: ComponentFixture<UserRequestApprovalComponent>;
8
+
9
+ beforeEach(async () => {
10
+ await TestBed.configureTestingModule({
11
+ imports: [UserRequestApprovalComponent]
12
+ })
13
+ .compileComponents();
14
+
15
+ fixture = TestBed.createComponent(UserRequestApprovalComponent);
16
+ component = fixture.componentInstance;
17
+ fixture.detectChanges();
18
+ });
19
+
20
+ it('should create', () => {
21
+ expect(component).toBeTruthy();
22
+ });
23
+ });