@workos-inc/widgets 1.7.2 → 1.8.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/CHANGELOG.md +5 -0
- package/dist/cjs/api/endpoint.cjs +1 -0
- package/dist/cjs/api/endpoint.cjs.map +1 -1
- package/dist/cjs/api/endpoint.d.cts +1 -0
- package/dist/cjs/index.cjs +5 -2
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +1 -0
- package/dist/cjs/lib/add-mfa-dialog.cjs +133 -61
- package/dist/cjs/lib/add-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-domain-verification.cjs +41 -5
- package/dist/cjs/lib/admin-portal-domain-verification.cjs.map +1 -1
- package/dist/cjs/lib/admin-portal-sso-connection.cjs +121 -44
- package/dist/cjs/lib/admin-portal-sso-connection.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-key-details-card.cjs +25 -3
- package/dist/cjs/lib/api-keys/api-key-details-card.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-key-details-dialog.cjs +25 -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 +13 -4
- package/dist/cjs/lib/api-keys/api-keys-search.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys-table.cjs +94 -12
- package/dist/cjs/lib/api-keys/api-keys-table.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/api-keys.cjs +16 -2
- package/dist/cjs/lib/api-keys/api-keys.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/create-api-key.cjs +172 -20
- package/dist/cjs/lib/api-keys/create-api-key.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/relative-time.cjs +12 -2
- package/dist/cjs/lib/api-keys/relative-time.cjs.map +1 -1
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs +49 -7
- package/dist/cjs/lib/api-keys/revoke-api-key-dialog.cjs.map +1 -1
- package/dist/cjs/lib/change-password-dialog.cjs +122 -16
- package/dist/cjs/lib/change-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/copy-button.cjs +14 -2
- package/dist/cjs/lib/copy-button.cjs.map +1 -1
- package/dist/cjs/lib/copy-button.d.cts +2 -1
- package/dist/cjs/lib/delete-domain-dialog.cjs +52 -19
- package/dist/cjs/lib/delete-domain-dialog.cjs.map +1 -1
- package/dist/cjs/lib/delete-user-dialog.cjs +46 -11
- 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 +51 -7
- package/dist/cjs/lib/domain-actions.cjs.map +1 -1
- package/dist/cjs/lib/domain-item.cjs +42 -8
- package/dist/cjs/lib/domain-item.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-profile-dialog.cjs +62 -11
- package/dist/cjs/lib/edit-user-profile-dialog.cjs.map +1 -1
- package/dist/cjs/lib/edit-user-role-dialog.cjs +90 -17
- package/dist/cjs/lib/edit-user-role-dialog.cjs.map +1 -1
- package/dist/cjs/lib/elements.cjs +14 -3
- package/dist/cjs/lib/elements.cjs.map +1 -1
- package/dist/cjs/lib/elements.d.cts +5 -2
- package/dist/cjs/lib/elevated-access.cjs +78 -18
- package/dist/cjs/lib/elevated-access.cjs.map +1 -1
- package/dist/cjs/lib/generic-error.cjs +53 -11
- package/dist/cjs/lib/generic-error.cjs.map +1 -1
- package/dist/cjs/lib/generic-error.d.cts +5 -1
- package/dist/cjs/lib/i18n/intl-context.cjs +47 -0
- package/dist/cjs/lib/i18n/intl-context.cjs.map +1 -0
- package/dist/cjs/lib/i18n/intl-context.d.cts +29 -0
- package/dist/cjs/lib/i18n/translation.cjs +67 -0
- package/dist/cjs/lib/i18n/translation.cjs.map +1 -0
- package/dist/cjs/lib/i18n/translation.d.cts +16 -0
- package/dist/cjs/lib/i18n/use-locale.cjs +33 -0
- package/dist/cjs/lib/i18n/use-locale.cjs.map +1 -0
- package/dist/cjs/lib/i18n/use-locale.d.cts +7 -0
- package/dist/cjs/lib/i18n/use-translation.cjs +47 -0
- package/dist/cjs/lib/i18n/use-translation.cjs.map +1 -0
- package/dist/cjs/lib/i18n/use-translation.d.cts +15 -0
- package/dist/cjs/lib/identity-providers.d.cts +1 -1
- package/dist/cjs/lib/invite-user-dialog.cjs +69 -14
- package/dist/cjs/lib/invite-user-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs +33 -4
- package/dist/cjs/lib/logout-all-sessions-dialog.cjs.map +1 -1
- package/dist/cjs/lib/logout-dialog.cjs +34 -10
- package/dist/cjs/lib/logout-dialog.cjs.map +1 -1
- package/dist/cjs/lib/organization-switcher.cjs +12 -2
- package/dist/cjs/lib/organization-switcher.cjs.map +1 -1
- package/dist/cjs/lib/pipes.cjs +175 -36
- package/dist/cjs/lib/pipes.cjs.map +1 -1
- package/dist/cjs/lib/resend-invite-dialog.cjs +67 -17
- package/dist/cjs/lib/resend-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/reset-mfa-dialog.cjs +50 -7
- package/dist/cjs/lib/reset-mfa-dialog.cjs.map +1 -1
- package/dist/cjs/lib/revoke-invite-dialog.cjs +42 -10
- package/dist/cjs/lib/revoke-invite-dialog.cjs.map +1 -1
- package/dist/cjs/lib/save-button.cjs +9 -1
- package/dist/cjs/lib/save-button.cjs.map +1 -1
- package/dist/cjs/lib/set-password-dialog.cjs +101 -13
- package/dist/cjs/lib/set-password-dialog.cjs.map +1 -1
- package/dist/cjs/lib/user-actions-dropdown.cjs +54 -6
- package/dist/cjs/lib/user-actions-dropdown.cjs.map +1 -1
- package/dist/cjs/lib/user-profile.cjs +81 -10
- package/dist/cjs/lib/user-profile.cjs.map +1 -1
- package/dist/cjs/lib/user-security.cjs +127 -25
- package/dist/cjs/lib/user-security.cjs.map +1 -1
- package/dist/cjs/lib/user-sessions.cjs +74 -15
- package/dist/cjs/lib/user-sessions.cjs.map +1 -1
- package/dist/cjs/lib/users-management.cjs +265 -49
- package/dist/cjs/lib/users-management.cjs.map +1 -1
- package/dist/cjs/lib/users-search.cjs +18 -4
- package/dist/cjs/lib/users-search.cjs.map +1 -1
- package/dist/cjs/lib/utils.cjs +10 -7
- package/dist/cjs/lib/utils.cjs.map +1 -1
- package/dist/cjs/lib/utils.d.cts +2 -1
- package/dist/cjs/lib/view-dns-record-dialog.cjs +89 -18
- package/dist/cjs/lib/view-dns-record-dialog.cjs.map +1 -1
- package/dist/cjs/workos-widgets.client.cjs +2 -2
- package/dist/cjs/workos-widgets.client.cjs.map +1 -1
- package/dist/esm/api/endpoint.d.ts +1 -0
- package/dist/esm/api/endpoint.js +1 -0
- package/dist/esm/api/endpoint.js.map +1 -1
- package/dist/esm/index.d.ts +1 -0
- package/dist/esm/index.js +3 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/lib/add-mfa-dialog.js +133 -61
- package/dist/esm/lib/add-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/admin-portal-domain-verification.js +41 -5
- package/dist/esm/lib/admin-portal-domain-verification.js.map +1 -1
- package/dist/esm/lib/admin-portal-sso-connection.js +121 -44
- package/dist/esm/lib/admin-portal-sso-connection.js.map +1 -1
- package/dist/esm/lib/api-keys/api-key-details-card.js +25 -3
- package/dist/esm/lib/api-keys/api-key-details-card.js.map +1 -1
- package/dist/esm/lib/api-keys/api-key-details-dialog.js +25 -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 +13 -4
- package/dist/esm/lib/api-keys/api-keys-search.js.map +1 -1
- package/dist/esm/lib/api-keys/api-keys-table.js +94 -12
- package/dist/esm/lib/api-keys/api-keys-table.js.map +1 -1
- package/dist/esm/lib/api-keys/api-keys.js +16 -2
- package/dist/esm/lib/api-keys/api-keys.js.map +1 -1
- package/dist/esm/lib/api-keys/create-api-key.js +172 -20
- package/dist/esm/lib/api-keys/create-api-key.js.map +1 -1
- package/dist/esm/lib/api-keys/relative-time.js +12 -2
- package/dist/esm/lib/api-keys/relative-time.js.map +1 -1
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js +49 -7
- package/dist/esm/lib/api-keys/revoke-api-key-dialog.js.map +1 -1
- package/dist/esm/lib/change-password-dialog.js +122 -16
- package/dist/esm/lib/change-password-dialog.js.map +1 -1
- package/dist/esm/lib/copy-button.d.ts +2 -1
- package/dist/esm/lib/copy-button.js +14 -2
- package/dist/esm/lib/copy-button.js.map +1 -1
- package/dist/esm/lib/delete-domain-dialog.js +52 -19
- 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 +36 -11
- package/dist/esm/lib/delete-user-dialog.js.map +1 -1
- package/dist/esm/lib/domain-actions.js +41 -7
- package/dist/esm/lib/domain-actions.js.map +1 -1
- package/dist/esm/lib/domain-item.js +42 -8
- package/dist/esm/lib/domain-item.js.map +1 -1
- package/dist/esm/lib/edit-user-profile-dialog.js +62 -11
- package/dist/esm/lib/edit-user-profile-dialog.js.map +1 -1
- package/dist/esm/lib/edit-user-role-dialog.js +90 -17
- package/dist/esm/lib/edit-user-role-dialog.js.map +1 -1
- package/dist/esm/lib/elements.d.ts +5 -2
- package/dist/esm/lib/elements.js +14 -3
- package/dist/esm/lib/elements.js.map +1 -1
- package/dist/esm/lib/elevated-access.js +78 -18
- package/dist/esm/lib/elevated-access.js.map +1 -1
- package/dist/esm/lib/generic-error.d.ts +5 -1
- package/dist/esm/lib/generic-error.js +53 -11
- package/dist/esm/lib/generic-error.js.map +1 -1
- package/dist/esm/lib/i18n/intl-context.d.ts +29 -0
- package/dist/esm/lib/i18n/intl-context.js +12 -0
- package/dist/esm/lib/i18n/intl-context.js.map +1 -0
- package/dist/esm/lib/i18n/translation.d.ts +16 -0
- package/dist/esm/lib/i18n/translation.js +45 -0
- package/dist/esm/lib/i18n/translation.js.map +1 -0
- package/dist/esm/lib/i18n/use-locale.d.ts +7 -0
- package/dist/esm/lib/i18n/use-locale.js +9 -0
- package/dist/esm/lib/i18n/use-locale.js.map +1 -0
- package/dist/esm/lib/i18n/use-translation.d.ts +15 -0
- package/dist/esm/lib/i18n/use-translation.js +23 -0
- package/dist/esm/lib/i18n/use-translation.js.map +1 -0
- package/dist/esm/lib/identity-providers.d.ts +1 -1
- package/dist/esm/lib/invite-user-dialog.js +70 -15
- package/dist/esm/lib/invite-user-dialog.js.map +1 -1
- package/dist/esm/lib/logout-all-sessions-dialog.js +33 -4
- package/dist/esm/lib/logout-all-sessions-dialog.js.map +1 -1
- package/dist/esm/lib/logout-dialog.js +34 -10
- package/dist/esm/lib/logout-dialog.js.map +1 -1
- package/dist/esm/lib/organization-switcher.js +12 -2
- package/dist/esm/lib/organization-switcher.js.map +1 -1
- package/dist/esm/lib/pipes.js +175 -36
- package/dist/esm/lib/pipes.js.map +1 -1
- package/dist/esm/lib/resend-invite-dialog.js +67 -17
- package/dist/esm/lib/resend-invite-dialog.js.map +1 -1
- package/dist/esm/lib/reset-mfa-dialog.js +50 -7
- package/dist/esm/lib/reset-mfa-dialog.js.map +1 -1
- package/dist/esm/lib/revoke-invite-dialog.js +42 -10
- package/dist/esm/lib/revoke-invite-dialog.js.map +1 -1
- package/dist/esm/lib/save-button.js +9 -1
- package/dist/esm/lib/save-button.js.map +1 -1
- package/dist/esm/lib/set-password-dialog.js +101 -13
- package/dist/esm/lib/set-password-dialog.js.map +1 -1
- package/dist/esm/lib/user-actions-dropdown.js +54 -6
- package/dist/esm/lib/user-actions-dropdown.js.map +1 -1
- package/dist/esm/lib/user-profile.js +81 -10
- package/dist/esm/lib/user-profile.js.map +1 -1
- package/dist/esm/lib/user-security.js +127 -25
- package/dist/esm/lib/user-security.js.map +1 -1
- package/dist/esm/lib/user-sessions.js +74 -15
- package/dist/esm/lib/user-sessions.js.map +1 -1
- package/dist/esm/lib/users-management.js +266 -51
- package/dist/esm/lib/users-management.js.map +1 -1
- package/dist/esm/lib/users-search.js +18 -4
- package/dist/esm/lib/users-search.js.map +1 -1
- package/dist/esm/lib/utils.d.ts +2 -1
- package/dist/esm/lib/utils.js +10 -7
- package/dist/esm/lib/utils.js.map +1 -1
- package/dist/esm/lib/view-dns-record-dialog.js +89 -18
- package/dist/esm/lib/view-dns-record-dialog.js.map +1 -1
- package/dist/esm/workos-widgets.client.js +2 -2
- package/dist/esm/workos-widgets.client.js.map +1 -1
- package/package.json +11 -2
|
@@ -40,10 +40,13 @@ var import_edit_user_role_dialog = require("./edit-user-role-dialog.js");
|
|
|
40
40
|
var import_elements = require("./elements.js");
|
|
41
41
|
var import_resend_invite_dialog = require("./resend-invite-dialog.js");
|
|
42
42
|
var import_revoke_invite_dialog = require("./revoke-invite-dialog.js");
|
|
43
|
+
var import_translation = require("./i18n/translation.js");
|
|
44
|
+
var import_use_translation = require("./i18n/use-translation.js");
|
|
43
45
|
const UserActionsDropdown = ({
|
|
44
46
|
user,
|
|
45
47
|
children
|
|
46
48
|
}) => {
|
|
49
|
+
const translate = (0, import_use_translation.useTranslation)();
|
|
47
50
|
const rolesAndConfigQuery = (0, import_endpoint.useRolesAndConfig)({
|
|
48
51
|
query: {
|
|
49
52
|
initialData: { roles: [], multipleRolesEnabled: false }
|
|
@@ -66,8 +69,26 @@ const UserActionsDropdown = ({
|
|
|
66
69
|
{
|
|
67
70
|
onSelect: () => setOpenDialog("edit-role"),
|
|
68
71
|
disabled: rolesAndConfigQuery.isLoading || rolesAndConfigQuery.isSuccess && roles.length <= 1,
|
|
69
|
-
title: rolesAndConfigQuery.isSuccess && roles.length <= 1 ?
|
|
70
|
-
|
|
72
|
+
title: rolesAndConfigQuery.isSuccess && roles.length <= 1 ? translate({
|
|
73
|
+
defaultMessage: "You cannot update the role for this user as there is only one role available.",
|
|
74
|
+
id: "rzvafM",
|
|
75
|
+
description: "Tooltip explaining why role editing is disabled"
|
|
76
|
+
}) : void 0,
|
|
77
|
+
children: isMultipleRolesEnabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
78
|
+
import_translation.Translation,
|
|
79
|
+
{
|
|
80
|
+
defaultMessage: "Edit roles",
|
|
81
|
+
id: "yjbD6m",
|
|
82
|
+
description: "Menu option to edit user roles (plural)"
|
|
83
|
+
}
|
|
84
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
85
|
+
import_translation.Translation,
|
|
86
|
+
{
|
|
87
|
+
defaultMessage: "Edit role",
|
|
88
|
+
id: "NJqcnW",
|
|
89
|
+
description: "Menu option to edit user role (singular)"
|
|
90
|
+
}
|
|
91
|
+
)
|
|
71
92
|
},
|
|
72
93
|
"edit-role"
|
|
73
94
|
)
|
|
@@ -79,7 +100,14 @@ const UserActionsDropdown = ({
|
|
|
79
100
|
import_elements.DropdownMenu.Item,
|
|
80
101
|
{
|
|
81
102
|
onSelect: () => setOpenDialog("resend-invite"),
|
|
82
|
-
children:
|
|
103
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
104
|
+
import_translation.Translation,
|
|
105
|
+
{
|
|
106
|
+
defaultMessage: "Resend invitation",
|
|
107
|
+
id: "1fzoWe",
|
|
108
|
+
description: "Menu option to resend user invitation"
|
|
109
|
+
}
|
|
110
|
+
)
|
|
83
111
|
},
|
|
84
112
|
"resend-invite"
|
|
85
113
|
)
|
|
@@ -92,7 +120,14 @@ const UserActionsDropdown = ({
|
|
|
92
120
|
{
|
|
93
121
|
variant: "destructive",
|
|
94
122
|
onSelect: () => setOpenDialog("revoke-invite"),
|
|
95
|
-
children:
|
|
123
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
124
|
+
import_translation.Translation,
|
|
125
|
+
{
|
|
126
|
+
defaultMessage: "Revoke invitation",
|
|
127
|
+
id: "0Ie4dM",
|
|
128
|
+
description: "Menu option to revoke user invitation"
|
|
129
|
+
}
|
|
130
|
+
)
|
|
96
131
|
},
|
|
97
132
|
"revoke-invite"
|
|
98
133
|
)
|
|
@@ -105,7 +140,14 @@ const UserActionsDropdown = ({
|
|
|
105
140
|
{
|
|
106
141
|
variant: "destructive",
|
|
107
142
|
onSelect: () => setOpenDialog("revoke-membership"),
|
|
108
|
-
children:
|
|
143
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
144
|
+
import_translation.Translation,
|
|
145
|
+
{
|
|
146
|
+
defaultMessage: "Remove user",
|
|
147
|
+
id: "qGSR1P",
|
|
148
|
+
description: "Menu option to remove user from organization"
|
|
149
|
+
}
|
|
150
|
+
)
|
|
109
151
|
},
|
|
110
152
|
"revoke-membership"
|
|
111
153
|
)
|
|
@@ -115,7 +157,13 @@ const UserActionsDropdown = ({
|
|
|
115
157
|
actions: actions2,
|
|
116
158
|
items: items2
|
|
117
159
|
};
|
|
118
|
-
}, [
|
|
160
|
+
}, [
|
|
161
|
+
rolesAndConfigQuery,
|
|
162
|
+
user.actions,
|
|
163
|
+
isMultipleRolesEnabled,
|
|
164
|
+
roles,
|
|
165
|
+
translate
|
|
166
|
+
]);
|
|
119
167
|
if (user.isLoggedInUser || items.length === 0) {
|
|
120
168
|
return null;
|
|
121
169
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/user-actions-dropdown.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Member, useRolesAndConfig } from \"../api/endpoint.js\";\nimport { DeleteUserDialog } from \"./delete-user-dialog.js\";\nimport { EditUserRoleDialog } from \"./edit-user-role-dialog.js\";\nimport { DropdownMenu } from \"./elements.js\";\nimport { ResendInviteDialog } from \"./resend-invite-dialog.js\";\nimport { RevokeInviteDialog } from \"./revoke-invite-dialog.js\";\n\ninterface UserActionsDropdownProps {\n user: Member;\n children: React.ReactNode;\n}\n\ntype UserActionDialog =\n | \"revoke-membership\"\n | \"revoke-invite\"\n | \"resend-invite\"\n | \"edit-role\";\n\nexport const UserActionsDropdown = ({\n user,\n children,\n}: UserActionsDropdownProps) => {\n const rolesAndConfigQuery = useRolesAndConfig({\n query: {\n initialData: { roles: [], multipleRolesEnabled: false },\n },\n });\n const { roles, multipleRolesEnabled: isMultipleRolesEnabled } =\n rolesAndConfigQuery.data;\n const [openDialog, setOpenDialog] = React.useState<UserActionDialog | null>(\n null,\n );\n\n /**\n * Assigns a key for each dialog based on its open state to ensure its\n * internal state is cleared when it is closed.\n */\n function getDialogKey(dialog: UserActionDialog) {\n return `${dialog}-${openDialog === dialog}-${user.id}`;\n }\n\n const { actions, items } = React.useMemo(() => {\n const actions = new Set(user.actions);\n const items: React.ReactElement[] = [];\n if (actions.has(\"edit-role\")) {\n items.push(\n <DropdownMenu.Item\n key=\"edit-role\"\n onSelect={() => setOpenDialog(\"edit-role\")}\n disabled={\n rolesAndConfigQuery.isLoading ||\n (rolesAndConfigQuery.isSuccess && roles.length <= 1)\n }\n title={\n rolesAndConfigQuery.isSuccess && roles.length <= 1\n ? \"You cannot update the role for this user as there is only one role available.\"\n : undefined\n }\n >\n {
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/user-actions-dropdown.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { Member, useRolesAndConfig } from \"../api/endpoint.js\";\nimport { DeleteUserDialog } from \"./delete-user-dialog.js\";\nimport { EditUserRoleDialog } from \"./edit-user-role-dialog.js\";\nimport { DropdownMenu } from \"./elements.js\";\nimport { ResendInviteDialog } from \"./resend-invite-dialog.js\";\nimport { RevokeInviteDialog } from \"./revoke-invite-dialog.js\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\n\ninterface UserActionsDropdownProps {\n user: Member;\n children: React.ReactNode;\n}\n\ntype UserActionDialog =\n | \"revoke-membership\"\n | \"revoke-invite\"\n | \"resend-invite\"\n | \"edit-role\";\n\nexport const UserActionsDropdown = ({\n user,\n children,\n}: UserActionsDropdownProps) => {\n const translate = useTranslation();\n const rolesAndConfigQuery = useRolesAndConfig({\n query: {\n initialData: { roles: [], multipleRolesEnabled: false },\n },\n });\n const { roles, multipleRolesEnabled: isMultipleRolesEnabled } =\n rolesAndConfigQuery.data;\n const [openDialog, setOpenDialog] = React.useState<UserActionDialog | null>(\n null,\n );\n\n /**\n * Assigns a key for each dialog based on its open state to ensure its\n * internal state is cleared when it is closed.\n */\n function getDialogKey(dialog: UserActionDialog) {\n return `${dialog}-${openDialog === dialog}-${user.id}`;\n }\n\n const { actions, items } = React.useMemo(() => {\n const actions = new Set(user.actions);\n const items: React.ReactElement[] = [];\n if (actions.has(\"edit-role\")) {\n items.push(\n <DropdownMenu.Item\n key=\"edit-role\"\n onSelect={() => setOpenDialog(\"edit-role\")}\n disabled={\n rolesAndConfigQuery.isLoading ||\n (rolesAndConfigQuery.isSuccess && roles.length <= 1)\n }\n title={\n rolesAndConfigQuery.isSuccess && roles.length <= 1\n ? translate({\n defaultMessage:\n \"You cannot update the role for this user as there is only one role available.\",\n id: \"rzvafM\",\n description:\n \"Tooltip explaining why role editing is disabled\",\n })\n : undefined\n }\n >\n {isMultipleRolesEnabled ? (\n <Translation\n defaultMessage=\"Edit roles\"\n id=\"yjbD6m\"\n description=\"Menu option to edit user roles (plural)\"\n />\n ) : (\n <Translation\n defaultMessage=\"Edit role\"\n id=\"NJqcnW\"\n description=\"Menu option to edit user role (singular)\"\n />\n )}\n </DropdownMenu.Item>,\n );\n }\n if (actions.has(\"resend-invite\")) {\n items.push(\n <DropdownMenu.Item\n key=\"resend-invite\"\n onSelect={() => setOpenDialog(\"resend-invite\")}\n >\n <Translation\n defaultMessage=\"Resend invitation\"\n id=\"1fzoWe\"\n description=\"Menu option to resend user invitation\"\n />\n </DropdownMenu.Item>,\n );\n }\n if (actions.has(\"revoke-invite\")) {\n items.push(\n <DropdownMenu.Item\n variant=\"destructive\"\n key=\"revoke-invite\"\n onSelect={() => setOpenDialog(\"revoke-invite\")}\n >\n <Translation\n defaultMessage=\"Revoke invitation\"\n id=\"0Ie4dM\"\n description=\"Menu option to revoke user invitation\"\n />\n </DropdownMenu.Item>,\n );\n }\n if (actions.has(\"revoke-membership\")) {\n items.push(\n <DropdownMenu.Item\n variant=\"destructive\"\n key=\"revoke-membership\"\n onSelect={() => setOpenDialog(\"revoke-membership\")}\n >\n <Translation\n defaultMessage=\"Remove user\"\n id=\"qGSR1P\"\n description=\"Menu option to remove user from organization\"\n />\n </DropdownMenu.Item>,\n );\n }\n return {\n actions,\n items,\n };\n }, [\n rolesAndConfigQuery,\n user.actions,\n isMultipleRolesEnabled,\n roles,\n translate,\n ]);\n\n if (user.isLoggedInUser || items.length === 0) {\n return null;\n }\n\n return (\n <>\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>{children}</DropdownMenu.Trigger>\n <DropdownMenu.Content size=\"2\" align=\"end\">\n {items}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n\n {actions.has(\"edit-role\") && (\n <EditUserRoleDialog\n key={getDialogKey(\"edit-role\")}\n user={user}\n open={openDialog === \"edit-role\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n\n {actions.has(\"revoke-membership\") && (\n <DeleteUserDialog\n key={getDialogKey(\"revoke-membership\")}\n user={user}\n open={openDialog === \"revoke-membership\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n\n {actions.has(\"revoke-invite\") && (\n <RevokeInviteDialog\n key={getDialogKey(\"revoke-invite\")}\n user={user}\n open={openDialog === \"revoke-invite\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n\n {actions.has(\"resend-invite\") && (\n <ResendInviteDialog\n key={getDialogKey(\"resend-invite\")}\n user={user}\n open={openDialog === \"resend-invite\"}\n onOpenChange={(open) => !open && setOpenDialog(null)}\n />\n )}\n </>\n );\n};\n"],"mappings":"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","names":["actions","items"]}
|
|
@@ -31,6 +31,7 @@ var import_edit_user_profile_dialog = require("./edit-user-profile-dialog.js");
|
|
|
31
31
|
var import_utils = require("./utils.js");
|
|
32
32
|
var import_oauth_icons = require("./oauth-icons.js");
|
|
33
33
|
var import_generic_error = require("./generic-error.js");
|
|
34
|
+
var import_translation = require("./i18n/translation.js");
|
|
34
35
|
const UserProfile = ({
|
|
35
36
|
userData: user,
|
|
36
37
|
...domProps
|
|
@@ -39,7 +40,14 @@ const UserProfile = ({
|
|
|
39
40
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("resolved", domProps), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Root, { children: [
|
|
40
41
|
user.profilePictureUrl && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
41
42
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
|
|
42
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { minWidth: "220px", highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children:
|
|
43
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { minWidth: "220px", highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
44
|
+
import_translation.Translation,
|
|
45
|
+
{
|
|
46
|
+
defaultMessage: "Profile picture",
|
|
47
|
+
description: "Label for the user's avatar",
|
|
48
|
+
id: "RvLqCQ"
|
|
49
|
+
}
|
|
50
|
+
) }) }),
|
|
43
51
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
44
52
|
import_elements.Avatar,
|
|
45
53
|
{
|
|
@@ -52,7 +60,14 @@ const UserProfile = ({
|
|
|
52
60
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {})
|
|
53
61
|
] }),
|
|
54
62
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
|
|
55
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children:
|
|
63
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
64
|
+
import_translation.Translation,
|
|
65
|
+
{
|
|
66
|
+
defaultMessage: "Full name",
|
|
67
|
+
id: "kkBScm",
|
|
68
|
+
description: "Label for user's full name field"
|
|
69
|
+
}
|
|
70
|
+
) }) }),
|
|
56
71
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
57
72
|
import_themes.Flex,
|
|
58
73
|
{
|
|
@@ -66,23 +81,51 @@ const UserProfile = ({
|
|
|
66
81
|
{
|
|
67
82
|
color: "gray",
|
|
68
83
|
style: { color: "var(--gray-10)", cursor: "default" },
|
|
69
|
-
children:
|
|
84
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
85
|
+
import_translation.Translation,
|
|
86
|
+
{
|
|
87
|
+
defaultMessage: "Not set",
|
|
88
|
+
id: "i4vzAY",
|
|
89
|
+
description: "Placeholder text when user's name is not set"
|
|
90
|
+
}
|
|
91
|
+
)
|
|
70
92
|
}
|
|
71
93
|
) }),
|
|
72
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_edit_user_profile_dialog.EditUserProfileDialog, { user, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children:
|
|
94
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_edit_user_profile_dialog.EditUserProfileDialog, { user, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
95
|
+
import_translation.Translation,
|
|
96
|
+
{
|
|
97
|
+
defaultMessage: "Edit",
|
|
98
|
+
id: "5bhXUz",
|
|
99
|
+
description: "Button text to edit user profile"
|
|
100
|
+
}
|
|
101
|
+
) }) })
|
|
73
102
|
]
|
|
74
103
|
}
|
|
75
104
|
) })
|
|
76
105
|
] }),
|
|
77
106
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {}),
|
|
78
107
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
|
|
79
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children:
|
|
108
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
109
|
+
import_translation.Translation,
|
|
110
|
+
{
|
|
111
|
+
defaultMessage: "Email address",
|
|
112
|
+
id: "nLk5pa",
|
|
113
|
+
description: "Label for user's email address field"
|
|
114
|
+
}
|
|
115
|
+
) }) }),
|
|
80
116
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { align: "center", minHeight: "var(--space-6)", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: user.email }) }) })
|
|
81
117
|
] }),
|
|
82
118
|
oauthAccounts.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
83
119
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {}),
|
|
84
120
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { children: [
|
|
85
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children:
|
|
121
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
122
|
+
import_translation.Translation,
|
|
123
|
+
{
|
|
124
|
+
defaultMessage: "Connected accounts",
|
|
125
|
+
id: "AW/A69",
|
|
126
|
+
description: "Label for user's connected OAuth accounts"
|
|
127
|
+
}
|
|
128
|
+
) }) }),
|
|
86
129
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { direction: "column", gap: "2", children: oauthAccounts.map(([account, data]) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
87
130
|
OAuthAccount,
|
|
88
131
|
{
|
|
@@ -98,7 +141,14 @@ const UserProfile = ({
|
|
|
98
141
|
const UserProfileLoading = (props) => {
|
|
99
142
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("loading", props), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Root, { children: [
|
|
100
143
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
|
|
101
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { minWidth: "220px", highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children:
|
|
144
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { minWidth: "220px", highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
145
|
+
import_translation.Translation,
|
|
146
|
+
{
|
|
147
|
+
defaultMessage: "Full name",
|
|
148
|
+
id: "nc7fru",
|
|
149
|
+
description: "Loading placeholder for full name label"
|
|
150
|
+
}
|
|
151
|
+
) }) }) }),
|
|
102
152
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
103
153
|
import_themes.Flex,
|
|
104
154
|
{
|
|
@@ -106,14 +156,35 @@ const UserProfileLoading = (props) => {
|
|
|
106
156
|
justify: "between",
|
|
107
157
|
width: "100%",
|
|
108
158
|
minHeight: "var(--space-6)",
|
|
109
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children:
|
|
159
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
160
|
+
import_translation.Translation,
|
|
161
|
+
{
|
|
162
|
+
defaultMessage: "Full name",
|
|
163
|
+
id: "6GcWa2",
|
|
164
|
+
description: "Loading placeholder for full name value"
|
|
165
|
+
}
|
|
166
|
+
) }) })
|
|
110
167
|
}
|
|
111
168
|
) })
|
|
112
169
|
] }),
|
|
113
170
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(ListSeparator, {}),
|
|
114
171
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.DataList.Item, { align: "center", children: [
|
|
115
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children:
|
|
116
|
-
|
|
172
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Label, { highContrast: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Strong, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
173
|
+
import_translation.Translation,
|
|
174
|
+
{
|
|
175
|
+
defaultMessage: "Email address",
|
|
176
|
+
id: "gjqw+H",
|
|
177
|
+
description: "Loading placeholder for email address label"
|
|
178
|
+
}
|
|
179
|
+
) }) }) }),
|
|
180
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.DataList.Value, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { align: "center", minHeight: "var(--space-6)", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
181
|
+
import_translation.Translation,
|
|
182
|
+
{
|
|
183
|
+
defaultMessage: "Email address",
|
|
184
|
+
id: "75F+g5",
|
|
185
|
+
description: "Loading placeholder for email address value"
|
|
186
|
+
}
|
|
187
|
+
) }) }) }) })
|
|
117
188
|
] })
|
|
118
189
|
] }) });
|
|
119
190
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/user-profile.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Box,\n Card,\n DataList,\n Flex,\n Inset,\n Separator,\n Strong,\n Text,\n} from \"@radix-ui/themes\";\nimport { Avatar, Button, Skeleton } from \"./elements.js\";\nimport { Me, OAuthProfile, MeOauthProfiles } from \"../api/endpoint.js\";\nimport { EditUserProfileDialog } from \"./edit-user-profile-dialog.js\";\nimport {\n getBestName,\n getDomProps,\n type WidgetRootState,\n type WidgetRootDomProps,\n} from \"./utils.js\";\nimport { OAuthIcon, getOAuthName, type OAuthAccount } from \"./oauth-icons.js\";\nimport { GenericError } from \"./generic-error.js\";\n\ninterface UserProfileProps extends WidgetRootDomProps {\n userData: Me;\n}\n\nconst UserProfile: React.FC<UserProfileProps> = ({\n userData: user,\n ...domProps\n}) => {\n const oauthAccounts = user.oauthProfiles\n ? (Object.entries(user.oauthProfiles) as [\n keyof Exclude<MeOauthProfiles, null>,\n OAuthProfile,\n ][])\n : [];\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"resolved\", domProps)}>\n <DataList.Root>\n {user.profilePictureUrl && (\n <>\n <DataList.Item align=\"center\">\n <DataList.Label minWidth=\"220px\" highContrast>\n <Strong>Profile picture</Strong>\n </DataList.Label>\n <DataList.Value>\n <Avatar\n size=\"2\"\n fallback={<FallbackUserIcon />}\n src={user.profilePictureUrl}\n />\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n </>\n )}\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>Full name</Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex\n align=\"center\"\n justify=\"between\"\n width=\"100%\"\n minHeight=\"var(--space-6)\"\n >\n <Text size=\"2\">\n {getBestName(user) || (\n <Text\n color=\"gray\"\n style={{ color: \"var(--gray-10)\", cursor: \"default\" }}\n >\n Not set\n </Text>\n )}\n </Text>\n\n <EditUserProfileDialog user={user}>\n <Button variant=\"secondary\">Edit</Button>\n </EditUserProfileDialog>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>Email address</Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex align=\"center\" minHeight=\"var(--space-6)\">\n <Text size=\"2\">{user.email}</Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n {oauthAccounts.length > 0 && (\n <>\n <ListSeparator />\n\n <DataList.Item>\n <DataList.Label highContrast>\n <Strong>Connected accounts</Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex direction=\"column\" gap=\"2\">\n {oauthAccounts.map(([account, data]) => (\n <OAuthAccount\n key={account}\n account={account}\n email={data?.email}\n />\n ))}\n </Flex>\n </DataList.Value>\n </DataList.Item>\n </>\n )}\n </DataList.Root>\n </Card>\n );\n};\n\ninterface UserProfileLoadingProps extends WidgetRootDomProps {}\n\nconst UserProfileLoading: React.FC<UserProfileLoadingProps> = (props) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"loading\", props)}>\n <DataList.Root>\n <DataList.Item align=\"center\">\n <DataList.Label minWidth=\"220px\" highContrast>\n <Strong>\n <Skeleton>Full name</Skeleton>\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex\n align=\"center\"\n justify=\"between\"\n width=\"100%\"\n minHeight=\"var(--space-6)\"\n >\n <Text size=\"2\">\n <Skeleton>Full name</Skeleton>\n </Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>\n <Skeleton>Email address</Skeleton>\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex align=\"center\" minHeight=\"var(--space-6)\">\n <Text size=\"2\">\n <Skeleton>Email address</Skeleton>\n </Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n </DataList.Root>\n </Card>\n );\n};\n\ninterface UserProfileErrorProps extends WidgetRootDomProps {\n error: unknown;\n}\n\nconst UserProfileError: React.FC<UserProfileErrorProps> = ({\n error,\n ...domProps\n}) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"error\", domProps)}>\n <GenericError error={error} />\n </Card>\n );\n};\n\nconst ListSeparator = () => (\n <Box asChild gridColumn=\"span 2\">\n <Inset side=\"x\">\n <Separator size=\"4\" />\n </Inset>\n </Box>\n);\n\nconst OAuthAccount = ({\n account,\n email,\n}: {\n account: OAuthAccount;\n email?: string | null;\n}) => {\n const name = getOAuthName(account);\n return (\n <Flex align=\"center\" gap=\"1\">\n <OAuthIcon account={account} />\n <Text size=\"2\" ml=\"1\">\n {name}\n </Text>\n {email && (\n <Box display={{ initial: \"none\", sm: \"contents\" }}>\n <Text size=\"2\" color=\"gray\">\n ∙\n </Text>\n <Text size=\"2\" color=\"gray\">\n {email}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n\nconst FallbackUserIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"currentColor\"\n viewBox=\"0 0 256 256\"\n >\n <title>User icon</title>\n <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\" />\n </svg>\n);\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"user-profile\",\n widgetState: state,\n });\n}\n\nexport type {\n UserProfileProps,\n UserProfileLoadingProps,\n UserProfileErrorProps,\n};\nexport { UserProfile, UserProfileLoading, UserProfileError };\n"],"mappings":"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","names":[]}
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/user-profile.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Box,\n Card,\n DataList,\n Flex,\n Inset,\n Separator,\n Strong,\n Text,\n} from \"@radix-ui/themes\";\nimport { Avatar, Button, Skeleton } from \"./elements.js\";\nimport { Me, OAuthProfile, MeOauthProfiles } from \"../api/endpoint.js\";\nimport { EditUserProfileDialog } from \"./edit-user-profile-dialog.js\";\nimport {\n getBestName,\n getDomProps,\n type WidgetRootState,\n type WidgetRootDomProps,\n} from \"./utils.js\";\nimport { OAuthIcon, getOAuthName, type OAuthAccount } from \"./oauth-icons.js\";\nimport { GenericError } from \"./generic-error.js\";\nimport { Translation } from \"./i18n/translation.js\";\n\ninterface UserProfileProps extends WidgetRootDomProps {\n userData: Me;\n}\n\nconst UserProfile: React.FC<UserProfileProps> = ({\n userData: user,\n ...domProps\n}) => {\n const oauthAccounts = user.oauthProfiles\n ? (Object.entries(user.oauthProfiles) as [\n keyof Exclude<MeOauthProfiles, null>,\n OAuthProfile,\n ][])\n : [];\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"resolved\", domProps)}>\n <DataList.Root>\n {user.profilePictureUrl && (\n <>\n <DataList.Item align=\"center\">\n <DataList.Label minWidth=\"220px\" highContrast>\n <Strong>\n <Translation\n defaultMessage=\"Profile picture\"\n description=\"Label for the user's avatar\"\n id=\"RvLqCQ\"\n />\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Avatar\n size=\"2\"\n fallback={<FallbackUserIcon />}\n src={user.profilePictureUrl}\n />\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n </>\n )}\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>\n <Translation\n defaultMessage=\"Full name\"\n id=\"kkBScm\"\n description=\"Label for user's full name field\"\n />\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex\n align=\"center\"\n justify=\"between\"\n width=\"100%\"\n minHeight=\"var(--space-6)\"\n >\n <Text size=\"2\">\n {getBestName(user) || (\n <Text\n color=\"gray\"\n style={{ color: \"var(--gray-10)\", cursor: \"default\" }}\n >\n <Translation\n defaultMessage=\"Not set\"\n id=\"i4vzAY\"\n description=\"Placeholder text when user's name is not set\"\n />\n </Text>\n )}\n </Text>\n\n <EditUserProfileDialog user={user}>\n <Button variant=\"secondary\">\n <Translation\n defaultMessage=\"Edit\"\n id=\"5bhXUz\"\n description=\"Button text to edit user profile\"\n />\n </Button>\n </EditUserProfileDialog>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>\n <Translation\n defaultMessage=\"Email address\"\n id=\"nLk5pa\"\n description=\"Label for user's email address field\"\n />\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex align=\"center\" minHeight=\"var(--space-6)\">\n <Text size=\"2\">{user.email}</Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n {oauthAccounts.length > 0 && (\n <>\n <ListSeparator />\n\n <DataList.Item>\n <DataList.Label highContrast>\n <Strong>\n <Translation\n defaultMessage=\"Connected accounts\"\n id=\"AW/A69\"\n description=\"Label for user's connected OAuth accounts\"\n />\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex direction=\"column\" gap=\"2\">\n {oauthAccounts.map(([account, data]) => (\n <OAuthAccount\n key={account}\n account={account}\n email={data?.email}\n />\n ))}\n </Flex>\n </DataList.Value>\n </DataList.Item>\n </>\n )}\n </DataList.Root>\n </Card>\n );\n};\n\ninterface UserProfileLoadingProps extends WidgetRootDomProps {}\n\nconst UserProfileLoading: React.FC<UserProfileLoadingProps> = (props) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"loading\", props)}>\n <DataList.Root>\n <DataList.Item align=\"center\">\n <DataList.Label minWidth=\"220px\" highContrast>\n <Strong>\n <Skeleton>\n <Translation\n defaultMessage=\"Full name\"\n id=\"nc7fru\"\n description=\"Loading placeholder for full name label\"\n />\n </Skeleton>\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex\n align=\"center\"\n justify=\"between\"\n width=\"100%\"\n minHeight=\"var(--space-6)\"\n >\n <Text size=\"2\">\n <Skeleton>\n <Translation\n defaultMessage=\"Full name\"\n id=\"6GcWa2\"\n description=\"Loading placeholder for full name value\"\n />\n </Skeleton>\n </Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n\n <ListSeparator />\n\n <DataList.Item align=\"center\">\n <DataList.Label highContrast>\n <Strong>\n <Skeleton>\n <Translation\n defaultMessage=\"Email address\"\n id=\"gjqw+H\"\n description=\"Loading placeholder for email address label\"\n />\n </Skeleton>\n </Strong>\n </DataList.Label>\n <DataList.Value>\n <Flex align=\"center\" minHeight=\"var(--space-6)\">\n <Text size=\"2\">\n <Skeleton>\n <Translation\n defaultMessage=\"Email address\"\n id=\"75F+g5\"\n description=\"Loading placeholder for email address value\"\n />\n </Skeleton>\n </Text>\n </Flex>\n </DataList.Value>\n </DataList.Item>\n </DataList.Root>\n </Card>\n );\n};\n\ninterface UserProfileErrorProps extends WidgetRootDomProps {\n error: unknown;\n}\n\nconst UserProfileError: React.FC<UserProfileErrorProps> = ({\n error,\n ...domProps\n}) => {\n return (\n <Card size=\"2\" {...getWidgetRootDomProps(\"error\", domProps)}>\n <GenericError error={error} />\n </Card>\n );\n};\n\nconst ListSeparator = () => (\n <Box asChild gridColumn=\"span 2\">\n <Inset side=\"x\">\n <Separator size=\"4\" />\n </Inset>\n </Box>\n);\n\nconst OAuthAccount = ({\n account,\n email,\n}: {\n account: OAuthAccount;\n email?: string | null;\n}) => {\n const name = getOAuthName(account);\n return (\n <Flex align=\"center\" gap=\"1\">\n <OAuthIcon account={account} />\n <Text size=\"2\" ml=\"1\">\n {name}\n </Text>\n {email && (\n <Box display={{ initial: \"none\", sm: \"contents\" }}>\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <Text size=\"2\" color=\"gray\">\n ∙\n </Text>\n <Text size=\"2\" color=\"gray\">\n {email}\n </Text>\n </Box>\n )}\n </Flex>\n );\n};\n\nconst FallbackUserIcon = () => (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n fill=\"currentColor\"\n viewBox=\"0 0 256 256\"\n >\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <title>User icon</title>\n <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\" />\n </svg>\n);\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"user-profile\",\n widgetState: state,\n });\n}\n\nexport type {\n UserProfileProps,\n UserProfileLoadingProps,\n UserProfileErrorProps,\n};\nexport { UserProfile, UserProfileLoading, UserProfileError };\n"],"mappings":"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","names":[]}
|
|
@@ -46,6 +46,8 @@ var import_reset_mfa_dialog = require("./reset-mfa-dialog.js");
|
|
|
46
46
|
var CardList = __toESM(require("./card-list.js"), 1);
|
|
47
47
|
var import_generic_error = require("./generic-error.js");
|
|
48
48
|
var import_utils = require("./utils.js");
|
|
49
|
+
var import_translation = require("./i18n/translation.js");
|
|
50
|
+
var import_use_locale = require("./i18n/use-locale.js");
|
|
49
51
|
const UserSecurity = ({
|
|
50
52
|
settings,
|
|
51
53
|
...domProps
|
|
@@ -73,55 +75,155 @@ const UserSecurityLoading = (props) => {
|
|
|
73
75
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Card, { size: "2", ...getWidgetRootDomProps("loading", props), children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Grid, { columns: "auto 1fr auto", align: "center", gap: "4", children: [
|
|
74
76
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon_panel.IconPanel, {}) }),
|
|
75
77
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { direction: "column", children: [
|
|
76
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", highContrast: true, weight: "bold", as: "p", mb: "-2px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children:
|
|
77
|
-
|
|
78
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", highContrast: true, weight: "bold", as: "p", mb: "-2px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
79
|
+
import_translation.Translation,
|
|
80
|
+
{
|
|
81
|
+
defaultMessage: "Password",
|
|
82
|
+
id: "z19aZa",
|
|
83
|
+
description: "Label for password security settings section"
|
|
84
|
+
}
|
|
85
|
+
) }) }),
|
|
86
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { as: "p", size: "2", color: "gray", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
87
|
+
import_translation.Translation,
|
|
88
|
+
{
|
|
89
|
+
defaultMessage: "Set a password to access your account",
|
|
90
|
+
id: "leodiT",
|
|
91
|
+
description: "Description for setting up a password"
|
|
92
|
+
}
|
|
93
|
+
) }) })
|
|
78
94
|
] }),
|
|
79
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_change_password_dialog.ChangePasswordDialog, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children:
|
|
95
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_change_password_dialog.ChangePasswordDialog, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
96
|
+
import_translation.Translation,
|
|
97
|
+
{
|
|
98
|
+
defaultMessage: "Change",
|
|
99
|
+
id: "/ZV6cj",
|
|
100
|
+
description: "Button label to change password"
|
|
101
|
+
}
|
|
102
|
+
) }) }) })
|
|
80
103
|
] }) });
|
|
81
104
|
};
|
|
82
105
|
function PasswordSettings({
|
|
83
106
|
settings
|
|
84
107
|
}) {
|
|
108
|
+
const locale = (0, import_use_locale.useLocale)();
|
|
85
109
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Grid, { columns: "auto 1fr auto", align: "center", gap: "4", children: [
|
|
86
110
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon_panel.IconPanel, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.LockClosedIcon, {}) }),
|
|
87
111
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { direction: "column", children: [
|
|
88
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", highContrast: true, weight: "bold", as: "p", mb: "-2px", children:
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
112
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", highContrast: true, weight: "bold", as: "p", mb: "-2px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
113
|
+
import_translation.Translation,
|
|
114
|
+
{
|
|
115
|
+
defaultMessage: "Password",
|
|
116
|
+
id: "z19aZa",
|
|
117
|
+
description: "Label for password security settings section"
|
|
118
|
+
}
|
|
119
|
+
) }),
|
|
120
|
+
settings.isSetUp ? settings.lastUsed && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", color: "gray", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
121
|
+
import_translation.Translation,
|
|
122
|
+
{
|
|
123
|
+
defaultMessage: "Last used {time}",
|
|
124
|
+
id: "Jqn+r+",
|
|
125
|
+
description: "Label indicating when password was last used with time",
|
|
126
|
+
values: {
|
|
127
|
+
time: (0, import_utils.getComparativeReadableDate)(
|
|
128
|
+
/* @__PURE__ */ new Date(),
|
|
129
|
+
new Date(settings.lastUsed),
|
|
130
|
+
{ locale }
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { as: "p", size: "2", color: "gray", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
135
|
+
import_translation.Translation,
|
|
136
|
+
{
|
|
137
|
+
defaultMessage: "Set a password to access your account",
|
|
138
|
+
id: "leodiT",
|
|
139
|
+
description: "Description for setting up a password"
|
|
140
|
+
}
|
|
141
|
+
) })
|
|
97
142
|
] }),
|
|
98
|
-
settings.isSetUp ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_change_password_dialog.ChangePasswordDialog, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children:
|
|
143
|
+
settings.isSetUp ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_change_password_dialog.ChangePasswordDialog, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
144
|
+
import_translation.Translation,
|
|
145
|
+
{
|
|
146
|
+
defaultMessage: "Change",
|
|
147
|
+
id: "/ZV6cj",
|
|
148
|
+
description: "Button label to change password"
|
|
149
|
+
}
|
|
150
|
+
) }) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_set_password_dialog.SetPasswordDialog, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
151
|
+
import_translation.Translation,
|
|
152
|
+
{
|
|
153
|
+
defaultMessage: "Set a password",
|
|
154
|
+
id: "zokPvK",
|
|
155
|
+
description: "Button label to set a new password"
|
|
156
|
+
}
|
|
157
|
+
) }) })
|
|
99
158
|
] });
|
|
100
159
|
}
|
|
101
160
|
function MfaSettings({
|
|
102
161
|
settings,
|
|
103
162
|
isPasswordSet
|
|
104
163
|
}) {
|
|
164
|
+
const locale = (0, import_use_locale.useLocale)();
|
|
105
165
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Grid, { columns: "auto 1fr auto", align: "center", gap: "4", children: [
|
|
106
166
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_icon_panel.IconPanel, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.ButtonIcon, {}) }),
|
|
107
167
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { direction: "column", children: [
|
|
108
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", highContrast: true, weight: "bold", as: "p", mb: "-2px", children:
|
|
168
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", highContrast: true, weight: "bold", as: "p", mb: "-2px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
169
|
+
import_translation.Translation,
|
|
170
|
+
{
|
|
171
|
+
defaultMessage: "Multi-factor authentication",
|
|
172
|
+
id: "f3uhhm",
|
|
173
|
+
description: "Label for multi-factor authentication settings section"
|
|
174
|
+
}
|
|
175
|
+
) }),
|
|
109
176
|
settings.isSetUp ? /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Text, { size: "2", children: [
|
|
110
|
-
|
|
177
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
178
|
+
import_translation.Translation,
|
|
179
|
+
{
|
|
180
|
+
defaultMessage: "Authenticator app",
|
|
181
|
+
id: "0p/a72",
|
|
182
|
+
description: "Label indicating MFA is set up with an authenticator app"
|
|
183
|
+
}
|
|
184
|
+
),
|
|
111
185
|
settings.lastUsed && /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
112
186
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", color: "gray", mx: "1", children: "\u2219" }),
|
|
113
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
187
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", color: "gray", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
188
|
+
import_translation.Translation,
|
|
189
|
+
{
|
|
190
|
+
defaultMessage: "Last used {time}",
|
|
191
|
+
id: "h3R6gY",
|
|
192
|
+
description: "Label indicating when MFA was last used with time",
|
|
193
|
+
values: {
|
|
194
|
+
time: (0, import_utils.getComparativeReadableDate)(
|
|
195
|
+
/* @__PURE__ */ new Date(),
|
|
196
|
+
new Date(settings.lastUsed),
|
|
197
|
+
{ locale }
|
|
198
|
+
)
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
) })
|
|
121
202
|
] })
|
|
122
|
-
] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { as: "p", size: "2", color: "gray", children:
|
|
203
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { as: "p", size: "2", color: "gray", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
204
|
+
import_translation.Translation,
|
|
205
|
+
{
|
|
206
|
+
defaultMessage: "Secure your account with an extra verification step",
|
|
207
|
+
id: "xZFdkq",
|
|
208
|
+
description: "Description for setting up multi-factor authentication"
|
|
209
|
+
}
|
|
210
|
+
) })
|
|
123
211
|
] }),
|
|
124
|
-
settings.isSetUp ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_reset_mfa_dialog.ResetMfaDialog, { isPasswordSet, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children:
|
|
212
|
+
settings.isSetUp ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_reset_mfa_dialog.ResetMfaDialog, { isPasswordSet, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
213
|
+
import_translation.Translation,
|
|
214
|
+
{
|
|
215
|
+
defaultMessage: "Disable",
|
|
216
|
+
id: "4flMgv",
|
|
217
|
+
description: "Button label to disable multi-factor authentication"
|
|
218
|
+
}
|
|
219
|
+
) }) }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_add_mfa_dialog.AddMfaDialog, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
220
|
+
import_translation.Translation,
|
|
221
|
+
{
|
|
222
|
+
defaultMessage: "Set up authenticator app",
|
|
223
|
+
id: "oLNIQv",
|
|
224
|
+
description: "Button label to set up multi-factor authentication with an authenticator app"
|
|
225
|
+
}
|
|
226
|
+
) }) })
|
|
125
227
|
] });
|
|
126
228
|
}
|
|
127
229
|
function getWidgetRootDomProps(state, domProps) {
|