@workos-inc/widgets 0.0.0-pre.0

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 (230) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +3 -0
  3. package/dist/cjs/index.d.ts +3 -0
  4. package/dist/cjs/index.d.ts.map +1 -0
  5. package/dist/cjs/index.js +8 -0
  6. package/dist/cjs/index.js.map +1 -0
  7. package/dist/cjs/lib/api/config.d.ts +9 -0
  8. package/dist/cjs/lib/api/config.d.ts.map +1 -0
  9. package/dist/cjs/lib/api/config.js +12 -0
  10. package/dist/cjs/lib/api/config.js.map +1 -0
  11. package/dist/cjs/lib/api/role.d.ts +9 -0
  12. package/dist/cjs/lib/api/role.d.ts.map +1 -0
  13. package/dist/cjs/lib/api/role.js +94 -0
  14. package/dist/cjs/lib/api/role.js.map +1 -0
  15. package/dist/cjs/lib/api/user.d.ts +61 -0
  16. package/dist/cjs/lib/api/user.d.ts.map +1 -0
  17. package/dist/cjs/lib/api/user.js +312 -0
  18. package/dist/cjs/lib/api/user.js.map +1 -0
  19. package/dist/cjs/lib/constants.d.ts +3 -0
  20. package/dist/cjs/lib/constants.d.ts.map +1 -0
  21. package/dist/cjs/lib/constants.js +6 -0
  22. package/dist/cjs/lib/constants.js.map +1 -0
  23. package/dist/cjs/lib/delete-user-dialog.d.ts +12 -0
  24. package/dist/cjs/lib/delete-user-dialog.d.ts.map +1 -0
  25. package/dist/cjs/lib/delete-user-dialog.js +37 -0
  26. package/dist/cjs/lib/delete-user-dialog.js.map +1 -0
  27. package/dist/cjs/lib/edit-user-details-dialog.d.ts +12 -0
  28. package/dist/cjs/lib/edit-user-details-dialog.d.ts.map +1 -0
  29. package/dist/cjs/lib/edit-user-details-dialog.js +81 -0
  30. package/dist/cjs/lib/edit-user-details-dialog.js.map +1 -0
  31. package/dist/cjs/lib/elements.d.ts +32 -0
  32. package/dist/cjs/lib/elements.d.ts.map +1 -0
  33. package/dist/cjs/lib/elements.js +57 -0
  34. package/dist/cjs/lib/elements.js.map +1 -0
  35. package/dist/cjs/lib/invite-user-dialog.d.ts +7 -0
  36. package/dist/cjs/lib/invite-user-dialog.d.ts.map +1 -0
  37. package/dist/cjs/lib/invite-user-dialog.js +167 -0
  38. package/dist/cjs/lib/invite-user-dialog.js.map +1 -0
  39. package/dist/cjs/lib/label.d.ts +7 -0
  40. package/dist/cjs/lib/label.d.ts.map +1 -0
  41. package/dist/cjs/lib/label.js +9 -0
  42. package/dist/cjs/lib/label.js.map +1 -0
  43. package/dist/cjs/lib/pagination.d.ts +8 -0
  44. package/dist/cjs/lib/pagination.d.ts.map +1 -0
  45. package/dist/cjs/lib/pagination.js +67 -0
  46. package/dist/cjs/lib/pagination.js.map +1 -0
  47. package/dist/cjs/lib/resend-invite-dialog.d.ts +10 -0
  48. package/dist/cjs/lib/resend-invite-dialog.d.ts.map +1 -0
  49. package/dist/cjs/lib/resend-invite-dialog.js +71 -0
  50. package/dist/cjs/lib/resend-invite-dialog.js.map +1 -0
  51. package/dist/cjs/lib/revoke-invite-dialog.d.ts +10 -0
  52. package/dist/cjs/lib/revoke-invite-dialog.d.ts.map +1 -0
  53. package/dist/cjs/lib/revoke-invite-dialog.js +37 -0
  54. package/dist/cjs/lib/revoke-invite-dialog.js.map +1 -0
  55. package/dist/cjs/lib/search-provider.d.ts +11 -0
  56. package/dist/cjs/lib/search-provider.d.ts.map +1 -0
  57. package/dist/cjs/lib/search-provider.js +55 -0
  58. package/dist/cjs/lib/search-provider.js.map +1 -0
  59. package/dist/cjs/lib/use-is-hydrated.d.ts +2 -0
  60. package/dist/cjs/lib/use-is-hydrated.d.ts.map +1 -0
  61. package/dist/cjs/lib/use-is-hydrated.js +34 -0
  62. package/dist/cjs/lib/use-is-hydrated.js.map +1 -0
  63. package/dist/cjs/lib/user-actions-dropdown.d.ts +9 -0
  64. package/dist/cjs/lib/user-actions-dropdown.d.ts.map +1 -0
  65. package/dist/cjs/lib/user-actions-dropdown.js +83 -0
  66. package/dist/cjs/lib/user-actions-dropdown.js.map +1 -0
  67. package/dist/cjs/lib/users-filter.d.ts +9 -0
  68. package/dist/cjs/lib/users-filter.d.ts.map +1 -0
  69. package/dist/cjs/lib/users-filter.js +63 -0
  70. package/dist/cjs/lib/users-filter.js.map +1 -0
  71. package/dist/cjs/lib/users-management-context.d.ts +23 -0
  72. package/dist/cjs/lib/users-management-context.d.ts.map +1 -0
  73. package/dist/cjs/lib/users-management-context.js +83 -0
  74. package/dist/cjs/lib/users-management-context.js.map +1 -0
  75. package/dist/cjs/lib/users-management-state.d.ts +22 -0
  76. package/dist/cjs/lib/users-management-state.d.ts.map +1 -0
  77. package/dist/cjs/lib/users-management-state.js +143 -0
  78. package/dist/cjs/lib/users-management-state.js.map +1 -0
  79. package/dist/cjs/lib/users-management.d.ts +12 -0
  80. package/dist/cjs/lib/users-management.d.ts.map +1 -0
  81. package/dist/cjs/lib/users-management.js +141 -0
  82. package/dist/cjs/lib/users-management.js.map +1 -0
  83. package/dist/cjs/lib/users-search.d.ts +3 -0
  84. package/dist/cjs/lib/users-search.d.ts.map +1 -0
  85. package/dist/cjs/lib/users-search.js +65 -0
  86. package/dist/cjs/lib/users-search.js.map +1 -0
  87. package/dist/cjs/lib/utils.d.ts +15 -0
  88. package/dist/cjs/lib/utils.d.ts.map +1 -0
  89. package/dist/cjs/lib/utils.js +78 -0
  90. package/dist/cjs/lib/utils.js.map +1 -0
  91. package/dist/cjs/lib/widgets-context.d.ts +11 -0
  92. package/dist/cjs/lib/widgets-context.d.ts.map +1 -0
  93. package/dist/cjs/lib/widgets-context.js +45 -0
  94. package/dist/cjs/lib/widgets-context.js.map +1 -0
  95. package/dist/cjs/users-management.client.d.ts +6 -0
  96. package/dist/cjs/users-management.client.d.ts.map +1 -0
  97. package/dist/cjs/users-management.client.js +57 -0
  98. package/dist/cjs/users-management.client.js.map +1 -0
  99. package/dist/cjs/workos-widgets.client.d.ts +17 -0
  100. package/dist/cjs/workos-widgets.client.d.ts.map +1 -0
  101. package/dist/cjs/workos-widgets.client.js +55 -0
  102. package/dist/cjs/workos-widgets.client.js.map +1 -0
  103. package/dist/esm/index.d.ts +3 -0
  104. package/dist/esm/index.d.ts.map +1 -0
  105. package/dist/esm/index.js +3 -0
  106. package/dist/esm/index.js.map +1 -0
  107. package/dist/esm/lib/api/config.d.ts +9 -0
  108. package/dist/esm/lib/api/config.d.ts.map +1 -0
  109. package/dist/esm/lib/api/config.js +9 -0
  110. package/dist/esm/lib/api/config.js.map +1 -0
  111. package/dist/esm/lib/api/role.d.ts +9 -0
  112. package/dist/esm/lib/api/role.d.ts.map +1 -0
  113. package/dist/esm/lib/api/role.js +89 -0
  114. package/dist/esm/lib/api/role.js.map +1 -0
  115. package/dist/esm/lib/api/user.d.ts +61 -0
  116. package/dist/esm/lib/api/user.d.ts.map +1 -0
  117. package/dist/esm/lib/api/user.js +302 -0
  118. package/dist/esm/lib/api/user.js.map +1 -0
  119. package/dist/esm/lib/constants.d.ts +3 -0
  120. package/dist/esm/lib/constants.d.ts.map +1 -0
  121. package/dist/esm/lib/constants.js +3 -0
  122. package/dist/esm/lib/constants.js.map +1 -0
  123. package/dist/esm/lib/delete-user-dialog.d.ts +12 -0
  124. package/dist/esm/lib/delete-user-dialog.d.ts.map +1 -0
  125. package/dist/esm/lib/delete-user-dialog.js +33 -0
  126. package/dist/esm/lib/delete-user-dialog.js.map +1 -0
  127. package/dist/esm/lib/edit-user-details-dialog.d.ts +12 -0
  128. package/dist/esm/lib/edit-user-details-dialog.d.ts.map +1 -0
  129. package/dist/esm/lib/edit-user-details-dialog.js +54 -0
  130. package/dist/esm/lib/edit-user-details-dialog.js.map +1 -0
  131. package/dist/esm/lib/elements.d.ts +32 -0
  132. package/dist/esm/lib/elements.d.ts.map +1 -0
  133. package/dist/esm/lib/elements.js +54 -0
  134. package/dist/esm/lib/elements.js.map +1 -0
  135. package/dist/esm/lib/invite-user-dialog.d.ts +7 -0
  136. package/dist/esm/lib/invite-user-dialog.d.ts.map +1 -0
  137. package/dist/esm/lib/invite-user-dialog.js +140 -0
  138. package/dist/esm/lib/invite-user-dialog.js.map +1 -0
  139. package/dist/esm/lib/label.d.ts +7 -0
  140. package/dist/esm/lib/label.d.ts.map +1 -0
  141. package/dist/esm/lib/label.js +6 -0
  142. package/dist/esm/lib/label.js.map +1 -0
  143. package/dist/esm/lib/pagination.d.ts +8 -0
  144. package/dist/esm/lib/pagination.d.ts.map +1 -0
  145. package/dist/esm/lib/pagination.js +40 -0
  146. package/dist/esm/lib/pagination.js.map +1 -0
  147. package/dist/esm/lib/resend-invite-dialog.d.ts +10 -0
  148. package/dist/esm/lib/resend-invite-dialog.d.ts.map +1 -0
  149. package/dist/esm/lib/resend-invite-dialog.js +44 -0
  150. package/dist/esm/lib/resend-invite-dialog.js.map +1 -0
  151. package/dist/esm/lib/revoke-invite-dialog.d.ts +10 -0
  152. package/dist/esm/lib/revoke-invite-dialog.d.ts.map +1 -0
  153. package/dist/esm/lib/revoke-invite-dialog.js +33 -0
  154. package/dist/esm/lib/revoke-invite-dialog.js.map +1 -0
  155. package/dist/esm/lib/search-provider.d.ts +11 -0
  156. package/dist/esm/lib/search-provider.d.ts.map +1 -0
  157. package/dist/esm/lib/search-provider.js +27 -0
  158. package/dist/esm/lib/search-provider.js.map +1 -0
  159. package/dist/esm/lib/use-is-hydrated.d.ts +2 -0
  160. package/dist/esm/lib/use-is-hydrated.d.ts.map +1 -0
  161. package/dist/esm/lib/use-is-hydrated.js +8 -0
  162. package/dist/esm/lib/use-is-hydrated.js.map +1 -0
  163. package/dist/esm/lib/user-actions-dropdown.d.ts +9 -0
  164. package/dist/esm/lib/user-actions-dropdown.d.ts.map +1 -0
  165. package/dist/esm/lib/user-actions-dropdown.js +56 -0
  166. package/dist/esm/lib/user-actions-dropdown.js.map +1 -0
  167. package/dist/esm/lib/users-filter.d.ts +9 -0
  168. package/dist/esm/lib/users-filter.d.ts.map +1 -0
  169. package/dist/esm/lib/users-filter.js +36 -0
  170. package/dist/esm/lib/users-filter.js.map +1 -0
  171. package/dist/esm/lib/users-management-context.d.ts +23 -0
  172. package/dist/esm/lib/users-management-context.d.ts.map +1 -0
  173. package/dist/esm/lib/users-management-context.js +54 -0
  174. package/dist/esm/lib/users-management-context.js.map +1 -0
  175. package/dist/esm/lib/users-management-state.d.ts +22 -0
  176. package/dist/esm/lib/users-management-state.d.ts.map +1 -0
  177. package/dist/esm/lib/users-management-state.js +117 -0
  178. package/dist/esm/lib/users-management-state.js.map +1 -0
  179. package/dist/esm/lib/users-management.d.ts +12 -0
  180. package/dist/esm/lib/users-management.d.ts.map +1 -0
  181. package/dist/esm/lib/users-management.js +114 -0
  182. package/dist/esm/lib/users-management.js.map +1 -0
  183. package/dist/esm/lib/users-search.d.ts +3 -0
  184. package/dist/esm/lib/users-search.d.ts.map +1 -0
  185. package/dist/esm/lib/users-search.js +39 -0
  186. package/dist/esm/lib/users-search.js.map +1 -0
  187. package/dist/esm/lib/utils.d.ts +15 -0
  188. package/dist/esm/lib/utils.d.ts.map +1 -0
  189. package/dist/esm/lib/utils.js +70 -0
  190. package/dist/esm/lib/utils.js.map +1 -0
  191. package/dist/esm/lib/widgets-context.d.ts +11 -0
  192. package/dist/esm/lib/widgets-context.d.ts.map +1 -0
  193. package/dist/esm/lib/widgets-context.js +17 -0
  194. package/dist/esm/lib/widgets-context.js.map +1 -0
  195. package/dist/esm/users-management.client.d.ts +6 -0
  196. package/dist/esm/users-management.client.d.ts.map +1 -0
  197. package/dist/esm/users-management.client.js +30 -0
  198. package/dist/esm/users-management.client.js.map +1 -0
  199. package/dist/esm/workos-widgets.client.d.ts +17 -0
  200. package/dist/esm/workos-widgets.client.d.ts.map +1 -0
  201. package/dist/esm/workos-widgets.client.js +28 -0
  202. package/dist/esm/workos-widgets.client.js.map +1 -0
  203. package/dist/tsconfig.cjs.tsbuildinfo +1 -0
  204. package/dist/tsconfig.esm.tsbuildinfo +1 -0
  205. package/package.json +69 -0
  206. package/src/index.ts +5 -0
  207. package/src/lib/api/config.ts +9 -0
  208. package/src/lib/api/role.ts +124 -0
  209. package/src/lib/api/user.ts +458 -0
  210. package/src/lib/constants.ts +2 -0
  211. package/src/lib/delete-user-dialog.tsx +103 -0
  212. package/src/lib/edit-user-details-dialog.tsx +170 -0
  213. package/src/lib/elements.tsx +175 -0
  214. package/src/lib/invite-user-dialog.tsx +319 -0
  215. package/src/lib/label.tsx +14 -0
  216. package/src/lib/pagination.tsx +69 -0
  217. package/src/lib/resend-invite-dialog.tsx +136 -0
  218. package/src/lib/revoke-invite-dialog.tsx +104 -0
  219. package/src/lib/search-provider.tsx +51 -0
  220. package/src/lib/use-is-hydrated.ts +13 -0
  221. package/src/lib/user-actions-dropdown.tsx +161 -0
  222. package/src/lib/users-filter.tsx +122 -0
  223. package/src/lib/users-management-context.tsx +89 -0
  224. package/src/lib/users-management-state.ts +165 -0
  225. package/src/lib/users-management.tsx +461 -0
  226. package/src/lib/users-search.tsx +130 -0
  227. package/src/lib/utils.ts +94 -0
  228. package/src/lib/widgets-context.ts +29 -0
  229. package/src/users-management.client.tsx +59 -0
  230. package/src/workos-widgets.client.tsx +73 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-management-context.d.ts","sourceRoot":"","sources":["../../../src/lib/users-management-context.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,EACL,qBAAqB,EACrB,oBAAoB,EACrB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,qBAAqB,CAAC,CAAC;CACjD;AAOD,eAAO,MAAM,8BAA8B,EAAE,KAAK,CAAC,EAAE,CAAC;IACpD,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,KAAK,EAAE,0BAA0B,CAAC;CACnC,CAMA,CAAC;AAKF;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,CAAC,EAAE,0BAA0B,GAAG,IAAI,GACjD,0BAA0B,CA6B5B;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,CAC1C,IAAI,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAAG,SAAS,GAAG,IAAI,iBAavD"}
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ const UsersManagementContext = React.createContext(undefined);
5
+ UsersManagementContext.displayName = "UsersManagementContext";
6
+ export const UsersManagementContextProvider = ({ children, value }) => {
7
+ return (_jsx(UsersManagementContext.Provider, { value: value, children: children }));
8
+ };
9
+ const NOOP = () => void 0;
10
+ const EMPTY_PAGINATION = {};
11
+ /**
12
+ * The context may be provided if it is instantiated in the tree above the user.
13
+ */
14
+ export function useUsersManagementContext(initialContext) {
15
+ const context = React.useContext(UsersManagementContext);
16
+ const providedToken = initialContext?.authToken ?? null;
17
+ const hasContext = !!context;
18
+ React.useEffect(() => {
19
+ if (!providedToken && !hasContext) {
20
+ console.error("useUsersManagementContext was called from a component outside of the UsersManagementContext provider without providing an authToken directly. Resulting queries may not run as expected.");
21
+ }
22
+ }, [providedToken, hasContext]);
23
+ if (context) {
24
+ return context;
25
+ }
26
+ if (initialContext) {
27
+ return initialContext;
28
+ }
29
+ return {
30
+ authToken: null,
31
+ dispatch: NOOP,
32
+ state: {
33
+ pagination: EMPTY_PAGINATION,
34
+ role: null,
35
+ searchQuery: null,
36
+ },
37
+ };
38
+ }
39
+ /**
40
+ * The auth token may be provided if it is instantiated in the tree above the
41
+ * user management context. Otherwise we'll use the context value if it exists.
42
+ */
43
+ export function useUsersManagementPagniatoin(args) {
44
+ const context = React.useContext(UsersManagementContext);
45
+ const providedToken = args?.authToken;
46
+ const hasContext = !!context;
47
+ React.useEffect(() => {
48
+ if (!providedToken && !hasContext) {
49
+ console.error("useUsersManagementAuthToken was called from a component outside of the UsersManagementContext provider without providing an authToken directly. Resulting queries may not run as expected.");
50
+ }
51
+ }, [providedToken, hasContext]);
52
+ return providedToken || context?.authToken || null;
53
+ }
54
+ //# sourceMappingURL=users-management-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-management-context.js","sourceRoot":"","sources":["../../../src/lib/users-management-context.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAEb,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAa/B,MAAM,sBAAsB,GAAG,KAAK,CAAC,aAAa,CAEhD,SAAS,CAAC,CAAC;AACb,sBAAsB,CAAC,WAAW,GAAG,wBAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,8BAA8B,GAGtC,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,EAAE;IAC3B,OAAO,CACL,KAAC,sBAAsB,CAAC,QAAQ,IAAC,KAAK,EAAE,KAAK,YAC1C,QAAQ,GACuB,CACnC,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,IAAI,GAAG,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC;AAC1B,MAAM,gBAAgB,GAAmB,EAAE,CAAC;AAE5C;;GAEG;AACH,MAAM,UAAU,yBAAyB,CACvC,cAAkD;IAElD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,cAAc,EAAE,SAAS,IAAI,IAAI,CAAC;IACxD,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC;IAC7B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,aAAa,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CACX,0LAA0L,CAC3L,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAEhC,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,cAAc,EAAE,CAAC;QACnB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,OAAO;QACL,SAAS,EAAE,IAAI;QACf,QAAQ,EAAE,IAAI;QACd,KAAK,EAAE;YACL,UAAU,EAAE,gBAAgB;YAC5B,IAAI,EAAE,IAAI;YACV,WAAW,EAAE,IAAI;SAClB;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAC1C,IAAsD;IAEtD,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,sBAAsB,CAAC,CAAC;IACzD,MAAM,aAAa,GAAG,IAAI,EAAE,SAAS,CAAC;IACtC,MAAM,UAAU,GAAG,CAAC,CAAC,OAAO,CAAC;IAC7B,KAAK,CAAC,SAAS,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC,aAAa,IAAI,CAAC,UAAU,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CACX,4LAA4L,CAC7L,CAAC;QACJ,CAAC;IACH,CAAC,EAAE,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAChC,OAAO,aAAa,IAAI,OAAO,EAAE,SAAS,IAAI,IAAI,CAAC;AACrD,CAAC"}
@@ -0,0 +1,22 @@
1
+ import * as React from "react";
2
+ import type { PaginationData } from "./api/user";
3
+ export declare function useUsersManagementState(initialState: UsersManagementState): readonly [UsersManagementState, React.Dispatch<UsersManagementAction>];
4
+ export interface UsersManagementState {
5
+ searchQuery: string | null;
6
+ role: string | null;
7
+ pagination: PaginationData | null;
8
+ }
9
+ export type UsersManagementAction = {
10
+ type: "INIT";
11
+ params: URLSearchParams;
12
+ } | {
13
+ type: "FILTER_BY_SEARCH";
14
+ searchQuery: string | null;
15
+ } | {
16
+ type: "FILTER_BY_ROLE";
17
+ role: string | null;
18
+ } | {
19
+ type: "SET_PAGINATION";
20
+ pagination: PaginationData;
21
+ };
22
+ //# sourceMappingURL=users-management-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-management-state.d.ts","sourceRoot":"","sources":["../../../src/lib/users-management-state.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAGjD,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,oBAAoB,0EAsBzE;AAmFD,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,UAAU,EAAE,cAAc,GAAG,IAAI,CAAC;CACnC;AAED,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,eAAe,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GACxD;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,GAC/C;IAAE,IAAI,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,cAAc,CAAA;CAAE,CAAC"}
@@ -0,0 +1,117 @@
1
+ import * as React from "react";
2
+ import { canUseDOM } from "./utils";
3
+ export function useUsersManagementState(initialState) {
4
+ const [[state, effects], dispatch] = React.useReducer(reducer, [
5
+ initialState,
6
+ [],
7
+ ]);
8
+ React.useEffect(() => {
9
+ if (window !== window.top) {
10
+ // do not use query params if widget is rendered in an iframe
11
+ return;
12
+ }
13
+ const params = new URLSearchParams(window.location.search);
14
+ dispatch({ type: "INIT", params });
15
+ }, []);
16
+ React.useEffect(() => {
17
+ for (const effect of effects) {
18
+ effect();
19
+ }
20
+ }, [effects]);
21
+ return [state, dispatch];
22
+ }
23
+ function reducer(current, action) {
24
+ const effects = [];
25
+ const exec = (fn) => {
26
+ const effect = () => {
27
+ if (!effect.disposed) {
28
+ effect.disposed = true;
29
+ fn();
30
+ }
31
+ };
32
+ effect.disposed = false;
33
+ effects.push(effect);
34
+ };
35
+ const [currentState] = current;
36
+ switch (action.type) {
37
+ case "INIT": {
38
+ const { params } = action;
39
+ let role, searchQuery;
40
+ if ((role = params.get("ak_role"))) {
41
+ return [{ ...currentState, searchQuery: null, role }, effects];
42
+ }
43
+ if ((searchQuery = params.get("ak_q"))) {
44
+ return [{ ...currentState, searchQuery, role: null }, effects];
45
+ }
46
+ return current;
47
+ }
48
+ case "SET_PAGINATION": {
49
+ const { pagination } = action;
50
+ if ((pagination.after &&
51
+ pagination.after === currentState.pagination?.after) ||
52
+ (pagination.before &&
53
+ pagination.before === currentState.pagination?.before)) {
54
+ return current;
55
+ }
56
+ return [{ ...currentState, pagination }, effects];
57
+ }
58
+ case "FILTER_BY_ROLE": {
59
+ if (action.role === currentState.role) {
60
+ return current;
61
+ }
62
+ const { role } = action;
63
+ exec(() => updateQueryParams({ ak_role: role, ak_q: null }, { replaceState: true }));
64
+ return [
65
+ { ...currentState, pagination: null, role, searchQuery: null },
66
+ effects,
67
+ ];
68
+ }
69
+ case "FILTER_BY_SEARCH": {
70
+ if (action.searchQuery === currentState.searchQuery) {
71
+ return current;
72
+ }
73
+ const { searchQuery } = action;
74
+ exec(() => updateQueryParams({ ak_role: null, ak_q: searchQuery }, { replaceState: true }));
75
+ return [
76
+ { ...currentState, pagination: null, role: null, searchQuery },
77
+ effects,
78
+ ];
79
+ //
80
+ break;
81
+ }
82
+ default:
83
+ return current;
84
+ }
85
+ }
86
+ function updateQueryParams(newParams, args = {}) {
87
+ if (!canUseDOM) {
88
+ throw new Error("Cannot update query params on the server");
89
+ }
90
+ if (window !== window.top) {
91
+ // do not update query params if widget is rendered in an iframe
92
+ return;
93
+ }
94
+ const initialSearch = window.location.search;
95
+ const params = new URLSearchParams(initialSearch);
96
+ Object.entries(newParams).forEach(([key, value]) => {
97
+ if (value != null && value !== "") {
98
+ params.set(key, String(value));
99
+ }
100
+ else {
101
+ params.delete(key);
102
+ }
103
+ });
104
+ if (initialSearch === `?${params.toString()}`) {
105
+ return;
106
+ }
107
+ const newUrl = params.toString()
108
+ ? `${window.location.pathname}?${params}`
109
+ : window.location.pathname;
110
+ if (args.replaceState) {
111
+ window.history.replaceState({}, "", newUrl);
112
+ }
113
+ else {
114
+ window.history.pushState({}, "", newUrl);
115
+ }
116
+ }
117
+ //# sourceMappingURL=users-management-state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-management-state.js","sourceRoot":"","sources":["../../../src/lib/users-management-state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Role } from "./api/role";
2
+ import type { Paginated, User } from "./api/user";
3
+ interface UsersManagementProps {
4
+ rolesData: Role[] | undefined;
5
+ userData: Paginated<User[]> | undefined;
6
+ alternate?: boolean;
7
+ isPending?: boolean;
8
+ isInitialLoading?: boolean;
9
+ }
10
+ export declare const UsersManagement: ({ userData, rolesData, alternate, isPending, isInitialLoading, }: UsersManagementProps) => import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=users-management.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-management.d.ts","sourceRoot":"","sources":["../../../src/lib/users-management.tsx"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAmBlD,UAAU,oBAAoB;IAC5B,SAAS,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC;IAC9B,QAAQ,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC;IAGxC,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,eAAO,MAAM,eAAe,qEAMzB,oBAAoB,4CAgLtB,CAAC"}
@@ -0,0 +1,114 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { Box, Flex, Grid, Skeleton, Table, Text, VisuallyHidden, } from "@radix-ui/themes";
5
+ import { Avatar, Badge, IconButton, PrimaryButton, SecondaryButton, } from "./elements";
6
+ import { InviteUserDialog } from "./invite-user-dialog";
7
+ import { Pagination } from "./pagination";
8
+ import { SearchProvider, useSearchContext } from "./search-provider";
9
+ import { useIsHydrated } from "./use-is-hydrated";
10
+ import { UserActionsDropdown } from "./user-actions-dropdown";
11
+ import { UsersFilter } from "./users-filter";
12
+ import { UsersSearch } from "./users-search";
13
+ import { getBestName, getComparativeReadableDate } from "./utils";
14
+ import { USER_ROW_LIMIT } from "./constants";
15
+ import { useUsersManagementContext } from "./users-management-context";
16
+ export const UsersManagement = ({ userData, rolesData, alternate, isPending, isInitialLoading, }) => {
17
+ const users = userData?.data;
18
+ const usersCount = users?.length ?? 0;
19
+ const isHydrated = useIsHydrated();
20
+ return (_jsx(SearchProvider, { children: _jsxs(Flex, { direction: "column", gap: "3", children: [_jsxs(Grid, { columns: "1fr auto", gap: "2", children: [_jsxs(Flex, { gap: "2", align: "center", children: [_jsx(Skeleton, { loading: isInitialLoading, children: _jsx(Box, { flexBasis: "380px", flexGrow: "0", flexShrink: "1", children: _jsx(UsersSearch, {}) }) }), _jsx(Skeleton, { loading: isInitialLoading, children: _jsx(Box, { flexGrow: "0", flexShrink: "0", children: _jsx(UsersFilter, { roles: rolesData }) }) })] }), _jsx(Skeleton, { loading: isInitialLoading, children: _jsx(Box, { flexGrow: "0", flexShrink: "0", style: { placeSelf: "flex-end" }, children: _jsx(InviteUserDialog, { children: _jsx(PrimaryButton, { children: "Invite user" }) }) }) })] }), _jsxs(Table.Root, { variant: "ghost", size: "1", children: [_jsx(Table.Header, { children: _jsxs(Table.Row, { children: [_jsx(Table.ColumnHeaderCell, { width: "260px", children: _jsx(Skeleton, { loading: isInitialLoading, children: "User" }) }), _jsx(Table.ColumnHeaderCell, { width: "100px", children: _jsx(Skeleton, { loading: isInitialLoading, children: "Role" }) }), _jsx(Table.ColumnHeaderCell, { width: "140px", children: _jsx(Skeleton, { loading: isInitialLoading, children: "Last active" }) }), _jsx(Table.ColumnHeaderCell, { width: "28px" })] }) }), _jsxs(Table.Body, { style: {
21
+ transition: `opacity 0.2s ease-out ${isPending ? "0.2s" : "0s"}`,
22
+ opacity: isPending && usersCount > 0 ? 0.5 : 1,
23
+ }, children: [isInitialLoading && (_jsx(SkeletonRows, { length: USER_ROW_LIMIT, alternate: alternate })), users?.map((user, i) => {
24
+ // TODO only support one role for now
25
+ const userRole = user.roles[0]?.name;
26
+ const userDisplayName = getBestName(user);
27
+ const dimText = user.status === "InviteRevoked" ||
28
+ user.status === "InviteExpired";
29
+ return (_jsxs(Table.Row, { align: "center", style: {
30
+ background: alternate && i % 2 === 1 ? "var(--gray-a1)" : undefined,
31
+ }, children: [_jsx(Table.RowHeaderCell, { children: _jsxs(Flex, { align: "center", gap: "3", overflow: "hidden", height: "var(--space-7)", children: [_jsx(Avatar, { size: "2", fallback: _jsx(FallbackUserIcon, {}), src: user.profilePictureUrl ?? undefined, dim: dimText }), userDisplayName ? (_jsxs(Flex, { direction: "column", align: "start", height: "var(--space-7)", justify: "center", overflow: "hidden", children: [_jsxs(Flex, { gap: "2", align: "center", minWidth: "0", children: [_jsx(TableCellText, { dim: dimText, children: userDisplayName }), _jsx(UserBadge, { user: user })] }), _jsx(TableCellText, { level: "secondary", title: user.email, dim: dimText, children: user.email })] })) : (_jsxs(Flex, { gap: "2", align: "center", minWidth: "0", children: [_jsx(TableCellText, { dim: dimText, title: user.email, children: user.email }), _jsx(UserBadge, { user: user })] }))] }) }), _jsx(Table.Cell, { children: _jsx(TableCellText, { dim: dimText, children: userRole || (_jsxs(_Fragment, { children: [_jsx(VisuallyHidden, { children: "No roles assigned" }), _jsx("span", { "aria-hidden": true, style: { userSelect: "none" }, children: "\u2013" })] })) }) }), _jsx(Table.Cell, { children: _jsx(LastActive, { user: user, isHydrated: isHydrated, dim: dimText }) }), _jsx(Table.Cell, { justify: "end", children: _jsx(UserActionsDropdown, { user: user, children: _jsxs(IconButton, { title: "User actions", children: [_jsx(VisuallyHidden, { children: "User actions" }), _jsx("svg", { xmlns: "http://www.w3.org/2000/svg", fill: "none", viewBox: "0 0 24 24", width: "16", height: "16", strokeWidth: 1.5, stroke: "currentColor", "aria-hidden": true, children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", d: "M6.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM12.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0ZM18.75 12a.75.75 0 1 1-1.5 0 .75.75 0 0 1 1.5 0Z" }) })] }) }) })] }, user.id));
32
+ }), users?.length === 0 && (_jsx(Table.Row, { align: "center", children: _jsx(Table.Cell, { colSpan: 4, children: _jsx(UsersManagementEmptyState, {}) }) }))] })] }), _jsx(Pagination, { isPending: isPending, pagination: userData?.pagination })] }) }));
33
+ };
34
+ function UserBadge({ user }) {
35
+ // TODO: This is not yet available in the data. Update here after API is updated.
36
+ if (user.isLoggedInUser) {
37
+ return (_jsx(Badge, { color: "gray", style: { userSelect: "none" }, children: "You" }));
38
+ }
39
+ if (user.status === "Invited") {
40
+ return (_jsxs(Badge, { color: "amber", style: { userSelect: "none" }, children: [_jsx(VisuallyHidden, { children: "Status: " }), "Invited"] }));
41
+ }
42
+ if (user.status === "InviteExpired") {
43
+ return (_jsxs(Badge, { color: "red", style: { userSelect: "none" }, children: [_jsx(VisuallyHidden, { children: "Status: Invite " }), "Expired"] }));
44
+ }
45
+ if (user.status === "InviteRevoked") {
46
+ return (_jsxs(Badge, { color: "red", style: { userSelect: "none" }, children: [_jsx(VisuallyHidden, { children: "Status: Invite " }), "Revoked"] }));
47
+ }
48
+ return null;
49
+ }
50
+ function LastActive(props) {
51
+ if (!props.user.lastActivityAt) {
52
+ return (_jsxs(_Fragment, { children: [_jsx(VisuallyHidden, { children: props.user.status === "Active" ? "Never" : "Not active" }), _jsx(TableCellText, { dim: props.dim, "aria-hidden": true, style: { userSelect: "none" }, children: "\u2013" })] }));
53
+ }
54
+ return _jsx(LastActiveImpl, { ...props, date: props.user.lastActivityAt });
55
+ }
56
+ function LastActiveImpl({ date, isHydrated, dim, }) {
57
+ const { lastActiveDateTime, lastActiveDisplay } = React.useMemo(() => {
58
+ const defaultTimeZone = "America/Los_Angeles";
59
+ const lastActiveDate = new Date(date);
60
+ const lastActiveDateTime = lastActiveDate.toLocaleTimeString("en-US", {
61
+ // hard-coded timezone before hydration to prevent server/client mismatch
62
+ timeZone: isHydrated ? undefined : defaultTimeZone,
63
+ month: "long",
64
+ day: "numeric",
65
+ year: "numeric",
66
+ hour: "numeric",
67
+ minute: "numeric",
68
+ });
69
+ // Server and client may produce a different 'now' date, so only
70
+ // show comparative date if the component is hydrated to prevent a
71
+ // server/client mismatch
72
+ const lastActiveDisplay = isHydrated
73
+ ? getComparativeReadableDate(new Date(), lastActiveDate)
74
+ : lastActiveDate.toLocaleDateString("en-US", {
75
+ // hard-coded timezone to prevent server/client mismatch
76
+ timeZone: defaultTimeZone,
77
+ month: "long",
78
+ day: "numeric",
79
+ year: "numeric",
80
+ });
81
+ return { lastActiveDateTime, lastActiveDisplay };
82
+ }, [isHydrated, date]);
83
+ // handle cases where the DB might return an invalid date string
84
+ if (lastActiveDisplay === "Invalid Date") {
85
+ return (_jsxs(_Fragment, { children: [_jsx(VisuallyHidden, { children: "Unknown" }), _jsx(TableCellText, { dim: dim, "aria-hidden": true, style: { userSelect: "none" }, children: "\u2013" })] }));
86
+ }
87
+ return (_jsx(TableCellText, { asChild: true, dim: dim, children: _jsx("time", { dateTime: date, title: lastActiveDateTime, children: lastActiveDisplay }) }));
88
+ }
89
+ const SkeletonRows = ({ length, alternate = false, }) => {
90
+ return Array.from({ length }, (_, index) => {
91
+ return (_jsxs(Table.Row, { align: "center", style: {
92
+ background: alternate && index % 2 === 1 ? "var(--gray-a1)" : undefined,
93
+ }, children: [_jsx(Table.RowHeaderCell, { children: _jsxs(Flex, { align: "center", gap: "3", children: [_jsx(Skeleton, { children: _jsx(Avatar, { size: "2", fallback: "F" }) }), _jsxs(Flex, { direction: "column", height: "var(--space-7)", justify: "center", children: [_jsx(Skeleton, { width: "180px", height: "var(--space-4)" }), _jsx(Skeleton, { width: "90px", height: "var(--space-3)", mt: "1" })] })] }) }), _jsx(Table.Cell, { children: _jsx(Flex, { wrap: "wrap", gap: "1", children: _jsx(Skeleton, { width: "75px", height: "var(--space-4)" }) }) }), _jsx(Table.Cell, { children: _jsx(Skeleton, { width: "120px", height: "var(--space-4)" }) }), _jsx(Table.Cell, { justify: "end" })] }, index));
94
+ });
95
+ };
96
+ const TableCellText = React.forwardRef(function TableCellText({ children, dim, level = "primary", ...props }, forwardedRef) {
97
+ return (_jsx(Text, { ref: forwardedRef, color: level === "secondary" ? "gray" : undefined, weight: level === "secondary" ? "regular" : "medium", size: level === "secondary" ? "1" : "2", truncate: true, ...props, style: dim
98
+ ? {
99
+ // TODO: use CSS var instead of hard-coded value for opacity
100
+ opacity: 0.6,
101
+ ...props.style,
102
+ }
103
+ : props.style, children: children }));
104
+ });
105
+ const FallbackUserIcon = () => (_jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "20", height: "20", fill: "currentColor", viewBox: "0 0 256 256", children: [_jsx("title", { children: "User icon" }), _jsx("path", { d: "M229.19,213c-15.81-27.32-40.63-46.49-69.47-54.62a70,70,0,1,0-63.44,0C67.44,166.5,42.62,185.67,26.81,213a6,6,0,1,0,10.38,6C56.4,185.81,90.34,166,128,166s71.6,19.81,90.81,53a6,6,0,1,0,10.38-6ZM70,96a58,58,0,1,1,58,58A58.07,58.07,0,0,1,70,96Z" })] }));
106
+ const UsersManagementEmptyState = () => {
107
+ const { clearSearch } = useSearchContext();
108
+ const { state: { searchQuery }, } = useUsersManagementContext();
109
+ if (searchQuery) {
110
+ return (_jsxs(Flex, { align: "center", justify: "center", py: "8", direction: "column", gap: "2", children: [_jsxs(Text, { size: "2", children: ["No users found for query ", _jsxs(Text, { weight: "medium", children: ["\u201C", searchQuery, "\u201D"] })] }), _jsx(SecondaryButton, { size: "1", onClick: clearSearch, children: "Clear search" })] }));
111
+ }
112
+ return (_jsx(Flex, { align: "center", justify: "center", py: "8", gap: "2", children: _jsx(Text, { size: "2", children: "No users found" }) }));
113
+ };
114
+ //# sourceMappingURL=users-management.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-management.js","sourceRoot":"","sources":["../../../src/lib/users-management.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import * as React from "react";
2
+ export declare const UsersSearch: React.ForwardRefExoticComponent<Omit<Omit<import("@radix-ui/themes/dist/esm/components/text-field.js").RootProps & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>, "ref"> & React.RefAttributes<HTMLInputElement>>;
3
+ //# sourceMappingURL=users-search.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-search.d.ts","sourceRoot":"","sources":["../../../src/lib/users-search.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAQ/B,eAAO,MAAM,WAAW,2PAyDvB,CAAC"}
@@ -0,0 +1,39 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useComposedRefs } from "@radix-ui/react-compose-refs";
4
+ import { Cross2Icon, MagnifyingGlassIcon } from "@radix-ui/react-icons";
5
+ import { Checkbox, DropdownMenu, Flex, IconButton } from "@radix-ui/themes";
6
+ import * as React from "react";
7
+ import { useDebouncedCallback } from "use-debounce";
8
+ import { PrimaryMenuItem, TextField, TextFieldSlot } from "./elements";
9
+ import { useSearchContext } from "./search-provider";
10
+ import { useUsersManagementContext } from "./users-management-context";
11
+ export const UsersSearch = React.forwardRef((props, ref) => {
12
+ const { inputRef, clearSearch, searchValue, setSearchValue } = useSearchContext();
13
+ const { dispatch } = useUsersManagementContext();
14
+ const filter = useDebouncedCallback((value) => {
15
+ dispatch({ type: "FILTER_BY_SEARCH", searchQuery: value });
16
+ }, 200);
17
+ const resetSearch = () => {
18
+ clearSearch();
19
+ filter.cancel();
20
+ };
21
+ return (_jsxs(TextField, { ref: useComposedRefs(inputRef, ref), autoComplete: "off", placeholder: "Search by name or e-mail", value: searchValue, onChange: (event) => {
22
+ const value = event.target.value;
23
+ setSearchValue(value);
24
+ filter(value);
25
+ }, onKeyDown: (event) => {
26
+ if (event.key === "Escape") {
27
+ event.preventDefault();
28
+ resetSearch();
29
+ }
30
+ }, ...props, children: [_jsx(TextFieldSlot, { side: "left", children: _jsx(MagnifyingGlassIcon, { "aria-hidden": "true", height: "16", width: "16" }) }), _jsx(TextFieldSlot, { side: "right", children: searchValue && (_jsx(IconButton, { size: "1", color: "gray", variant: "ghost", radius: "full", onClick: resetSearch, "aria-label": "Clear search", title: "Clear search", children: _jsx(Cross2Icon, { "aria-hidden": "true" }) })) })] }));
31
+ });
32
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
33
+ function FilterMenu() {
34
+ return (_jsxs(DropdownMenu.Root, { children: [_jsx(DropdownMenu.Trigger, { children: _jsx(IconButton, { size: "1", color: "gray", variant: "ghost", radius: "full", "aria-label": "Filter users", title: "Filter users", children: _jsx(FilterIcon, { "aria-hidden": "true" }) }) }), _jsxs(DropdownMenu.Content, { size: "2", align: "end", children: [_jsx(PrimaryMenuItem, { children: _jsxs(Flex, { gap: "2", align: "center", children: [_jsx(Checkbox, { variant: "surface" }), "One"] }) }), _jsx(PrimaryMenuItem, { children: _jsxs(Flex, { gap: "2", align: "center", children: [_jsx(Checkbox, {}), "Two"] }) })] })] }));
35
+ }
36
+ const FilterIcon = React.forwardRef(function FilterIcon({ children, ...props }, forwardedRef) {
37
+ return (_jsxs("svg", { width: "15", height: "15", viewBox: "0 0 15 15", fill: "currentColor", xmlns: "http://www.w3.org/2000/svg", ref: forwardedRef, ...props, children: [children, _jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M1.5 1C1.22386 1 1 1.22386 1 1.5V4.5C1 4.66316 1.07961 4.81605 1.21327 4.90962L6 8.26033V13.5C6 13.6733 6.08973 13.8342 6.23713 13.9253C6.38454 14.0164 6.56861 14.0247 6.72361 13.9472L8.72361 12.9472C8.893 12.8625 9 12.6894 9 12.5V8.26033L13.7867 4.90962C13.9204 4.81605 14 4.66316 14 4.5V1.5C14 1.22386 13.7761 1 13.5 1H1.5ZM2 4.23967V2H13V4.23967L8.21327 7.59038C8.07961 7.68395 8 7.83684 8 8V12.191L7 12.691V8C7 7.83684 6.92039 7.68395 6.78673 7.59038L2 4.23967ZM12 3H3V4H12V3Z", fill: "black" })] }));
38
+ });
39
+ //# sourceMappingURL=users-search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-search.js","sourceRoot":"","sources":["../../../src/lib/users-search.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { User } from "./api/user";
2
+ export declare const canUseDOM: boolean;
3
+ export declare function getBestName({ firstName, lastName, }: Pick<User, "firstName" | "lastName">): string | null;
4
+ export declare function getComparativeReadableDate(now: Date, then: Date, options?: {
5
+ timeZone?: string;
6
+ }): string;
7
+ export declare function isObjectLike(value: unknown): value is Record<string, unknown>;
8
+ export declare function isErrorLike(value: unknown): value is Record<string, unknown> & {
9
+ message: string;
10
+ };
11
+ export declare function parseErrorResponse(response: Response): Promise<{
12
+ message: string;
13
+ status: number;
14
+ }>;
15
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,eAAO,MAAM,SAAS,SAIrB,CAAC;AAEF,wBAAgB,WAAW,CAAC,EAC1B,SAAS,EACT,QAAQ,GACT,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,GAAG,UAAU,CAAC,iBAEtC;AAED,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,IAAI,EACT,IAAI,EAAE,IAAI,EACV,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC9B,MAAM,CAwCR;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE7E;AAED,wBAAgB,WAAW,CACzB,KAAK,EAAE,OAAO,GACb,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAExD;AAED,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,QAAQ,GACjB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAoB9C"}
@@ -0,0 +1,70 @@
1
+ export const canUseDOM = !!(typeof window !== "undefined" &&
2
+ window.document &&
3
+ window.document.createElement);
4
+ export function getBestName({ firstName, lastName, }) {
5
+ return [firstName, lastName].filter(Boolean).join(" ") || null;
6
+ }
7
+ export function getComparativeReadableDate(now, then, options) {
8
+ const timeSince = now.getTime() - then.getTime();
9
+ // Has it been less than a minute?
10
+ if (timeSince < 60_000) {
11
+ return "Just now";
12
+ }
13
+ // Has it been less than an hour?
14
+ if (timeSince < 3_600_000) {
15
+ const timePassed = Math.floor(timeSince / 60_000);
16
+ return timePassed === 1 ? "1 minute ago" : `${timePassed} minutes ago`;
17
+ }
18
+ // Has it been less than a day?
19
+ if (timeSince < 86_400_000) {
20
+ const timePassed = Math.floor(timeSince / 3_600_000);
21
+ return timePassed === 1 ? "1 hour ago" : `${timePassed} hours ago`;
22
+ }
23
+ // Has it been less than a week?
24
+ if (timeSince < 604_800_000) {
25
+ const timePassed = Math.floor(timeSince / 86_400_000);
26
+ return timePassed === 1 ? "1 day ago" : `${timePassed} days ago`;
27
+ }
28
+ // Has it been less than a month?
29
+ if (timeSince < 2_592_000_000) {
30
+ const timePassed = Math.floor(timeSince / 604_800_000);
31
+ return timePassed === 1 ? "1 week ago" : `${timePassed} weeks ago`;
32
+ }
33
+ // Any later?
34
+ return then.toLocaleDateString("en-US", {
35
+ timeZone: options?.timeZone,
36
+ month: "long",
37
+ day: "numeric",
38
+ // omit year if it's the same as the current year
39
+ year: now.getFullYear() !== then.getFullYear() ? "numeric" : undefined,
40
+ });
41
+ }
42
+ export function isObjectLike(value) {
43
+ return typeof value === "object" && value !== null;
44
+ }
45
+ export function isErrorLike(value) {
46
+ return isObjectLike(value) && typeof value.message === "string";
47
+ }
48
+ export async function parseErrorResponse(response) {
49
+ try {
50
+ const json = await response.json();
51
+ if (!isObjectLike(json) || typeof json.message !== "string") {
52
+ return {
53
+ status: response.status,
54
+ message: response.statusText,
55
+ };
56
+ }
57
+ return {
58
+ ...json,
59
+ status: response.status,
60
+ message: json.message || response.statusText,
61
+ };
62
+ }
63
+ catch {
64
+ return {
65
+ status: response.status,
66
+ message: response.statusText,
67
+ };
68
+ }
69
+ }
70
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/lib/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ import type { Elements } from "./elements";
3
+ export interface WidgetsContextType {
4
+ elements: Elements;
5
+ apiBaseUrl: string;
6
+ }
7
+ declare const WidgetsContext: React.Context<WidgetsContextType | undefined>;
8
+ export { WidgetsContext };
9
+ export declare function useWorkOsApiUrl(): string;
10
+ export declare function useElement<K extends keyof Elements>(key: K): NonNullable<Elements[K]>;
11
+ //# sourceMappingURL=widgets-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgets-context.d.ts","sourceRoot":"","sources":["../../../src/lib/widgets-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,QAAA,MAAM,cAAc,+CAEnB,CAAC;AAEF,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,wBAAgB,eAAe,WAG9B;AAED,wBAAgB,UAAU,CAAC,CAAC,SAAS,MAAM,QAAQ,EACjD,GAAG,EAAE,CAAC,GACL,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAM1B"}
@@ -0,0 +1,17 @@
1
+ import * as React from "react";
2
+ import { DEFAULT_API_HOSTNAME } from "./api/config";
3
+ const WidgetsContext = React.createContext(undefined);
4
+ WidgetsContext.displayName = "WidgetsContext";
5
+ export { WidgetsContext };
6
+ export function useWorkOsApiUrl() {
7
+ const context = React.useContext(WidgetsContext);
8
+ return context?.apiBaseUrl || `https://${DEFAULT_API_HOSTNAME}`;
9
+ }
10
+ export function useElement(key) {
11
+ const context = React.useContext(WidgetsContext);
12
+ if (!context) {
13
+ throw new Error("useElement must be used within a WidgetsContext provider");
14
+ }
15
+ return context.elements[key] || {};
16
+ }
17
+ //# sourceMappingURL=widgets-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"widgets-context.js","sourceRoot":"","sources":["../../../src/lib/widgets-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AAQpD,MAAM,cAAc,GAAG,KAAK,CAAC,aAAa,CACxC,SAAS,CACV,CAAC;AACF,cAAc,CAAC,WAAW,GAAG,gBAAgB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,CAAC;AAE1B,MAAM,UAAU,eAAe;IAC7B,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACjD,OAAO,OAAO,EAAE,UAAU,IAAI,WAAW,oBAAoB,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,UAAU,CACxB,GAAM;IAEN,MAAM,OAAO,GAAG,KAAK,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;IACjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACrC,CAAC"}
@@ -0,0 +1,6 @@
1
+ import * as React from "react";
2
+ export interface UsersManagementProps {
3
+ authToken: string | null | undefined;
4
+ }
5
+ export declare const UsersManagement: React.FC<UsersManagementProps>;
6
+ //# sourceMappingURL=users-management.client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users-management.client.d.ts","sourceRoot":"","sources":["../../src/users-management.client.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACtC;AAQD,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAgC1D,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { jsx as _jsx } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { useRoles } from "./lib/api/role";
5
+ import { useUsers } from "./lib/api/user";
6
+ import { useIsHydrated } from "./lib/use-is-hydrated";
7
+ import { UsersManagement as UsersManagementPresentational } from "./lib/users-management";
8
+ import { UsersManagementContextProvider, } from "./lib/users-management-context";
9
+ import { useUsersManagementState, } from "./lib/users-management-state";
10
+ const initialState = {
11
+ pagination: null,
12
+ role: null,
13
+ searchQuery: null,
14
+ };
15
+ export const UsersManagement = ({ authToken = null, }) => {
16
+ const isHydrated = useIsHydrated();
17
+ const [state, dispatch] = useUsersManagementState(initialState);
18
+ const context = React.useMemo(() => ({
19
+ authToken,
20
+ state,
21
+ dispatch,
22
+ }), [authToken, state, dispatch]);
23
+ const rolesQuery = useRoles(context);
24
+ const usersQuery = useUsers(context);
25
+ const isFetching = usersQuery.isFetching || rolesQuery.isFetching;
26
+ const isLoading = usersQuery.isLoading || rolesQuery.isLoading;
27
+ const isPending = usersQuery.isPlaceholderData || rolesQuery.isPlaceholderData;
28
+ return (_jsx(UsersManagementContextProvider, { value: context, children: _jsx(UsersManagementPresentational, { userData: usersQuery.data, rolesData: rolesQuery.data, isInitialLoading: (isFetching && isLoading) || !isHydrated, isPending: isPending }) }));
29
+ };
30
+ //# sourceMappingURL=users-management.client.js.map