@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.
- package/LICENSE +21 -0
- package/README.md +3 -0
- package/dist/cjs/index.d.ts +3 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +8 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/lib/api/config.d.ts +9 -0
- package/dist/cjs/lib/api/config.d.ts.map +1 -0
- package/dist/cjs/lib/api/config.js +12 -0
- package/dist/cjs/lib/api/config.js.map +1 -0
- package/dist/cjs/lib/api/role.d.ts +9 -0
- package/dist/cjs/lib/api/role.d.ts.map +1 -0
- package/dist/cjs/lib/api/role.js +94 -0
- package/dist/cjs/lib/api/role.js.map +1 -0
- package/dist/cjs/lib/api/user.d.ts +61 -0
- package/dist/cjs/lib/api/user.d.ts.map +1 -0
- package/dist/cjs/lib/api/user.js +312 -0
- package/dist/cjs/lib/api/user.js.map +1 -0
- package/dist/cjs/lib/constants.d.ts +3 -0
- package/dist/cjs/lib/constants.d.ts.map +1 -0
- package/dist/cjs/lib/constants.js +6 -0
- package/dist/cjs/lib/constants.js.map +1 -0
- package/dist/cjs/lib/delete-user-dialog.d.ts +12 -0
- package/dist/cjs/lib/delete-user-dialog.d.ts.map +1 -0
- package/dist/cjs/lib/delete-user-dialog.js +37 -0
- package/dist/cjs/lib/delete-user-dialog.js.map +1 -0
- package/dist/cjs/lib/edit-user-details-dialog.d.ts +12 -0
- package/dist/cjs/lib/edit-user-details-dialog.d.ts.map +1 -0
- package/dist/cjs/lib/edit-user-details-dialog.js +81 -0
- package/dist/cjs/lib/edit-user-details-dialog.js.map +1 -0
- package/dist/cjs/lib/elements.d.ts +32 -0
- package/dist/cjs/lib/elements.d.ts.map +1 -0
- package/dist/cjs/lib/elements.js +57 -0
- package/dist/cjs/lib/elements.js.map +1 -0
- package/dist/cjs/lib/invite-user-dialog.d.ts +7 -0
- package/dist/cjs/lib/invite-user-dialog.d.ts.map +1 -0
- package/dist/cjs/lib/invite-user-dialog.js +167 -0
- package/dist/cjs/lib/invite-user-dialog.js.map +1 -0
- package/dist/cjs/lib/label.d.ts +7 -0
- package/dist/cjs/lib/label.d.ts.map +1 -0
- package/dist/cjs/lib/label.js +9 -0
- package/dist/cjs/lib/label.js.map +1 -0
- package/dist/cjs/lib/pagination.d.ts +8 -0
- package/dist/cjs/lib/pagination.d.ts.map +1 -0
- package/dist/cjs/lib/pagination.js +67 -0
- package/dist/cjs/lib/pagination.js.map +1 -0
- package/dist/cjs/lib/resend-invite-dialog.d.ts +10 -0
- package/dist/cjs/lib/resend-invite-dialog.d.ts.map +1 -0
- package/dist/cjs/lib/resend-invite-dialog.js +71 -0
- package/dist/cjs/lib/resend-invite-dialog.js.map +1 -0
- package/dist/cjs/lib/revoke-invite-dialog.d.ts +10 -0
- package/dist/cjs/lib/revoke-invite-dialog.d.ts.map +1 -0
- package/dist/cjs/lib/revoke-invite-dialog.js +37 -0
- package/dist/cjs/lib/revoke-invite-dialog.js.map +1 -0
- package/dist/cjs/lib/search-provider.d.ts +11 -0
- package/dist/cjs/lib/search-provider.d.ts.map +1 -0
- package/dist/cjs/lib/search-provider.js +55 -0
- package/dist/cjs/lib/search-provider.js.map +1 -0
- package/dist/cjs/lib/use-is-hydrated.d.ts +2 -0
- package/dist/cjs/lib/use-is-hydrated.d.ts.map +1 -0
- package/dist/cjs/lib/use-is-hydrated.js +34 -0
- package/dist/cjs/lib/use-is-hydrated.js.map +1 -0
- package/dist/cjs/lib/user-actions-dropdown.d.ts +9 -0
- package/dist/cjs/lib/user-actions-dropdown.d.ts.map +1 -0
- package/dist/cjs/lib/user-actions-dropdown.js +83 -0
- package/dist/cjs/lib/user-actions-dropdown.js.map +1 -0
- package/dist/cjs/lib/users-filter.d.ts +9 -0
- package/dist/cjs/lib/users-filter.d.ts.map +1 -0
- package/dist/cjs/lib/users-filter.js +63 -0
- package/dist/cjs/lib/users-filter.js.map +1 -0
- package/dist/cjs/lib/users-management-context.d.ts +23 -0
- package/dist/cjs/lib/users-management-context.d.ts.map +1 -0
- package/dist/cjs/lib/users-management-context.js +83 -0
- package/dist/cjs/lib/users-management-context.js.map +1 -0
- package/dist/cjs/lib/users-management-state.d.ts +22 -0
- package/dist/cjs/lib/users-management-state.d.ts.map +1 -0
- package/dist/cjs/lib/users-management-state.js +143 -0
- package/dist/cjs/lib/users-management-state.js.map +1 -0
- package/dist/cjs/lib/users-management.d.ts +12 -0
- package/dist/cjs/lib/users-management.d.ts.map +1 -0
- package/dist/cjs/lib/users-management.js +141 -0
- package/dist/cjs/lib/users-management.js.map +1 -0
- package/dist/cjs/lib/users-search.d.ts +3 -0
- package/dist/cjs/lib/users-search.d.ts.map +1 -0
- package/dist/cjs/lib/users-search.js +65 -0
- package/dist/cjs/lib/users-search.js.map +1 -0
- package/dist/cjs/lib/utils.d.ts +15 -0
- package/dist/cjs/lib/utils.d.ts.map +1 -0
- package/dist/cjs/lib/utils.js +78 -0
- package/dist/cjs/lib/utils.js.map +1 -0
- package/dist/cjs/lib/widgets-context.d.ts +11 -0
- package/dist/cjs/lib/widgets-context.d.ts.map +1 -0
- package/dist/cjs/lib/widgets-context.js +45 -0
- package/dist/cjs/lib/widgets-context.js.map +1 -0
- package/dist/cjs/users-management.client.d.ts +6 -0
- package/dist/cjs/users-management.client.d.ts.map +1 -0
- package/dist/cjs/users-management.client.js +57 -0
- package/dist/cjs/users-management.client.js.map +1 -0
- package/dist/cjs/workos-widgets.client.d.ts +17 -0
- package/dist/cjs/workos-widgets.client.d.ts.map +1 -0
- package/dist/cjs/workos-widgets.client.js +55 -0
- package/dist/cjs/workos-widgets.client.js.map +1 -0
- package/dist/esm/index.d.ts +3 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +3 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/lib/api/config.d.ts +9 -0
- package/dist/esm/lib/api/config.d.ts.map +1 -0
- package/dist/esm/lib/api/config.js +9 -0
- package/dist/esm/lib/api/config.js.map +1 -0
- package/dist/esm/lib/api/role.d.ts +9 -0
- package/dist/esm/lib/api/role.d.ts.map +1 -0
- package/dist/esm/lib/api/role.js +89 -0
- package/dist/esm/lib/api/role.js.map +1 -0
- package/dist/esm/lib/api/user.d.ts +61 -0
- package/dist/esm/lib/api/user.d.ts.map +1 -0
- package/dist/esm/lib/api/user.js +302 -0
- package/dist/esm/lib/api/user.js.map +1 -0
- package/dist/esm/lib/constants.d.ts +3 -0
- package/dist/esm/lib/constants.d.ts.map +1 -0
- package/dist/esm/lib/constants.js +3 -0
- package/dist/esm/lib/constants.js.map +1 -0
- package/dist/esm/lib/delete-user-dialog.d.ts +12 -0
- package/dist/esm/lib/delete-user-dialog.d.ts.map +1 -0
- package/dist/esm/lib/delete-user-dialog.js +33 -0
- package/dist/esm/lib/delete-user-dialog.js.map +1 -0
- package/dist/esm/lib/edit-user-details-dialog.d.ts +12 -0
- package/dist/esm/lib/edit-user-details-dialog.d.ts.map +1 -0
- package/dist/esm/lib/edit-user-details-dialog.js +54 -0
- package/dist/esm/lib/edit-user-details-dialog.js.map +1 -0
- package/dist/esm/lib/elements.d.ts +32 -0
- package/dist/esm/lib/elements.d.ts.map +1 -0
- package/dist/esm/lib/elements.js +54 -0
- package/dist/esm/lib/elements.js.map +1 -0
- package/dist/esm/lib/invite-user-dialog.d.ts +7 -0
- package/dist/esm/lib/invite-user-dialog.d.ts.map +1 -0
- package/dist/esm/lib/invite-user-dialog.js +140 -0
- package/dist/esm/lib/invite-user-dialog.js.map +1 -0
- package/dist/esm/lib/label.d.ts +7 -0
- package/dist/esm/lib/label.d.ts.map +1 -0
- package/dist/esm/lib/label.js +6 -0
- package/dist/esm/lib/label.js.map +1 -0
- package/dist/esm/lib/pagination.d.ts +8 -0
- package/dist/esm/lib/pagination.d.ts.map +1 -0
- package/dist/esm/lib/pagination.js +40 -0
- package/dist/esm/lib/pagination.js.map +1 -0
- package/dist/esm/lib/resend-invite-dialog.d.ts +10 -0
- package/dist/esm/lib/resend-invite-dialog.d.ts.map +1 -0
- package/dist/esm/lib/resend-invite-dialog.js +44 -0
- package/dist/esm/lib/resend-invite-dialog.js.map +1 -0
- package/dist/esm/lib/revoke-invite-dialog.d.ts +10 -0
- package/dist/esm/lib/revoke-invite-dialog.d.ts.map +1 -0
- package/dist/esm/lib/revoke-invite-dialog.js +33 -0
- package/dist/esm/lib/revoke-invite-dialog.js.map +1 -0
- package/dist/esm/lib/search-provider.d.ts +11 -0
- package/dist/esm/lib/search-provider.d.ts.map +1 -0
- package/dist/esm/lib/search-provider.js +27 -0
- package/dist/esm/lib/search-provider.js.map +1 -0
- package/dist/esm/lib/use-is-hydrated.d.ts +2 -0
- package/dist/esm/lib/use-is-hydrated.d.ts.map +1 -0
- package/dist/esm/lib/use-is-hydrated.js +8 -0
- package/dist/esm/lib/use-is-hydrated.js.map +1 -0
- package/dist/esm/lib/user-actions-dropdown.d.ts +9 -0
- package/dist/esm/lib/user-actions-dropdown.d.ts.map +1 -0
- package/dist/esm/lib/user-actions-dropdown.js +56 -0
- package/dist/esm/lib/user-actions-dropdown.js.map +1 -0
- package/dist/esm/lib/users-filter.d.ts +9 -0
- package/dist/esm/lib/users-filter.d.ts.map +1 -0
- package/dist/esm/lib/users-filter.js +36 -0
- package/dist/esm/lib/users-filter.js.map +1 -0
- package/dist/esm/lib/users-management-context.d.ts +23 -0
- package/dist/esm/lib/users-management-context.d.ts.map +1 -0
- package/dist/esm/lib/users-management-context.js +54 -0
- package/dist/esm/lib/users-management-context.js.map +1 -0
- package/dist/esm/lib/users-management-state.d.ts +22 -0
- package/dist/esm/lib/users-management-state.d.ts.map +1 -0
- package/dist/esm/lib/users-management-state.js +117 -0
- package/dist/esm/lib/users-management-state.js.map +1 -0
- package/dist/esm/lib/users-management.d.ts +12 -0
- package/dist/esm/lib/users-management.d.ts.map +1 -0
- package/dist/esm/lib/users-management.js +114 -0
- package/dist/esm/lib/users-management.js.map +1 -0
- package/dist/esm/lib/users-search.d.ts +3 -0
- package/dist/esm/lib/users-search.d.ts.map +1 -0
- package/dist/esm/lib/users-search.js +39 -0
- package/dist/esm/lib/users-search.js.map +1 -0
- package/dist/esm/lib/utils.d.ts +15 -0
- package/dist/esm/lib/utils.d.ts.map +1 -0
- package/dist/esm/lib/utils.js +70 -0
- package/dist/esm/lib/utils.js.map +1 -0
- package/dist/esm/lib/widgets-context.d.ts +11 -0
- package/dist/esm/lib/widgets-context.d.ts.map +1 -0
- package/dist/esm/lib/widgets-context.js +17 -0
- package/dist/esm/lib/widgets-context.js.map +1 -0
- package/dist/esm/users-management.client.d.ts +6 -0
- package/dist/esm/users-management.client.d.ts.map +1 -0
- package/dist/esm/users-management.client.js +30 -0
- package/dist/esm/users-management.client.js.map +1 -0
- package/dist/esm/workos-widgets.client.d.ts +17 -0
- package/dist/esm/workos-widgets.client.d.ts.map +1 -0
- package/dist/esm/workos-widgets.client.js +28 -0
- package/dist/esm/workos-widgets.client.js.map +1 -0
- package/dist/tsconfig.cjs.tsbuildinfo +1 -0
- package/dist/tsconfig.esm.tsbuildinfo +1 -0
- package/package.json +69 -0
- package/src/index.ts +5 -0
- package/src/lib/api/config.ts +9 -0
- package/src/lib/api/role.ts +124 -0
- package/src/lib/api/user.ts +458 -0
- package/src/lib/constants.ts +2 -0
- package/src/lib/delete-user-dialog.tsx +103 -0
- package/src/lib/edit-user-details-dialog.tsx +170 -0
- package/src/lib/elements.tsx +175 -0
- package/src/lib/invite-user-dialog.tsx +319 -0
- package/src/lib/label.tsx +14 -0
- package/src/lib/pagination.tsx +69 -0
- package/src/lib/resend-invite-dialog.tsx +136 -0
- package/src/lib/revoke-invite-dialog.tsx +104 -0
- package/src/lib/search-provider.tsx +51 -0
- package/src/lib/use-is-hydrated.ts +13 -0
- package/src/lib/user-actions-dropdown.tsx +161 -0
- package/src/lib/users-filter.tsx +122 -0
- package/src/lib/users-management-context.tsx +89 -0
- package/src/lib/users-management-state.ts +165 -0
- package/src/lib/users-management.tsx +461 -0
- package/src/lib/users-search.tsx +130 -0
- package/src/lib/utils.ts +94 -0
- package/src/lib/widgets-context.ts +29 -0
- package/src/users-management.client.tsx +59 -0
- 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 @@
|
|
|
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
|