@workos-inc/widgets 1.6.1 → 1.7.0-pre.1
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/CHANGELOG.md +3 -1
- package/dist/cjs/admin-portal-domain-verification.client.d.cts +11 -0
- package/dist/cjs/admin-portal-sso-connection.client.d.cts +11 -0
- package/dist/cjs/alert-dialog-BlG3_awx.d.cts +25 -0
- package/dist/cjs/api-keys.client.d.cts +11 -0
- package/dist/cjs/dialog-C15qCLN3.d.cts +23 -0
- package/dist/cjs/dropdown-menu-BQ5LtvdR.d.cts +48 -0
- package/dist/cjs/index.d.cts +8 -0
- package/dist/cjs/lib/add-mfa-dialog.cjs +22 -14
- package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/add-mfa-dialog.d.cts +2 -2
- package/dist/cjs/lib/admin-portal-domain-verification.cjs +6 -8
- package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-domain-verification.d.cts +11 -0
- package/dist/cjs/lib/admin-portal-sso-connection.cjs +7 -8
- package/dist/cjs/lib/admin-portal-sso-connection.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-sso-connection.d.cts +11 -0
- package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs +3 -3
- package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys-search.cjs +2 -6
- package/dist/cjs/lib/api-keys/api-keys-search.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys-table.cjs +18 -19
- package/dist/cjs/lib/api-keys/api-keys-table.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys.cjs +2 -2
- package/dist/cjs/lib/api-keys/api-keys.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys.d.cts +12 -0
- package/dist/cjs/lib/api-keys/create-api-key.cjs +20 -14
- package/dist/cjs/lib/api-keys/create-api-key.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs +7 -7
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/skeleton-table.cjs +3 -2
- package/dist/cjs/lib/api-keys/skeleton-table.cjs.map +1 -1
- package/dist/cjs/lib/change-password-dialog.cjs +11 -9
- package/dist/cjs/lib/change-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/change-password-dialog.d.cts +2 -2
- package/dist/cjs/lib/copy-button.cjs +51 -29
- package/dist/cjs/lib/copy-button.cjs.map +1 -1
- package/dist/cjs/lib/copy-button.d.cts +22 -4
- package/dist/cjs/lib/delete-domain-dialog.cjs +8 -7
- package/dist/cjs/lib/delete-domain-dialog.cjs.map +1 -1
- package/dist/cjs/lib/delete-user-dialog.cjs +15 -7
- package/dist/cjs/lib/delete-user-dialog.cjs.map +1 -1
- package/dist/cjs/lib/delete-user-dialog.d.cts +2 -2
- package/dist/cjs/lib/domain-actions.cjs +8 -8
- package/dist/cjs/lib/domain-actions.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-profile-dialog.cjs +10 -9
- package/dist/cjs/lib/edit-user-profile-dialog.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-profile-dialog.d.cts +2 -2
- package/dist/cjs/lib/edit-user-role-dialog.cjs +15 -15
- package/dist/cjs/lib/edit-user-role-dialog.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-role-dialog.d.cts +2 -2
- package/dist/cjs/lib/elements/alert-dialog.cjs +76 -0
- package/dist/cjs/lib/elements/alert-dialog.cjs.map +1 -0
- package/dist/cjs/lib/elements/alert-dialog.d.cts +3 -0
- package/dist/cjs/lib/elements/dialog.cjs +74 -0
- package/dist/cjs/lib/elements/dialog.cjs.map +1 -0
- package/dist/cjs/lib/elements/dialog.d.cts +3 -0
- package/dist/cjs/lib/elements/dropdown-menu.cjs +162 -0
- package/dist/cjs/lib/elements/dropdown-menu.cjs.map +1 -0
- package/dist/cjs/lib/elements/dropdown-menu.d.cts +3 -0
- package/dist/cjs/lib/elements/select.cjs +112 -0
- package/dist/cjs/lib/elements/select.cjs.map +1 -0
- package/dist/cjs/lib/elements/select.d.cts +4 -0
- package/dist/cjs/lib/elements/utils.cjs +54 -0
- package/dist/cjs/lib/elements/utils.cjs.map +1 -0
- package/dist/cjs/lib/elements/utils.d.cts +15 -0
- package/dist/cjs/lib/elements.cjs +73 -219
- package/dist/cjs/lib/elements.cjs.map +1 -1
- package/dist/cjs/lib/elements.d.cts +16 -13
- package/dist/cjs/lib/elevated-access.cjs +18 -10
- package/dist/cjs/lib/elevated-access.cjs.map +1 -1
- package/dist/cjs/lib/empty-state.d.cts +12 -0
- package/dist/cjs/lib/invite-user-dialog.cjs +13 -12
- package/dist/cjs/lib/invite-user-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs +7 -6
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-all-sessions-dialog.d.cts +2 -2
- package/dist/cjs/lib/logout-dialog.cjs +7 -6
- package/dist/cjs/lib/logout-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-dialog.d.cts +2 -2
- package/dist/cjs/lib/organization-switcher.cjs +38 -20
- package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
- package/dist/cjs/lib/organization-switcher.d.cts +16 -2
- package/dist/cjs/lib/otp-input.d.cts +8 -0
- package/dist/cjs/lib/pipes.cjs +31 -42
- package/dist/cjs/lib/pipes.cjs.map +1 -1
- package/dist/cjs/lib/pipes.d.cts +12 -0
- package/dist/cjs/lib/resend-invite-dialog.cjs +23 -13
- package/dist/cjs/lib/resend-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/resend-invite-dialog.d.cts +2 -2
- package/dist/cjs/lib/reset-mfa-dialog.cjs +9 -8
- package/dist/cjs/lib/reset-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/reset-mfa-dialog.d.cts +2 -2
- package/dist/cjs/lib/revoke-invite-dialog.cjs +17 -8
- package/dist/cjs/lib/revoke-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/revoke-invite-dialog.d.cts +2 -2
- package/dist/cjs/lib/save-button.cjs +3 -2
- package/dist/cjs/lib/save-button.cjs.map +1 -1
- package/dist/cjs/lib/save-button.d.cts +12 -1
- package/dist/cjs/lib/set-password-dialog.cjs +11 -9
- package/dist/cjs/lib/set-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/set-password-dialog.d.cts +2 -2
- package/dist/cjs/lib/user-actions-dropdown.cjs +9 -8
- package/dist/cjs/lib/user-actions-dropdown.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.cjs +1 -1
- package/dist/cjs/lib/user-profile.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.d.cts +11 -0
- package/dist/cjs/lib/user-security.cjs +3 -3
- package/dist/cjs/lib/user-security.cjs.map +1 -1
- package/dist/cjs/lib/user-security.d.cts +12 -0
- package/dist/cjs/lib/user-sessions.cjs +3 -11
- package/dist/cjs/lib/user-sessions.cjs.map +1 -1
- package/dist/cjs/lib/user-sessions.d.cts +12 -0
- package/dist/cjs/lib/users-filter.cjs +5 -6
- package/dist/cjs/lib/users-filter.cjs.map +1 -1
- package/dist/cjs/lib/users-filter.d.cts +2 -2
- package/dist/cjs/lib/users-management.cjs +22 -34
- package/dist/cjs/lib/users-management.cjs.map +1 -1
- package/dist/cjs/lib/users-management.d.cts +11 -0
- package/dist/cjs/lib/users-search.cjs +2 -6
- package/dist/cjs/lib/users-search.cjs.map +1 -1
- package/dist/cjs/lib/utils.cjs +25 -2
- package/dist/cjs/lib/utils.cjs.map +1 -1
- package/dist/cjs/lib/utils.d.cts +17 -3
- package/dist/cjs/lib/view-dns-record-dialog.cjs +9 -8
- package/dist/cjs/lib/view-dns-record-dialog.cjs.map +1 -1
- package/dist/cjs/lib/widgets-context.d.cts +8 -0
- package/dist/cjs/organization-switcher.client.cjs +33 -5
- package/dist/cjs/organization-switcher.client.cjs.map +1 -1
- package/dist/cjs/organization-switcher.client.d.cts +11 -0
- package/dist/cjs/pipes.client.d.cts +11 -0
- package/dist/cjs/select-KR89Qnvm.d.cts +30 -0
- package/dist/cjs/user-profile.client.d.cts +11 -0
- package/dist/cjs/user-security.client.d.cts +11 -0
- package/dist/cjs/user-sessions.client.d.cts +11 -0
- package/dist/cjs/users-management.client.d.cts +11 -0
- package/dist/cjs/utils.cjs +59 -0
- package/dist/cjs/utils.cjs.map +1 -0
- package/dist/cjs/utils.d.cts +3 -0
- package/dist/cjs/workos-widgets.client.d.cts +8 -0
- package/dist/css/lib/provider-icon.css +6 -0
- package/dist/esm/admin-portal-domain-verification.client.d.ts +11 -0
- package/dist/esm/admin-portal-sso-connection.client.d.ts +11 -0
- package/dist/esm/alert-dialog-BlG3_awx.d.ts +25 -0
- package/dist/esm/api-keys.client.d.ts +11 -0
- package/dist/esm/dialog-C15qCLN3.d.ts +23 -0
- package/dist/esm/dropdown-menu-BQ5LtvdR.d.ts +48 -0
- package/dist/esm/index.d.ts +8 -0
- package/dist/esm/lib/add-mfa-dialog.d.ts +2 -2
- package/dist/esm/lib/add-mfa-dialog.js +16 -9
- package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/admin-portal-domain-verification.d.ts +11 -0
- package/dist/esm/lib/admin-portal-domain-verification.js +6 -8
- package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
- package/dist/esm/lib/admin-portal-sso-connection.d.ts +11 -0
- package/dist/esm/lib/admin-portal-sso-connection.js +8 -9
- package/dist/esm/lib/admin-portal-sso-connection.js.map +1 -1
- package/dist/esm/lib/api-keys/api-key-details-dialog.js +3 -3
- package/dist/esm/lib/api-keys/api-key-details-dialog.js.map +1 -1
- package/dist/esm/lib/api-keys/api-keys-search.js +2 -6
- package/dist/esm/lib/api-keys/api-keys-search.js.map +1 -1
- package/dist/esm/lib/api-keys/api-keys-table.js +18 -32
- package/dist/esm/lib/api-keys/api-keys-table.js.map +1 -1
- package/dist/esm/lib/api-keys/api-keys.d.ts +12 -0
- package/dist/esm/lib/api-keys/api-keys.js +2 -2
- package/dist/esm/lib/api-keys/api-keys.js.map +1 -1
- package/dist/esm/lib/api-keys/create-api-key.js +17 -14
- package/dist/esm/lib/api-keys/create-api-key.js.map +1 -1
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js +4 -4
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js.map +1 -1
- package/dist/esm/lib/api-keys/skeleton-table.js +2 -1
- package/dist/esm/lib/api-keys/skeleton-table.js.map +1 -1
- package/dist/esm/lib/change-password-dialog.d.ts +2 -2
- package/dist/esm/lib/change-password-dialog.js +8 -12
- package/dist/esm/lib/change-password-dialog.js.map +1 -1
- package/dist/esm/lib/copy-button.d.ts +22 -4
- package/dist/esm/lib/copy-button.js +49 -28
- package/dist/esm/lib/copy-button.js.map +1 -1
- package/dist/esm/lib/delete-domain-dialog.js +4 -3
- package/dist/esm/lib/delete-domain-dialog.js.map +1 -1
- package/dist/esm/lib/delete-user-dialog.d.ts +2 -2
- package/dist/esm/lib/delete-user-dialog.js +13 -15
- package/dist/esm/lib/delete-user-dialog.js.map +1 -1
- package/dist/esm/lib/domain-actions.js +4 -4
- package/dist/esm/lib/domain-actions.js.map +1 -1
- package/dist/esm/lib/edit-user-profile-dialog.d.ts +2 -2
- package/dist/esm/lib/edit-user-profile-dialog.js +7 -12
- package/dist/esm/lib/edit-user-profile-dialog.js.map +1 -1
- package/dist/esm/lib/edit-user-role-dialog.d.ts +2 -2
- package/dist/esm/lib/edit-user-role-dialog.js +9 -19
- package/dist/esm/lib/edit-user-role-dialog.js.map +1 -1
- package/dist/esm/lib/elements/alert-dialog.d.ts +3 -0
- package/dist/esm/lib/elements/alert-dialog.js +45 -0
- package/dist/esm/lib/elements/alert-dialog.js.map +1 -0
- package/dist/esm/lib/elements/dialog.d.ts +3 -0
- package/dist/esm/lib/elements/dialog.js +43 -0
- package/dist/esm/lib/elements/dialog.js.map +1 -0
- package/dist/esm/lib/elements/dropdown-menu.d.ts +3 -0
- package/dist/esm/lib/elements/dropdown-menu.js +131 -0
- package/dist/esm/lib/elements/dropdown-menu.js.map +1 -0
- package/dist/esm/lib/elements/select.d.ts +4 -0
- package/dist/esm/lib/elements/select.js +77 -0
- package/dist/esm/lib/elements/select.js.map +1 -0
- package/dist/esm/lib/elements/utils.d.ts +15 -0
- package/dist/esm/lib/elements/utils.js +20 -0
- package/dist/esm/lib/elements/utils.js.map +1 -0
- package/dist/esm/lib/elements.d.ts +16 -13
- package/dist/esm/lib/elements.js +71 -215
- package/dist/esm/lib/elements.js.map +1 -1
- package/dist/esm/lib/elevated-access.js +14 -6
- package/dist/esm/lib/elevated-access.js.map +1 -1
- package/dist/esm/lib/empty-state.d.ts +12 -0
- package/dist/esm/lib/invite-user-dialog.js +10 -24
- package/dist/esm/lib/invite-user-dialog.js.map +1 -1
- package/dist/esm/lib/logout-all-sessions-dialog.d.ts +2 -2
- package/dist/esm/lib/logout-all-sessions-dialog.js +6 -9
- package/dist/esm/lib/logout-all-sessions-dialog.js.map +1 -1
- package/dist/esm/lib/logout-dialog.d.ts +2 -2
- package/dist/esm/lib/logout-dialog.js +6 -9
- package/dist/esm/lib/logout-dialog.js.map +1 -1
- package/dist/esm/lib/organization-switcher.d.ts +16 -2
- package/dist/esm/lib/organization-switcher.js +33 -13
- package/dist/esm/lib/organization-switcher.js.map +1 -1
- package/dist/esm/lib/otp-input.d.ts +8 -0
- package/dist/esm/lib/pipes.d.ts +12 -0
- package/dist/esm/lib/pipes.js +27 -47
- package/dist/esm/lib/pipes.js.map +1 -1
- package/dist/esm/lib/resend-invite-dialog.d.ts +2 -2
- package/dist/esm/lib/resend-invite-dialog.js +17 -20
- package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
- package/dist/esm/lib/reset-mfa-dialog.d.ts +2 -2
- package/dist/esm/lib/reset-mfa-dialog.js +6 -9
- package/dist/esm/lib/reset-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/revoke-invite-dialog.d.ts +2 -2
- package/dist/esm/lib/revoke-invite-dialog.js +14 -15
- package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
- package/dist/esm/lib/save-button.d.ts +12 -1
- package/dist/esm/lib/save-button.js +4 -9
- package/dist/esm/lib/save-button.js.map +1 -1
- package/dist/esm/lib/set-password-dialog.d.ts +2 -2
- package/dist/esm/lib/set-password-dialog.js +8 -12
- package/dist/esm/lib/set-password-dialog.js.map +1 -1
- package/dist/esm/lib/user-actions-dropdown.js +8 -11
- package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
- package/dist/esm/lib/user-profile.d.ts +11 -0
- package/dist/esm/lib/user-profile.js +2 -2
- package/dist/esm/lib/user-profile.js.map +1 -1
- package/dist/esm/lib/user-security.d.ts +12 -0
- package/dist/esm/lib/user-security.js +4 -4
- package/dist/esm/lib/user-security.js.map +1 -1
- package/dist/esm/lib/user-sessions.d.ts +12 -0
- package/dist/esm/lib/user-sessions.js +5 -13
- package/dist/esm/lib/user-sessions.js.map +1 -1
- package/dist/esm/lib/users-filter.d.ts +2 -2
- package/dist/esm/lib/users-filter.js +5 -6
- package/dist/esm/lib/users-filter.js.map +1 -1
- package/dist/esm/lib/users-management.d.ts +11 -0
- package/dist/esm/lib/users-management.js +23 -39
- package/dist/esm/lib/users-management.js.map +1 -1
- package/dist/esm/lib/users-search.js +2 -6
- package/dist/esm/lib/users-search.js.map +1 -1
- package/dist/esm/lib/utils.d.ts +17 -3
- package/dist/esm/lib/utils.js +24 -2
- package/dist/esm/lib/utils.js.map +1 -1
- package/dist/esm/lib/view-dns-record-dialog.js +7 -17
- package/dist/esm/lib/view-dns-record-dialog.js.map +1 -1
- package/dist/esm/lib/widgets-context.d.ts +8 -0
- package/dist/esm/organization-switcher.client.d.ts +11 -0
- package/dist/esm/organization-switcher.client.js +33 -5
- package/dist/esm/organization-switcher.client.js.map +1 -1
- package/dist/esm/pipes.client.d.ts +11 -0
- package/dist/esm/select-KR89Qnvm.d.ts +30 -0
- package/dist/esm/user-profile.client.d.ts +11 -0
- package/dist/esm/user-security.client.d.ts +11 -0
- package/dist/esm/user-sessions.client.d.ts +11 -0
- package/dist/esm/users-management.client.d.ts +11 -0
- package/dist/esm/utils.d.ts +3 -0
- package/dist/esm/utils.js +25 -0
- package/dist/esm/utils.js.map +1 -0
- package/dist/esm/workos-widgets.client.d.ts +8 -0
- package/package.json +11 -1
|
@@ -44,10 +44,10 @@ function DeleteUserDialog({
|
|
|
44
44
|
}
|
|
45
45
|
);
|
|
46
46
|
};
|
|
47
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
48
|
-
children && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
47
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.AlertDialog.Root, { ...props, children: [
|
|
48
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Trigger, { children }),
|
|
49
49
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
50
|
-
import_elements.
|
|
50
|
+
import_elements.AlertDialog.Content,
|
|
51
51
|
{
|
|
52
52
|
maxWidth: "480px",
|
|
53
53
|
onOpenAutoFocus: () => {
|
|
@@ -56,8 +56,8 @@ function DeleteUserDialog({
|
|
|
56
56
|
});
|
|
57
57
|
},
|
|
58
58
|
children: [
|
|
59
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
60
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { direction: "column", gap: "3", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
59
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Title, { children: "Remove user" }),
|
|
60
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { direction: "column", gap: "3", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.AlertDialog.Description, { children: [
|
|
61
61
|
"Are you sure you want to remove",
|
|
62
62
|
" ",
|
|
63
63
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { weight: "bold", children: user.email }),
|
|
@@ -72,8 +72,16 @@ function DeleteUserDialog({
|
|
|
72
72
|
onSubmitForm();
|
|
73
73
|
},
|
|
74
74
|
children: [
|
|
75
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
76
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
75
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.AlertDialog.Cancel, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", disabled: deleteUser.isPending, children: "Cancel" }) }),
|
|
76
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
77
|
+
import_elements.Button,
|
|
78
|
+
{
|
|
79
|
+
variant: "destructive",
|
|
80
|
+
type: "submit",
|
|
81
|
+
loading: deleteUser.isPending,
|
|
82
|
+
children: "Remove"
|
|
83
|
+
}
|
|
84
|
+
)
|
|
77
85
|
]
|
|
78
86
|
}
|
|
79
87
|
) }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/delete-user-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/delete-user-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport { type ReactNode, useRef } from \"react\";\nimport { useDeleteUser } from \"./api/user.js\";\nimport { AlertDialog, Button } from \"./elements.js\";\nimport { Member } from \"../api/endpoint.js\";\n\ninterface DeleteUserDialogProps extends AlertDialog.RootProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n user: Member;\n children?: ReactNode;\n}\n\nexport function DeleteUserDialog({\n children,\n user,\n ...props\n}: DeleteUserDialogProps) {\n const deleteUser = useDeleteUser();\n const inputRef = useRef<HTMLInputElement>(null);\n\n const onSubmitForm = () => {\n deleteUser.mutate(\n { userId: user.id },\n {\n onSuccess: () => {\n props.onOpenChange(false);\n },\n },\n );\n };\n\n return (\n <AlertDialog.Root {...props}>\n {children && <AlertDialog.Trigger>{children}</AlertDialog.Trigger>}\n\n <AlertDialog.Content\n maxWidth=\"480px\"\n onOpenAutoFocus={() => {\n requestAnimationFrame(() => {\n inputRef.current?.focus();\n });\n }}\n >\n <AlertDialog.Title>Remove user</AlertDialog.Title>\n <Flex direction=\"column\" gap=\"3\">\n <AlertDialog.Description>\n Are you sure you want to remove{\" \"}\n <Text weight=\"bold\">{user.email}</Text>? This action is immediate\n and cannot be undone.\n </AlertDialog.Description>\n </Flex>\n\n {deleteUser.error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>\n {getMutationErrorMessage(deleteUser.error)}\n </Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex gap=\"3\" justify=\"end\" mt=\"5\" asChild>\n <form\n onSubmit={(event) => {\n event.preventDefault();\n onSubmitForm();\n }}\n >\n <AlertDialog.Cancel>\n <Button variant=\"secondary\" disabled={deleteUser.isPending}>\n Cancel\n </Button>\n </AlertDialog.Cancel>\n\n <Button\n variant=\"destructive\"\n type=\"submit\"\n loading={deleteUser.isPending}\n >\n Remove\n </Button>\n </form>\n </Flex>\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(deleteUser.error)}\n </section>\n </VisuallyHidden>\n </AlertDialog.Content>\n </AlertDialog.Root>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return \"There was an error removing the user. Please try again.\";\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCmB;AAlCnB,oBAAoD;AACpD,mBAAuC;AACvC,kBAA8B;AAC9B,sBAAoC;AAU7B,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA0B;AACxB,QAAM,iBAAa,2BAAc;AACjC,QAAM,eAAW,qBAAyB,IAAI;AAE9C,QAAM,eAAe,MAAM;AACzB,eAAW;AAAA,MACT,EAAE,QAAQ,KAAK,GAAG;AAAA,MAClB;AAAA,QACE,WAAW,MAAM;AACf,gBAAM,aAAa,KAAK;AAAA,QAC1B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,SACE,6CAAC,4BAAY,MAAZ,EAAkB,GAAG,OACnB;AAAA,gBAAY,4CAAC,4BAAY,SAAZ,EAAqB,UAAS;AAAA,IAE5C;AAAA,MAAC,4BAAY;AAAA,MAAZ;AAAA,QACC,UAAS;AAAA,QACT,iBAAiB,MAAM;AACrB,gCAAsB,MAAM;AAC1B,qBAAS,SAAS,MAAM;AAAA,UAC1B,CAAC;AAAA,QACH;AAAA,QAEA;AAAA,sDAAC,4BAAY,OAAZ,EAAkB,yBAAW;AAAA,UAC9B,4CAAC,sBAAK,WAAU,UAAS,KAAI,KAC3B,uDAAC,4BAAY,aAAZ,EAAwB;AAAA;AAAA,YACS;AAAA,YAChC,4CAAC,sBAAK,QAAO,QAAQ,eAAK,OAAM;AAAA,YAAO;AAAA,aAEzC,GACF;AAAA,UAEC,WAAW,QACV,4CAAC,sBAAQ,MAAR,EAAa,OAAM,OAAM,IAAG,KAAI,IAAG,MAClC,sDAAC,sBAAQ,MAAR,EACE,kCAAwB,WAAW,KAAK,GAC3C,GACF,IACE;AAAA,UAEJ,4CAAC,sBAAK,KAAI,KAAI,SAAQ,OAAM,IAAG,KAAI,SAAO,MACxC;AAAA,YAAC;AAAA;AAAA,cACC,UAAU,CAAC,UAAU;AACnB,sBAAM,eAAe;AACrB,6BAAa;AAAA,cACf;AAAA,cAEA;AAAA,4DAAC,4BAAY,QAAZ,EACC,sDAAC,0BAAO,SAAQ,aAAY,UAAU,WAAW,WAAW,oBAE5D,GACF;AAAA,gBAEA;AAAA,kBAAC;AAAA;AAAA,oBACC,SAAQ;AAAA,oBACR,MAAK;AAAA,oBACL,SAAS,WAAW;AAAA,oBACrB;AAAA;AAAA,gBAED;AAAA;AAAA;AAAA,UACF,GACF;AAAA,UAEA,4CAAC,gCAAe,SAAO,MACrB,sDAAC,aAAQ,aAAU,UAChB,kCAAwB,WAAW,KAAK,GAC3C,GACF;AAAA;AAAA;AAAA,IACF;AAAA,KACF;AAEJ;AAEA,SAAS,wBAAwB,OAAgB;AAC/C,MAAI,CAAC,OAAO;AACV,WAAO;AAAA,EACT;AAEA,SAAO;AACT;","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { AlertDialog } from '@radix-ui/themes';
|
|
3
2
|
import { ReactNode } from 'react';
|
|
3
|
+
import { RootProps } from '@radix-ui/themes/components/alert-dialog';
|
|
4
4
|
import { Member } from '../api/endpoint.cjs';
|
|
5
5
|
import '@tanstack/react-query';
|
|
6
6
|
import '../api/widgets-api-client.cjs';
|
|
7
7
|
|
|
8
|
-
interface DeleteUserDialogProps extends
|
|
8
|
+
interface DeleteUserDialogProps extends RootProps {
|
|
9
9
|
open: boolean;
|
|
10
10
|
onOpenChange: (open: boolean) => void;
|
|
11
11
|
user: Member;
|
|
@@ -24,10 +24,10 @@ __export(domain_actions_exports, {
|
|
|
24
24
|
module.exports = __toCommonJS(domain_actions_exports);
|
|
25
25
|
var import_jsx_runtime = require("react/jsx-runtime");
|
|
26
26
|
var import_react = require("react");
|
|
27
|
-
var import_themes = require("@radix-ui/themes");
|
|
28
27
|
var import_react_icons = require("@radix-ui/react-icons");
|
|
29
28
|
var import_view_dns_record_dialog = require("./view-dns-record-dialog.js");
|
|
30
29
|
var import_delete_domain_dialog = require("./delete-domain-dialog.js");
|
|
30
|
+
var import_elements = require("./elements.js");
|
|
31
31
|
const DomainActions = ({
|
|
32
32
|
domain,
|
|
33
33
|
onDeleteDomain,
|
|
@@ -43,19 +43,19 @@ const DomainActions = ({
|
|
|
43
43
|
onDeleteDomain,
|
|
44
44
|
open: deleteDialogOpen,
|
|
45
45
|
onOpenChange: setDeleteDialogOpen,
|
|
46
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
46
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.IconButton, { "aria-label": "Remove domain", title: "Remove domain", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.TrashIcon, {}) })
|
|
47
47
|
}
|
|
48
48
|
) });
|
|
49
49
|
}
|
|
50
50
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
51
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
52
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
53
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
54
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
51
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.DropdownMenu.Root, { children: [
|
|
52
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.DropdownMenu.Trigger, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.IconButton, { "aria-label": "Domain actions", title: "Domain actions", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.DotsHorizontalIcon, {}) }) }),
|
|
53
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.DropdownMenu.Content, { side: "bottom", align: "end", children: [
|
|
54
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.DropdownMenu.Item, { onClick: () => setViewDnsDialogOpen(true), children: domain.state === "Failed" ? "Restart verification" : "View DNS record" }),
|
|
55
55
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
56
|
-
|
|
56
|
+
import_elements.DropdownMenu.Item,
|
|
57
57
|
{
|
|
58
|
-
|
|
58
|
+
variant: "destructive",
|
|
59
59
|
onClick: () => setDeleteDialogOpen(true),
|
|
60
60
|
children: "Remove domain"
|
|
61
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/domain-actions.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { useState } from \"react\";\nimport {
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/domain-actions.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { useState } from \"react\";\nimport { DotsHorizontalIcon, TrashIcon } from \"@radix-ui/react-icons\";\nimport { OrganizationDomain } from \"../api/endpoint.js\";\nimport { ViewDnsRecordDialog } from \"./view-dns-record-dialog.js\";\nimport { DeleteDomainDialog } from \"./delete-domain-dialog.js\";\nimport { DropdownMenu, IconButton } from \"./elements.js\";\n\ninterface DomainActionsProps {\n domain: OrganizationDomain;\n onDeleteDomain: (domainId: string) => void;\n onReverifyDomain: (domainId: string) => void;\n}\n\nexport const DomainActions = ({\n domain,\n onDeleteDomain,\n onReverifyDomain,\n}: DomainActionsProps) => {\n const [viewDnsDialogOpen, setViewDnsDialogOpen] = useState(false);\n const [deleteDialogOpen, setDeleteDialogOpen] = useState(false);\n\n if (domain.state === \"Verified\") {\n return (\n <>\n <DeleteDomainDialog\n domain={domain}\n onDeleteDomain={onDeleteDomain}\n open={deleteDialogOpen}\n onOpenChange={setDeleteDialogOpen}\n >\n <IconButton aria-label=\"Remove domain\" title=\"Remove domain\">\n <TrashIcon />\n </IconButton>\n </DeleteDomainDialog>\n </>\n );\n }\n\n return (\n <>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <IconButton aria-label=\"Domain actions\" title=\"Domain actions\">\n <DotsHorizontalIcon />\n </IconButton>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content side=\"bottom\" align=\"end\">\n <DropdownMenu.Item onClick={() => setViewDnsDialogOpen(true)}>\n {domain.state === \"Failed\"\n ? \"Restart verification\"\n : \"View DNS record\"}\n </DropdownMenu.Item>\n <DropdownMenu.Item\n variant=\"destructive\"\n onClick={() => setDeleteDialogOpen(true)}\n >\n Remove domain\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n\n <ViewDnsRecordDialog\n domain={domain}\n onReverifyDomain={onReverifyDomain}\n open={viewDnsDialogOpen}\n onOpenChange={setViewDnsDialogOpen}\n />\n\n <DeleteDomainDialog\n domain={domain}\n onDeleteDomain={onDeleteDomain}\n open={deleteDialogOpen}\n onOpenChange={setDeleteDialogOpen}\n />\n </>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA0BM;AAvBN,mBAAyB;AACzB,yBAA8C;AAE9C,oCAAoC;AACpC,kCAAmC;AACnC,sBAAyC;AAQlC,MAAM,gBAAgB,CAAC;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AACF,MAA0B;AACxB,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,uBAAS,KAAK;AAChE,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,uBAAS,KAAK;AAE9D,MAAI,OAAO,UAAU,YAAY;AAC/B,WACE,2EACE;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,cAAc;AAAA,QAEd,sDAAC,8BAAW,cAAW,iBAAgB,OAAM,iBAC3C,sDAAC,gCAAU,GACb;AAAA;AAAA,IACF,GACF;AAAA,EAEJ;AAEA,SACE,4EACE;AAAA,iDAAC,6BAAa,MAAb,EACC;AAAA,kDAAC,6BAAa,SAAb,EACC,sDAAC,8BAAW,cAAW,kBAAiB,OAAM,kBAC5C,sDAAC,yCAAmB,GACtB,GACF;AAAA,MACA,6CAAC,6BAAa,SAAb,EAAqB,MAAK,UAAS,OAAM,OACxC;AAAA,oDAAC,6BAAa,MAAb,EAAkB,SAAS,MAAM,qBAAqB,IAAI,GACxD,iBAAO,UAAU,WACd,yBACA,mBACN;AAAA,QACA;AAAA,UAAC,6BAAa;AAAA,UAAb;AAAA,YACC,SAAQ;AAAA,YACR,SAAS,MAAM,oBAAoB,IAAI;AAAA,YACxC;AAAA;AAAA,QAED;AAAA,SACF;AAAA,OACF;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,cAAc;AAAA;AAAA,IAChB;AAAA,IAEA;AAAA,MAAC;AAAA;AAAA,QACC;AAAA,QACA;AAAA,QACA,MAAM;AAAA,QACN,cAAc;AAAA;AAAA,IAChB;AAAA,KACF;AAEJ;","names":[]}
|
|
@@ -50,14 +50,14 @@ function EditUserProfileDialog({
|
|
|
50
50
|
setOpen(false);
|
|
51
51
|
}, []);
|
|
52
52
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
53
|
-
|
|
53
|
+
import_elements.Dialog.Root,
|
|
54
54
|
{
|
|
55
55
|
...props,
|
|
56
56
|
open: props.open ?? open,
|
|
57
57
|
onOpenChange: props.onOpenChange ?? setOpen,
|
|
58
58
|
children: [
|
|
59
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
60
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.
|
|
59
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Trigger, { children }),
|
|
60
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Content, { maxWidth: "480px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Content, { user, onClose: handleClose }) })
|
|
61
61
|
]
|
|
62
62
|
}
|
|
63
63
|
);
|
|
@@ -79,8 +79,8 @@ function Content({ user, onClose }) {
|
|
|
79
79
|
}
|
|
80
80
|
});
|
|
81
81
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
82
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
83
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
82
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Title, { mb: "5", children: "Edit name" }),
|
|
83
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Dialog.Description, { children: [
|
|
84
84
|
"Edit the details of ",
|
|
85
85
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { weight: "bold", children: user.email })
|
|
86
86
|
] }) }),
|
|
@@ -130,9 +130,10 @@ function Content({ user, onClose }) {
|
|
|
130
130
|
] }) })
|
|
131
131
|
] }),
|
|
132
132
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { mt: "5", gap: "3", justify: "end", children: [
|
|
133
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
134
|
-
import_elements.
|
|
133
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Close, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
134
|
+
import_elements.Button,
|
|
135
135
|
{
|
|
136
|
+
variant: "secondary",
|
|
136
137
|
disabled: updateMe.isPending || updateMe.isSuccess,
|
|
137
138
|
children: "Cancel"
|
|
138
139
|
}
|
|
@@ -140,11 +141,11 @@ function Content({ user, onClose }) {
|
|
|
140
141
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
141
142
|
import_save_button.SaveButton,
|
|
142
143
|
{
|
|
143
|
-
|
|
144
|
+
type: "submit",
|
|
144
145
|
loading: updateMe.isPending,
|
|
145
146
|
done: updateMe.isSuccess,
|
|
146
147
|
onDone: onClose,
|
|
147
|
-
children:
|
|
148
|
+
children: "Save"
|
|
148
149
|
}
|
|
149
150
|
)
|
|
150
151
|
] }),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/edit-user-profile-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout,
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/edit-user-profile-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport { Callout, Flex, Text, VisuallyHidden } from \"@radix-ui/themes\";\nimport { getMeQueryKey, Me, useUpdateMe } from \"../api/endpoint.js\";\nimport { useQueryClient } from \"@tanstack/react-query\";\nimport * as React from \"react\";\nimport { type ReactNode } from \"react\";\nimport * as Form from \"@radix-ui/react-form\";\nimport { Dialog, Label, Button, TextField } from \"./elements.js\";\nimport { SaveButton } from \"./save-button.js\";\n\ninterface EditUserProfileDialogProps extends Dialog.RootProps {\n user: Me;\n children?: ReactNode;\n}\n\nexport function EditUserProfileDialog({\n children,\n user,\n ...props\n}: EditUserProfileDialogProps) {\n const [open, setOpen] = React.useState(false);\n\n const handleClose = React.useCallback(() => {\n setOpen(false);\n }, []);\n\n return (\n <Dialog.Root\n {...props}\n open={props.open ?? open}\n onOpenChange={props.onOpenChange ?? setOpen}\n >\n <Dialog.Trigger>{children}</Dialog.Trigger>\n\n <Dialog.Content maxWidth=\"480px\">\n <Content user={user} onClose={handleClose} />\n </Dialog.Content>\n </Dialog.Root>\n );\n}\n\ninterface ContentProps extends Pick<EditUserProfileDialogProps, \"user\"> {\n onClose: () => void;\n}\n\nfunction Content({ user, onClose }: ContentProps) {\n const client = useQueryClient();\n const updateMe = useUpdateMe({\n mutation: {\n onSettled: () => {\n client.invalidateQueries({ queryKey: getMeQueryKey() });\n },\n onSuccess: (newProfile) => {\n client.setQueryData(getMeQueryKey(), {\n ...user,\n firstName: newProfile.firstName || user.firstName,\n lastName: newProfile.lastName || user.lastName,\n });\n },\n },\n });\n\n return (\n <>\n <Dialog.Title mb=\"5\">Edit name</Dialog.Title>\n <VisuallyHidden>\n <Dialog.Description>\n Edit the details of <Text weight=\"bold\">{user.email}</Text>\n </Dialog.Description>\n </VisuallyHidden>\n\n {updateMe.error ? (\n <Callout.Root color=\"red\" my=\"-2\">\n <Callout.Text>{getMutationErrorMessage(updateMe.error)}</Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Form.Root\n onSubmit={async (event) => {\n event.preventDefault();\n const formData = new FormData(event.currentTarget);\n const firstName = formData.get(\"firstName\")?.toString();\n const lastName = formData.get(\"lastName\")?.toString();\n updateMe.mutate({\n data: {\n firstName: firstName ?? undefined,\n lastName: lastName ?? undefined,\n },\n });\n }}\n >\n <Flex my=\"5\" direction=\"column\" gap=\"4\">\n <Form.Field name=\"firstName\" asChild>\n <Flex direction=\"column\" gap=\"1\">\n <Form.Label asChild>\n <Label>First name</Label>\n </Form.Label>\n <Form.Control asChild>\n <TextField\n data-1p-ignore\n autoComplete=\"given-name\"\n defaultValue={user.firstName ?? \"\"}\n placeholder=\"Your first name\"\n disabled={updateMe.isPending || updateMe.isSuccess}\n />\n </Form.Control>\n </Flex>\n </Form.Field>\n\n <Form.Field name=\"lastName\" asChild>\n <Flex direction=\"column\" gap=\"1\">\n <Form.Label asChild>\n <Label>Last name</Label>\n </Form.Label>\n <Form.Control asChild>\n <TextField\n data-1p-ignore\n autoComplete=\"family-name\"\n defaultValue={user.lastName ?? \"\"}\n placeholder=\"Your last name\"\n disabled={updateMe.isPending || updateMe.isSuccess}\n />\n </Form.Control>\n </Flex>\n </Form.Field>\n </Flex>\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <Button\n variant=\"secondary\"\n disabled={updateMe.isPending || updateMe.isSuccess}\n >\n Cancel\n </Button>\n </Dialog.Close>\n <SaveButton\n type=\"submit\"\n loading={updateMe.isPending}\n done={updateMe.isSuccess}\n onDone={onClose}\n >\n Save\n </SaveButton>\n </Flex>\n\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(updateMe.error)}\n </section>\n </VisuallyHidden>\n </Form.Root>\n </>\n );\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (error instanceof Error) {\n return error.message;\n }\n\n if (\n typeof error === \"object\" &&\n error !== null &&\n \"message\" in error &&\n typeof error.message === \"string\"\n ) {\n return error.message;\n }\n\n // TODO Handle server errors\n return \"Something went wrong. Please try again.\";\n}\n"],"mappings":"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","names":[]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { Dialog } from '@radix-ui/themes';
|
|
3
2
|
import { Me } from '../api/endpoint.cjs';
|
|
4
3
|
import { ReactNode } from 'react';
|
|
4
|
+
import { RootProps } from '@radix-ui/themes/components/dialog';
|
|
5
5
|
import '@tanstack/react-query';
|
|
6
6
|
import '../api/widgets-api-client.cjs';
|
|
7
7
|
|
|
8
|
-
interface EditUserProfileDialogProps extends
|
|
8
|
+
interface EditUserProfileDialogProps extends RootProps {
|
|
9
9
|
user: Me;
|
|
10
10
|
children?: ReactNode;
|
|
11
11
|
}
|
|
@@ -57,8 +57,8 @@ function EditUserRoleDialog({
|
|
|
57
57
|
isLoading: restQueryState.isLoading,
|
|
58
58
|
isSuccess: restQueryState.isSuccess
|
|
59
59
|
};
|
|
60
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
61
|
-
children && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
60
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Dialog.Root, { ...props, children: [
|
|
61
|
+
children && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Trigger, { children }),
|
|
62
62
|
data.multipleRolesEnabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
63
63
|
EditMultipleUserRolesDialogContent,
|
|
64
64
|
{
|
|
@@ -107,9 +107,9 @@ function EditSingleUserRoleDialogContent({
|
|
|
107
107
|
const errorId = `${selectId}-error`;
|
|
108
108
|
const showErrorMessage = !!queryState.error;
|
|
109
109
|
const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;
|
|
110
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.
|
|
111
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
112
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
110
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Dialog.Content, { maxWidth: "480px", children: [
|
|
111
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Title, { children: "Edit role" }),
|
|
112
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Dialog.Description, { children: [
|
|
113
113
|
"Select the role to assign to ",
|
|
114
114
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { weight: "bold", children: displayName })
|
|
115
115
|
] }),
|
|
@@ -123,7 +123,7 @@ function EditSingleUserRoleDialogContent({
|
|
|
123
123
|
},
|
|
124
124
|
children: [
|
|
125
125
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
126
|
-
|
|
126
|
+
import_elements.Select.Root,
|
|
127
127
|
{
|
|
128
128
|
name: "roles",
|
|
129
129
|
value: selectedRole ?? "Unknown",
|
|
@@ -131,7 +131,7 @@ function EditSingleUserRoleDialogContent({
|
|
|
131
131
|
disabled: queryState.isLoading || showSingleRoleInfo,
|
|
132
132
|
children: [
|
|
133
133
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: queryState.isLoading, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
134
|
-
import_elements.
|
|
134
|
+
import_elements.Select.Trigger,
|
|
135
135
|
{
|
|
136
136
|
id: selectId,
|
|
137
137
|
placeholder: "Assign a role",
|
|
@@ -140,7 +140,7 @@ function EditSingleUserRoleDialogContent({
|
|
|
140
140
|
"aria-describedby": [showErrorMessage && errorId, showSingleRoleInfo && infoId].filter(Boolean).join(" ") || void 0
|
|
141
141
|
}
|
|
142
142
|
) }),
|
|
143
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.
|
|
143
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Select.Content, { children: roles.map((role) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Select.Item, { value: role.slug, children: role.name }, role.slug)) })
|
|
144
144
|
]
|
|
145
145
|
}
|
|
146
146
|
),
|
|
@@ -151,9 +151,9 @@ function EditSingleUserRoleDialogContent({
|
|
|
151
151
|
) }),
|
|
152
152
|
updateUser.error ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Callout.Root, { color: "red", mt: "4", mb: "-2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Callout.Text, { children: getMutationErrorMessage(updateUser.error) }) }) : null,
|
|
153
153
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { mt: "5", gap: "3", justify: "end", children: [
|
|
154
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
154
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Close, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", disabled: updateUser.isPending, children: "Cancel" }) }),
|
|
155
155
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
156
|
-
import_elements.
|
|
156
|
+
import_elements.Button,
|
|
157
157
|
{
|
|
158
158
|
form: formId,
|
|
159
159
|
loading: updateUser.isPending,
|
|
@@ -203,7 +203,7 @@ function EditMultipleUserRolesDialogContent({
|
|
|
203
203
|
const checkboxGroupId = `role-checkbox-group-${rootId}`;
|
|
204
204
|
const infoId = `${checkboxGroupId}-info`;
|
|
205
205
|
const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;
|
|
206
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.
|
|
206
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Dialog.Content, { maxWidth: "480px", children: [
|
|
207
207
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
208
208
|
import_themes.Flex,
|
|
209
209
|
{
|
|
@@ -212,8 +212,8 @@ function EditMultipleUserRolesDialogContent({
|
|
|
212
212
|
maxHeight: "calc(100vh - var(--dialog-content-padding) * 2 - var(--space-6) - max(var(--space-6), 6vh)",
|
|
213
213
|
minHeight: "200px",
|
|
214
214
|
children: [
|
|
215
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
216
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
215
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Title, { children: "Edit roles" }),
|
|
216
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Dialog.Description, { children: [
|
|
217
217
|
"Select the roles to assign to ",
|
|
218
218
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { weight: "bold", children: displayName })
|
|
219
219
|
] }),
|
|
@@ -284,9 +284,9 @@ function EditMultipleUserRolesDialogContent({
|
|
|
284
284
|
showSingleRoleInfo ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { color: "gray", size: "2", id: infoId, mt: "1", children: "You cannot update the role for this user as there is only one role available." }) : null,
|
|
285
285
|
error ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Callout.Root, { color: "red", mt: "4", mb: "-2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Callout.Text, { children: error }) }) : null,
|
|
286
286
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { mt: "5", gap: "3", justify: "end", children: [
|
|
287
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
287
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Dialog.Close, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", disabled: updateUser.isPending, children: "Cancel" }) }),
|
|
288
288
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
289
|
-
import_elements.
|
|
289
|
+
import_elements.Button,
|
|
290
290
|
{
|
|
291
291
|
form: formId,
|
|
292
292
|
loading: updateUser.isPending,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/edit-user-role-dialog.tsx"],"sourcesContent":["// @ts-nocheck\n// Unclear why, but there is a versioning conflict somewhere causing the build\n// to fail based on types with the Checkbox component. Will fix asap.\n\"use client\";\n\nimport * as React from \"react\";\nimport {\n Box,\n Card,\n Callout,\n CheckboxGroup,\n Dialog,\n Flex,\n Select,\n ScrollArea,\n Text,\n VisuallyHidden,\n Separator,\n} from \"@radix-ui/themes\";\nimport { type ReactNode, useState } from \"react\";\nimport { useUpdateUserRole } from \"./api/user.js\";\nimport {\n DialogContent,\n PrimaryButton,\n SecondaryButton,\n SelectContent,\n SelectItem,\n SelectTrigger,\n Skeleton,\n} from \"./elements.js\";\nimport { getBestName } from \"./utils.js\";\nimport {\n Member,\n MemberRole,\n RolesAndConfig403,\n RolesAndConfig404,\n useRolesAndConfig,\n} from \"../api/endpoint.js\";\n\ninterface EditUserRoleDialogProps extends Dialog.RootProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n user: Member;\n children?: ReactNode;\n}\n\nexport function EditUserRoleDialog({\n children,\n user,\n ...props\n}: EditUserRoleDialogProps) {\n const rolesAndConfigQuery = useRolesAndConfig({\n query: {\n initialData: { roles: [], multipleRolesEnabled: false },\n },\n });\n const { data, ...restQueryState } = rolesAndConfigQuery;\n const queryState = {\n error: restQueryState.error,\n isLoading: restQueryState.isLoading,\n isSuccess: restQueryState.isSuccess,\n };\n\n return (\n <Dialog.Root {...props}>\n {children && <Dialog.Trigger>{children}</Dialog.Trigger>}\n {data.multipleRolesEnabled ? (\n <EditMultipleUserRolesDialogContent\n user={user}\n roles={data.roles}\n queryState={queryState}\n onFormSubmitSuccess={() => props.onOpenChange(false)}\n />\n ) : (\n <EditSingleUserRoleDialogContent\n user={user}\n roles={data.roles}\n queryState={queryState}\n onFormSubmitSuccess={() => props.onOpenChange(false)}\n />\n )}\n </Dialog.Root>\n );\n}\n\ninterface EditSingleUserRoleDialogContentProps {\n user: Member;\n roles: MemberRole[];\n queryState: {\n error: RolesAndConfig403 | RolesAndConfig404 | null;\n isLoading: boolean;\n isSuccess: boolean;\n };\n onFormSubmitSuccess: () => void;\n}\n\nexport function EditSingleUserRoleDialogContent({\n user,\n roles,\n queryState,\n onFormSubmitSuccess,\n}: EditSingleUserRoleDialogContentProps) {\n const displayName = getBestName(user) || user.email;\n const updateUser = useUpdateUserRole();\n const [selectedRole, setSelectedRole] = useState(\n user.roles?.at(0)?.slug || \"Unknown\",\n );\n\n const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n updateUser.mutate(\n { userId: id, data: { roles } },\n {\n onSuccess: () => {\n onFormSubmitSuccess();\n },\n },\n );\n };\n\n const rootId = React.useId();\n const formId = `edit-user-form-${rootId}`;\n const selectId = `role-select-${rootId}`;\n const selectLabelId = `${selectId}-label`;\n const infoId = `${selectId}-info`;\n const errorId = `${selectId}-error`;\n const showErrorMessage = !!queryState.error;\n const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n\n return (\n <DialogContent maxWidth=\"480px\">\n <Dialog.Title>Edit role</Dialog.Title>\n <Dialog.Description>\n Select the role to assign to <Text weight=\"bold\">{displayName}</Text>\n </Dialog.Description>\n <Flex mt=\"2\" direction=\"column\" gap=\"1\" asChild>\n <form\n id={formId}\n onSubmit={async (event) => {\n event.preventDefault();\n onSubmitForm({ id: user.id, roles: [selectedRole] });\n }}\n >\n <Select.Root\n name=\"roles\"\n value={selectedRole ?? \"Unknown\"}\n onValueChange={setSelectedRole}\n disabled={queryState.isLoading || showSingleRoleInfo}\n >\n <Skeleton loading={queryState.isLoading}>\n <SelectTrigger\n id={selectId}\n placeholder=\"Assign a role\"\n aria-labelledby={selectLabelId}\n aria-invalid={showErrorMessage || undefined}\n aria-describedby={\n [showErrorMessage && errorId, showSingleRoleInfo && infoId]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n />\n </Skeleton>\n\n <SelectContent>\n {roles.map((role) => (\n <SelectItem key={role.slug} value={role.slug}>\n {role.name}\n </SelectItem>\n ))}\n </SelectContent>\n </Select.Root>\n\n {showErrorMessage ? (\n <Text color=\"red\" size=\"2\" id={errorId}>\n {getRoleSelectErrorMessage(queryState.error)}\n </Text>\n ) : null}\n\n {showSingleRoleInfo ? (\n <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n You cannot update the role for this user as there is only one role\n available.\n </Text>\n ) : null}\n </form>\n </Flex>\n\n {updateUser.error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>\n {getMutationErrorMessage(updateUser.error)}\n </Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <SecondaryButton disabled={updateUser.isPending}>\n Cancel\n </SecondaryButton>\n </Dialog.Close>\n\n <PrimaryButton\n form={formId}\n loading={updateUser.isPending}\n disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n >\n Save\n </PrimaryButton>\n </Flex>\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(updateUser.error)}\n </section>\n </VisuallyHidden>\n </DialogContent>\n );\n}\n\ntype EditMultipleUserRolesDialogContentProps =\n EditSingleUserRoleDialogContentProps;\n\nfunction EditMultipleUserRolesDialogContent({\n user,\n roles,\n queryState,\n onFormSubmitSuccess,\n}: EditMultipleUserRolesDialogContentProps) {\n const displayName = getBestName(user) || user.email;\n const updateUser = useUpdateUserRole();\n const [error, setError] = useState<string | null>(null);\n\n React.useEffect(() => {\n if (queryState.error && !error) {\n setError(\"There was an error fetching roles. Please try again.\");\n }\n }, [queryState.error, error]);\n\n const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n if (roles.length === 0) {\n setError(\"Please select at least one role\");\n return;\n }\n updateUser.mutate(\n { userId: id, data: { roles } },\n {\n onSuccess: () => {\n onFormSubmitSuccess();\n },\n onError: () => {\n setError(\n \"There was an error updating the user role. Please try again.\",\n );\n },\n },\n );\n };\n\n const rootId = React.useId();\n const formId = `edit-user-form-${rootId}`;\n const checkboxGroupId = `role-checkbox-group-${rootId}`;\n const infoId = `${checkboxGroupId}-info`;\n const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n return (\n <DialogContent maxWidth=\"480px\">\n <Flex\n direction=\"column\"\n gap=\"1\"\n maxHeight=\"calc(100vh - var(--dialog-content-padding) * 2 - var(--space-6) - max(var(--space-6), 6vh)\"\n minHeight=\"200px\"\n >\n <Dialog.Title>Edit roles</Dialog.Title>\n <Dialog.Description>\n Select the roles to assign to <Text weight=\"bold\">{displayName}</Text>\n </Dialog.Description>\n <Flex mt=\"4\" direction=\"column\" gap=\"1\" asChild minHeight=\"0\">\n <Card\n asChild\n style={{ display: \"flex\", padding: \"2px 0\", flexGrow: 0 }}\n >\n <form\n id={formId}\n onSubmit={async (event) => {\n event.preventDefault();\n const formData = new FormData(event.currentTarget);\n const selectedRoles = formData\n .getAll(\"roles\")\n .map((role) => role.toString());\n onSubmitForm({ id: user.id, roles: selectedRoles });\n }}\n >\n <ScrollArea>\n <CheckboxGroup.Root\n defaultValue={user.roles?.map((role) => role.slug) || []}\n name=\"roles\"\n style={{ gap: \"0\" }}\n id={checkboxGroupId}\n onValueChange={(values) => {\n if (error && values.length > 0) {\n setError(\"\");\n }\n }}\n >\n {roles.map((role, i) => (\n <Box key={role.slug}>\n <Flex px=\"4\" justify=\"center\" py=\"3\">\n <CheckboxGroup.Item\n value={role.slug}\n style={{\n width: \"100%\",\n gap: \"var(--space-3)\",\n alignItems: \"center\",\n }}\n disabled={showSingleRoleInfo}\n >\n <Flex direction=\"column\" width=\"100%\">\n <Text weight=\"bold\" size=\"2\">\n {role.name}\n </Text>\n <Text\n color=\"gray\"\n size=\"2\"\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {role.description}\n </Text>\n </Flex>\n </CheckboxGroup.Item>\n </Flex>\n {i !== roles.length - 1 && (\n <Separator orientation=\"horizontal\" size=\"4\" />\n )}\n </Box>\n ))}\n </CheckboxGroup.Root>\n </ScrollArea>\n </form>\n </Card>\n </Flex>\n\n {showSingleRoleInfo ? (\n <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n You cannot update the role for this user as there is only one role\n available.\n </Text>\n ) : null}\n\n {error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>{error}</Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <SecondaryButton disabled={updateUser.isPending}>\n Cancel\n </SecondaryButton>\n </Dialog.Close>\n\n <PrimaryButton\n form={formId}\n loading={updateUser.isPending}\n disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n >\n Save\n </PrimaryButton>\n </Flex>\n </Flex>\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(updateUser.error)}\n </section>\n </VisuallyHidden>\n </DialogContent>\n );\n}\n\nfunction getRoleSelectErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return \"There was an error fetching roles. Please try again.\";\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return \"There was an error updating the user role. Please try again.\";\n}\n"],"mappings":"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","names":["roles"]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/edit-user-role-dialog.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Box,\n Card,\n Callout,\n CheckboxGroup,\n Flex,\n ScrollArea,\n Text,\n VisuallyHidden,\n Separator,\n} from \"@radix-ui/themes\";\nimport { type ReactNode, useState } from \"react\";\nimport { useUpdateUserRole } from \"./api/user.js\";\nimport { Dialog, Button, Select, Skeleton } from \"./elements.js\";\nimport { getBestName } from \"./utils.js\";\nimport {\n Member,\n MemberRole,\n RolesAndConfig403,\n RolesAndConfig404,\n useRolesAndConfig,\n} from \"../api/endpoint.js\";\n\ninterface EditUserRoleDialogProps extends Dialog.RootProps {\n open: boolean;\n onOpenChange: (open: boolean) => void;\n user: Member;\n children?: ReactNode;\n}\n\nexport function EditUserRoleDialog({\n children,\n user,\n ...props\n}: EditUserRoleDialogProps) {\n const rolesAndConfigQuery = useRolesAndConfig({\n query: {\n initialData: { roles: [], multipleRolesEnabled: false },\n },\n });\n const { data, ...restQueryState } = rolesAndConfigQuery;\n const queryState = {\n error: restQueryState.error,\n isLoading: restQueryState.isLoading,\n isSuccess: restQueryState.isSuccess,\n };\n\n return (\n <Dialog.Root {...props}>\n {children && <Dialog.Trigger>{children}</Dialog.Trigger>}\n {data.multipleRolesEnabled ? (\n <EditMultipleUserRolesDialogContent\n user={user}\n roles={data.roles}\n queryState={queryState}\n onFormSubmitSuccess={() => props.onOpenChange(false)}\n />\n ) : (\n <EditSingleUserRoleDialogContent\n user={user}\n roles={data.roles}\n queryState={queryState}\n onFormSubmitSuccess={() => props.onOpenChange(false)}\n />\n )}\n </Dialog.Root>\n );\n}\n\ninterface EditSingleUserRoleDialogContentProps {\n user: Member;\n roles: MemberRole[];\n queryState: {\n error: RolesAndConfig403 | RolesAndConfig404 | null;\n isLoading: boolean;\n isSuccess: boolean;\n };\n onFormSubmitSuccess: () => void;\n}\n\nexport function EditSingleUserRoleDialogContent({\n user,\n roles,\n queryState,\n onFormSubmitSuccess,\n}: EditSingleUserRoleDialogContentProps) {\n const displayName = getBestName(user) || user.email;\n const updateUser = useUpdateUserRole();\n const [selectedRole, setSelectedRole] = useState(\n user.roles?.at(0)?.slug || \"Unknown\",\n );\n\n const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n updateUser.mutate(\n { userId: id, data: { roles } },\n {\n onSuccess: () => {\n onFormSubmitSuccess();\n },\n },\n );\n };\n\n const rootId = React.useId();\n const formId = `edit-user-form-${rootId}`;\n const selectId = `role-select-${rootId}`;\n const selectLabelId = `${selectId}-label`;\n const infoId = `${selectId}-info`;\n const errorId = `${selectId}-error`;\n const showErrorMessage = !!queryState.error;\n const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n\n return (\n <Dialog.Content maxWidth=\"480px\">\n <Dialog.Title>Edit role</Dialog.Title>\n <Dialog.Description>\n Select the role to assign to <Text weight=\"bold\">{displayName}</Text>\n </Dialog.Description>\n <Flex mt=\"2\" direction=\"column\" gap=\"1\" asChild>\n <form\n id={formId}\n onSubmit={async (event) => {\n event.preventDefault();\n onSubmitForm({ id: user.id, roles: [selectedRole] });\n }}\n >\n <Select.Root\n name=\"roles\"\n value={selectedRole ?? \"Unknown\"}\n onValueChange={setSelectedRole}\n disabled={queryState.isLoading || showSingleRoleInfo}\n >\n <Skeleton loading={queryState.isLoading}>\n <Select.Trigger\n id={selectId}\n placeholder=\"Assign a role\"\n aria-labelledby={selectLabelId}\n aria-invalid={showErrorMessage || undefined}\n aria-describedby={\n [showErrorMessage && errorId, showSingleRoleInfo && infoId]\n .filter(Boolean)\n .join(\" \") || undefined\n }\n />\n </Skeleton>\n\n <Select.Content>\n {roles.map((role) => (\n <Select.Item key={role.slug} value={role.slug}>\n {role.name}\n </Select.Item>\n ))}\n </Select.Content>\n </Select.Root>\n\n {showErrorMessage ? (\n <Text color=\"red\" size=\"2\" id={errorId}>\n {getRoleSelectErrorMessage(queryState.error)}\n </Text>\n ) : null}\n\n {showSingleRoleInfo ? (\n <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n You cannot update the role for this user as there is only one role\n available.\n </Text>\n ) : null}\n </form>\n </Flex>\n\n {updateUser.error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>\n {getMutationErrorMessage(updateUser.error)}\n </Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <Button variant=\"secondary\" disabled={updateUser.isPending}>\n Cancel\n </Button>\n </Dialog.Close>\n\n <Button\n form={formId}\n loading={updateUser.isPending}\n disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n >\n Save\n </Button>\n </Flex>\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(updateUser.error)}\n </section>\n </VisuallyHidden>\n </Dialog.Content>\n );\n}\n\ntype EditMultipleUserRolesDialogContentProps =\n EditSingleUserRoleDialogContentProps;\n\nfunction EditMultipleUserRolesDialogContent({\n user,\n roles,\n queryState,\n onFormSubmitSuccess,\n}: EditMultipleUserRolesDialogContentProps) {\n const displayName = getBestName(user) || user.email;\n const updateUser = useUpdateUserRole();\n const [error, setError] = useState<string | null>(null);\n\n React.useEffect(() => {\n if (queryState.error && !error) {\n setError(\"There was an error fetching roles. Please try again.\");\n }\n }, [queryState.error, error]);\n\n const onSubmitForm = ({ id, roles }: { id: string; roles: string[] }) => {\n if (roles.length === 0) {\n setError(\"Please select at least one role\");\n return;\n }\n updateUser.mutate(\n { userId: id, data: { roles } },\n {\n onSuccess: () => {\n onFormSubmitSuccess();\n },\n onError: () => {\n setError(\n \"There was an error updating the user role. Please try again.\",\n );\n },\n },\n );\n };\n\n const rootId = React.useId();\n const formId = `edit-user-form-${rootId}`;\n const checkboxGroupId = `role-checkbox-group-${rootId}`;\n const infoId = `${checkboxGroupId}-info`;\n const showSingleRoleInfo = queryState.isSuccess && roles.length === 1;\n return (\n <Dialog.Content maxWidth=\"480px\">\n <Flex\n direction=\"column\"\n gap=\"1\"\n maxHeight=\"calc(100vh - var(--dialog-content-padding) * 2 - var(--space-6) - max(var(--space-6), 6vh)\"\n minHeight=\"200px\"\n >\n <Dialog.Title>Edit roles</Dialog.Title>\n <Dialog.Description>\n Select the roles to assign to <Text weight=\"bold\">{displayName}</Text>\n </Dialog.Description>\n <Flex mt=\"4\" direction=\"column\" gap=\"1\" asChild minHeight=\"0\">\n <Card\n asChild\n style={{ display: \"flex\", padding: \"2px 0\", flexGrow: 0 }}\n >\n <form\n id={formId}\n onSubmit={async (event) => {\n event.preventDefault();\n const formData = new FormData(event.currentTarget);\n const selectedRoles = formData\n .getAll(\"roles\")\n .map((role) => role.toString());\n onSubmitForm({ id: user.id, roles: selectedRoles });\n }}\n >\n <ScrollArea>\n <CheckboxGroup.Root\n defaultValue={user.roles?.map((role) => role.slug) || []}\n name=\"roles\"\n style={{ gap: \"0\" }}\n id={checkboxGroupId}\n onValueChange={(values) => {\n if (error && values.length > 0) {\n setError(\"\");\n }\n }}\n >\n {roles.map((role, i) => (\n <Box key={role.slug}>\n <Flex px=\"4\" justify=\"center\" py=\"3\">\n <CheckboxGroup.Item\n value={role.slug}\n style={{\n width: \"100%\",\n gap: \"var(--space-3)\",\n alignItems: \"center\",\n }}\n disabled={showSingleRoleInfo}\n >\n <Flex direction=\"column\" width=\"100%\">\n <Text weight=\"bold\" size=\"2\">\n {role.name}\n </Text>\n <Text\n color=\"gray\"\n size=\"2\"\n style={{\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n }}\n >\n {role.description}\n </Text>\n </Flex>\n </CheckboxGroup.Item>\n </Flex>\n {i !== roles.length - 1 && (\n <Separator orientation=\"horizontal\" size=\"4\" />\n )}\n </Box>\n ))}\n </CheckboxGroup.Root>\n </ScrollArea>\n </form>\n </Card>\n </Flex>\n\n {showSingleRoleInfo ? (\n <Text color=\"gray\" size=\"2\" id={infoId} mt=\"1\">\n You cannot update the role for this user as there is only one role\n available.\n </Text>\n ) : null}\n\n {error ? (\n <Callout.Root color=\"red\" mt=\"4\" mb=\"-2\">\n <Callout.Text>{error}</Callout.Text>\n </Callout.Root>\n ) : null}\n\n <Flex mt=\"5\" gap=\"3\" justify=\"end\">\n <Dialog.Close>\n <Button variant=\"secondary\" disabled={updateUser.isPending}>\n Cancel\n </Button>\n </Dialog.Close>\n\n <Button\n form={formId}\n loading={updateUser.isPending}\n disabled={queryState.isLoading || showSingleRoleInfo || undefined}\n >\n Save\n </Button>\n </Flex>\n </Flex>\n {/* mirror errors in a live region */}\n <VisuallyHidden asChild>\n <section aria-live=\"polite\">\n {getMutationErrorMessage(updateUser.error)}\n </section>\n </VisuallyHidden>\n </Dialog.Content>\n );\n}\n\nfunction getRoleSelectErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return \"There was an error fetching roles. Please try again.\";\n}\n\nfunction getMutationErrorMessage(error: unknown) {\n if (!error) {\n return null;\n }\n // TODO Handle server errors\n return \"There was an error updating the user role. Please try again.\";\n}\n"],"mappings":"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","names":["roles"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
|
-
import { Dialog } from '@radix-ui/themes';
|
|
3
2
|
import { ReactNode } from 'react';
|
|
3
|
+
import { RootProps } from '@radix-ui/themes/components/dialog';
|
|
4
4
|
import { Member, MemberRole, RolesAndConfig403, RolesAndConfig404 } from '../api/endpoint.cjs';
|
|
5
5
|
import '@tanstack/react-query';
|
|
6
6
|
import '../api/widgets-api-client.cjs';
|
|
7
7
|
|
|
8
|
-
interface EditUserRoleDialogProps extends
|
|
8
|
+
interface EditUserRoleDialogProps extends RootProps {
|
|
9
9
|
open: boolean;
|
|
10
10
|
onOpenChange: (open: boolean) => void;
|
|
11
11
|
user: Member;
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
var __create = Object.create;
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
8
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
9
|
+
var __export = (target, all) => {
|
|
10
|
+
for (var name in all)
|
|
11
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from))
|
|
16
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
17
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
18
|
+
}
|
|
19
|
+
return to;
|
|
20
|
+
};
|
|
21
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
22
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
23
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
24
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
25
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
26
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
27
|
+
mod
|
|
28
|
+
));
|
|
29
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
30
|
+
var alert_dialog_exports = {};
|
|
31
|
+
__export(alert_dialog_exports, {
|
|
32
|
+
Action: () => import_alert_dialog2.Action,
|
|
33
|
+
Cancel: () => import_alert_dialog2.Cancel,
|
|
34
|
+
Content: () => AlertDialogContent,
|
|
35
|
+
Description: () => import_alert_dialog2.Description,
|
|
36
|
+
Root: () => import_alert_dialog2.Root,
|
|
37
|
+
Title: () => import_alert_dialog2.Title,
|
|
38
|
+
Trigger: () => import_alert_dialog2.Trigger
|
|
39
|
+
});
|
|
40
|
+
module.exports = __toCommonJS(alert_dialog_exports);
|
|
41
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
42
|
+
var React = __toESM(require("react"), 1);
|
|
43
|
+
var import_alert_dialog = require("@radix-ui/themes/components/alert-dialog");
|
|
44
|
+
var import_widgets_context = require("../widgets-context.js");
|
|
45
|
+
var import_utils = require("../utils.js");
|
|
46
|
+
var import_utils2 = require("./utils.js");
|
|
47
|
+
var import_alert_dialog2 = require("@radix-ui/themes/components/alert-dialog");
|
|
48
|
+
const AlertDialogContent = React.forwardRef(
|
|
49
|
+
function AlertDialogContent2({ className, ...props }, forwardedRef) {
|
|
50
|
+
const element = (0, import_widgets_context.useElement)("dialog");
|
|
51
|
+
const { ref } = (0, import_utils2.useDialogOverlayHack)(forwardedRef, {
|
|
52
|
+
className: (0, import_utils.namespaceClassNames)("dialog-overlay"),
|
|
53
|
+
selector: ".rt-DialogOverlay"
|
|
54
|
+
});
|
|
55
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
56
|
+
import_alert_dialog.Content,
|
|
57
|
+
{
|
|
58
|
+
ref,
|
|
59
|
+
...(0, import_utils.getDomProps)({ elementId: "dialog", className }),
|
|
60
|
+
...props,
|
|
61
|
+
...element
|
|
62
|
+
}
|
|
63
|
+
);
|
|
64
|
+
}
|
|
65
|
+
);
|
|
66
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
67
|
+
0 && (module.exports = {
|
|
68
|
+
Action,
|
|
69
|
+
Cancel,
|
|
70
|
+
Content,
|
|
71
|
+
Description,
|
|
72
|
+
Root,
|
|
73
|
+
Title,
|
|
74
|
+
Trigger
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=alert-dialog.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/elements/alert-dialog.tsx"],"sourcesContent":["\"use client\";\nimport * as React from \"react\";\nimport {\n Content as RadixAlertDialogContent,\n type ContentProps as RadixAlertDialogContentProps,\n} from \"@radix-ui/themes/components/alert-dialog\";\nimport { useElement } from \"../widgets-context.js\";\nimport { getDomProps, namespaceClassNames } from \"../utils.js\";\nimport { useDialogOverlayHack } from \"./utils.js\";\n\ninterface ContentProps extends RadixAlertDialogContentProps {}\n\nconst AlertDialogContent = React.forwardRef<HTMLDivElement, ContentProps>(\n function AlertDialogContent({ className, ...props }, forwardedRef) {\n const element = useElement(\"dialog\");\n const { ref } = useDialogOverlayHack(forwardedRef, {\n className: namespaceClassNames(\"dialog-overlay\"),\n selector: \".rt-DialogOverlay\",\n });\n return (\n <RadixAlertDialogContent\n ref={ref}\n {...getDomProps({ elementId: \"dialog\", className })}\n {...props}\n {...element}\n />\n );\n },\n);\n\nexport { AlertDialogContent as Content };\nexport type { ContentProps };\n\nexport {\n Action,\n Cancel,\n Description,\n Root,\n Title,\n Trigger,\n} from \"@radix-ui/themes/components/alert-dialog\";\nexport type {\n ActionProps,\n CancelProps,\n DescriptionProps,\n RootProps,\n TitleProps,\n TriggerProps,\n} from \"@radix-ui/themes/components/alert-dialog\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBM;AAnBN,YAAuB;AACvB,0BAGO;AACP,6BAA2B;AAC3B,mBAAiD;AACjD,IAAAA,gBAAqC;AAyBrC,IAAAC,uBAOO;AA5BP,MAAM,qBAAqB,MAAM;AAAA,EAC/B,SAASC,oBAAmB,EAAE,WAAW,GAAG,MAAM,GAAG,cAAc;AACjE,UAAM,cAAU,mCAAW,QAAQ;AACnC,UAAM,EAAE,IAAI,QAAI,oCAAqB,cAAc;AAAA,MACjD,eAAW,kCAAoB,gBAAgB;AAAA,MAC/C,UAAU;AAAA,IACZ,CAAC;AACD,WACE;AAAA,MAAC,oBAAAC;AAAA,MAAA;AAAA,QACC;AAAA,QACC,OAAG,0BAAY,EAAE,WAAW,UAAU,UAAU,CAAC;AAAA,QACjD,GAAG;AAAA,QACH,GAAG;AAAA;AAAA,IACN;AAAA,EAEJ;AACF;","names":["import_utils","import_alert_dialog","AlertDialogContent","RadixAlertDialogContent"]}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import 'react';
|
|
2
|
+
export { Action, ActionProps, Cancel, CancelProps, Description, DescriptionProps, Root, RootProps, Title, TitleProps, Trigger, TriggerProps } from '@radix-ui/themes/components/alert-dialog';
|
|
3
|
+
export { A as Content, C as ContentProps } from '../../alert-dialog-BlG3_awx.cjs';
|