@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
|
@@ -49,6 +49,9 @@ var import_constants = require("./constants.js");
|
|
|
49
49
|
var import_users_management_context = require("./users-management-context.js");
|
|
50
50
|
var import_generic_error = require("./generic-error.js");
|
|
51
51
|
var import_react_icons = require("@radix-ui/react-icons");
|
|
52
|
+
var import_translation = require("./i18n/translation.js");
|
|
53
|
+
var import_use_translation = require("./i18n/use-translation.js");
|
|
54
|
+
var import_use_locale = require("./i18n/use-locale.js");
|
|
52
55
|
const UsersManagement = ({
|
|
53
56
|
userData,
|
|
54
57
|
rolesData,
|
|
@@ -62,6 +65,7 @@ const UsersManagement = ({
|
|
|
62
65
|
const { listMetadata: pagination = {} } = userData;
|
|
63
66
|
const { dispatch } = (0, import_users_management_context.useUsersManagementContext)();
|
|
64
67
|
const isMultipleRolesEnabled = rolesData.multipleRolesEnabled;
|
|
68
|
+
const translate = (0, import_use_translation.useTranslation)();
|
|
65
69
|
const [deferredLoading, setDeferredLoading] = React.useState(false);
|
|
66
70
|
React.useEffect(() => {
|
|
67
71
|
if (isPending) {
|
|
@@ -94,13 +98,48 @@ const UsersManagement = ({
|
|
|
94
98
|
}
|
|
95
99
|
) })
|
|
96
100
|
] }),
|
|
97
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Box, { flexGrow: "0", flexShrink: "0", style: { placeSelf: "flex-end" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_invite_user_dialog.InviteUserDialog, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { children:
|
|
101
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Box, { flexGrow: "0", flexShrink: "0", style: { placeSelf: "flex-end" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_invite_user_dialog.InviteUserDialog, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
102
|
+
import_translation.Translation,
|
|
103
|
+
{
|
|
104
|
+
defaultMessage: "Invite user",
|
|
105
|
+
id: "NBXpRj",
|
|
106
|
+
description: "Button text to invite a new user to the organization"
|
|
107
|
+
}
|
|
108
|
+
) }) }) })
|
|
98
109
|
] }),
|
|
99
110
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Table.Root, { variant: "ghost", size: "1", children: [
|
|
100
111
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Table.Row, { children: [
|
|
101
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "260px", children:
|
|
102
|
-
|
|
103
|
-
|
|
112
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "260px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
113
|
+
import_translation.Translation,
|
|
114
|
+
{
|
|
115
|
+
defaultMessage: "User",
|
|
116
|
+
id: "BBh86k",
|
|
117
|
+
description: "Column header for user information in the users table"
|
|
118
|
+
}
|
|
119
|
+
) }),
|
|
120
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "100px", children: isMultipleRolesEnabled ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
121
|
+
import_translation.Translation,
|
|
122
|
+
{
|
|
123
|
+
defaultMessage: "Roles",
|
|
124
|
+
id: "A1DuWM",
|
|
125
|
+
description: "Column header for user roles when multiple roles are enabled"
|
|
126
|
+
}
|
|
127
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
128
|
+
import_translation.Translation,
|
|
129
|
+
{
|
|
130
|
+
defaultMessage: "Role",
|
|
131
|
+
id: "nQbe+Y",
|
|
132
|
+
description: "Column header for user role when only single role is allowed"
|
|
133
|
+
}
|
|
134
|
+
) }),
|
|
135
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "140px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
136
|
+
import_translation.Translation,
|
|
137
|
+
{
|
|
138
|
+
defaultMessage: "Last active",
|
|
139
|
+
id: "oOwLGt",
|
|
140
|
+
description: "Column header showing when users were last active"
|
|
141
|
+
}
|
|
142
|
+
) }),
|
|
104
143
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "28px" })
|
|
105
144
|
] }) }),
|
|
106
145
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
@@ -174,8 +213,11 @@ const UsersManagement = ({
|
|
|
174
213
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Cell, { justify: "end", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_user_actions_dropdown.UserActionsDropdown, { user, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
175
214
|
import_elements.IconButton,
|
|
176
215
|
{
|
|
177
|
-
title:
|
|
178
|
-
|
|
216
|
+
title: translate({
|
|
217
|
+
defaultMessage: "User actions",
|
|
218
|
+
id: "1nsmNS",
|
|
219
|
+
description: "Button tooltip for opening user actions menu"
|
|
220
|
+
}),
|
|
179
221
|
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_icons.DotsHorizontalIcon, {})
|
|
180
222
|
}
|
|
181
223
|
) }) })
|
|
@@ -200,7 +242,14 @@ const UsersManagement = ({
|
|
|
200
242
|
});
|
|
201
243
|
}
|
|
202
244
|
},
|
|
203
|
-
children:
|
|
245
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
246
|
+
import_translation.Translation,
|
|
247
|
+
{
|
|
248
|
+
defaultMessage: "Previous",
|
|
249
|
+
id: "910Q6b",
|
|
250
|
+
description: "Button text to navigate to the previous page of users"
|
|
251
|
+
}
|
|
252
|
+
)
|
|
204
253
|
}
|
|
205
254
|
),
|
|
206
255
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
@@ -218,7 +267,14 @@ const UsersManagement = ({
|
|
|
218
267
|
});
|
|
219
268
|
}
|
|
220
269
|
},
|
|
221
|
-
children:
|
|
270
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
271
|
+
import_translation.Translation,
|
|
272
|
+
{
|
|
273
|
+
defaultMessage: "Next",
|
|
274
|
+
id: "UlAY08",
|
|
275
|
+
description: "Button text to navigate to the next page of users"
|
|
276
|
+
}
|
|
277
|
+
)
|
|
222
278
|
}
|
|
223
279
|
)
|
|
224
280
|
] }) : null
|
|
@@ -227,6 +283,15 @@ const UsersManagement = ({
|
|
|
227
283
|
) });
|
|
228
284
|
};
|
|
229
285
|
const UsersManagementLoading = (props) => {
|
|
286
|
+
const translate = (0, import_use_translation.useTranslation)();
|
|
287
|
+
const placeholderText = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
288
|
+
import_translation.Translation,
|
|
289
|
+
{
|
|
290
|
+
defaultMessage: "All",
|
|
291
|
+
id: "l/Do9/",
|
|
292
|
+
description: "Filter option to show all users"
|
|
293
|
+
}
|
|
294
|
+
);
|
|
230
295
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
231
296
|
import_themes.Flex,
|
|
232
297
|
{
|
|
@@ -236,19 +301,57 @@ const UsersManagementLoading = (props) => {
|
|
|
236
301
|
children: [
|
|
237
302
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Grid, { columns: "1fr auto", gap: "2", children: [
|
|
238
303
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { gap: "2", align: "center", children: [
|
|
239
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Box, { flexBasis: "380px", flexGrow: "0", flexShrink: "1", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
304
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Box, { flexBasis: "380px", flexGrow: "0", flexShrink: "1", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
305
|
+
import_elements.TextField,
|
|
306
|
+
{
|
|
307
|
+
disabled: true,
|
|
308
|
+
"aria-label": translate({
|
|
309
|
+
defaultMessage: "User search",
|
|
310
|
+
id: "lzPOKv",
|
|
311
|
+
description: "Label for the user search input field"
|
|
312
|
+
})
|
|
313
|
+
}
|
|
314
|
+
) }) }),
|
|
315
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Box, { flexGrow: "0", flexShrink: "0", children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Select.Root, { disabled: true, value: "all", onValueChange: () => void 0, children: [
|
|
316
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Select.Trigger, { children: placeholderText }),
|
|
317
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Select.Content, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Select.Item, { value: "all", children: placeholderText }) })
|
|
243
318
|
] }) }) })
|
|
244
319
|
] }),
|
|
245
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Box, { flexGrow: "0", flexShrink: "0", style: { placeSelf: "flex-end" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { children:
|
|
320
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Box, { flexGrow: "0", flexShrink: "0", style: { placeSelf: "flex-end" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { disabled: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
321
|
+
import_translation.Translation,
|
|
322
|
+
{
|
|
323
|
+
defaultMessage: "Invite user",
|
|
324
|
+
id: "NBXpRj",
|
|
325
|
+
description: "Button text to invite a new user to the organization"
|
|
326
|
+
}
|
|
327
|
+
) }) }) })
|
|
246
328
|
] }),
|
|
247
329
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Table.Root, { variant: "ghost", size: "1", children: [
|
|
248
330
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Header, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Table.Row, { children: [
|
|
249
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "260px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children:
|
|
250
|
-
|
|
251
|
-
|
|
331
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "260px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
332
|
+
import_translation.Translation,
|
|
333
|
+
{
|
|
334
|
+
defaultMessage: "User",
|
|
335
|
+
id: "BBh86k",
|
|
336
|
+
description: "Column header for user information in the users table"
|
|
337
|
+
}
|
|
338
|
+
) }) }),
|
|
339
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "100px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
340
|
+
import_translation.Translation,
|
|
341
|
+
{
|
|
342
|
+
defaultMessage: "Role",
|
|
343
|
+
id: "FK7mP4",
|
|
344
|
+
description: "Column header for user role"
|
|
345
|
+
}
|
|
346
|
+
) }) }),
|
|
347
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "140px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
348
|
+
import_translation.Translation,
|
|
349
|
+
{
|
|
350
|
+
defaultMessage: "Last active",
|
|
351
|
+
id: "oOwLGt",
|
|
352
|
+
description: "Column header showing when users were last active"
|
|
353
|
+
}
|
|
354
|
+
) }) }),
|
|
252
355
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.ColumnHeaderCell, { width: "28px" })
|
|
253
356
|
] }) }),
|
|
254
357
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Table.Body, { children: Array.from({ length: import_constants.USER_ROW_LIMIT }, (_, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Table.Row, { align: "center", children: [
|
|
@@ -273,8 +376,22 @@ const UsersManagementLoading = (props) => {
|
|
|
273
376
|
] }, index)) })
|
|
274
377
|
] }),
|
|
275
378
|
/* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { gap: "2", justify: "end", children: [
|
|
276
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { variant: "secondary", size: "1", children:
|
|
277
|
-
|
|
379
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { disabled: true, variant: "secondary", size: "1", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
380
|
+
import_translation.Translation,
|
|
381
|
+
{
|
|
382
|
+
defaultMessage: "Previous",
|
|
383
|
+
id: "910Q6b",
|
|
384
|
+
description: "Button text to navigate to the previous page of users"
|
|
385
|
+
}
|
|
386
|
+
) }) }),
|
|
387
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Skeleton, { loading: true, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Button, { disabled: true, variant: "secondary", size: "1", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
388
|
+
import_translation.Translation,
|
|
389
|
+
{
|
|
390
|
+
defaultMessage: "Next",
|
|
391
|
+
id: "UlAY08",
|
|
392
|
+
description: "Button text to navigate to the next page of users"
|
|
393
|
+
}
|
|
394
|
+
) }) })
|
|
278
395
|
] })
|
|
279
396
|
]
|
|
280
397
|
}
|
|
@@ -295,24 +412,73 @@ const UsersManagementError = ({
|
|
|
295
412
|
};
|
|
296
413
|
function UserBadge({ user }) {
|
|
297
414
|
if (user.isLoggedInUser) {
|
|
298
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Badge, { color: "gray", style: { userSelect: "none" }, children:
|
|
415
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_elements.Badge, { color: "gray", style: { userSelect: "none" }, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
416
|
+
import_translation.Translation,
|
|
417
|
+
{
|
|
418
|
+
defaultMessage: "You",
|
|
419
|
+
id: "ER1Vmv",
|
|
420
|
+
description: "Badge indicating the current logged-in user"
|
|
421
|
+
}
|
|
422
|
+
) });
|
|
299
423
|
}
|
|
300
424
|
if (user.status === "Invited") {
|
|
301
425
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Badge, { color: "amber", style: { userSelect: "none" }, children: [
|
|
302
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children:
|
|
303
|
-
|
|
426
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
427
|
+
import_translation.Translation,
|
|
428
|
+
{
|
|
429
|
+
defaultMessage: "Status: ",
|
|
430
|
+
id: "E2o/+H",
|
|
431
|
+
description: "Prefix for status indicator in screen reader"
|
|
432
|
+
}
|
|
433
|
+
) }),
|
|
434
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
435
|
+
import_translation.Translation,
|
|
436
|
+
{
|
|
437
|
+
defaultMessage: "Invited",
|
|
438
|
+
id: "byIkUu",
|
|
439
|
+
description: "Badge status indicating user has been invited but not yet accepted"
|
|
440
|
+
}
|
|
441
|
+
)
|
|
304
442
|
] });
|
|
305
443
|
}
|
|
306
444
|
if (user.status === "InviteExpired") {
|
|
307
445
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Badge, { color: "red", style: { userSelect: "none" }, children: [
|
|
308
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children:
|
|
309
|
-
|
|
446
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
447
|
+
import_translation.Translation,
|
|
448
|
+
{
|
|
449
|
+
defaultMessage: "Status: Invite ",
|
|
450
|
+
id: "BWvbwY",
|
|
451
|
+
description: "Prefix for invite status indicator in screen reader"
|
|
452
|
+
}
|
|
453
|
+
) }),
|
|
454
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
455
|
+
import_translation.Translation,
|
|
456
|
+
{
|
|
457
|
+
defaultMessage: "Expired",
|
|
458
|
+
id: "+0sQaN",
|
|
459
|
+
description: "Badge status indicating user invitation has expired"
|
|
460
|
+
}
|
|
461
|
+
)
|
|
310
462
|
] });
|
|
311
463
|
}
|
|
312
464
|
if (user.status === "InviteRevoked") {
|
|
313
465
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_elements.Badge, { color: "red", style: { userSelect: "none" }, children: [
|
|
314
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children:
|
|
315
|
-
|
|
466
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
467
|
+
import_translation.Translation,
|
|
468
|
+
{
|
|
469
|
+
defaultMessage: "Status: Invite ",
|
|
470
|
+
id: "BWvbwY",
|
|
471
|
+
description: "Prefix for invite status indicator in screen reader"
|
|
472
|
+
}
|
|
473
|
+
) }),
|
|
474
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
475
|
+
import_translation.Translation,
|
|
476
|
+
{
|
|
477
|
+
defaultMessage: "Revoked",
|
|
478
|
+
id: "NNBv+r",
|
|
479
|
+
description: "Badge status indicating user invitation has been revoked"
|
|
480
|
+
}
|
|
481
|
+
)
|
|
316
482
|
] });
|
|
317
483
|
}
|
|
318
484
|
return null;
|
|
@@ -320,7 +486,21 @@ function UserBadge({ user }) {
|
|
|
320
486
|
function LastActive(props) {
|
|
321
487
|
if (!props.user.lastActivityAt) {
|
|
322
488
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
323
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: props.user.status === "Active" ?
|
|
489
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: props.user.status === "Active" ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
490
|
+
import_translation.Translation,
|
|
491
|
+
{
|
|
492
|
+
defaultMessage: "Never",
|
|
493
|
+
id: "0duvF4",
|
|
494
|
+
description: "Screen reader text indicating user has never been active"
|
|
495
|
+
}
|
|
496
|
+
) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
497
|
+
import_translation.Translation,
|
|
498
|
+
{
|
|
499
|
+
defaultMessage: "Not active",
|
|
500
|
+
id: "hd2+kk",
|
|
501
|
+
description: "Screen reader text indicating user is not active"
|
|
502
|
+
}
|
|
503
|
+
) }),
|
|
324
504
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Separator, {})
|
|
325
505
|
] });
|
|
326
506
|
}
|
|
@@ -331,10 +511,11 @@ function LastActiveImpl({
|
|
|
331
511
|
isHydrated,
|
|
332
512
|
dim
|
|
333
513
|
}) {
|
|
514
|
+
const locale = (0, import_use_locale.useLocale)();
|
|
334
515
|
const { lastActiveDateTime, lastActiveDisplay } = React.useMemo(() => {
|
|
335
516
|
const defaultTimeZone = "America/Los_Angeles";
|
|
336
517
|
const lastActiveDate = new Date(date);
|
|
337
|
-
const lastActiveDateTime2 = lastActiveDate.toLocaleTimeString(
|
|
518
|
+
const lastActiveDateTime2 = lastActiveDate.toLocaleTimeString(locale, {
|
|
338
519
|
// hard-coded timezone before hydration to prevent server/client mismatch
|
|
339
520
|
timeZone: isHydrated ? void 0 : defaultTimeZone,
|
|
340
521
|
month: "long",
|
|
@@ -343,18 +524,28 @@ function LastActiveImpl({
|
|
|
343
524
|
hour: "numeric",
|
|
344
525
|
minute: "numeric"
|
|
345
526
|
});
|
|
346
|
-
const lastActiveDisplay2 = isHydrated ? (0, import_utils.getComparativeReadableDate)(/* @__PURE__ */ new Date(), lastActiveDate) : lastActiveDate.toLocaleDateString(
|
|
527
|
+
const lastActiveDisplay2 = isHydrated ? (0, import_utils.getComparativeReadableDate)(/* @__PURE__ */ new Date(), lastActiveDate, { locale }) : lastActiveDate.toLocaleDateString(locale, {
|
|
347
528
|
// hard-coded timezone to prevent server/client mismatch
|
|
348
529
|
timeZone: defaultTimeZone,
|
|
349
530
|
month: "long",
|
|
350
531
|
day: "numeric",
|
|
351
532
|
year: "numeric"
|
|
352
533
|
});
|
|
353
|
-
return {
|
|
354
|
-
|
|
534
|
+
return {
|
|
535
|
+
lastActiveDateTime: lastActiveDateTime2,
|
|
536
|
+
lastActiveDisplay: lastActiveDisplay2
|
|
537
|
+
};
|
|
538
|
+
}, [isHydrated, date, locale]);
|
|
355
539
|
if (lastActiveDisplay === "Invalid Date") {
|
|
356
540
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
357
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children:
|
|
541
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
542
|
+
import_translation.Translation,
|
|
543
|
+
{
|
|
544
|
+
defaultMessage: "Unknown",
|
|
545
|
+
id: "UUigrK",
|
|
546
|
+
description: "Screen reader text indicating last active date is unknown"
|
|
547
|
+
}
|
|
548
|
+
) }),
|
|
358
549
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Separator, {})
|
|
359
550
|
] });
|
|
360
551
|
}
|
|
@@ -415,15 +606,17 @@ const UsersManagementEmptyState = ({ isPending }) => {
|
|
|
415
606
|
}
|
|
416
607
|
if (searchQuery || isClearing) {
|
|
417
608
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_themes.Flex, { align: "center", justify: "center", py: "8", direction: "column", gap: "2", children: [
|
|
418
|
-
/* @__PURE__ */ (0, import_jsx_runtime.
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
"
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
609
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
610
|
+
import_translation.Translation,
|
|
611
|
+
{
|
|
612
|
+
defaultMessage: "No users found for query '{query}'",
|
|
613
|
+
id: "wrEZ8+",
|
|
614
|
+
description: "Message shown when no users match the search query",
|
|
615
|
+
values: {
|
|
616
|
+
query: isClearing ? lastSearchQuery : searchQuery
|
|
617
|
+
}
|
|
618
|
+
}
|
|
619
|
+
) }),
|
|
427
620
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
428
621
|
import_elements.Button,
|
|
429
622
|
{
|
|
@@ -434,12 +627,26 @@ const UsersManagementEmptyState = ({ isPending }) => {
|
|
|
434
627
|
clearSearch();
|
|
435
628
|
},
|
|
436
629
|
loading: isPending,
|
|
437
|
-
children:
|
|
630
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
631
|
+
import_translation.Translation,
|
|
632
|
+
{
|
|
633
|
+
defaultMessage: "Clear search",
|
|
634
|
+
id: "Xv3fVI",
|
|
635
|
+
description: "Button text to clear the current search query"
|
|
636
|
+
}
|
|
637
|
+
)
|
|
438
638
|
}
|
|
439
639
|
)
|
|
440
640
|
] });
|
|
441
641
|
}
|
|
442
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { align: "center", justify: "center", py: "8", gap: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children:
|
|
642
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Flex, { align: "center", justify: "center", py: "8", gap: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Text, { size: "2", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
643
|
+
import_translation.Translation,
|
|
644
|
+
{
|
|
645
|
+
defaultMessage: "No users found",
|
|
646
|
+
id: "MQ+LoA",
|
|
647
|
+
description: "Message shown when there are no users in the system"
|
|
648
|
+
}
|
|
649
|
+
) }) });
|
|
443
650
|
};
|
|
444
651
|
function UserRolesCellContent({
|
|
445
652
|
user,
|
|
@@ -448,19 +655,28 @@ function UserRolesCellContent({
|
|
|
448
655
|
}) {
|
|
449
656
|
if (!user.roles || user.roles.length === 0) {
|
|
450
657
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
|
|
451
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children:
|
|
658
|
+
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
659
|
+
import_translation.Translation,
|
|
660
|
+
{
|
|
661
|
+
defaultMessage: "No roles assigned",
|
|
662
|
+
id: "CVOVB0",
|
|
663
|
+
description: "Screen reader text indicating user has no roles assigned"
|
|
664
|
+
}
|
|
665
|
+
) }),
|
|
452
666
|
/* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { "aria-hidden": true, style: { userSelect: "none" }, children: "\u2013" })
|
|
453
667
|
] });
|
|
454
668
|
}
|
|
455
669
|
if (isMultipleRolesEnabled && user.roles.length > 1) {
|
|
456
|
-
|
|
457
|
-
|
|
670
|
+
const roleNames = user.roles?.map((role) => role.name).join(", ");
|
|
671
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_themes.Tooltip, { content: roleNames, maxWidth: "250px", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCellText, { dim: dimText, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
672
|
+
import_translation.Translation,
|
|
458
673
|
{
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
674
|
+
defaultMessage: "{count} roles",
|
|
675
|
+
id: "lWAmRC",
|
|
676
|
+
description: "Shows the number of roles assigned to a user (plural)",
|
|
677
|
+
values: { count: user.roles.length }
|
|
462
678
|
}
|
|
463
|
-
);
|
|
679
|
+
) }) });
|
|
464
680
|
}
|
|
465
681
|
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TableCellText, { dim: dimText, children: user.roles?.[0]?.name });
|
|
466
682
|
}
|