@workos-inc/widgets 1.20.0 → 1.20.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -170,7 +170,7 @@ export type AuthenticationSettings = {
170
170
  passwordAuthEnabled: Scalars["Boolean"]["output"];
171
171
  passwordPolicy: PasswordPolicy;
172
172
  };
173
- /** The branding configured for the token's environment. */
173
+ /** The branding the token renders: its application's own once that application has been customized, otherwise its environment's. */
174
174
  export type Branding = {
175
175
  __typename?: "Branding";
176
176
  /** The product name shown to users. */
@@ -270,7 +270,7 @@ export type ConnectOrganizationDataProviderWithClientCredentialsInput = {
270
270
  dataProviderId: Scalars["ID"]["input"];
271
271
  /** Makes retries of an Add return the connection the first attempt created instead of creating another. Reuse the same key for every retry of one user action. A matching retry within 24 hours returns the existing connection; reusing the key for a different owner, data provider, or authentication method, or after 24 hours while that connection exists, fails with idempotency_key_conflict. Ignored unless connectionIntent is Add. */
272
272
  idempotencyKey?: InputMaybe<Scalars["String"]["input"]>;
273
- /** The organization member the credentials are attributed to. With a user session token, omit it to use the session user, or pass that same user; any other user is rejected. With an application credential token, pass an active member of the token organization. Omitting it with an application credential token records no member for now; it is expected to become required. */
273
+ /** The organization member the credentials are attributed to. With a user session token, omit it to use the session user, or pass that same user; any other user is rejected. With an application credential token, it is required and must name an active member of the token organization. */
274
274
  userId?: InputMaybe<Scalars["ID"]["input"]>;
275
275
  };
276
276
  /** An OAuth profile linked to the authenticated user. */
@@ -389,7 +389,7 @@ export type CreateOrganizationDataProviderConnectionInput = {
389
389
  dataProviderId: Scalars["ID"]["input"];
390
390
  /** Makes retries of an Add return the connection the first attempt created instead of creating another. Reuse the same key for every retry of one user action. A matching retry within 24 hours returns the existing connection; reusing the key for a different owner, data provider, or authentication method, or after 24 hours while that connection exists, fails with idempotency_key_conflict. Ignored unless connectionIntent is Add. */
391
391
  idempotencyKey?: InputMaybe<Scalars["String"]["input"]>;
392
- /** The organization member the credentials are attributed to. With a user session token, omit it to use the session user, or pass that same user; any other user is rejected. With an application credential token, pass an active member of the token organization. Omitting it with an application credential token records no member for now; it is expected to become required. */
392
+ /** The organization member the credentials are attributed to. With a user session token, omit it to use the session user, or pass that same user; any other user is rejected. With an application credential token, it is required and must name an active member of the token organization. */
393
393
  userId?: InputMaybe<Scalars["ID"]["input"]>;
394
394
  };
395
395
  /** Input for setting a password on an account that does not yet have one (e.g. signed up via OAuth). */
@@ -1606,7 +1606,7 @@ export type Query = {
1606
1606
  authenticationSettings: AuthenticationSettings;
1607
1607
  /** The AuthKit settings for the token's environment. */
1608
1608
  authkitSettings: AuthKitSettings;
1609
- /** The branding configured for the token's environment. */
1609
+ /** The branding the token renders: its application's own once that application has been customized, otherwise its environment's. */
1610
1610
  branding: Branding;
1611
1611
  /** Placeholder query for the Client GraphQL API scaffold. Returns a static value and is replaced by real resolvers. */
1612
1612
  clientApiStatus: Scalars["String"]["output"];
@@ -176,8 +176,8 @@ function ApiKeysTable({ apiKeys }) {
176
176
  const { dispatch } = require_lib_api_keys_api_keys_context.useApiKeysContext();
177
177
  const pagination = require_lib_utils_get_list_metadata.getListMetadata(apiKeys);
178
178
  const hasPagination = !!(pagination.before || pagination.after);
179
- const hasPreviousPage = !!pagination.after;
180
- const hasNextPage = !!pagination.before;
179
+ const hasPreviousPage = !!pagination.before;
180
+ const hasNextPage = !!pagination.after;
181
181
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_themes.Flex, {
182
182
  direction: "column",
183
183
  align: "stretch",
@@ -230,8 +230,8 @@ function ApiKeysTable({ apiKeys }) {
230
230
  onClick: () => dispatch({
231
231
  type: "SET_PAGINATION",
232
232
  pagination: {
233
- before: null,
234
- after: pagination.after
233
+ before: pagination.before,
234
+ after: null
235
235
  }
236
236
  }),
237
237
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_lib_i18n_translation.Translation, {
@@ -246,8 +246,8 @@ function ApiKeysTable({ apiKeys }) {
246
246
  onClick: () => dispatch({
247
247
  type: "SET_PAGINATION",
248
248
  pagination: {
249
- before: pagination.before,
250
- after: null
249
+ before: null,
250
+ after: pagination.after
251
251
  }
252
252
  }),
253
253
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_lib_i18n_translation.Translation, {
@@ -1 +1 @@
1
- {"version":3,"file":"api-keys-table.cjs","names":["useApiKeysSearchContext","Flex","MagnifyingGlassIcon","Heading","Translation","Button","ApiKeysSearch","CreateApiKeyButton","useState","useExpireApiKey","useTranslation","RevokeApiKeyDialog","ApiKeyDetailsDialog","EditApiKeyExpirationDialog","Table","Text","Code","RelativeTime","ApiKeyExpiresOn","IconButton","DotsHorizontalIcon","useApiKeysContext","getListMetadata"],"sources":["../../../../src/lib/api-keys/api-keys-table.tsx"],"sourcesContent":["import { Flex, Text, Table, Code, Heading } from \"@radix-ui/themes\";\nimport { Button, DropdownMenu, IconButton } from \"../elements.js\";\nimport { DotsHorizontalIcon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\";\nimport { useState } from \"react\";\nimport { RevokeApiKeyDialog } from \"./revoke-api-key-dialog.js\";\nimport { CreateApiKeyButton } from \"./create-api-key.js\";\nimport { ApiKeyDetailsDialog } from \"./api-key-details-dialog.js\";\nimport { RelativeTime } from \"./relative-time.js\";\nimport {\n ListOrganizationApiKeysResponse,\n ListOrganizationApiKeysResponseData,\n} from \"../api/types.js\";\nimport { useApiKeysContext } from \"./api-keys-context.js\";\nimport { useApiKeysSearchContext } from \"./api-keys-search-provider.js\";\nimport { ApiKeysSearch } from \"./api-keys-search.js\";\nimport { Translation } from \"../i18n/translation.js\";\nimport { useTranslation } from \"../i18n/use-translation.js\";\nimport { getListMetadata } from \"../utils/get-list-metadata.js\";\nimport {\n ApiKeyExpiresOn,\n EditApiKeyExpirationDialog,\n} from \"./api-key-expiration.js\";\nimport { useExpireApiKey } from \"../api/api-key.js\";\n\nfunction NoApiKeys() {\n const { clearSearch } = useApiKeysSearchContext();\n return (\n <Flex p=\"6\" gap=\"4\" justify=\"center\" align=\"center\" direction=\"column\">\n <Flex direction=\"column\" gap=\"1\" maxWidth=\"420px\" align=\"center\">\n <MagnifyingGlassIcon\n style={{ color: \"var(--gray-9)\" }}\n width=\"32px\"\n height=\"32px\"\n />\n <Heading size=\"5\" mb=\"1\" wrap=\"balance\" as=\"h3\">\n <Translation\n defaultMessage=\"No API keys match your search\"\n id=\"cKitHb\"\n description=\"Empty state message when no API keys match search\"\n />\n </Heading>\n </Flex>\n\n <Button variant=\"secondary\" onClick={clearSearch}>\n <Translation\n defaultMessage=\"Clear search\"\n id=\"jTupOW\"\n description=\"Button to clear API key search filters\"\n />\n </Button>\n </Flex>\n );\n}\n\nfunction ApiKeysTableHeader() {\n return (\n <Flex justify=\"between\" align=\"center\">\n <ApiKeysSearch name=\"api-keys-widget-search\" style={{ width: \"390px\" }} />\n <CreateApiKeyButton />\n </Flex>\n );\n}\n\ninterface ApiKeyRowProps {\n apiKey: ListOrganizationApiKeysResponseData;\n}\n\nfunction ApiKeyRow({ apiKey }: ApiKeyRowProps) {\n const [revokeDialogOpen, setRevokeDialogOpen] = useState(false);\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [editExpirationOpen, setEditExpirationOpen] = useState(false);\n const {\n mutate: expireApiKey,\n error: expireError,\n isPending: expirePending,\n isSuccess: expireSuccess,\n reset: resetExpireApiKey,\n } = useExpireApiKey();\n const translate = useTranslation();\n const openEditExpirationDialog = () => {\n resetExpireApiKey();\n setEditExpirationOpen(true);\n };\n return (\n <>\n <RevokeApiKeyDialog\n // always remount the form when the dialog is opened to reset the validation errors\n key={`${revokeDialogOpen}`}\n open={revokeDialogOpen}\n onOpenChange={setRevokeDialogOpen}\n apiKey={apiKey}\n />\n <ApiKeyDetailsDialog\n open={detailsOpen}\n onOpenChange={setDetailsOpen}\n apiKey={apiKey}\n permissions={apiKey.permissions}\n />\n <EditApiKeyExpirationDialog\n open={editExpirationOpen}\n onOpenChange={(open) => {\n if (open) {\n resetExpireApiKey();\n }\n setEditExpirationOpen(open);\n }}\n apiKeyName={apiKey.name}\n expiresAt={apiKey.expiresAt}\n error={expireError}\n isPending={expirePending}\n isSuccess={expireSuccess}\n onReset={resetExpireApiKey}\n onSave={(expiresAt) =>\n expireApiKey(\n { apiKeyId: apiKey.id, expiresAt },\n { onSuccess: () => setEditExpirationOpen(false) },\n )\n }\n />\n <Table.Row align=\"center\">\n <Table.Cell>\n <Text>{apiKey.name}</Text>\n </Table.Cell>\n <Table.Cell>\n <Code color=\"gray\">{apiKey.obfuscatedValue}</Code>\n </Table.Cell>\n <Table.Cell>\n <Text\n style={apiKey.lastUsedAt ? undefined : { color: \"var(--gray-10)\" }}\n >\n <RelativeTime\n date={apiKey.lastUsedAt ? new Date(apiKey.lastUsedAt) : undefined}\n />\n </Text>\n </Table.Cell>\n <Table.Cell>\n <Text>\n <ApiKeyExpiresOn expiresAt={apiKey.expiresAt} includeTime />\n </Text>\n </Table.Cell>\n <Table.Cell justify=\"end\">\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n {(() => {\n const title = translate({\n defaultMessage: \"API key actions\",\n id: \"RIBfYe\",\n description: \"Tooltip for API key actions menu button\",\n });\n return (\n <IconButton title={title}>\n <DotsHorizontalIcon />\n </IconButton>\n );\n })()}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content size=\"2\" align=\"end\">\n <DropdownMenu.Item onSelect={() => setDetailsOpen(true)}>\n <Translation\n defaultMessage=\"View details\"\n id=\"VGKbbj\"\n description=\"Menu item to view API key details\"\n />\n </DropdownMenu.Item>\n <DropdownMenu.Item onSelect={openEditExpirationDialog}>\n <Translation\n defaultMessage=\"Edit expiration\"\n id=\"fONrTk\"\n description=\"Menu item to edit an API key expiration\"\n />\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n variant=\"destructive\"\n onSelect={() => setRevokeDialogOpen(true)}\n >\n <Translation\n defaultMessage=\"Revoke key\"\n id=\"KZIJPP\"\n description=\"Menu item to revoke an API key\"\n />\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </Table.Cell>\n </Table.Row>\n </>\n );\n}\n\nexport function ApiKeysTable({\n apiKeys,\n}: {\n apiKeys: ListOrganizationApiKeysResponse;\n}) {\n const { dispatch } = useApiKeysContext();\n\n // The API response previously returned an object with the `listMetadata`\n // property. We might not need this, but it's a defensive check until we\n // verify the API response changes are correct.\n const pagination = getListMetadata(apiKeys);\n\n const hasPagination = !!(pagination.before || pagination.after);\n const hasPreviousPage = !!pagination.after;\n const hasNextPage = !!pagination.before;\n\n return (\n <Flex direction=\"column\" align=\"stretch\" gap=\"3\">\n <ApiKeysTableHeader />\n {apiKeys.data.length === 0 ? (\n <NoApiKeys />\n ) : (\n <>\n <Table.Root variant=\"ghost\" size=\"2\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeaderCell width=\"25%\">\n <Translation\n defaultMessage=\"Name\"\n id=\"VYbVXN\"\n description=\"Table column header for API key name\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"25%\">\n <Translation\n defaultMessage=\"Secret key\"\n id=\"H5k7GB\"\n description=\"Table column header for API key secret value\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"25%\">\n <Translation\n defaultMessage=\"Last used\"\n id=\"E46t3O\"\n description=\"Table column header for API key last used timestamp\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"25%\">\n <Translation\n defaultMessage=\"Expires\"\n id=\"3q8EjA\"\n description=\"Table column header for API key expiration date\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"28px\" />\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {apiKeys.data.map((apiKey) => (\n <ApiKeyRow key={apiKey.id} apiKey={apiKey} />\n ))}\n </Table.Body>\n </Table.Root>\n {hasPagination && (\n <Flex gap=\"2\" justify=\"end\">\n <Button\n variant=\"secondary\"\n disabled={!hasPreviousPage}\n size=\"1\"\n onClick={() =>\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: null, after: pagination.after },\n })\n }\n >\n <Translation\n defaultMessage=\"Previous\"\n id=\"f7TUj0\"\n description=\"Button to navigate to previous page of API keys\"\n />\n </Button>\n <Button\n variant=\"secondary\"\n disabled={!hasNextPage}\n size=\"1\"\n onClick={() =>\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: pagination.before, after: null },\n })\n }\n >\n <Translation\n defaultMessage=\"Next\"\n id=\"L2EBxV\"\n description=\"Button to navigate to next page of API keys\"\n />\n </Button>\n </Flex>\n )}\n </>\n )}\n </Flex>\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"api-keys-table.cjs","names":["useApiKeysSearchContext","Flex","MagnifyingGlassIcon","Heading","Translation","Button","ApiKeysSearch","CreateApiKeyButton","useState","useExpireApiKey","useTranslation","RevokeApiKeyDialog","ApiKeyDetailsDialog","EditApiKeyExpirationDialog","Table","Text","Code","RelativeTime","ApiKeyExpiresOn","IconButton","DotsHorizontalIcon","useApiKeysContext","getListMetadata"],"sources":["../../../../src/lib/api-keys/api-keys-table.tsx"],"sourcesContent":["import { Flex, Text, Table, Code, Heading } from \"@radix-ui/themes\";\nimport { Button, DropdownMenu, IconButton } from \"../elements.js\";\nimport { DotsHorizontalIcon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\";\nimport { useState } from \"react\";\nimport { RevokeApiKeyDialog } from \"./revoke-api-key-dialog.js\";\nimport { CreateApiKeyButton } from \"./create-api-key.js\";\nimport { ApiKeyDetailsDialog } from \"./api-key-details-dialog.js\";\nimport { RelativeTime } from \"./relative-time.js\";\nimport {\n ListOrganizationApiKeysResponse,\n ListOrganizationApiKeysResponseData,\n} from \"../api/types.js\";\nimport { useApiKeysContext } from \"./api-keys-context.js\";\nimport { useApiKeysSearchContext } from \"./api-keys-search-provider.js\";\nimport { ApiKeysSearch } from \"./api-keys-search.js\";\nimport { Translation } from \"../i18n/translation.js\";\nimport { useTranslation } from \"../i18n/use-translation.js\";\nimport { getListMetadata } from \"../utils/get-list-metadata.js\";\nimport {\n ApiKeyExpiresOn,\n EditApiKeyExpirationDialog,\n} from \"./api-key-expiration.js\";\nimport { useExpireApiKey } from \"../api/api-key.js\";\n\nfunction NoApiKeys() {\n const { clearSearch } = useApiKeysSearchContext();\n return (\n <Flex p=\"6\" gap=\"4\" justify=\"center\" align=\"center\" direction=\"column\">\n <Flex direction=\"column\" gap=\"1\" maxWidth=\"420px\" align=\"center\">\n <MagnifyingGlassIcon\n style={{ color: \"var(--gray-9)\" }}\n width=\"32px\"\n height=\"32px\"\n />\n <Heading size=\"5\" mb=\"1\" wrap=\"balance\" as=\"h3\">\n <Translation\n defaultMessage=\"No API keys match your search\"\n id=\"cKitHb\"\n description=\"Empty state message when no API keys match search\"\n />\n </Heading>\n </Flex>\n\n <Button variant=\"secondary\" onClick={clearSearch}>\n <Translation\n defaultMessage=\"Clear search\"\n id=\"jTupOW\"\n description=\"Button to clear API key search filters\"\n />\n </Button>\n </Flex>\n );\n}\n\nfunction ApiKeysTableHeader() {\n return (\n <Flex justify=\"between\" align=\"center\">\n <ApiKeysSearch name=\"api-keys-widget-search\" style={{ width: \"390px\" }} />\n <CreateApiKeyButton />\n </Flex>\n );\n}\n\ninterface ApiKeyRowProps {\n apiKey: ListOrganizationApiKeysResponseData;\n}\n\nfunction ApiKeyRow({ apiKey }: ApiKeyRowProps) {\n const [revokeDialogOpen, setRevokeDialogOpen] = useState(false);\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [editExpirationOpen, setEditExpirationOpen] = useState(false);\n const {\n mutate: expireApiKey,\n error: expireError,\n isPending: expirePending,\n isSuccess: expireSuccess,\n reset: resetExpireApiKey,\n } = useExpireApiKey();\n const translate = useTranslation();\n const openEditExpirationDialog = () => {\n resetExpireApiKey();\n setEditExpirationOpen(true);\n };\n return (\n <>\n <RevokeApiKeyDialog\n // always remount the form when the dialog is opened to reset the validation errors\n key={`${revokeDialogOpen}`}\n open={revokeDialogOpen}\n onOpenChange={setRevokeDialogOpen}\n apiKey={apiKey}\n />\n <ApiKeyDetailsDialog\n open={detailsOpen}\n onOpenChange={setDetailsOpen}\n apiKey={apiKey}\n permissions={apiKey.permissions}\n />\n <EditApiKeyExpirationDialog\n open={editExpirationOpen}\n onOpenChange={(open) => {\n if (open) {\n resetExpireApiKey();\n }\n setEditExpirationOpen(open);\n }}\n apiKeyName={apiKey.name}\n expiresAt={apiKey.expiresAt}\n error={expireError}\n isPending={expirePending}\n isSuccess={expireSuccess}\n onReset={resetExpireApiKey}\n onSave={(expiresAt) =>\n expireApiKey(\n { apiKeyId: apiKey.id, expiresAt },\n { onSuccess: () => setEditExpirationOpen(false) },\n )\n }\n />\n <Table.Row align=\"center\">\n <Table.Cell>\n <Text>{apiKey.name}</Text>\n </Table.Cell>\n <Table.Cell>\n <Code color=\"gray\">{apiKey.obfuscatedValue}</Code>\n </Table.Cell>\n <Table.Cell>\n <Text\n style={apiKey.lastUsedAt ? undefined : { color: \"var(--gray-10)\" }}\n >\n <RelativeTime\n date={apiKey.lastUsedAt ? new Date(apiKey.lastUsedAt) : undefined}\n />\n </Text>\n </Table.Cell>\n <Table.Cell>\n <Text>\n <ApiKeyExpiresOn expiresAt={apiKey.expiresAt} includeTime />\n </Text>\n </Table.Cell>\n <Table.Cell justify=\"end\">\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n {(() => {\n const title = translate({\n defaultMessage: \"API key actions\",\n id: \"RIBfYe\",\n description: \"Tooltip for API key actions menu button\",\n });\n return (\n <IconButton title={title}>\n <DotsHorizontalIcon />\n </IconButton>\n );\n })()}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content size=\"2\" align=\"end\">\n <DropdownMenu.Item onSelect={() => setDetailsOpen(true)}>\n <Translation\n defaultMessage=\"View details\"\n id=\"VGKbbj\"\n description=\"Menu item to view API key details\"\n />\n </DropdownMenu.Item>\n <DropdownMenu.Item onSelect={openEditExpirationDialog}>\n <Translation\n defaultMessage=\"Edit expiration\"\n id=\"fONrTk\"\n description=\"Menu item to edit an API key expiration\"\n />\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n variant=\"destructive\"\n onSelect={() => setRevokeDialogOpen(true)}\n >\n <Translation\n defaultMessage=\"Revoke key\"\n id=\"KZIJPP\"\n description=\"Menu item to revoke an API key\"\n />\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </Table.Cell>\n </Table.Row>\n </>\n );\n}\n\nexport function ApiKeysTable({\n apiKeys,\n}: {\n apiKeys: ListOrganizationApiKeysResponse;\n}) {\n const { dispatch } = useApiKeysContext();\n\n // The API response previously returned an object with the `listMetadata`\n // property. We might not need this, but it's a defensive check until we\n // verify the API response changes are correct.\n const pagination = getListMetadata(apiKeys);\n\n const hasPagination = !!(pagination.before || pagination.after);\n const hasPreviousPage = !!pagination.before;\n const hasNextPage = !!pagination.after;\n\n return (\n <Flex direction=\"column\" align=\"stretch\" gap=\"3\">\n <ApiKeysTableHeader />\n {apiKeys.data.length === 0 ? (\n <NoApiKeys />\n ) : (\n <>\n <Table.Root variant=\"ghost\" size=\"2\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeaderCell width=\"25%\">\n <Translation\n defaultMessage=\"Name\"\n id=\"VYbVXN\"\n description=\"Table column header for API key name\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"25%\">\n <Translation\n defaultMessage=\"Secret key\"\n id=\"H5k7GB\"\n description=\"Table column header for API key secret value\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"25%\">\n <Translation\n defaultMessage=\"Last used\"\n id=\"E46t3O\"\n description=\"Table column header for API key last used timestamp\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"25%\">\n <Translation\n defaultMessage=\"Expires\"\n id=\"3q8EjA\"\n description=\"Table column header for API key expiration date\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"28px\" />\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {apiKeys.data.map((apiKey) => (\n <ApiKeyRow key={apiKey.id} apiKey={apiKey} />\n ))}\n </Table.Body>\n </Table.Root>\n {hasPagination && (\n <Flex gap=\"2\" justify=\"end\">\n <Button\n variant=\"secondary\"\n disabled={!hasPreviousPage}\n size=\"1\"\n onClick={() =>\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: pagination.before, after: null },\n })\n }\n >\n <Translation\n defaultMessage=\"Previous\"\n id=\"f7TUj0\"\n description=\"Button to navigate to previous page of API keys\"\n />\n </Button>\n <Button\n variant=\"secondary\"\n disabled={!hasNextPage}\n size=\"1\"\n onClick={() =>\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: null, after: pagination.after },\n })\n }\n >\n <Translation\n defaultMessage=\"Next\"\n id=\"L2EBxV\"\n description=\"Button to navigate to next page of API keys\"\n />\n </Button>\n </Flex>\n )}\n </>\n )}\n </Flex>\n );\n}\n"],"mappings":"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"}
@@ -178,8 +178,8 @@ function UserApiKeysTable({ apiKeys, canCreate, canManageAll }) {
178
178
  const { dispatch } = require_lib_user_api_keys_user_api_keys_context.useUserApiKeysContext();
179
179
  const pagination = require_lib_utils_get_list_metadata.getListMetadata(apiKeys);
180
180
  const hasPagination = !!(pagination.before || pagination.after);
181
- const hasPreviousPage = !!pagination.after;
182
- const hasNextPage = !!pagination.before;
181
+ const hasPreviousPage = !!pagination.before;
182
+ const hasNextPage = !!pagination.after;
183
183
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(_radix_ui_themes.Flex, {
184
184
  direction: "column",
185
185
  align: "stretch",
@@ -243,8 +243,8 @@ function UserApiKeysTable({ apiKeys, canCreate, canManageAll }) {
243
243
  onClick: () => dispatch({
244
244
  type: "SET_PAGINATION",
245
245
  pagination: {
246
- before: null,
247
- after: pagination.after
246
+ before: pagination.before,
247
+ after: null
248
248
  }
249
249
  }),
250
250
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_lib_i18n_translation.Translation, {
@@ -259,8 +259,8 @@ function UserApiKeysTable({ apiKeys, canCreate, canManageAll }) {
259
259
  onClick: () => dispatch({
260
260
  type: "SET_PAGINATION",
261
261
  pagination: {
262
- before: pagination.before,
263
- after: null
262
+ before: null,
263
+ after: pagination.after
264
264
  }
265
265
  }),
266
266
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_lib_i18n_translation.Translation, {
@@ -1 +1 @@
1
- {"version":3,"file":"user-api-keys-table.cjs","names":["useUserApiKeysSearchContext","Flex","MagnifyingGlassIcon","Heading","Translation","Button","UserApiKeysSearch","CreateUserApiKeyButton","useState","useExpireUserApiKey","useTranslation","RevokeUserApiKeyDialog","UserApiKeyDetailsDialog","EditApiKeyExpirationDialog","Table","Text","Code","getUserApiKeyCreatedByLabel","RelativeTime","ApiKeyExpiresOn","IconButton","DotsHorizontalIcon","useUserApiKeysContext","getListMetadata"],"sources":["../../../../src/lib/user-api-keys/user-api-keys-table.tsx"],"sourcesContent":["import { Flex, Text, Table, Code, Heading } from \"@radix-ui/themes\";\nimport { Button, DropdownMenu, IconButton } from \"../elements.js\";\nimport { DotsHorizontalIcon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\";\nimport { useState } from \"react\";\nimport { RevokeUserApiKeyDialog } from \"./revoke-user-api-key-dialog.js\";\nimport { CreateUserApiKeyButton } from \"./create-user-api-key.js\";\nimport { UserApiKeyDetailsDialog } from \"./user-api-key-details-dialog.js\";\nimport { RelativeTime } from \"../api-keys/relative-time.js\";\nimport type {\n ListUserApiKeysResponse,\n ListUserApiKeysResponseData,\n} from \"../api/user-api-key.js\";\nimport { useUserApiKeysContext } from \"./user-api-keys-context.js\";\nimport { useUserApiKeysSearchContext } from \"./user-api-keys-search-provider.js\";\nimport { UserApiKeysSearch } from \"./user-api-keys-search.js\";\nimport { Translation } from \"../i18n/translation.js\";\nimport { useTranslation } from \"../i18n/use-translation.js\";\nimport { getListMetadata } from \"../utils/get-list-metadata.js\";\nimport {\n ApiKeyExpiresOn,\n EditApiKeyExpirationDialog,\n} from \"../api-keys/api-key-expiration.js\";\nimport { useExpireUserApiKey } from \"../api/user-api-key.js\";\nimport { getUserApiKeyCreatedByLabel } from \"./user-api-key-owner.js\";\n\nfunction NoUserApiKeys() {\n const { clearSearch } = useUserApiKeysSearchContext();\n return (\n <Flex p=\"6\" gap=\"4\" justify=\"center\" align=\"center\" direction=\"column\">\n <Flex direction=\"column\" gap=\"1\" maxWidth=\"420px\" align=\"center\">\n <MagnifyingGlassIcon\n style={{ color: \"var(--gray-9)\" }}\n width=\"32px\"\n height=\"32px\"\n />\n <Heading size=\"5\" mb=\"1\" wrap=\"balance\" as=\"h3\">\n <Translation\n defaultMessage=\"No API keys match your search\"\n id=\"cKitHb\"\n description=\"Empty state message when no API keys match search\"\n />\n </Heading>\n </Flex>\n\n <Button variant=\"secondary\" onClick={clearSearch}>\n <Translation\n defaultMessage=\"Clear search\"\n id=\"jTupOW\"\n description=\"Button to clear API key search filters\"\n />\n </Button>\n </Flex>\n );\n}\n\nfunction UserApiKeysTableHeader({ canCreate }: { canCreate: boolean }) {\n return (\n <Flex justify=\"between\" align=\"center\">\n <UserApiKeysSearch\n name=\"user-api-keys-widget-search\"\n style={{ width: \"390px\" }}\n />\n <CreateUserApiKeyButton canCreate={canCreate} />\n </Flex>\n );\n}\n\ninterface UserApiKeyRowProps {\n apiKey: ListUserApiKeysResponseData;\n canManageAll: boolean;\n}\n\nfunction UserApiKeyRow({ apiKey, canManageAll }: UserApiKeyRowProps) {\n const [revokeDialogOpen, setRevokeDialogOpen] = useState(false);\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [editExpirationOpen, setEditExpirationOpen] = useState(false);\n const {\n mutate: expireUserApiKey,\n error: expireError,\n isPending: expirePending,\n isSuccess: expireSuccess,\n reset: resetExpireUserApiKey,\n } = useExpireUserApiKey();\n const translate = useTranslation();\n const openEditExpirationDialog = () => {\n resetExpireUserApiKey();\n setEditExpirationOpen(true);\n };\n return (\n <>\n <RevokeUserApiKeyDialog\n key={`${revokeDialogOpen}`}\n open={revokeDialogOpen}\n onOpenChange={setRevokeDialogOpen}\n apiKey={apiKey}\n />\n <UserApiKeyDetailsDialog\n open={detailsOpen}\n onOpenChange={setDetailsOpen}\n apiKey={apiKey}\n permissions={apiKey.permissions}\n />\n <EditApiKeyExpirationDialog\n open={editExpirationOpen}\n onOpenChange={(open) => {\n if (open) {\n resetExpireUserApiKey();\n }\n setEditExpirationOpen(open);\n }}\n apiKeyName={apiKey.name}\n expiresAt={apiKey.expiresAt}\n error={expireError}\n isPending={expirePending}\n isSuccess={expireSuccess}\n onReset={resetExpireUserApiKey}\n onSave={(expiresAt) =>\n expireUserApiKey(\n { apiKeyId: apiKey.id, expiresAt },\n { onSuccess: () => setEditExpirationOpen(false) },\n )\n }\n />\n <Table.Row align=\"center\">\n <Table.Cell>\n <Text>{apiKey.name}</Text>\n </Table.Cell>\n <Table.Cell>\n <Code color=\"gray\">{apiKey.obfuscatedValue}</Code>\n </Table.Cell>\n {canManageAll ? (\n <Table.Cell>\n <Text>{getUserApiKeyCreatedByLabel(apiKey)}</Text>\n </Table.Cell>\n ) : null}\n <Table.Cell>\n <Text\n style={apiKey.lastUsedAt ? undefined : { color: \"var(--gray-10)\" }}\n >\n <RelativeTime\n date={apiKey.lastUsedAt ? new Date(apiKey.lastUsedAt) : undefined}\n />\n </Text>\n </Table.Cell>\n <Table.Cell>\n <Text>\n <ApiKeyExpiresOn expiresAt={apiKey.expiresAt} includeTime />\n </Text>\n </Table.Cell>\n <Table.Cell justify=\"end\">\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n {(() => {\n const title = translate({\n defaultMessage: \"API key actions\",\n id: \"RIBfYe\",\n description: \"Tooltip for API key actions menu button\",\n });\n return (\n <IconButton title={title}>\n <DotsHorizontalIcon />\n </IconButton>\n );\n })()}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content size=\"2\" align=\"end\">\n <DropdownMenu.Item onSelect={() => setDetailsOpen(true)}>\n <Translation\n defaultMessage=\"View details\"\n id=\"VGKbbj\"\n description=\"Menu item to view API key details\"\n />\n </DropdownMenu.Item>\n <DropdownMenu.Item onSelect={openEditExpirationDialog}>\n <Translation\n defaultMessage=\"Edit expiration\"\n id=\"fONrTk\"\n description=\"Menu item to edit an API key expiration\"\n />\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n variant=\"destructive\"\n onSelect={() => setRevokeDialogOpen(true)}\n >\n <Translation\n defaultMessage=\"Revoke key\"\n id=\"KZIJPP\"\n description=\"Menu item to revoke an API key\"\n />\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </Table.Cell>\n </Table.Row>\n </>\n );\n}\n\nexport function UserApiKeysTable({\n apiKeys,\n canCreate,\n canManageAll,\n}: {\n apiKeys: ListUserApiKeysResponse;\n canCreate: boolean;\n canManageAll: boolean;\n}) {\n const { dispatch } = useUserApiKeysContext();\n const pagination = getListMetadata(apiKeys);\n\n const hasPagination = !!(pagination.before || pagination.after);\n const hasPreviousPage = !!pagination.after;\n const hasNextPage = !!pagination.before;\n\n return (\n <Flex direction=\"column\" align=\"stretch\" gap=\"3\">\n <UserApiKeysTableHeader canCreate={canCreate} />\n {apiKeys.data.length === 0 ? (\n <NoUserApiKeys />\n ) : (\n <>\n <Table.Root variant=\"ghost\" size=\"2\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeaderCell width={canManageAll ? \"20%\" : \"25%\"}>\n <Translation\n defaultMessage=\"Name\"\n id=\"VYbVXN\"\n description=\"Table column header for API key name\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width={canManageAll ? \"20%\" : \"25%\"}>\n <Translation\n defaultMessage=\"Secret key\"\n id=\"H5k7GB\"\n description=\"Table column header for API key secret value\"\n />\n </Table.ColumnHeaderCell>\n {canManageAll ? (\n <Table.ColumnHeaderCell width=\"20%\">\n <Translation\n defaultMessage=\"Created by\"\n id=\"en10bZ\"\n description=\"Table column header for API key creator\"\n />\n </Table.ColumnHeaderCell>\n ) : null}\n <Table.ColumnHeaderCell width={canManageAll ? \"20%\" : \"25%\"}>\n <Translation\n defaultMessage=\"Last used\"\n id=\"E46t3O\"\n description=\"Table column header for API key last used timestamp\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width={canManageAll ? \"20%\" : \"25%\"}>\n <Translation\n defaultMessage=\"Expires\"\n id=\"3q8EjA\"\n description=\"Table column header for API key expiration date\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"28px\" />\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {apiKeys.data.map((apiKey) => (\n <UserApiKeyRow\n key={apiKey.id}\n apiKey={apiKey}\n canManageAll={canManageAll}\n />\n ))}\n </Table.Body>\n </Table.Root>\n {hasPagination && (\n <Flex gap=\"2\" justify=\"end\">\n <Button\n variant=\"secondary\"\n disabled={!hasPreviousPage}\n size=\"1\"\n onClick={() =>\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: null, after: pagination.after },\n })\n }\n >\n <Translation\n defaultMessage=\"Previous\"\n id=\"f7TUj0\"\n description=\"Button to navigate to previous page of API keys\"\n />\n </Button>\n <Button\n variant=\"secondary\"\n disabled={!hasNextPage}\n size=\"1\"\n onClick={() =>\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: pagination.before, after: null },\n })\n }\n >\n <Translation\n defaultMessage=\"Next\"\n id=\"L2EBxV\"\n description=\"Button to navigate to next page of API keys\"\n />\n </Button>\n </Flex>\n )}\n </>\n )}\n </Flex>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAyBA,SAAS,gBAAgB;CACvB,MAAM,EAAE,gBAAgBA,wDAAAA,4BAA4B;CACpD,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACC,iBAAAA,MAAD;EAAM,GAAE;EAAI,KAAI;EAAI,SAAQ;EAAS,OAAM;EAAS,WAAU;EAA9D,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAACA,iBAAAA,MAAD;GAAM,WAAU;GAAS,KAAI;GAAI,UAAS;GAAQ,OAAM;GAAxD,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,qBAAD;IACE,OAAO,EAAE,OAAO,gBAAgB;IAChC,OAAM;IACN,QAAO;GACR,CAAA,GACD,iBAAA,GAAA,kBAAA,IAAA,CAACC,iBAAAA,SAAD;IAAS,MAAK;IAAI,IAAG;IAAI,MAAK;IAAU,IAAG;IACzC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,6BAAAA,aAAD;KACE,gBAAe;KACf,IAAG;KACH,aAAY;IACb,CAAA;GACM,CAAA,CACL;EAEN,CAAA,GAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,QAAD;GAAQ,SAAQ;GAAY,SAAS;GACnC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACD,6BAAAA,aAAD;IACE,gBAAe;IACf,IAAG;IACH,aAAY;GACb,CAAA;EACK,CAAA,CACJ;;AAEV;AAEA,SAAS,uBAAuB,EAAE,aAAqC;CACrE,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACH,iBAAAA,MAAD;EAAM,SAAQ;EAAU,OAAM;EAA9B,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACK,+CAAAA,mBAAD;GACE,MAAK;GACL,OAAO,EAAE,OAAO,QAAQ;EACzB,CAAA,GACD,iBAAA,GAAA,kBAAA,IAAA,CAACC,8CAAAA,wBAAD,EAAmC,UAAY,CAAA,CAC3C;;AAEV;AAOA,SAAS,cAAc,EAAE,QAAQ,gBAAoC;CACnE,MAAM,CAAC,kBAAkB,wBAAA,GAAuBC,MAAAA,SAAAA,CAAS,KAAK;CAC9D,MAAM,CAAC,aAAa,mBAAA,GAAkBA,MAAAA,SAAAA,CAAS,KAAK;CACpD,MAAM,CAAC,oBAAoB,0BAAA,GAAyBA,MAAAA,SAAAA,CAAS,KAAK;CAClE,MAAM,EACJ,QAAQ,kBACR,OAAO,aACP,WAAW,eACX,WAAW,eACX,OAAO,0BACLC,6BAAAA,oBAAoB;CACxB,MAAM,YAAYC,iCAAAA,eAAe;CACjC,MAAM,iCAAiC;EACrC,sBAAsB;EACtB,sBAAsB,IAAI;CAC5B;CACA,OACE,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA;EACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,qDAAAA,wBAAD;GAEE,MAAM;GACN,cAAc;GACN;EACT,GAJM,GAAG,kBAIT;EACD,iBAAA,GAAA,kBAAA,IAAA,CAACC,sDAAAA,yBAAD;GACE,MAAM;GACN,cAAc;GACN;GACR,aAAa,OAAO;EACrB,CAAA;EACD,iBAAA,GAAA,kBAAA,IAAA,CAACC,wCAAAA,4BAAD;GACE,MAAM;GACN,eAAe,SAAS;IACtB,IAAI,MACF,sBAAsB;IAExB,sBAAsB,IAAI;GAC5B;GACA,YAAY,OAAO;GACnB,WAAW,OAAO;GAClB,OAAO;GACP,WAAW;GACX,WAAW;GACX,SAAS;GACT,SAAS,cACP,iBACE;IAAE,UAAU,OAAO;IAAI;GAAU,GACjC,EAAE,iBAAiB,sBAAsB,KAAK,EAAE,CAClD;EAEH,CAAA;EACD,iBAAA,GAAA,kBAAA,KAAA,CAACC,iBAAAA,MAAM,KAAP;GAAW,OAAM;GAAjB,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,iBAAAA,MAAM,MAAP,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,iBAAAA,MAAD,EAAA,UAAO,OAAO,KAAW,CAAA,EACf,CAAA;IACZ,iBAAA,GAAA,kBAAA,IAAA,CAACD,iBAAAA,MAAM,MAAP,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACE,iBAAAA,MAAD;KAAM,OAAM;KAAQ,UAAA,OAAO;IAAsB,CAAA,EACvC,CAAA;IACX,eACC,iBAAA,GAAA,kBAAA,IAAA,CAACF,iBAAAA,MAAM,MAAP,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,iBAAAA,MAAD,EAAA,UAAOE,6CAAAA,4BAA4B,MAAM,EAAQ,CAAA,EACvC,CAAA,IACV;IACJ,iBAAA,GAAA,kBAAA,IAAA,CAACH,iBAAAA,MAAM,MAAP,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,iBAAAA,MAAD;KACE,OAAO,OAAO,aAAa,SAAY,EAAE,OAAO,iBAAiB;KAEjE,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACG,mCAAAA,cAAD,EACE,MAAM,OAAO,aAAa,IAAI,KAAK,OAAO,UAAU,IAAI,OACzD,CAAA;IACG,CAAA,EACI,CAAA;IACZ,iBAAA,GAAA,kBAAA,IAAA,CAACJ,iBAAAA,MAAM,MAAP,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACC,iBAAAA,MAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,IAAA,CAACI,wCAAAA,iBAAD;KAAiB,WAAW,OAAO;KAAW,aAAA;IAAa,CAAA,EACvD,CAAA,EACI,CAAA;IACZ,iBAAA,GAAA,kBAAA,IAAA,CAACL,iBAAAA,MAAM,MAAP;KAAY,SAAQ;KAClB,UAAA,iBAAA,GAAA,kBAAA,KAAA,CAAA,0CAAA,MAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAA,0CAAA,SAAA,EAAA,iBACU;MACN,MAAM,QAAQ,UAAU;OACtB,gBAAgB;OAChB,IAAI;OACJ,aAAa;MACf,CAAC;MACD,OACE,iBAAA,GAAA,kBAAA,IAAA,CAACM,qBAAAA,YAAD;OAAmB;OACjB,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACC,sBAAAA,oBAAD,CAAqB,CAAA;MACX,CAAA;KAEhB,EAAA,CAAG,EACiB,CAAA,GACtB,iBAAA,GAAA,kBAAA,KAAA,CAAA,mCAAA,SAAA;MAAsB,MAAK;MAAI,OAAM;MAArC,UAAA;OACE,iBAAA,GAAA,kBAAA,IAAA,CAAA,mCAAA,MAAA;QAAmB,gBAAgB,eAAe,IAAI;QACpD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACjB,6BAAAA,aAAD;SACE,gBAAe;SACf,IAAG;SACH,aAAY;QACb,CAAA;OACgB,CAAA;OACnB,iBAAA,GAAA,kBAAA,IAAA,CAAA,mCAAA,MAAA;QAAmB,UAAU;QAC3B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACA,6BAAAA,aAAD;SACE,gBAAe;SACf,IAAG;SACH,aAAY;QACb,CAAA;OACgB,CAAA;OACnB,iBAAA,GAAA,kBAAA,IAAA,CAAA,0CAAA,WAAA,CAAyB,CAAA;OACzB,iBAAA,GAAA,kBAAA,IAAA,CAAA,mCAAA,MAAA;QACE,SAAQ;QACR,gBAAgB,oBAAoB,IAAI;QAExC,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACA,6BAAAA,aAAD;SACE,gBAAe;SACf,IAAG;SACH,aAAY;QACb,CAAA;OACgB,CAAA;MACC;KACL,CAAA,CAAA,EAAA,CAAA;IACT,CAAA;GACH;;CACX,EAAA,CAAA;AAEN;AAEA,SAAgB,iBAAiB,EAC/B,SACA,WACA,gBAKC;CACD,MAAM,EAAE,aAAakB,gDAAAA,sBAAsB;CAC3C,MAAM,aAAaC,oCAAAA,gBAAgB,OAAO;CAE1C,MAAM,gBAAgB,CAAC,EAAE,WAAW,UAAU,WAAW;CACzD,MAAM,kBAAkB,CAAC,CAAC,WAAW;CACrC,MAAM,cAAc,CAAC,CAAC,WAAW;CAEjC,OACE,iBAAA,GAAA,kBAAA,KAAA,CAACtB,iBAAAA,MAAD;EAAM,WAAU;EAAS,OAAM;EAAU,KAAI;EAA7C,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAAC,wBAAD,EAAmC,UAAY,CAAA,GAC9C,QAAQ,KAAK,WAAW,IACvB,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD,CAAgB,CAAA,IAEhB,iBAAA,GAAA,kBAAA,KAAA,CAAA,kBAAA,UAAA,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAA,CAACa,iBAAAA,MAAM,MAAP;GAAY,SAAQ;GAAQ,MAAK;GAAjC,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,iBAAAA,MAAM,QAAP,EAAA,UACE,iBAAA,GAAA,kBAAA,KAAA,CAACA,iBAAAA,MAAM,KAAP,EAAA,UAAA;IACE,iBAAA,GAAA,kBAAA,IAAA,CAACA,iBAAAA,MAAM,kBAAP;KAAwB,OAAO,eAAe,QAAQ;KACpD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACV,6BAAAA,aAAD;MACE,gBAAe;MACf,IAAG;MACH,aAAY;KACb,CAAA;IACqB,CAAA;IACxB,iBAAA,GAAA,kBAAA,IAAA,CAACU,iBAAAA,MAAM,kBAAP;KAAwB,OAAO,eAAe,QAAQ;KACpD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACV,6BAAAA,aAAD;MACE,gBAAe;MACf,IAAG;MACH,aAAY;KACb,CAAA;IACqB,CAAA;IACvB,eACC,iBAAA,GAAA,kBAAA,IAAA,CAACU,iBAAAA,MAAM,kBAAP;KAAwB,OAAM;KAC5B,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACV,6BAAAA,aAAD;MACE,gBAAe;MACf,IAAG;MACH,aAAY;KACb,CAAA;IACqB,CAAA,IACtB;IACJ,iBAAA,GAAA,kBAAA,IAAA,CAACU,iBAAAA,MAAM,kBAAP;KAAwB,OAAO,eAAe,QAAQ;KACpD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACV,6BAAAA,aAAD;MACE,gBAAe;MACf,IAAG;MACH,aAAY;KACb,CAAA;IACqB,CAAA;IACxB,iBAAA,GAAA,kBAAA,IAAA,CAACU,iBAAAA,MAAM,kBAAP;KAAwB,OAAO,eAAe,QAAQ;KACpD,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACV,6BAAAA,aAAD;MACE,gBAAe;MACf,IAAG;MACH,aAAY;KACb,CAAA;IACqB,CAAA;IACxB,iBAAA,GAAA,kBAAA,IAAA,CAACU,iBAAAA,MAAM,kBAAP,EAAwB,OAAM,OAAQ,CAAA;GAC7B,EAAA,CAAA,EACC,CAAA,GACd,iBAAA,GAAA,kBAAA,IAAA,CAACA,iBAAAA,MAAM,MAAP,EAAA,UACG,QAAQ,KAAK,KAAK,WACjB,iBAAA,GAAA,kBAAA,IAAA,CAAC,eAAD;IAEU;IACM;GACf,GAHM,OAAO,EAGb,CACF,EACS,CAAA,CACF;EACX,CAAA,GAAA,iBACC,iBAAA,GAAA,kBAAA,KAAA,CAACb,iBAAAA,MAAD;GAAM,KAAI;GAAI,SAAQ;GAAtB,UAAA,CACE,iBAAA,GAAA,kBAAA,IAAA,CAACI,qBAAAA,QAAD;IACE,SAAQ;IACR,UAAU,CAAC;IACX,MAAK;IACL,eACE,SAAS;KACP,MAAM;KACN,YAAY;MAAE,QAAQ;MAAM,OAAO,WAAW;KAAM;IACtD,CAAC;IAGH,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACD,6BAAAA,aAAD;KACE,gBAAe;KACf,IAAG;KACH,aAAY;IACb,CAAA;GACK,CAAA,GACR,iBAAA,GAAA,kBAAA,IAAA,CAACC,qBAAAA,QAAD;IACE,SAAQ;IACR,UAAU,CAAC;IACX,MAAK;IACL,eACE,SAAS;KACP,MAAM;KACN,YAAY;MAAE,QAAQ,WAAW;MAAQ,OAAO;KAAK;IACvD,CAAC;IAGH,UAAA,iBAAA,GAAA,kBAAA,IAAA,CAACD,6BAAAA,aAAD;KACE,gBAAe;KACf,IAAG;KACH,aAAY;IACb,CAAA;GACK,CAAA,CACJ;EAER,CAAA,CAAA,EAAA,CAAA,CAEA;;AAEV"}
1
+ {"version":3,"file":"user-api-keys-table.cjs","names":["useUserApiKeysSearchContext","Flex","MagnifyingGlassIcon","Heading","Translation","Button","UserApiKeysSearch","CreateUserApiKeyButton","useState","useExpireUserApiKey","useTranslation","RevokeUserApiKeyDialog","UserApiKeyDetailsDialog","EditApiKeyExpirationDialog","Table","Text","Code","getUserApiKeyCreatedByLabel","RelativeTime","ApiKeyExpiresOn","IconButton","DotsHorizontalIcon","useUserApiKeysContext","getListMetadata"],"sources":["../../../../src/lib/user-api-keys/user-api-keys-table.tsx"],"sourcesContent":["import { Flex, Text, Table, Code, Heading } from \"@radix-ui/themes\";\nimport { Button, DropdownMenu, IconButton } from \"../elements.js\";\nimport { DotsHorizontalIcon, MagnifyingGlassIcon } from \"@radix-ui/react-icons\";\nimport { useState } from \"react\";\nimport { RevokeUserApiKeyDialog } from \"./revoke-user-api-key-dialog.js\";\nimport { CreateUserApiKeyButton } from \"./create-user-api-key.js\";\nimport { UserApiKeyDetailsDialog } from \"./user-api-key-details-dialog.js\";\nimport { RelativeTime } from \"../api-keys/relative-time.js\";\nimport type {\n ListUserApiKeysResponse,\n ListUserApiKeysResponseData,\n} from \"../api/user-api-key.js\";\nimport { useUserApiKeysContext } from \"./user-api-keys-context.js\";\nimport { useUserApiKeysSearchContext } from \"./user-api-keys-search-provider.js\";\nimport { UserApiKeysSearch } from \"./user-api-keys-search.js\";\nimport { Translation } from \"../i18n/translation.js\";\nimport { useTranslation } from \"../i18n/use-translation.js\";\nimport { getListMetadata } from \"../utils/get-list-metadata.js\";\nimport {\n ApiKeyExpiresOn,\n EditApiKeyExpirationDialog,\n} from \"../api-keys/api-key-expiration.js\";\nimport { useExpireUserApiKey } from \"../api/user-api-key.js\";\nimport { getUserApiKeyCreatedByLabel } from \"./user-api-key-owner.js\";\n\nfunction NoUserApiKeys() {\n const { clearSearch } = useUserApiKeysSearchContext();\n return (\n <Flex p=\"6\" gap=\"4\" justify=\"center\" align=\"center\" direction=\"column\">\n <Flex direction=\"column\" gap=\"1\" maxWidth=\"420px\" align=\"center\">\n <MagnifyingGlassIcon\n style={{ color: \"var(--gray-9)\" }}\n width=\"32px\"\n height=\"32px\"\n />\n <Heading size=\"5\" mb=\"1\" wrap=\"balance\" as=\"h3\">\n <Translation\n defaultMessage=\"No API keys match your search\"\n id=\"cKitHb\"\n description=\"Empty state message when no API keys match search\"\n />\n </Heading>\n </Flex>\n\n <Button variant=\"secondary\" onClick={clearSearch}>\n <Translation\n defaultMessage=\"Clear search\"\n id=\"jTupOW\"\n description=\"Button to clear API key search filters\"\n />\n </Button>\n </Flex>\n );\n}\n\nfunction UserApiKeysTableHeader({ canCreate }: { canCreate: boolean }) {\n return (\n <Flex justify=\"between\" align=\"center\">\n <UserApiKeysSearch\n name=\"user-api-keys-widget-search\"\n style={{ width: \"390px\" }}\n />\n <CreateUserApiKeyButton canCreate={canCreate} />\n </Flex>\n );\n}\n\ninterface UserApiKeyRowProps {\n apiKey: ListUserApiKeysResponseData;\n canManageAll: boolean;\n}\n\nfunction UserApiKeyRow({ apiKey, canManageAll }: UserApiKeyRowProps) {\n const [revokeDialogOpen, setRevokeDialogOpen] = useState(false);\n const [detailsOpen, setDetailsOpen] = useState(false);\n const [editExpirationOpen, setEditExpirationOpen] = useState(false);\n const {\n mutate: expireUserApiKey,\n error: expireError,\n isPending: expirePending,\n isSuccess: expireSuccess,\n reset: resetExpireUserApiKey,\n } = useExpireUserApiKey();\n const translate = useTranslation();\n const openEditExpirationDialog = () => {\n resetExpireUserApiKey();\n setEditExpirationOpen(true);\n };\n return (\n <>\n <RevokeUserApiKeyDialog\n key={`${revokeDialogOpen}`}\n open={revokeDialogOpen}\n onOpenChange={setRevokeDialogOpen}\n apiKey={apiKey}\n />\n <UserApiKeyDetailsDialog\n open={detailsOpen}\n onOpenChange={setDetailsOpen}\n apiKey={apiKey}\n permissions={apiKey.permissions}\n />\n <EditApiKeyExpirationDialog\n open={editExpirationOpen}\n onOpenChange={(open) => {\n if (open) {\n resetExpireUserApiKey();\n }\n setEditExpirationOpen(open);\n }}\n apiKeyName={apiKey.name}\n expiresAt={apiKey.expiresAt}\n error={expireError}\n isPending={expirePending}\n isSuccess={expireSuccess}\n onReset={resetExpireUserApiKey}\n onSave={(expiresAt) =>\n expireUserApiKey(\n { apiKeyId: apiKey.id, expiresAt },\n { onSuccess: () => setEditExpirationOpen(false) },\n )\n }\n />\n <Table.Row align=\"center\">\n <Table.Cell>\n <Text>{apiKey.name}</Text>\n </Table.Cell>\n <Table.Cell>\n <Code color=\"gray\">{apiKey.obfuscatedValue}</Code>\n </Table.Cell>\n {canManageAll ? (\n <Table.Cell>\n <Text>{getUserApiKeyCreatedByLabel(apiKey)}</Text>\n </Table.Cell>\n ) : null}\n <Table.Cell>\n <Text\n style={apiKey.lastUsedAt ? undefined : { color: \"var(--gray-10)\" }}\n >\n <RelativeTime\n date={apiKey.lastUsedAt ? new Date(apiKey.lastUsedAt) : undefined}\n />\n </Text>\n </Table.Cell>\n <Table.Cell>\n <Text>\n <ApiKeyExpiresOn expiresAt={apiKey.expiresAt} includeTime />\n </Text>\n </Table.Cell>\n <Table.Cell justify=\"end\">\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n {(() => {\n const title = translate({\n defaultMessage: \"API key actions\",\n id: \"RIBfYe\",\n description: \"Tooltip for API key actions menu button\",\n });\n return (\n <IconButton title={title}>\n <DotsHorizontalIcon />\n </IconButton>\n );\n })()}\n </DropdownMenu.Trigger>\n <DropdownMenu.Content size=\"2\" align=\"end\">\n <DropdownMenu.Item onSelect={() => setDetailsOpen(true)}>\n <Translation\n defaultMessage=\"View details\"\n id=\"VGKbbj\"\n description=\"Menu item to view API key details\"\n />\n </DropdownMenu.Item>\n <DropdownMenu.Item onSelect={openEditExpirationDialog}>\n <Translation\n defaultMessage=\"Edit expiration\"\n id=\"fONrTk\"\n description=\"Menu item to edit an API key expiration\"\n />\n </DropdownMenu.Item>\n <DropdownMenu.Separator />\n <DropdownMenu.Item\n variant=\"destructive\"\n onSelect={() => setRevokeDialogOpen(true)}\n >\n <Translation\n defaultMessage=\"Revoke key\"\n id=\"KZIJPP\"\n description=\"Menu item to revoke an API key\"\n />\n </DropdownMenu.Item>\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n </Table.Cell>\n </Table.Row>\n </>\n );\n}\n\nexport function UserApiKeysTable({\n apiKeys,\n canCreate,\n canManageAll,\n}: {\n apiKeys: ListUserApiKeysResponse;\n canCreate: boolean;\n canManageAll: boolean;\n}) {\n const { dispatch } = useUserApiKeysContext();\n const pagination = getListMetadata(apiKeys);\n\n const hasPagination = !!(pagination.before || pagination.after);\n const hasPreviousPage = !!pagination.before;\n const hasNextPage = !!pagination.after;\n\n return (\n <Flex direction=\"column\" align=\"stretch\" gap=\"3\">\n <UserApiKeysTableHeader canCreate={canCreate} />\n {apiKeys.data.length === 0 ? (\n <NoUserApiKeys />\n ) : (\n <>\n <Table.Root variant=\"ghost\" size=\"2\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeaderCell width={canManageAll ? \"20%\" : \"25%\"}>\n <Translation\n defaultMessage=\"Name\"\n id=\"VYbVXN\"\n description=\"Table column header for API key name\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width={canManageAll ? \"20%\" : \"25%\"}>\n <Translation\n defaultMessage=\"Secret key\"\n id=\"H5k7GB\"\n description=\"Table column header for API key secret value\"\n />\n </Table.ColumnHeaderCell>\n {canManageAll ? (\n <Table.ColumnHeaderCell width=\"20%\">\n <Translation\n defaultMessage=\"Created by\"\n id=\"en10bZ\"\n description=\"Table column header for API key creator\"\n />\n </Table.ColumnHeaderCell>\n ) : null}\n <Table.ColumnHeaderCell width={canManageAll ? \"20%\" : \"25%\"}>\n <Translation\n defaultMessage=\"Last used\"\n id=\"E46t3O\"\n description=\"Table column header for API key last used timestamp\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width={canManageAll ? \"20%\" : \"25%\"}>\n <Translation\n defaultMessage=\"Expires\"\n id=\"3q8EjA\"\n description=\"Table column header for API key expiration date\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"28px\" />\n </Table.Row>\n </Table.Header>\n <Table.Body>\n {apiKeys.data.map((apiKey) => (\n <UserApiKeyRow\n key={apiKey.id}\n apiKey={apiKey}\n canManageAll={canManageAll}\n />\n ))}\n </Table.Body>\n </Table.Root>\n {hasPagination && (\n <Flex gap=\"2\" justify=\"end\">\n <Button\n variant=\"secondary\"\n disabled={!hasPreviousPage}\n size=\"1\"\n onClick={() =>\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: pagination.before, after: null },\n })\n }\n >\n <Translation\n defaultMessage=\"Previous\"\n id=\"f7TUj0\"\n description=\"Button to navigate to previous page of API keys\"\n />\n </Button>\n <Button\n variant=\"secondary\"\n disabled={!hasNextPage}\n size=\"1\"\n onClick={() =>\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: null, after: pagination.after },\n })\n }\n >\n <Translation\n defaultMessage=\"Next\"\n id=\"L2EBxV\"\n description=\"Button to navigate to next page of API keys\"\n />\n </Button>\n </Flex>\n )}\n </>\n )}\n </Flex>\n );\n}\n"],"mappings":"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"}
@@ -206,14 +206,14 @@ const UsersManagement = ({ userData, rolesData, isPending, disableRolesFilter, .
206
206
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_lib_elements.Button, {
207
207
  variant: "secondary",
208
208
  size: "1",
209
- disabled: !pagination.after || isPending || void 0,
209
+ disabled: !pagination.before || isPending || void 0,
210
210
  loading: deferredLoading,
211
211
  onClick: () => {
212
- if (pagination.after) dispatch({
212
+ if (pagination.before) dispatch({
213
213
  type: "SET_PAGINATION",
214
214
  pagination: {
215
- after: pagination.after,
216
- before: null
215
+ before: pagination.before,
216
+ after: null
217
217
  }
218
218
  });
219
219
  },
@@ -225,14 +225,14 @@ const UsersManagement = ({ userData, rolesData, isPending, disableRolesFilter, .
225
225
  }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_lib_elements.Button, {
226
226
  variant: "secondary",
227
227
  size: "1",
228
- disabled: !pagination.before || isPending || void 0,
228
+ disabled: !pagination.after || isPending || void 0,
229
229
  loading: deferredLoading,
230
230
  onClick: () => {
231
- if (pagination.before) dispatch({
231
+ if (pagination.after) dispatch({
232
232
  type: "SET_PAGINATION",
233
233
  pagination: {
234
- before: pagination.before,
235
- after: null
234
+ after: pagination.after,
235
+ before: null
236
236
  }
237
237
  });
238
238
  },
@@ -1 +1 @@
1
- {"version":3,"file":"users-management.cjs","names":["useIsHydrated","getListMetadata","useUsersManagementContext","useTranslation","React","SearchProvider","Flex","Grid","Box","UsersSearch","UsersFilter","InviteUserDialog","Button","Translation","Table","getBestName","Avatar","UserActionsDropdown","IconButton","DotsHorizontalIcon","Skeleton","TextField","GenericError","Badge","VisuallyHidden","Separator","useLocale","useComparativeReadableDate","Text","useSearchContext","Tooltip","getWidgetDomProps"],"sources":["../../../src/lib/users-management.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Box,\n Flex,\n Grid,\n Separator,\n Table,\n Tooltip,\n Text,\n type TextProps,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport {\n Avatar,\n Badge,\n IconButton,\n Button,\n Select,\n Skeleton,\n TextField,\n} from \"./elements.js\";\nimport { InviteUserDialog } from \"./invite-user-dialog.js\";\nimport { SearchProvider, useSearchContext } from \"./search-provider.js\";\nimport { useIsHydrated } from \"./use-is-hydrated.js\";\nimport { UserActionsDropdown } from \"./user-actions-dropdown.js\";\nimport { UsersFilter } from \"./users-filter.js\";\nimport { UsersSearch } from \"./users-search.js\";\nimport { getBestName } from \"./utils/get-best-name.js\";\nimport { getWidgetDomProps } from \"./utils/widget-dom-props.js\";\nimport { getListMetadata } from \"./utils/get-list-metadata.js\";\nimport { WidgetRootState, type WidgetRootDomProps } from \"./widget-types.js\";\nimport { USER_ROW_LIMIT } from \"./constants.js\";\nimport { useUsersManagementContext } from \"./users-management-context.js\";\nimport type { Member, MembersQueryResult, RolesAndConfig } from \"./api/user.js\";\nimport { GenericError } from \"./generic-error.js\";\nimport { DotsHorizontalIcon } from \"@radix-ui/react-icons\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\nimport { useLocale } from \"./i18n/use-locale.js\";\nimport { useComparativeReadableDate } from \"../use-comparative-readable-date.js\";\n\ninterface UsersManagementProps extends WidgetRootDomProps {\n rolesData: RolesAndConfig;\n userData: MembersQueryResult;\n disableRolesFilter?: boolean;\n // When the users list is loading new users\n isPending: boolean;\n}\n\nconst UsersManagement: React.FC<UsersManagementProps> = ({\n userData,\n rolesData,\n isPending,\n disableRolesFilter,\n ...domProps\n}) => {\n const users = userData?.data ?? [];\n const usersCount = users?.length ?? 0;\n const isHydrated = useIsHydrated();\n const pagination = getListMetadata(userData);\n\n const { dispatch } = useUsersManagementContext();\n const isMultipleRolesEnabled = rolesData.multipleRolesEnabled;\n const translate = useTranslation();\n\n // we only want to show the loading indicator for some buttons if the request\n // is still pending after 500ms. If the request is fast enough the indicator\n // is a bit jarring.\n const [deferredLoading, setDeferredLoading] = React.useState(false);\n React.useEffect(() => {\n if (isPending) {\n const timeoutId = window.setTimeout(() => {\n setDeferredLoading(true);\n }, 500);\n return () => {\n window.clearTimeout(timeoutId);\n };\n } else {\n // TODO: Fix this\n // oxlint-disable-next-line react/set-state-in-effect\n setDeferredLoading(false);\n }\n }, [isPending]);\n\n const showPagination = !!(pagination.before || pagination.after);\n\n return (\n <SearchProvider>\n <Flex\n direction=\"column\"\n gap=\"3\"\n {...getWidgetRootDomProps(\"resolved\", domProps)}\n >\n <Grid columns=\"1fr auto\" gap=\"2\">\n <Flex gap=\"2\" align=\"center\">\n <Box flexBasis=\"380px\" flexGrow=\"0\" flexShrink=\"1\">\n <UsersSearch />\n </Box>\n <Box flexGrow=\"0\" flexShrink=\"0\">\n <UsersFilter\n roles={rolesData.roles}\n disabled={disableRolesFilter}\n />\n </Box>\n </Flex>\n <Box flexGrow=\"0\" flexShrink=\"0\" style={{ placeSelf: \"flex-end\" }}>\n <InviteUserDialog>\n <Button>\n <Translation\n defaultMessage=\"Invite user\"\n id=\"NBXpRj\"\n description=\"Button text to invite a new user to the organization\"\n />\n </Button>\n </InviteUserDialog>\n </Box>\n </Grid>\n <Table.Root variant=\"ghost\" size=\"1\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeaderCell width=\"260px\">\n <Translation\n defaultMessage=\"User\"\n id=\"BBh86k\"\n description=\"Column header for user information in the users table\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"100px\">\n {isMultipleRolesEnabled ? (\n <Translation\n defaultMessage=\"Roles\"\n id=\"A1DuWM\"\n description=\"Column header for user roles when multiple roles are enabled\"\n />\n ) : (\n <Translation\n defaultMessage=\"Role\"\n id=\"nQbe+Y\"\n description=\"Column header for user role when only single role is allowed\"\n />\n )}\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"140px\">\n <Translation\n defaultMessage=\"Last active\"\n id=\"oOwLGt\"\n description=\"Column header showing when users were last active\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"28px\" />\n </Table.Row>\n </Table.Header>\n\n <Table.Body\n style={{\n transition: `opacity 0.2s ease-out ${isPending ? \"0.2s\" : \"0s\"}`,\n opacity: isPending && usersCount > 0 ? 0.5 : 1,\n }}\n >\n {users.length > 0 ? (\n users.map((user) => {\n const userDisplayName = getBestName(user);\n const dimText =\n user.status === \"InviteRevoked\" ||\n user.status === \"InviteExpired\";\n return (\n <Table.Row key={user.id} align=\"center\">\n <Table.RowHeaderCell>\n <Flex\n align=\"center\"\n gap=\"3\"\n overflow=\"hidden\"\n height=\"var(--space-7)\"\n >\n <Avatar\n size=\"2\"\n fallback={<FallbackUserIcon />}\n src={user.profilePictureUrl ?? undefined}\n dim={dimText}\n />\n\n {userDisplayName ? (\n <Flex\n direction=\"column\"\n align=\"start\"\n height=\"var(--space-7)\"\n justify=\"center\"\n overflow=\"hidden\"\n >\n <Flex gap=\"2\" align=\"center\" minWidth=\"0\">\n <TableCellText dim={dimText}>\n {userDisplayName}\n </TableCellText>\n <UserBadge user={user} />\n </Flex>\n <TableCellText\n level=\"secondary\"\n title={user.email}\n dim={dimText}\n >\n {user.email}\n </TableCellText>\n </Flex>\n ) : (\n <Flex gap=\"2\" align=\"center\" minWidth=\"0\">\n <TableCellText dim={dimText} title={user.email}>\n {user.email}\n </TableCellText>\n <UserBadge user={user} />\n </Flex>\n )}\n </Flex>\n </Table.RowHeaderCell>\n <Table.Cell>\n <UserRolesCellContent\n user={user}\n isMultipleRolesEnabled={isMultipleRolesEnabled}\n dimText={dimText}\n />\n </Table.Cell>\n <Table.Cell>\n <LastActive user={user} isHydrated={isHydrated} />\n </Table.Cell>\n <Table.Cell justify=\"end\">\n <UserActionsDropdown user={user}>\n <IconButton\n title={translate({\n defaultMessage: \"User actions\",\n id: \"1nsmNS\",\n description:\n \"Button tooltip for opening user actions menu\",\n })}\n >\n <DotsHorizontalIcon />\n </IconButton>\n </UserActionsDropdown>\n </Table.Cell>\n </Table.Row>\n );\n })\n ) : (\n <Table.Row align=\"center\">\n <Table.Cell colSpan={4}>\n <UsersManagementEmptyState isPending={isPending} />\n </Table.Cell>\n </Table.Row>\n )}\n </Table.Body>\n </Table.Root>\n\n {showPagination ? (\n <Flex gap=\"2\" justify=\"end\">\n <Button\n variant=\"secondary\"\n size=\"1\"\n disabled={!pagination.after || isPending || undefined}\n loading={deferredLoading}\n onClick={() => {\n if (pagination.after) {\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { after: pagination.after, before: null },\n });\n }\n }}\n >\n <Translation\n defaultMessage=\"Previous\"\n id=\"910Q6b\"\n description=\"Button text to navigate to the previous page of users\"\n />\n </Button>\n <Button\n variant=\"secondary\"\n size=\"1\"\n disabled={!pagination.before || isPending || undefined}\n loading={deferredLoading}\n onClick={() => {\n if (pagination.before) {\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: pagination.before, after: null },\n });\n }\n }}\n >\n <Translation\n defaultMessage=\"Next\"\n id=\"UlAY08\"\n description=\"Button text to navigate to the next page of users\"\n />\n </Button>\n </Flex>\n ) : null}\n </Flex>\n </SearchProvider>\n );\n};\n\ninterface UsersManagementLoadingProps extends WidgetRootDomProps {}\n\nconst UsersManagementLoading: React.FC<UsersManagementLoadingProps> = (\n props,\n) => {\n const translate = useTranslation();\n const placeholderText = (\n <Translation\n defaultMessage=\"All\"\n id=\"l/Do9/\"\n description=\"Filter option to show all users\"\n />\n );\n return (\n <Flex\n direction=\"column\"\n gap=\"3\"\n {...getWidgetRootDomProps(\"loading\", props)}\n >\n <Grid columns=\"1fr auto\" gap=\"2\">\n <Flex gap=\"2\" align=\"center\">\n <Skeleton loading>\n <Box flexBasis=\"380px\" flexGrow=\"0\" flexShrink=\"1\">\n <TextField\n disabled\n aria-label={translate({\n defaultMessage: \"User search\",\n id: \"lzPOKv\",\n description: \"Label for the user search input field\",\n })}\n />\n </Box>\n </Skeleton>\n <Skeleton loading>\n <Box flexGrow=\"0\" flexShrink=\"0\">\n <Select.Root disabled value=\"all\" onValueChange={() => void 0}>\n <Select.Trigger>{placeholderText}</Select.Trigger>\n <Select.Content>\n <Select.Item value=\"all\">{placeholderText}</Select.Item>\n </Select.Content>\n </Select.Root>\n </Box>\n </Skeleton>\n </Flex>\n <Skeleton loading>\n <Box flexGrow=\"0\" flexShrink=\"0\" style={{ placeSelf: \"flex-end\" }}>\n <Button disabled>\n <Translation\n defaultMessage=\"Invite user\"\n id=\"NBXpRj\"\n description=\"Button text to invite a new user to the organization\"\n />\n </Button>\n </Box>\n </Skeleton>\n </Grid>\n <Table.Root variant=\"ghost\" size=\"1\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeaderCell width=\"260px\">\n <Skeleton loading>\n <Translation\n defaultMessage=\"User\"\n id=\"BBh86k\"\n description=\"Column header for user information in the users table\"\n />\n </Skeleton>\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"100px\">\n <Skeleton>\n <Translation\n defaultMessage=\"Role\"\n id=\"FK7mP4\"\n description=\"Column header for user role\"\n />\n </Skeleton>\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"140px\">\n <Skeleton>\n <Translation\n defaultMessage=\"Last active\"\n id=\"oOwLGt\"\n description=\"Column header showing when users were last active\"\n />\n </Skeleton>\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"28px\" />\n </Table.Row>\n </Table.Header>\n\n <Table.Body>\n {Array.from({ length: USER_ROW_LIMIT }, (_, index) => (\n <Table.Row key={index} align=\"center\">\n <Table.RowHeaderCell>\n <Flex align=\"center\" gap=\"3\">\n <Skeleton>\n <Avatar size=\"2\" fallback=\"F\" />\n </Skeleton>\n\n <Flex\n direction=\"column\"\n height=\"var(--space-7)\"\n justify=\"center\"\n >\n <Skeleton width=\"180px\" height=\"var(--space-4)\" />\n <Skeleton width=\"90px\" height=\"var(--space-3)\" mt=\"1\" />\n </Flex>\n </Flex>\n </Table.RowHeaderCell>\n <Table.Cell>\n <Flex wrap=\"wrap\" gap=\"1\">\n <Skeleton width=\"75px\" height=\"var(--space-4)\" />\n </Flex>\n </Table.Cell>\n <Table.Cell>\n <Skeleton width=\"120px\" height=\"var(--space-4)\" />\n </Table.Cell>\n <Table.Cell justify=\"end\" />\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n\n <Flex gap=\"2\" justify=\"end\">\n <Skeleton loading>\n <Button disabled variant=\"secondary\" size=\"1\">\n <Translation\n defaultMessage=\"Previous\"\n id=\"910Q6b\"\n description=\"Button text to navigate to the previous page of users\"\n />\n </Button>\n </Skeleton>\n <Skeleton loading>\n <Button disabled variant=\"secondary\" size=\"1\">\n <Translation\n defaultMessage=\"Next\"\n id=\"UlAY08\"\n description=\"Button text to navigate to the next page of users\"\n />\n </Button>\n </Skeleton>\n </Flex>\n </Flex>\n );\n};\n\ninterface UsersManagementErrorProps extends WidgetRootDomProps {\n error: unknown;\n}\n\nconst UsersManagementError: React.FC<UsersManagementErrorProps> = ({\n error,\n ...domProps\n}) => {\n return (\n <GenericError\n error={error}\n minHeight=\"676px\"\n {...getWidgetRootDomProps(\"error\", domProps)}\n />\n );\n};\n\nfunction UserBadge({ user }: { user: Member }) {\n if (user.isLoggedInUser) {\n return (\n <Badge color=\"gray\" style={{ userSelect: \"none\" }}>\n <Translation\n defaultMessage=\"You\"\n id=\"ER1Vmv\"\n description=\"Badge indicating the current logged-in user\"\n />\n </Badge>\n );\n }\n if (user.status === \"Invited\") {\n return (\n <Badge color=\"amber\" style={{ userSelect: \"none\" }}>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"Status: \"\n id=\"E2o/+H\"\n description=\"Prefix for status indicator in screen reader\"\n />\n </VisuallyHidden>\n <Translation\n defaultMessage=\"Invited\"\n id=\"byIkUu\"\n description=\"Badge status indicating user has been invited but not yet accepted\"\n />\n </Badge>\n );\n }\n if (user.status === \"InviteExpired\") {\n return (\n <Badge color=\"red\" style={{ userSelect: \"none\" }}>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"Status: Invite \"\n id=\"BWvbwY\"\n description=\"Prefix for invite status indicator in screen reader\"\n />\n </VisuallyHidden>\n <Translation\n defaultMessage=\"Expired\"\n id=\"+0sQaN\"\n description=\"Badge status indicating user invitation has expired\"\n />\n </Badge>\n );\n }\n if (user.status === \"InviteRevoked\") {\n return (\n <Badge color=\"red\" style={{ userSelect: \"none\" }}>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"Status: Invite \"\n id=\"BWvbwY\"\n description=\"Prefix for invite status indicator in screen reader\"\n />\n </VisuallyHidden>\n <Translation\n defaultMessage=\"Revoked\"\n id=\"NNBv+r\"\n description=\"Badge status indicating user invitation has been revoked\"\n />\n </Badge>\n );\n }\n return null;\n}\n\ninterface LastActiveProps {\n user: Member;\n isHydrated: boolean;\n dim?: boolean;\n}\n\nfunction LastActive(props: LastActiveProps) {\n if (!props.user.lastActivityAt) {\n return (\n <>\n <VisuallyHidden>\n {props.user.status === \"Active\" ? (\n <Translation\n defaultMessage=\"Never\"\n id=\"0duvF4\"\n description=\"Screen reader text indicating user has never been active\"\n />\n ) : (\n <Translation\n defaultMessage=\"Not active\"\n id=\"hd2+kk\"\n description=\"Screen reader text indicating user is not active\"\n />\n )}\n </VisuallyHidden>\n <Separator />\n </>\n );\n }\n return <LastActiveImpl {...props} date={props.user.lastActivityAt} />;\n}\n\nfunction LastActiveImpl({\n date,\n isHydrated,\n dim,\n}: LastActiveProps & { date: string }) {\n const locale = useLocale();\n\n const lastActiveDate = new Date(date);\n const lastActiveDateTime = lastActiveDate.toLocaleTimeString(locale, {\n // hard-coded timezone before hydration to prevent server/client mismatch\n timeZone: isHydrated ? undefined : \"America/Los_Angeles\",\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n });\n\n const lastActiveDisplay = useComparativeReadableDate({\n date: lastActiveDate,\n });\n\n // handle cases where the DB might return an invalid date string\n if (lastActiveDisplay === \"Invalid Date\") {\n return (\n <>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"Unknown\"\n id=\"UUigrK\"\n description=\"Screen reader text indicating last active date is unknown\"\n />\n </VisuallyHidden>\n <Separator />\n </>\n );\n }\n\n return (\n <TableCellText asChild dim={dim}>\n <time dateTime={date} title={lastActiveDateTime}>\n {lastActiveDisplay}\n </time>\n </TableCellText>\n );\n}\n\nconst TableCellText = React.forwardRef<HTMLSpanElement, TableCellTextProps>(\n function TableCellText(\n { children, dim, level = \"primary\", ...props },\n forwardedRef,\n ) {\n return (\n <Text\n ref={forwardedRef}\n color={level === \"secondary\" ? \"gray\" : undefined}\n weight={level === \"secondary\" ? \"regular\" : \"medium\"}\n size={level === \"secondary\" ? \"1\" : \"2\"}\n truncate\n {...props}\n style={\n dim\n ? {\n // TODO: use CSS var instead of hard-coded value for opacity\n opacity: 0.6,\n ...props.style,\n }\n : props.style\n }\n >\n {children}\n </Text>\n );\n },\n);\n\ntype TableCellTextProps = TextProps & {\n level?: \"primary\" | \"secondary\";\n dim?: boolean;\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\nconst UsersManagementEmptyState = ({ isPending }: { isPending: boolean }) => {\n const { clearSearch } = useSearchContext();\n const {\n state: { searchQuery },\n } = useUsersManagementContext();\n\n // When the search query is cleared, the users query is re-fetched which sends\n // us into a pending state. When this happens we want to keep a snapshot of\n // the previous search query while the query is revalidated. We can use this\n // to keep the 'No users found for query' UI in place until re-fetching is\n // complete, otherwise the view flips to 'No users found' very quickly before\n // the full table is shown again.\n const [{ isClearing, lastSearchQuery }, setClearing] = React.useState({\n isClearing: false,\n lastSearchQuery: null as null | string,\n });\n const [wasPending, setWasPending] = React.useState(isPending);\n if (wasPending !== isPending) {\n setWasPending(isPending);\n if (!isPending) {\n setClearing((prev) =>\n prev.isClearing ? { isClearing: false, lastSearchQuery: null } : prev,\n );\n }\n }\n\n if (searchQuery || isClearing) {\n return (\n <Flex align=\"center\" justify=\"center\" py=\"8\" direction=\"column\" gap=\"2\">\n <Text size=\"2\">\n <Translation\n defaultMessage=\"No users found for query '{query}'\"\n id=\"wrEZ8+\"\n description=\"Message shown when no users match the search query\"\n values={{\n query: isClearing ? lastSearchQuery : searchQuery,\n }}\n />\n </Text>\n\n <Button\n variant=\"secondary\"\n size=\"1\"\n onClick={() => {\n setClearing({ isClearing: true, lastSearchQuery: searchQuery });\n clearSearch();\n }}\n loading={isPending}\n >\n <Translation\n defaultMessage=\"Clear search\"\n id=\"Xv3fVI\"\n description=\"Button text to clear the current search query\"\n />\n </Button>\n </Flex>\n );\n }\n\n return (\n <Flex align=\"center\" justify=\"center\" py=\"8\" gap=\"2\">\n <Text size=\"2\">\n <Translation\n defaultMessage=\"No users found\"\n id=\"MQ+LoA\"\n description=\"Message shown when there are no users in the system\"\n />\n </Text>\n </Flex>\n );\n};\n\ninterface UserRolesCellContentProps {\n user: Member;\n isMultipleRolesEnabled: boolean;\n dimText: boolean;\n}\n\nfunction UserRolesCellContent({\n user,\n isMultipleRolesEnabled,\n dimText,\n}: UserRolesCellContentProps) {\n if (!user.roles || user.roles.length === 0) {\n return (\n <>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"No roles assigned\"\n id=\"CVOVB0\"\n description=\"Screen reader text indicating user has no roles assigned\"\n />\n </VisuallyHidden>\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <span aria-hidden style={{ userSelect: \"none\" }}>\n –\n </span>\n </>\n );\n }\n\n if (isMultipleRolesEnabled && user.roles.length > 1) {\n const roleNames = user.roles?.map((role) => role.name).join(\", \");\n return (\n <Tooltip content={roleNames} maxWidth=\"250px\">\n <TableCellText dim={dimText}>\n <Translation\n defaultMessage=\"{count} roles\"\n id=\"lWAmRC\"\n description=\"Shows the number of roles assigned to a user (plural)\"\n values={{ count: user.roles.length }}\n />\n </TableCellText>\n </Tooltip>\n );\n }\n\n return <TableCellText dim={dimText}>{user.roles?.[0]?.name}</TableCellText>;\n}\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getWidgetDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"users-management\",\n widgetState: state,\n });\n}\n\nexport type { UsersManagementLoadingProps, UsersManagementErrorProps };\nexport { UsersManagement, UsersManagementLoading, UsersManagementError };\n"],"mappings":"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"}
1
+ {"version":3,"file":"users-management.cjs","names":["useIsHydrated","getListMetadata","useUsersManagementContext","useTranslation","React","SearchProvider","Flex","Grid","Box","UsersSearch","UsersFilter","InviteUserDialog","Button","Translation","Table","getBestName","Avatar","UserActionsDropdown","IconButton","DotsHorizontalIcon","Skeleton","TextField","GenericError","Badge","VisuallyHidden","Separator","useLocale","useComparativeReadableDate","Text","useSearchContext","Tooltip","getWidgetDomProps"],"sources":["../../../src/lib/users-management.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport {\n Box,\n Flex,\n Grid,\n Separator,\n Table,\n Tooltip,\n Text,\n type TextProps,\n VisuallyHidden,\n} from \"@radix-ui/themes\";\nimport {\n Avatar,\n Badge,\n IconButton,\n Button,\n Select,\n Skeleton,\n TextField,\n} from \"./elements.js\";\nimport { InviteUserDialog } from \"./invite-user-dialog.js\";\nimport { SearchProvider, useSearchContext } from \"./search-provider.js\";\nimport { useIsHydrated } from \"./use-is-hydrated.js\";\nimport { UserActionsDropdown } from \"./user-actions-dropdown.js\";\nimport { UsersFilter } from \"./users-filter.js\";\nimport { UsersSearch } from \"./users-search.js\";\nimport { getBestName } from \"./utils/get-best-name.js\";\nimport { getWidgetDomProps } from \"./utils/widget-dom-props.js\";\nimport { getListMetadata } from \"./utils/get-list-metadata.js\";\nimport { WidgetRootState, type WidgetRootDomProps } from \"./widget-types.js\";\nimport { USER_ROW_LIMIT } from \"./constants.js\";\nimport { useUsersManagementContext } from \"./users-management-context.js\";\nimport type { Member, MembersQueryResult, RolesAndConfig } from \"./api/user.js\";\nimport { GenericError } from \"./generic-error.js\";\nimport { DotsHorizontalIcon } from \"@radix-ui/react-icons\";\nimport { Translation } from \"./i18n/translation.js\";\nimport { useTranslation } from \"./i18n/use-translation.js\";\nimport { useLocale } from \"./i18n/use-locale.js\";\nimport { useComparativeReadableDate } from \"../use-comparative-readable-date.js\";\n\ninterface UsersManagementProps extends WidgetRootDomProps {\n rolesData: RolesAndConfig;\n userData: MembersQueryResult;\n disableRolesFilter?: boolean;\n // When the users list is loading new users\n isPending: boolean;\n}\n\nconst UsersManagement: React.FC<UsersManagementProps> = ({\n userData,\n rolesData,\n isPending,\n disableRolesFilter,\n ...domProps\n}) => {\n const users = userData?.data ?? [];\n const usersCount = users?.length ?? 0;\n const isHydrated = useIsHydrated();\n const pagination = getListMetadata(userData);\n\n const { dispatch } = useUsersManagementContext();\n const isMultipleRolesEnabled = rolesData.multipleRolesEnabled;\n const translate = useTranslation();\n\n // we only want to show the loading indicator for some buttons if the request\n // is still pending after 500ms. If the request is fast enough the indicator\n // is a bit jarring.\n const [deferredLoading, setDeferredLoading] = React.useState(false);\n React.useEffect(() => {\n if (isPending) {\n const timeoutId = window.setTimeout(() => {\n setDeferredLoading(true);\n }, 500);\n return () => {\n window.clearTimeout(timeoutId);\n };\n } else {\n // TODO: Fix this\n // oxlint-disable-next-line react/set-state-in-effect\n setDeferredLoading(false);\n }\n }, [isPending]);\n\n const showPagination = !!(pagination.before || pagination.after);\n\n return (\n <SearchProvider>\n <Flex\n direction=\"column\"\n gap=\"3\"\n {...getWidgetRootDomProps(\"resolved\", domProps)}\n >\n <Grid columns=\"1fr auto\" gap=\"2\">\n <Flex gap=\"2\" align=\"center\">\n <Box flexBasis=\"380px\" flexGrow=\"0\" flexShrink=\"1\">\n <UsersSearch />\n </Box>\n <Box flexGrow=\"0\" flexShrink=\"0\">\n <UsersFilter\n roles={rolesData.roles}\n disabled={disableRolesFilter}\n />\n </Box>\n </Flex>\n <Box flexGrow=\"0\" flexShrink=\"0\" style={{ placeSelf: \"flex-end\" }}>\n <InviteUserDialog>\n <Button>\n <Translation\n defaultMessage=\"Invite user\"\n id=\"NBXpRj\"\n description=\"Button text to invite a new user to the organization\"\n />\n </Button>\n </InviteUserDialog>\n </Box>\n </Grid>\n <Table.Root variant=\"ghost\" size=\"1\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeaderCell width=\"260px\">\n <Translation\n defaultMessage=\"User\"\n id=\"BBh86k\"\n description=\"Column header for user information in the users table\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"100px\">\n {isMultipleRolesEnabled ? (\n <Translation\n defaultMessage=\"Roles\"\n id=\"A1DuWM\"\n description=\"Column header for user roles when multiple roles are enabled\"\n />\n ) : (\n <Translation\n defaultMessage=\"Role\"\n id=\"nQbe+Y\"\n description=\"Column header for user role when only single role is allowed\"\n />\n )}\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"140px\">\n <Translation\n defaultMessage=\"Last active\"\n id=\"oOwLGt\"\n description=\"Column header showing when users were last active\"\n />\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"28px\" />\n </Table.Row>\n </Table.Header>\n\n <Table.Body\n style={{\n transition: `opacity 0.2s ease-out ${isPending ? \"0.2s\" : \"0s\"}`,\n opacity: isPending && usersCount > 0 ? 0.5 : 1,\n }}\n >\n {users.length > 0 ? (\n users.map((user) => {\n const userDisplayName = getBestName(user);\n const dimText =\n user.status === \"InviteRevoked\" ||\n user.status === \"InviteExpired\";\n return (\n <Table.Row key={user.id} align=\"center\">\n <Table.RowHeaderCell>\n <Flex\n align=\"center\"\n gap=\"3\"\n overflow=\"hidden\"\n height=\"var(--space-7)\"\n >\n <Avatar\n size=\"2\"\n fallback={<FallbackUserIcon />}\n src={user.profilePictureUrl ?? undefined}\n dim={dimText}\n />\n\n {userDisplayName ? (\n <Flex\n direction=\"column\"\n align=\"start\"\n height=\"var(--space-7)\"\n justify=\"center\"\n overflow=\"hidden\"\n >\n <Flex gap=\"2\" align=\"center\" minWidth=\"0\">\n <TableCellText dim={dimText}>\n {userDisplayName}\n </TableCellText>\n <UserBadge user={user} />\n </Flex>\n <TableCellText\n level=\"secondary\"\n title={user.email}\n dim={dimText}\n >\n {user.email}\n </TableCellText>\n </Flex>\n ) : (\n <Flex gap=\"2\" align=\"center\" minWidth=\"0\">\n <TableCellText dim={dimText} title={user.email}>\n {user.email}\n </TableCellText>\n <UserBadge user={user} />\n </Flex>\n )}\n </Flex>\n </Table.RowHeaderCell>\n <Table.Cell>\n <UserRolesCellContent\n user={user}\n isMultipleRolesEnabled={isMultipleRolesEnabled}\n dimText={dimText}\n />\n </Table.Cell>\n <Table.Cell>\n <LastActive user={user} isHydrated={isHydrated} />\n </Table.Cell>\n <Table.Cell justify=\"end\">\n <UserActionsDropdown user={user}>\n <IconButton\n title={translate({\n defaultMessage: \"User actions\",\n id: \"1nsmNS\",\n description:\n \"Button tooltip for opening user actions menu\",\n })}\n >\n <DotsHorizontalIcon />\n </IconButton>\n </UserActionsDropdown>\n </Table.Cell>\n </Table.Row>\n );\n })\n ) : (\n <Table.Row align=\"center\">\n <Table.Cell colSpan={4}>\n <UsersManagementEmptyState isPending={isPending} />\n </Table.Cell>\n </Table.Row>\n )}\n </Table.Body>\n </Table.Root>\n\n {showPagination ? (\n <Flex gap=\"2\" justify=\"end\">\n <Button\n variant=\"secondary\"\n size=\"1\"\n disabled={!pagination.before || isPending || undefined}\n loading={deferredLoading}\n onClick={() => {\n if (pagination.before) {\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { before: pagination.before, after: null },\n });\n }\n }}\n >\n <Translation\n defaultMessage=\"Previous\"\n id=\"910Q6b\"\n description=\"Button text to navigate to the previous page of users\"\n />\n </Button>\n <Button\n variant=\"secondary\"\n size=\"1\"\n disabled={!pagination.after || isPending || undefined}\n loading={deferredLoading}\n onClick={() => {\n if (pagination.after) {\n dispatch({\n type: \"SET_PAGINATION\",\n pagination: { after: pagination.after, before: null },\n });\n }\n }}\n >\n <Translation\n defaultMessage=\"Next\"\n id=\"UlAY08\"\n description=\"Button text to navigate to the next page of users\"\n />\n </Button>\n </Flex>\n ) : null}\n </Flex>\n </SearchProvider>\n );\n};\n\ninterface UsersManagementLoadingProps extends WidgetRootDomProps {}\n\nconst UsersManagementLoading: React.FC<UsersManagementLoadingProps> = (\n props,\n) => {\n const translate = useTranslation();\n const placeholderText = (\n <Translation\n defaultMessage=\"All\"\n id=\"l/Do9/\"\n description=\"Filter option to show all users\"\n />\n );\n return (\n <Flex\n direction=\"column\"\n gap=\"3\"\n {...getWidgetRootDomProps(\"loading\", props)}\n >\n <Grid columns=\"1fr auto\" gap=\"2\">\n <Flex gap=\"2\" align=\"center\">\n <Skeleton loading>\n <Box flexBasis=\"380px\" flexGrow=\"0\" flexShrink=\"1\">\n <TextField\n disabled\n aria-label={translate({\n defaultMessage: \"User search\",\n id: \"lzPOKv\",\n description: \"Label for the user search input field\",\n })}\n />\n </Box>\n </Skeleton>\n <Skeleton loading>\n <Box flexGrow=\"0\" flexShrink=\"0\">\n <Select.Root disabled value=\"all\" onValueChange={() => void 0}>\n <Select.Trigger>{placeholderText}</Select.Trigger>\n <Select.Content>\n <Select.Item value=\"all\">{placeholderText}</Select.Item>\n </Select.Content>\n </Select.Root>\n </Box>\n </Skeleton>\n </Flex>\n <Skeleton loading>\n <Box flexGrow=\"0\" flexShrink=\"0\" style={{ placeSelf: \"flex-end\" }}>\n <Button disabled>\n <Translation\n defaultMessage=\"Invite user\"\n id=\"NBXpRj\"\n description=\"Button text to invite a new user to the organization\"\n />\n </Button>\n </Box>\n </Skeleton>\n </Grid>\n <Table.Root variant=\"ghost\" size=\"1\">\n <Table.Header>\n <Table.Row>\n <Table.ColumnHeaderCell width=\"260px\">\n <Skeleton loading>\n <Translation\n defaultMessage=\"User\"\n id=\"BBh86k\"\n description=\"Column header for user information in the users table\"\n />\n </Skeleton>\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"100px\">\n <Skeleton>\n <Translation\n defaultMessage=\"Role\"\n id=\"FK7mP4\"\n description=\"Column header for user role\"\n />\n </Skeleton>\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"140px\">\n <Skeleton>\n <Translation\n defaultMessage=\"Last active\"\n id=\"oOwLGt\"\n description=\"Column header showing when users were last active\"\n />\n </Skeleton>\n </Table.ColumnHeaderCell>\n <Table.ColumnHeaderCell width=\"28px\" />\n </Table.Row>\n </Table.Header>\n\n <Table.Body>\n {Array.from({ length: USER_ROW_LIMIT }, (_, index) => (\n <Table.Row key={index} align=\"center\">\n <Table.RowHeaderCell>\n <Flex align=\"center\" gap=\"3\">\n <Skeleton>\n <Avatar size=\"2\" fallback=\"F\" />\n </Skeleton>\n\n <Flex\n direction=\"column\"\n height=\"var(--space-7)\"\n justify=\"center\"\n >\n <Skeleton width=\"180px\" height=\"var(--space-4)\" />\n <Skeleton width=\"90px\" height=\"var(--space-3)\" mt=\"1\" />\n </Flex>\n </Flex>\n </Table.RowHeaderCell>\n <Table.Cell>\n <Flex wrap=\"wrap\" gap=\"1\">\n <Skeleton width=\"75px\" height=\"var(--space-4)\" />\n </Flex>\n </Table.Cell>\n <Table.Cell>\n <Skeleton width=\"120px\" height=\"var(--space-4)\" />\n </Table.Cell>\n <Table.Cell justify=\"end\" />\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Root>\n\n <Flex gap=\"2\" justify=\"end\">\n <Skeleton loading>\n <Button disabled variant=\"secondary\" size=\"1\">\n <Translation\n defaultMessage=\"Previous\"\n id=\"910Q6b\"\n description=\"Button text to navigate to the previous page of users\"\n />\n </Button>\n </Skeleton>\n <Skeleton loading>\n <Button disabled variant=\"secondary\" size=\"1\">\n <Translation\n defaultMessage=\"Next\"\n id=\"UlAY08\"\n description=\"Button text to navigate to the next page of users\"\n />\n </Button>\n </Skeleton>\n </Flex>\n </Flex>\n );\n};\n\ninterface UsersManagementErrorProps extends WidgetRootDomProps {\n error: unknown;\n}\n\nconst UsersManagementError: React.FC<UsersManagementErrorProps> = ({\n error,\n ...domProps\n}) => {\n return (\n <GenericError\n error={error}\n minHeight=\"676px\"\n {...getWidgetRootDomProps(\"error\", domProps)}\n />\n );\n};\n\nfunction UserBadge({ user }: { user: Member }) {\n if (user.isLoggedInUser) {\n return (\n <Badge color=\"gray\" style={{ userSelect: \"none\" }}>\n <Translation\n defaultMessage=\"You\"\n id=\"ER1Vmv\"\n description=\"Badge indicating the current logged-in user\"\n />\n </Badge>\n );\n }\n if (user.status === \"Invited\") {\n return (\n <Badge color=\"amber\" style={{ userSelect: \"none\" }}>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"Status: \"\n id=\"E2o/+H\"\n description=\"Prefix for status indicator in screen reader\"\n />\n </VisuallyHidden>\n <Translation\n defaultMessage=\"Invited\"\n id=\"byIkUu\"\n description=\"Badge status indicating user has been invited but not yet accepted\"\n />\n </Badge>\n );\n }\n if (user.status === \"InviteExpired\") {\n return (\n <Badge color=\"red\" style={{ userSelect: \"none\" }}>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"Status: Invite \"\n id=\"BWvbwY\"\n description=\"Prefix for invite status indicator in screen reader\"\n />\n </VisuallyHidden>\n <Translation\n defaultMessage=\"Expired\"\n id=\"+0sQaN\"\n description=\"Badge status indicating user invitation has expired\"\n />\n </Badge>\n );\n }\n if (user.status === \"InviteRevoked\") {\n return (\n <Badge color=\"red\" style={{ userSelect: \"none\" }}>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"Status: Invite \"\n id=\"BWvbwY\"\n description=\"Prefix for invite status indicator in screen reader\"\n />\n </VisuallyHidden>\n <Translation\n defaultMessage=\"Revoked\"\n id=\"NNBv+r\"\n description=\"Badge status indicating user invitation has been revoked\"\n />\n </Badge>\n );\n }\n return null;\n}\n\ninterface LastActiveProps {\n user: Member;\n isHydrated: boolean;\n dim?: boolean;\n}\n\nfunction LastActive(props: LastActiveProps) {\n if (!props.user.lastActivityAt) {\n return (\n <>\n <VisuallyHidden>\n {props.user.status === \"Active\" ? (\n <Translation\n defaultMessage=\"Never\"\n id=\"0duvF4\"\n description=\"Screen reader text indicating user has never been active\"\n />\n ) : (\n <Translation\n defaultMessage=\"Not active\"\n id=\"hd2+kk\"\n description=\"Screen reader text indicating user is not active\"\n />\n )}\n </VisuallyHidden>\n <Separator />\n </>\n );\n }\n return <LastActiveImpl {...props} date={props.user.lastActivityAt} />;\n}\n\nfunction LastActiveImpl({\n date,\n isHydrated,\n dim,\n}: LastActiveProps & { date: string }) {\n const locale = useLocale();\n\n const lastActiveDate = new Date(date);\n const lastActiveDateTime = lastActiveDate.toLocaleTimeString(locale, {\n // hard-coded timezone before hydration to prevent server/client mismatch\n timeZone: isHydrated ? undefined : \"America/Los_Angeles\",\n month: \"long\",\n day: \"numeric\",\n year: \"numeric\",\n hour: \"numeric\",\n minute: \"numeric\",\n });\n\n const lastActiveDisplay = useComparativeReadableDate({\n date: lastActiveDate,\n });\n\n // handle cases where the DB might return an invalid date string\n if (lastActiveDisplay === \"Invalid Date\") {\n return (\n <>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"Unknown\"\n id=\"UUigrK\"\n description=\"Screen reader text indicating last active date is unknown\"\n />\n </VisuallyHidden>\n <Separator />\n </>\n );\n }\n\n return (\n <TableCellText asChild dim={dim}>\n <time dateTime={date} title={lastActiveDateTime}>\n {lastActiveDisplay}\n </time>\n </TableCellText>\n );\n}\n\nconst TableCellText = React.forwardRef<HTMLSpanElement, TableCellTextProps>(\n function TableCellText(\n { children, dim, level = \"primary\", ...props },\n forwardedRef,\n ) {\n return (\n <Text\n ref={forwardedRef}\n color={level === \"secondary\" ? \"gray\" : undefined}\n weight={level === \"secondary\" ? \"regular\" : \"medium\"}\n size={level === \"secondary\" ? \"1\" : \"2\"}\n truncate\n {...props}\n style={\n dim\n ? {\n // TODO: use CSS var instead of hard-coded value for opacity\n opacity: 0.6,\n ...props.style,\n }\n : props.style\n }\n >\n {children}\n </Text>\n );\n },\n);\n\ntype TableCellTextProps = TextProps & {\n level?: \"primary\" | \"secondary\";\n dim?: boolean;\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\nconst UsersManagementEmptyState = ({ isPending }: { isPending: boolean }) => {\n const { clearSearch } = useSearchContext();\n const {\n state: { searchQuery },\n } = useUsersManagementContext();\n\n // When the search query is cleared, the users query is re-fetched which sends\n // us into a pending state. When this happens we want to keep a snapshot of\n // the previous search query while the query is revalidated. We can use this\n // to keep the 'No users found for query' UI in place until re-fetching is\n // complete, otherwise the view flips to 'No users found' very quickly before\n // the full table is shown again.\n const [{ isClearing, lastSearchQuery }, setClearing] = React.useState({\n isClearing: false,\n lastSearchQuery: null as null | string,\n });\n const [wasPending, setWasPending] = React.useState(isPending);\n if (wasPending !== isPending) {\n setWasPending(isPending);\n if (!isPending) {\n setClearing((prev) =>\n prev.isClearing ? { isClearing: false, lastSearchQuery: null } : prev,\n );\n }\n }\n\n if (searchQuery || isClearing) {\n return (\n <Flex align=\"center\" justify=\"center\" py=\"8\" direction=\"column\" gap=\"2\">\n <Text size=\"2\">\n <Translation\n defaultMessage=\"No users found for query '{query}'\"\n id=\"wrEZ8+\"\n description=\"Message shown when no users match the search query\"\n values={{\n query: isClearing ? lastSearchQuery : searchQuery,\n }}\n />\n </Text>\n\n <Button\n variant=\"secondary\"\n size=\"1\"\n onClick={() => {\n setClearing({ isClearing: true, lastSearchQuery: searchQuery });\n clearSearch();\n }}\n loading={isPending}\n >\n <Translation\n defaultMessage=\"Clear search\"\n id=\"Xv3fVI\"\n description=\"Button text to clear the current search query\"\n />\n </Button>\n </Flex>\n );\n }\n\n return (\n <Flex align=\"center\" justify=\"center\" py=\"8\" gap=\"2\">\n <Text size=\"2\">\n <Translation\n defaultMessage=\"No users found\"\n id=\"MQ+LoA\"\n description=\"Message shown when there are no users in the system\"\n />\n </Text>\n </Flex>\n );\n};\n\ninterface UserRolesCellContentProps {\n user: Member;\n isMultipleRolesEnabled: boolean;\n dimText: boolean;\n}\n\nfunction UserRolesCellContent({\n user,\n isMultipleRolesEnabled,\n dimText,\n}: UserRolesCellContentProps) {\n if (!user.roles || user.roles.length === 0) {\n return (\n <>\n <VisuallyHidden>\n <Translation\n defaultMessage=\"No roles assigned\"\n id=\"CVOVB0\"\n description=\"Screen reader text indicating user has no roles assigned\"\n />\n </VisuallyHidden>\n {/* eslint-disable-next-line formatjs/no-literal-string-in-jsx */}\n <span aria-hidden style={{ userSelect: \"none\" }}>\n –\n </span>\n </>\n );\n }\n\n if (isMultipleRolesEnabled && user.roles.length > 1) {\n const roleNames = user.roles?.map((role) => role.name).join(\", \");\n return (\n <Tooltip content={roleNames} maxWidth=\"250px\">\n <TableCellText dim={dimText}>\n <Translation\n defaultMessage=\"{count} roles\"\n id=\"lWAmRC\"\n description=\"Shows the number of roles assigned to a user (plural)\"\n values={{ count: user.roles.length }}\n />\n </TableCellText>\n </Tooltip>\n );\n }\n\n return <TableCellText dim={dimText}>{user.roles?.[0]?.name}</TableCellText>;\n}\n\nfunction getWidgetRootDomProps(\n state: WidgetRootState,\n domProps: WidgetRootDomProps,\n) {\n return getWidgetDomProps({\n ...domProps,\n isWidgetRoot: true,\n widgetId: \"users-management\",\n widgetState: state,\n });\n}\n\nexport type { UsersManagementLoadingProps, UsersManagementErrorProps };\nexport { UsersManagement, UsersManagementLoading, UsersManagementError };\n"],"mappings":"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"}
@@ -170,7 +170,7 @@ export type AuthenticationSettings = {
170
170
  passwordAuthEnabled: Scalars["Boolean"]["output"];
171
171
  passwordPolicy: PasswordPolicy;
172
172
  };
173
- /** The branding configured for the token's environment. */
173
+ /** The branding the token renders: its application's own once that application has been customized, otherwise its environment's. */
174
174
  export type Branding = {
175
175
  __typename?: "Branding";
176
176
  /** The product name shown to users. */
@@ -270,7 +270,7 @@ export type ConnectOrganizationDataProviderWithClientCredentialsInput = {
270
270
  dataProviderId: Scalars["ID"]["input"];
271
271
  /** Makes retries of an Add return the connection the first attempt created instead of creating another. Reuse the same key for every retry of one user action. A matching retry within 24 hours returns the existing connection; reusing the key for a different owner, data provider, or authentication method, or after 24 hours while that connection exists, fails with idempotency_key_conflict. Ignored unless connectionIntent is Add. */
272
272
  idempotencyKey?: InputMaybe<Scalars["String"]["input"]>;
273
- /** The organization member the credentials are attributed to. With a user session token, omit it to use the session user, or pass that same user; any other user is rejected. With an application credential token, pass an active member of the token organization. Omitting it with an application credential token records no member for now; it is expected to become required. */
273
+ /** The organization member the credentials are attributed to. With a user session token, omit it to use the session user, or pass that same user; any other user is rejected. With an application credential token, it is required and must name an active member of the token organization. */
274
274
  userId?: InputMaybe<Scalars["ID"]["input"]>;
275
275
  };
276
276
  /** An OAuth profile linked to the authenticated user. */
@@ -389,7 +389,7 @@ export type CreateOrganizationDataProviderConnectionInput = {
389
389
  dataProviderId: Scalars["ID"]["input"];
390
390
  /** Makes retries of an Add return the connection the first attempt created instead of creating another. Reuse the same key for every retry of one user action. A matching retry within 24 hours returns the existing connection; reusing the key for a different owner, data provider, or authentication method, or after 24 hours while that connection exists, fails with idempotency_key_conflict. Ignored unless connectionIntent is Add. */
391
391
  idempotencyKey?: InputMaybe<Scalars["String"]["input"]>;
392
- /** The organization member the credentials are attributed to. With a user session token, omit it to use the session user, or pass that same user; any other user is rejected. With an application credential token, pass an active member of the token organization. Omitting it with an application credential token records no member for now; it is expected to become required. */
392
+ /** The organization member the credentials are attributed to. With a user session token, omit it to use the session user, or pass that same user; any other user is rejected. With an application credential token, it is required and must name an active member of the token organization. */
393
393
  userId?: InputMaybe<Scalars["ID"]["input"]>;
394
394
  };
395
395
  /** Input for setting a password on an account that does not yet have one (e.g. signed up via OAuth). */
@@ -1606,7 +1606,7 @@ export type Query = {
1606
1606
  authenticationSettings: AuthenticationSettings;
1607
1607
  /** The AuthKit settings for the token's environment. */
1608
1608
  authkitSettings: AuthKitSettings;
1609
- /** The branding configured for the token's environment. */
1609
+ /** The branding the token renders: its application's own once that application has been customized, otherwise its environment's. */
1610
1610
  branding: Branding;
1611
1611
  /** Placeholder query for the Client GraphQL API scaffold. Returns a static value and is replaced by real resolvers. */
1612
1612
  clientApiStatus: Scalars["String"]["output"];