@strapi/admin 5.17.0-beta.0 → 5.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (191) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +27 -4
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +27 -4
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/LeftMenu.js +1 -1
  6. package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
  7. package/dist/admin/admin/src/components/LeftMenu.mjs +2 -2
  8. package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/MainNav/NavLink.js +40 -4
  10. package/dist/admin/admin/src/components/MainNav/NavLink.js.map +1 -1
  11. package/dist/admin/admin/src/components/MainNav/NavLink.mjs +21 -4
  12. package/dist/admin/admin/src/components/MainNav/NavLink.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/MainNav/NavUser.js +1 -1
  14. package/dist/admin/admin/src/components/MainNav/NavUser.js.map +1 -1
  15. package/dist/admin/admin/src/components/MainNav/NavUser.mjs +1 -1
  16. package/dist/admin/admin/src/components/MainNav/NavUser.mjs.map +1 -1
  17. package/dist/admin/admin/src/components/Providers.js +8 -5
  18. package/dist/admin/admin/src/components/Providers.js.map +1 -1
  19. package/dist/admin/admin/src/components/Providers.mjs +8 -5
  20. package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
  21. package/dist/admin/admin/src/components/SubNav.js +27 -7
  22. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  23. package/dist/admin/admin/src/components/SubNav.mjs +28 -8
  24. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  25. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js +89 -0
  26. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js.map +1 -0
  27. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs +66 -0
  28. package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs.map +1 -0
  29. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js +291 -0
  30. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js.map +1 -0
  31. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs +289 -0
  32. package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs.map +1 -0
  33. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js +153 -0
  34. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js.map +1 -0
  35. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs +132 -0
  36. package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs.map +1 -0
  37. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js +416 -0
  38. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js.map +1 -0
  39. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs +395 -0
  40. package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs.map +1 -0
  41. package/dist/admin/admin/src/components/Widgets.js +52 -0
  42. package/dist/admin/admin/src/components/Widgets.js.map +1 -0
  43. package/dist/admin/admin/src/components/Widgets.mjs +50 -0
  44. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -0
  45. package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
  46. package/dist/admin/admin/src/core/apis/Widgets.mjs.map +1 -1
  47. package/dist/admin/admin/src/features/Auth.js.map +1 -1
  48. package/dist/admin/admin/src/features/Auth.mjs.map +1 -1
  49. package/dist/admin/admin/src/features/Tracking.js +0 -33
  50. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  51. package/dist/admin/admin/src/features/Tracking.mjs +0 -33
  52. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  53. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js +15 -8
  54. package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
  55. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +15 -8
  56. package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
  57. package/dist/admin/admin/src/pages/Home/HomePage.js +2 -1
  58. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  59. package/dist/admin/admin/src/pages/Home/HomePage.mjs +2 -1
  60. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  61. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +93 -0
  62. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +95 -3
  64. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js +8 -3
  66. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs +10 -5
  68. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
  69. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +6 -1
  70. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +6 -1
  72. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
  73. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +58 -53
  74. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  75. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +58 -53
  76. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  77. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -3
  78. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
  79. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -3
  80. package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
  81. package/dist/admin/admin/src/services/admin.js +17 -3
  82. package/dist/admin/admin/src/services/admin.js.map +1 -1
  83. package/dist/admin/admin/src/services/admin.mjs +17 -4
  84. package/dist/admin/admin/src/services/admin.mjs.map +1 -1
  85. package/dist/admin/admin/src/services/apiTokens.js +4 -2
  86. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  87. package/dist/admin/admin/src/services/apiTokens.mjs +4 -2
  88. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  89. package/dist/admin/admin/src/translations/en.json.js +34 -2
  90. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  91. package/dist/admin/admin/src/translations/en.json.mjs +34 -2
  92. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  93. package/dist/admin/admin/src/translations/es.json.js +1 -0
  94. package/dist/admin/admin/src/translations/es.json.js.map +1 -1
  95. package/dist/admin/admin/src/translations/es.json.mjs +1 -0
  96. package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
  97. package/dist/admin/admin/src/translations/fr.json.js +3 -1
  98. package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
  99. package/dist/admin/admin/src/translations/fr.json.mjs +3 -1
  100. package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
  101. package/dist/admin/admin/src/utils/users.js +8 -0
  102. package/dist/admin/admin/src/utils/users.js.map +1 -1
  103. package/dist/admin/admin/src/utils/users.mjs +8 -1
  104. package/dist/admin/admin/src/utils/users.mjs.map +1 -1
  105. package/dist/admin/admin/tests/server.js +8 -0
  106. package/dist/admin/admin/tests/server.js.map +1 -1
  107. package/dist/admin/admin/tests/server.mjs +8 -0
  108. package/dist/admin/admin/tests/server.mjs.map +1 -1
  109. package/dist/admin/admin/tests/utils.js +25 -21
  110. package/dist/admin/admin/tests/utils.js.map +1 -1
  111. package/dist/admin/admin/tests/utils.mjs +25 -21
  112. package/dist/admin/admin/tests/utils.mjs.map +1 -1
  113. package/dist/admin/index.js +2 -0
  114. package/dist/admin/index.js.map +1 -1
  115. package/dist/admin/index.mjs +1 -0
  116. package/dist/admin/index.mjs.map +1 -1
  117. package/dist/admin/src/components/UnstableGuidedTour/Context.d.ts +38 -0
  118. package/dist/admin/src/components/UnstableGuidedTour/Overview.d.ts +1 -0
  119. package/dist/admin/src/components/UnstableGuidedTour/Step.d.ts +37 -0
  120. package/dist/admin/src/components/UnstableGuidedTour/Tours.d.ts +58 -0
  121. package/dist/admin/src/components/Widgets.d.ts +2 -0
  122. package/dist/admin/src/core/apis/Widgets.d.ts +1 -1
  123. package/dist/admin/src/features/Auth.d.ts +1 -1
  124. package/dist/admin/src/features/Tracking.d.ts +9 -2
  125. package/dist/admin/src/index.d.ts +1 -0
  126. package/dist/admin/src/pages/Settings/components/Tokens/TokenBox.d.ts +1 -0
  127. package/dist/admin/src/services/admin.d.ts +8 -8
  128. package/dist/admin/src/services/apiTokens.d.ts +1 -1
  129. package/dist/admin/src/utils/users.d.ts +5 -1
  130. package/dist/ee/server/src/index.d.ts +2 -12
  131. package/dist/ee/server/src/index.d.ts.map +1 -1
  132. package/dist/ee/server/src/routes/index.d.ts +1 -6
  133. package/dist/ee/server/src/routes/index.d.ts.map +1 -1
  134. package/dist/ee/server/src/routes/license-limit.d.ts +1 -6
  135. package/dist/ee/server/src/routes/license-limit.d.ts.map +1 -1
  136. package/dist/server/ee/server/src/routes/license-limit.js +1 -12
  137. package/dist/server/ee/server/src/routes/license-limit.js.map +1 -1
  138. package/dist/server/ee/server/src/routes/license-limit.mjs +1 -12
  139. package/dist/server/ee/server/src/routes/license-limit.mjs.map +1 -1
  140. package/dist/server/server/src/bootstrap.js +4 -12
  141. package/dist/server/server/src/bootstrap.js.map +1 -1
  142. package/dist/server/server/src/bootstrap.mjs +4 -12
  143. package/dist/server/server/src/bootstrap.mjs.map +1 -1
  144. package/dist/server/server/src/controllers/admin.js +12 -1
  145. package/dist/server/server/src/controllers/admin.js.map +1 -1
  146. package/dist/server/server/src/controllers/admin.mjs +12 -1
  147. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  148. package/dist/server/server/src/routes/admin.js +10 -0
  149. package/dist/server/server/src/routes/admin.js.map +1 -1
  150. package/dist/server/server/src/routes/admin.mjs +10 -0
  151. package/dist/server/server/src/routes/admin.mjs.map +1 -1
  152. package/dist/server/server/src/services/constants.js +14 -0
  153. package/dist/server/server/src/services/constants.js.map +1 -1
  154. package/dist/server/server/src/services/constants.mjs +14 -0
  155. package/dist/server/server/src/services/constants.mjs.map +1 -1
  156. package/dist/server/server/src/services/guided-tour.js +61 -0
  157. package/dist/server/server/src/services/guided-tour.js.map +1 -0
  158. package/dist/server/server/src/services/guided-tour.mjs +59 -0
  159. package/dist/server/server/src/services/guided-tour.mjs.map +1 -0
  160. package/dist/server/server/src/services/index.js +3 -1
  161. package/dist/server/server/src/services/index.js.map +1 -1
  162. package/dist/server/server/src/services/index.mjs +3 -1
  163. package/dist/server/server/src/services/index.mjs.map +1 -1
  164. package/dist/server/server/src/services/user.js +28 -1
  165. package/dist/server/server/src/services/user.js.map +1 -1
  166. package/dist/server/server/src/services/user.mjs +28 -1
  167. package/dist/server/server/src/services/user.mjs.map +1 -1
  168. package/dist/server/server/src/strategies/api-token.js +15 -4
  169. package/dist/server/server/src/strategies/api-token.js.map +1 -1
  170. package/dist/server/server/src/strategies/api-token.mjs +15 -4
  171. package/dist/server/server/src/strategies/api-token.mjs.map +1 -1
  172. package/dist/server/src/bootstrap.d.ts.map +1 -1
  173. package/dist/server/src/controllers/admin.d.ts +6 -1
  174. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  175. package/dist/server/src/controllers/index.d.ts +6 -0
  176. package/dist/server/src/controllers/index.d.ts.map +1 -1
  177. package/dist/server/src/index.d.ts +12 -0
  178. package/dist/server/src/index.d.ts.map +1 -1
  179. package/dist/server/src/routes/admin.d.ts.map +1 -1
  180. package/dist/server/src/services/constants.d.ts +11 -1
  181. package/dist/server/src/services/constants.d.ts.map +1 -1
  182. package/dist/server/src/services/guided-tour.d.ts +12 -0
  183. package/dist/server/src/services/guided-tour.d.ts.map +1 -0
  184. package/dist/server/src/services/index.d.ts +6 -0
  185. package/dist/server/src/services/index.d.ts.map +1 -1
  186. package/dist/server/src/services/user.d.ts +1 -0
  187. package/dist/server/src/services/user.d.ts.map +1 -1
  188. package/dist/server/src/strategies/api-token.d.ts.map +1 -1
  189. package/dist/shared/contracts/admin.d.ts +15 -0
  190. package/dist/shared/contracts/admin.d.ts.map +1 -1
  191. package/package.json +9 -9
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nimport type { Data } from '@strapi/types';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\n </Page.Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["TABLE_HEADERS","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canCreate","canDelete","canUpdate","useRBAC","navigate","useNavigate","trackUsage","useTracking","startSection","useGuidedTour","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","headers","map","header","useOnce","tokenType","API_TOKEN_TYPE","data","apiTokens","isLoading","error","useGetAPITokensQuery","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"ListView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { tours as unstable_tours } from '../../../../components/UnstableGuidedTour/Tours';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nimport type { Data } from '@strapi/types';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <unstable_tours.apiTokens.CreateAnAPIToken>\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n </unstable_tours.apiTokens.CreateAnAPIToken>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <unstable_tours.apiTokens.Introduction>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\n </unstable_tours.apiTokens.Introduction>\n </Page.Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["TABLE_HEADERS","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canCreate","canDelete","canUpdate","useRBAC","navigate","useNavigate","trackUsage","useTracking","startSection","useGuidedTour","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","headers","map","header","useOnce","tokenType","API_TOKEN_TYPE","data","apiTokens","isLoading","error","useGetAPITokensQuery","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","unstable_tours","CreateAnAPIToken","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Introduction","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
@@ -9,6 +9,7 @@ import { useNavigate, Link } from 'react-router-dom';
9
9
  import { useGuidedTour } from '../../../../components/GuidedTour/Provider.mjs';
10
10
  import { Layouts } from '../../../../components/Layouts/Layout.mjs';
11
11
  import { Page } from '../../../../components/PageHelpers.mjs';
12
+ import { tours } from '../../../../components/UnstableGuidedTour/Tours.mjs';
12
13
  import { useTypedSelector } from '../../../../core/store/hooks.mjs';
13
14
  import { useNotification } from '../../../../features/Notifications.mjs';
14
15
  import { useTracking } from '../../../../features/Tracking.mjs';
@@ -150,66 +151,70 @@ const ListView = ()=>{
150
151
  id: 'Settings.apiTokens.description',
151
152
  defaultMessage: 'List of generated tokens to consume the API'
152
153
  }),
153
- primaryAction: canCreate && /*#__PURE__*/ jsx(LinkButton, {
154
- tag: Link,
155
- "data-testid": "create-api-token-button",
156
- startIcon: /*#__PURE__*/ jsx(Plus, {}),
157
- size: "S",
158
- onClick: ()=>trackUsage('willAddTokenFromList', {
159
- tokenType: API_TOKEN_TYPE
160
- }),
161
- to: "/settings/api-tokens/create",
162
- children: formatMessage({
163
- id: 'Settings.apiTokens.create',
164
- defaultMessage: 'Create new API Token'
154
+ primaryAction: canCreate && /*#__PURE__*/ jsx(tours.apiTokens.CreateAnAPIToken, {
155
+ children: /*#__PURE__*/ jsx(LinkButton, {
156
+ tag: Link,
157
+ "data-testid": "create-api-token-button",
158
+ startIcon: /*#__PURE__*/ jsx(Plus, {}),
159
+ size: "S",
160
+ onClick: ()=>trackUsage('willAddTokenFromList', {
161
+ tokenType: API_TOKEN_TYPE
162
+ }),
163
+ to: "/settings/api-tokens/create",
164
+ children: formatMessage({
165
+ id: 'Settings.apiTokens.create',
166
+ defaultMessage: 'Create new API Token'
167
+ })
165
168
  })
166
169
  })
167
170
  }),
168
171
  !canRead ? /*#__PURE__*/ jsx(Page.NoPermissions, {}) : /*#__PURE__*/ jsx(Page.Main, {
169
172
  "aria-busy": isLoading,
170
- children: /*#__PURE__*/ jsxs(Layouts.Content, {
171
- children: [
172
- apiTokens.length > 0 && /*#__PURE__*/ jsx(Table, {
173
- permissions: {
174
- canRead,
175
- canDelete,
176
- canUpdate
177
- },
178
- headers: headers,
179
- isLoading: isLoading,
180
- onConfirmDelete: handleDelete,
181
- tokens: apiTokens,
182
- tokenType: API_TOKEN_TYPE
183
- }),
184
- canCreate && apiTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
185
- icon: /*#__PURE__*/ jsx(EmptyDocuments, {
186
- width: "16rem"
187
- }),
188
- content: formatMessage({
189
- id: 'Settings.apiTokens.addFirstToken',
190
- defaultMessage: 'Add your first API Token'
173
+ children: /*#__PURE__*/ jsx(tours.apiTokens.Introduction, {
174
+ children: /*#__PURE__*/ jsxs(Layouts.Content, {
175
+ children: [
176
+ apiTokens.length > 0 && /*#__PURE__*/ jsx(Table, {
177
+ permissions: {
178
+ canRead,
179
+ canDelete,
180
+ canUpdate
181
+ },
182
+ headers: headers,
183
+ isLoading: isLoading,
184
+ onConfirmDelete: handleDelete,
185
+ tokens: apiTokens,
186
+ tokenType: API_TOKEN_TYPE
191
187
  }),
192
- action: /*#__PURE__*/ jsx(LinkButton, {
193
- tag: Link,
194
- variant: "secondary",
195
- startIcon: /*#__PURE__*/ jsx(Plus, {}),
196
- to: "/settings/api-tokens/create",
197
- children: formatMessage({
198
- id: 'Settings.apiTokens.addNewToken',
199
- defaultMessage: 'Add new API Token'
188
+ canCreate && apiTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
189
+ icon: /*#__PURE__*/ jsx(EmptyDocuments, {
190
+ width: "16rem"
191
+ }),
192
+ content: formatMessage({
193
+ id: 'Settings.apiTokens.addFirstToken',
194
+ defaultMessage: 'Add your first API Token'
195
+ }),
196
+ action: /*#__PURE__*/ jsx(LinkButton, {
197
+ tag: Link,
198
+ variant: "secondary",
199
+ startIcon: /*#__PURE__*/ jsx(Plus, {}),
200
+ to: "/settings/api-tokens/create",
201
+ children: formatMessage({
202
+ id: 'Settings.apiTokens.addNewToken',
203
+ defaultMessage: 'Add new API Token'
204
+ })
200
205
  })
201
- })
202
- }) : null,
203
- !canCreate && apiTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
204
- icon: /*#__PURE__*/ jsx(EmptyDocuments, {
205
- width: "16rem"
206
- }),
207
- content: formatMessage({
208
- id: 'Settings.apiTokens.emptyStateLayout',
209
- defaultMessage: 'You don’t have any content yet...'
210
- })
211
- }) : null
212
- ]
206
+ }) : null,
207
+ !canCreate && apiTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
208
+ icon: /*#__PURE__*/ jsx(EmptyDocuments, {
209
+ width: "16rem"
210
+ }),
211
+ content: formatMessage({
212
+ id: 'Settings.apiTokens.emptyStateLayout',
213
+ defaultMessage: 'You don’t have any content yet...'
214
+ })
215
+ }) : null
216
+ ]
217
+ })
213
218
  })
214
219
  })
215
220
  ]
@@ -1 +1 @@
1
- {"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nimport type { Data } from '@strapi/types';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\n </Page.Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["TABLE_HEADERS","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canCreate","canDelete","canUpdate","useRBAC","navigate","useNavigate","trackUsage","useTracking","startSection","useGuidedTour","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","headers","map","header","useOnce","tokenType","API_TOKEN_TYPE","data","apiTokens","isLoading","error","useGetAPITokensQuery","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { tours as unstable_tours } from '../../../../components/UnstableGuidedTour/Tours';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nimport type { Data } from '@strapi/types';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <unstable_tours.apiTokens.CreateAnAPIToken>\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n </unstable_tours.apiTokens.CreateAnAPIToken>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <unstable_tours.apiTokens.Introduction>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\n </unstable_tours.apiTokens.Introduction>\n </Page.Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["TABLE_HEADERS","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canCreate","canDelete","canUpdate","useRBAC","navigate","useNavigate","trackUsage","useTracking","startSection","useGuidedTour","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","headers","map","header","useOnce","tokenType","API_TOKEN_TYPE","data","apiTokens","isLoading","error","useGetAPITokensQuery","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","unstable_tours","CreateAnAPIToken","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Introduction","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAyBA,MAAMA,aAAgB,GAAA;AACpB,IAAA;QACEC,IAAM,EAAA,MAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,0CAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ,KAAA;AACA,IAAA;QACEJ,IAAM,EAAA,aAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,iDAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ,KAAA;AACA,IAAA;QACEJ,IAAM,EAAA,WAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,+CAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ,KAAA;AACA,IAAA;QACEJ,IAAM,EAAA,YAAA;QACNC,KAAO,EAAA;YACLC,EAAI,EAAA,gDAAA;YACJC,cAAgB,EAAA;AAClB,SAAA;QACAC,QAAU,EAAA;AACZ;AACD,CAAA;MAEYC,QAAW,GAAA,IAAA;IACtB,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;IAC1B,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAMC,WAAcC,GAAAA,gBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAMC,CAAAA,SAAS,CAACH,WAAW,CAACI,QAAQ,GAAG,YAAa,CAAA,CAAA;AAEjE,IAAA,MAAM,EACJC,cAAAA,EAAgB,EAAEC,OAAO,EAAEC,SAAS,EAAEC,SAAS,EAAEC,SAAS,EAAE,EAC7D,GAAGC,OAAQV,CAAAA,WAAAA,CAAAA;AACZ,IAAA,MAAMW,QAAWC,GAAAA,WAAAA,EAAAA;IACjB,MAAM,EAAEC,UAAU,EAAE,GAAGC,WAAAA,EAAAA;AACvB,IAAA,MAAMC,eAAeC,aAAc,CAAA,UAAA,EAAY,CAACd,KAAAA,GAAUA,MAAMa,YAAY,CAAA;AAC5E,IAAA,MAAM,EAAEE,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;AAEpDC,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;QACdN,YAAa,CAAA,WAAA,CAAA;KACZ,EAAA;AAACA,QAAAA;AAAa,KAAA,CAAA;AAEjBK,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;QACdV,QAAS,CAAA;YAAEW,MAAQC,EAAAA,EAAAA,CAAGC,SAAS,CAAC;gBAAEC,IAAM,EAAA;aAAc,EAAA;gBAAEC,MAAQ,EAAA;AAAM,aAAA;AAAG,SAAA,CAAA;KACxE,EAAA;AAACf,QAAAA;AAAS,KAAA,CAAA;AAEb,IAAA,MAAMgB,UAAUtC,aAAcuC,CAAAA,GAAG,CAAC,CAACC,UAAY;AAC7C,YAAA,GAAGA,MAAM;YACTtC,KAAOK,EAAAA,aAAAA,CAAciC,OAAOtC,KAAK;SACnC,CAAA,CAAA;IAEAuC,OAAQ,CAAA,IAAA;AACNjB,QAAAA,UAAAA,CAAW,qBAAuB,EAAA;YAChCkB,SAAWC,EAAAA;AACb,SAAA,CAAA;AACF,KAAA,CAAA;IAEA,MAAM,EAAEC,MAAMC,SAAY,GAAA,EAAE,EAAEC,SAAS,EAAEC,KAAK,EAAE,GAAGC,oBAAAA,EAAAA;AAEnDjB,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACd,QAAA,IAAIe,KAAO,EAAA;YACTtC,kBAAmB,CAAA;gBACjBwC,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASrB,cAAekB,CAAAA,KAAAA;AAC1B,aAAA,CAAA;AACF;KACC,EAAA;AAACA,QAAAA,KAAAA;AAAOlB,QAAAA,cAAAA;AAAgBpB,QAAAA;AAAmB,KAAA,CAAA;AAE9CsB,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACdR,QAAAA,UAAAA,CAAW,oBAAsB,EAAA;AAAE2B,YAAAA,MAAAA,EAAQN,UAAUO,MAAM;YAAEV,SAAWC,EAAAA;AAAe,SAAA,CAAA;KACtF,EAAA;AAACE,QAAAA,SAAAA;AAAWrB,QAAAA;AAAW,KAAA,CAAA;IAE1B,MAAM,CAAC6B,YAAY,GAAGC,yBAAAA,EAAAA;AAEtB,IAAA,MAAMC,eAAe,OAAOpD,EAAAA,GAAAA;QAC1B,IAAI;YACF,MAAMqD,GAAAA,GAAM,MAAMH,WAAYlD,CAAAA,EAAAA,CAAAA;AAE9B,YAAA,IAAI,WAAWqD,GAAK,EAAA;gBAClB/C,kBAAmB,CAAA;oBACjBwC,IAAM,EAAA,QAAA;oBACNC,OAASrB,EAAAA,cAAAA,CAAe2B,IAAIT,KAAK;AACnC,iBAAA,CAAA;AAEA,gBAAA;AACF;YAEAvB,UAAW,CAAA,gBAAA,CAAA;AACb,SAAA,CAAE,OAAM;YACNf,kBAAmB,CAAA;gBACjBwC,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAAS3C,aAAc,CAAA;oBACrBJ,EAAI,EAAA,oBAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACF;AACF,KAAA;IAEA,qBACEqD,IAAA,CAAAC,QAAA,EAAA;;AACE,0BAAAC,GAAA,CAACC,KAAKC,KAAK,EAAA;0BACRtD,aACC,CAAA;oBAAEJ,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;iBAC5C,EAAA;oBAAEH,IAAM,EAAA;AAAa,iBAAA;;AAGzB,0BAAA0D,GAAA,CAACG,QAAQC,MAAM,EAAA;AACbC,gBAAAA,KAAAA,EAAOzD,aAAc,CAAA;oBAAEJ,EAAI,EAAA,0BAAA;oBAA4BC,cAAgB,EAAA;AAAa,iBAAA,CAAA;AACpF6D,gBAAAA,QAAAA,EAAU1D,aAAc,CAAA;oBACtBJ,EAAI,EAAA,gCAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACA8D,gBAAAA,aAAAA,EACEhD,SACE,kBAAAyC,GAAA,CAACQ,KAAetB,CAAAA,SAAS,CAACuB,gBAAgB,EAAA;AACxC,oBAAA,QAAA,gBAAAT,GAACU,CAAAA,UAAAA,EAAAA;wBACCC,GAAKC,EAAAA,IAAAA;wBACLC,aAAY,EAAA,yBAAA;AACZC,wBAAAA,SAAAA,gBAAWd,GAACe,CAAAA,IAAAA,EAAAA,EAAAA,CAAAA;wBACZC,IAAK,EAAA,GAAA;wBACLC,OAAS,EAAA,IACPpD,WAAW,sBAAwB,EAAA;gCACjCkB,SAAWC,EAAAA;AACb,6BAAA,CAAA;wBAEFkC,EAAG,EAAA,6BAAA;kCAEFtE,aAAc,CAAA;4BACbJ,EAAI,EAAA,2BAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA;;;;AAMT,YAAA,CAACa,wBACA0C,GAACC,CAAAA,IAAAA,CAAKkB,aAAa,EAEnB,EAAA,CAAA,iBAAAnB,GAAA,CAACC,KAAKmB,IAAI,EAAA;gBAACC,WAAWlC,EAAAA,SAAAA;AACpB,gBAAA,QAAA,gBAAAa,GAACQ,CAAAA,KAAAA,CAAetB,SAAS,CAACoC,YAAY,EAAA;4CACpCxB,IAAA,CAACK,QAAQoB,OAAO,EAAA;;4BACbrC,SAAUO,CAAAA,MAAM,GAAG,CAAA,kBAClBO,GAACwB,CAAAA,KAAAA,EAAAA;gCACCxE,WAAa,EAAA;AAAEM,oCAAAA,OAAAA;AAASE,oCAAAA,SAAAA;AAAWC,oCAAAA;AAAU,iCAAA;gCAC7CkB,OAASA,EAAAA,OAAAA;gCACTQ,SAAWA,EAAAA,SAAAA;gCACXsC,eAAiB7B,EAAAA,YAAAA;gCACjB8B,MAAQxC,EAAAA,SAAAA;gCACRH,SAAWC,EAAAA;;AAGdzB,4BAAAA,SAAAA,IAAa2B,SAAUO,CAAAA,MAAM,KAAK,CAAA,iBACjCO,GAAC2B,CAAAA,gBAAAA,EAAAA;AACCC,gCAAAA,IAAAA,gBAAM5B,GAAC6B,CAAAA,cAAAA,EAAAA;oCAAeC,KAAM,EAAA;;AAC5BC,gCAAAA,OAAAA,EAASnF,aAAc,CAAA;oCACrBJ,EAAI,EAAA,kCAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA,CAAA;AACAuF,gCAAAA,MAAAA,gBACEhC,GAACU,CAAAA,UAAAA,EAAAA;oCACCC,GAAKC,EAAAA,IAAAA;oCACLqB,OAAQ,EAAA,WAAA;AACRnB,oCAAAA,SAAAA,gBAAWd,GAACe,CAAAA,IAAAA,EAAAA,EAAAA,CAAAA;oCACZG,EAAG,EAAA,6BAAA;8CAEFtE,aAAc,CAAA;wCACbJ,EAAI,EAAA,gCAAA;wCACJC,cAAgB,EAAA;AAClB,qCAAA;;AAIJ,6BAAA,CAAA,GAAA,IAAA;AACH,4BAAA,CAACc,SAAa2B,IAAAA,SAAAA,CAAUO,MAAM,KAAK,kBAClCO,GAAC2B,CAAAA,gBAAAA,EAAAA;AACCC,gCAAAA,IAAAA,gBAAM5B,GAAC6B,CAAAA,cAAAA,EAAAA;oCAAeC,KAAM,EAAA;;AAC5BC,gCAAAA,OAAAA,EAASnF,aAAc,CAAA;oCACrBJ,EAAI,EAAA,qCAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;AAEA,6BAAA,CAAA,GAAA;;;;;;;AAOlB;MAEayF,iBAAoB,GAAA,IAAA;AAC/B,IAAA,MAAMlF,WAAcC,GAAAA,gBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAMC,CAAAA,SAAS,CAACH,WAAW,CAACI,QAAQ,GAAG,aAAa,CAAC+E,IAAAA,CAAAA;IAGlE,qBACEnC,GAAA,CAACC,KAAKmC,OAAO,EAAA;QAACpF,WAAaA,EAAAA,WAAAA;AACzB,QAAA,QAAA,gBAAAgD,GAACrD,CAAAA,QAAAA,EAAAA,EAAAA;;AAGP;;;;"}
@@ -317,11 +317,11 @@ const TABLE_HEADERS = [
317
317
  return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Flex, {
318
318
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Status, {
319
319
  size: "S",
320
- borderWidth: 0,
321
- background: "transparent",
322
- color: "neutral800",
323
320
  variant: isActive ? 'success' : 'danger',
324
321
  children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Typography, {
322
+ tag: "span",
323
+ variant: "omega",
324
+ fontWeight: "bold",
325
325
  children: isActive ? 'Active' : 'Inactive'
326
326
  })
327
327
  })
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Users/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography, Status, IconButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport * as qs from 'qs';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\n\nimport { SanitizedAdminUser } from '../../../../../../shared/contracts/shared';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Filters } from '../../../../components/Filters';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { Pagination } from '../../../../components/Pagination';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { Table } from '../../../../components/Table';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useAdminUsers, useDeleteManyUsersMutation } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\n\nimport { CreateActionCE } from './components/CreateActionCE';\nimport { ModalForm } from './components/NewUserForm';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPageCE = () => {\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [isModalOpened, setIsModalOpen] = React.useState(false);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const {\n allowedActions: { canCreate, canDelete, canRead },\n } = useRBAC(permissions.settings?.users);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search } = useLocation();\n const [showDeleteConfirmation, setShowDeleteConfirmation] = React.useState(false);\n const [idsToDelete, setIdsToDelete] = React.useState<Array<SanitizedAdminUser['id']>>([]);\n const { data, isError, isLoading } = useAdminUsers(qs.parse(search, { ignoreQueryPrefix: true }));\n\n const { pagination, users = [] } = data ?? {};\n\n const CreateAction = useEnterprise(\n CreateActionCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE'\n )\n ).CreateActionEE\n );\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const title = formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n });\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const [deleteAll] = useDeleteManyUsersMutation();\n const handleDeleteAll = async (ids: Array<SanitizedAdminUser['id']>) => {\n try {\n const res = await deleteAll({ ids });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'global.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const handleRowClick = (id: SanitizedAdminUser['id']) => () => {\n if (canRead) {\n navigate(id.toString());\n }\n };\n\n const handleDeleteClick = (id: SanitizedAdminUser['id']) => async () => {\n setIdsToDelete([id]);\n setShowDeleteConfirmation(true);\n };\n\n const confirmDelete = async () => {\n await handleDeleteAll(idsToDelete);\n setShowDeleteConfirmation(false);\n };\n\n // block rendering until the EE component is fully loaded\n if (!CreateAction) {\n return null;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Users',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={canCreate && <CreateAction onClick={handleToggle} />}\n title={title}\n subtitle={formatMessage({\n id: 'Settings.permissions.users.listview.header.subtitle',\n defaultMessage: 'All the users who have access to the Strapi admin panel',\n })}\n />\n <Layouts.Action\n startActions={\n <>\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n <Filters.Root options={FILTERS}>\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n </>\n }\n />\n <Layouts.Content>\n <Table.Root rows={users} headers={headers}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n {canDelete ? <Table.HeaderCheckboxCell /> : null}\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {users.map((user) => (\n <Table.Row\n key={user.id}\n onClick={handleRowClick(user.id)}\n cursor={canRead ? 'pointer' : 'default'}\n >\n {canDelete ? <Table.CheckboxCell id={user.id} /> : null}\n {headers.map(({ cellFormatter, name, ...rest }) => {\n return (\n <Table.Cell key={name}>\n {typeof cellFormatter === 'function' ? (\n cellFormatter(user, { name, ...rest })\n ) : (\n // @ts-expect-error – name === \"roles\" has the data value of `AdminRole[]` but the header has a cellFormatter value so this shouldn't be called.\n <Typography textColor=\"neutral800\">{user[name] || '-'}</Typography>\n )}\n </Table.Cell>\n );\n })}\n {canRead || canDelete ? (\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n {canRead ? (\n <IconButton\n tag={NavLink}\n to={user.id.toString()}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {canDelete ? (\n <IconButton\n onClick={handleDeleteClick(user.id)}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {isModalOpened && <ModalForm onToggle={handleToggle} />}\n <Dialog.Root open={showDeleteConfirmation} onOpenChange={setShowDeleteConfirmation}>\n <ConfirmDialog onConfirm={confirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nconst TABLE_HEADERS: Array<\n Omit<Table.Header<SanitizedAdminUser, any>, 'label'> & { label: MessageDescriptor }\n> = [\n {\n name: 'firstname',\n label: {\n id: 'Settings.permissions.users.firstname',\n defaultMessage: 'Firstname',\n },\n sortable: true,\n },\n {\n name: 'lastname',\n label: {\n id: 'Settings.permissions.users.lastname',\n defaultMessage: 'Lastname',\n },\n sortable: true,\n },\n {\n name: 'email',\n label: { id: 'Settings.permissions.users.email', defaultMessage: 'Email' },\n sortable: true,\n },\n {\n name: 'roles',\n label: {\n id: 'Settings.permissions.users.roles',\n defaultMessage: 'Roles',\n },\n sortable: false,\n cellFormatter({ roles }) {\n return (\n <Typography textColor=\"neutral800\">{roles.map((role) => role.name).join(',\\n')}</Typography>\n );\n },\n },\n {\n name: 'username',\n label: {\n id: 'Settings.permissions.users.username',\n defaultMessage: 'Username',\n },\n sortable: true,\n },\n {\n name: 'isActive',\n label: {\n id: 'Settings.permissions.users.user-status',\n defaultMessage: 'User status',\n },\n sortable: false,\n cellFormatter({ isActive }) {\n return (\n <Flex>\n <Status\n size=\"S\"\n borderWidth={0}\n background=\"transparent\"\n color=\"neutral800\"\n variant={isActive ? 'success' : 'danger'}\n >\n <Typography>{isActive ? 'Active' : 'Inactive'}</Typography>\n </Status>\n </Flex>\n );\n },\n },\n];\n\nconst FILTERS = [\n {\n name: 'firstname',\n label: 'Firstname',\n type: 'string',\n },\n {\n name: 'lastname',\n label: 'Lastname',\n type: 'string',\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n },\n {\n name: 'username',\n label: 'Username',\n type: 'string',\n },\n {\n name: 'isActive',\n label: 'Active user',\n type: 'boolean',\n },\n] satisfies Filters.Filter[];\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\n// component which determines whether this page should render the CE or EE page\nconst ListPage = () => {\n const UsersListPage = useEnterprise(\n ListPageCE,\n async () =>\n // eslint-disable-next-line import/no-cycle\n (await import('../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage'))\n .UserListPageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!UsersListPage) {\n return null;\n }\n\n return <UsersListPage />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.users.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage, ListPageCE };\n"],"names":["ListPageCE","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isModalOpened","setIsModalOpen","React","useState","permissions","useTypedSelector","state","admin_app","allowedActions","canCreate","canDelete","canRead","useRBAC","settings","users","navigate","useNavigate","toggleNotification","useNotification","formatMessage","useIntl","search","useLocation","showDeleteConfirmation","setShowDeleteConfirmation","idsToDelete","setIdsToDelete","data","isError","isLoading","useAdminUsers","qs","parse","ignoreQueryPrefix","pagination","CreateAction","useEnterprise","CreateActionCE","CreateActionEE","headers","TABLE_HEADERS","map","header","label","title","id","defaultMessage","handleToggle","prev","deleteAll","useDeleteManyUsersMutation","handleDeleteAll","ids","res","type","message","error","err","handleRowClick","toString","handleDeleteClick","confirmDelete","_jsx","Page","Error","_jsxs","Main","aria-busy","Title","name","Layouts","Header","primaryAction","onClick","subtitle","Action","startActions","_Fragment","SearchInput","target","Filters","Root","options","FILTERS","Trigger","Popover","List","Content","Table","rows","ActionBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Loading","Body","user","Row","cursor","CheckboxCell","cellFormatter","rest","Cell","Typography","textColor","e","stopPropagation","Flex","justifyContent","IconButton","tag","NavLink","to","getDisplayName","variant","Pencil","Trash","Pagination","PageSize","Links","ModalForm","onToggle","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","sortable","roles","role","join","isActive","Status","size","borderWidth","background","color","ListPage","UsersListPage","UserListPageEE","ProtectedListPage","read","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"ListPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Users/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography, Status, IconButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport * as qs from 'qs';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\n\nimport { SanitizedAdminUser } from '../../../../../../shared/contracts/shared';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Filters } from '../../../../components/Filters';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { Pagination } from '../../../../components/Pagination';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { Table } from '../../../../components/Table';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useAdminUsers, useDeleteManyUsersMutation } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\n\nimport { CreateActionCE } from './components/CreateActionCE';\nimport { ModalForm } from './components/NewUserForm';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPageCE = () => {\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [isModalOpened, setIsModalOpen] = React.useState(false);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const {\n allowedActions: { canCreate, canDelete, canRead },\n } = useRBAC(permissions.settings?.users);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search } = useLocation();\n const [showDeleteConfirmation, setShowDeleteConfirmation] = React.useState(false);\n const [idsToDelete, setIdsToDelete] = React.useState<Array<SanitizedAdminUser['id']>>([]);\n const { data, isError, isLoading } = useAdminUsers(qs.parse(search, { ignoreQueryPrefix: true }));\n\n const { pagination, users = [] } = data ?? {};\n\n const CreateAction = useEnterprise(\n CreateActionCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE'\n )\n ).CreateActionEE\n );\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const title = formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n });\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const [deleteAll] = useDeleteManyUsersMutation();\n const handleDeleteAll = async (ids: Array<SanitizedAdminUser['id']>) => {\n try {\n const res = await deleteAll({ ids });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'global.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const handleRowClick = (id: SanitizedAdminUser['id']) => () => {\n if (canRead) {\n navigate(id.toString());\n }\n };\n\n const handleDeleteClick = (id: SanitizedAdminUser['id']) => async () => {\n setIdsToDelete([id]);\n setShowDeleteConfirmation(true);\n };\n\n const confirmDelete = async () => {\n await handleDeleteAll(idsToDelete);\n setShowDeleteConfirmation(false);\n };\n\n // block rendering until the EE component is fully loaded\n if (!CreateAction) {\n return null;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Users',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={canCreate && <CreateAction onClick={handleToggle} />}\n title={title}\n subtitle={formatMessage({\n id: 'Settings.permissions.users.listview.header.subtitle',\n defaultMessage: 'All the users who have access to the Strapi admin panel',\n })}\n />\n <Layouts.Action\n startActions={\n <>\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n <Filters.Root options={FILTERS}>\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n </>\n }\n />\n <Layouts.Content>\n <Table.Root rows={users} headers={headers}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n {canDelete ? <Table.HeaderCheckboxCell /> : null}\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {users.map((user) => (\n <Table.Row\n key={user.id}\n onClick={handleRowClick(user.id)}\n cursor={canRead ? 'pointer' : 'default'}\n >\n {canDelete ? <Table.CheckboxCell id={user.id} /> : null}\n {headers.map(({ cellFormatter, name, ...rest }) => {\n return (\n <Table.Cell key={name}>\n {typeof cellFormatter === 'function' ? (\n cellFormatter(user, { name, ...rest })\n ) : (\n // @ts-expect-error – name === \"roles\" has the data value of `AdminRole[]` but the header has a cellFormatter value so this shouldn't be called.\n <Typography textColor=\"neutral800\">{user[name] || '-'}</Typography>\n )}\n </Table.Cell>\n );\n })}\n {canRead || canDelete ? (\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n {canRead ? (\n <IconButton\n tag={NavLink}\n to={user.id.toString()}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {canDelete ? (\n <IconButton\n onClick={handleDeleteClick(user.id)}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {isModalOpened && <ModalForm onToggle={handleToggle} />}\n <Dialog.Root open={showDeleteConfirmation} onOpenChange={setShowDeleteConfirmation}>\n <ConfirmDialog onConfirm={confirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nconst TABLE_HEADERS: Array<\n Omit<Table.Header<SanitizedAdminUser, any>, 'label'> & { label: MessageDescriptor }\n> = [\n {\n name: 'firstname',\n label: {\n id: 'Settings.permissions.users.firstname',\n defaultMessage: 'Firstname',\n },\n sortable: true,\n },\n {\n name: 'lastname',\n label: {\n id: 'Settings.permissions.users.lastname',\n defaultMessage: 'Lastname',\n },\n sortable: true,\n },\n {\n name: 'email',\n label: { id: 'Settings.permissions.users.email', defaultMessage: 'Email' },\n sortable: true,\n },\n {\n name: 'roles',\n label: {\n id: 'Settings.permissions.users.roles',\n defaultMessage: 'Roles',\n },\n sortable: false,\n cellFormatter({ roles }) {\n return (\n <Typography textColor=\"neutral800\">{roles.map((role) => role.name).join(',\\n')}</Typography>\n );\n },\n },\n {\n name: 'username',\n label: {\n id: 'Settings.permissions.users.username',\n defaultMessage: 'Username',\n },\n sortable: true,\n },\n {\n name: 'isActive',\n label: {\n id: 'Settings.permissions.users.user-status',\n defaultMessage: 'User status',\n },\n sortable: false,\n cellFormatter({ isActive }) {\n return (\n <Flex>\n <Status size=\"S\" variant={isActive ? 'success' : 'danger'}>\n <Typography tag=\"span\" variant=\"omega\" fontWeight=\"bold\">\n {isActive ? 'Active' : 'Inactive'}\n </Typography>\n </Status>\n </Flex>\n );\n },\n },\n];\n\nconst FILTERS = [\n {\n name: 'firstname',\n label: 'Firstname',\n type: 'string',\n },\n {\n name: 'lastname',\n label: 'Lastname',\n type: 'string',\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n },\n {\n name: 'username',\n label: 'Username',\n type: 'string',\n },\n {\n name: 'isActive',\n label: 'Active user',\n type: 'boolean',\n },\n] satisfies Filters.Filter[];\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\n// component which determines whether this page should render the CE or EE page\nconst ListPage = () => {\n const UsersListPage = useEnterprise(\n ListPageCE,\n async () =>\n // eslint-disable-next-line import/no-cycle\n (await import('../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage'))\n .UserListPageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!UsersListPage) {\n return null;\n }\n\n return <UsersListPage />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.users.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage, ListPageCE };\n"],"names":["ListPageCE","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isModalOpened","setIsModalOpen","React","useState","permissions","useTypedSelector","state","admin_app","allowedActions","canCreate","canDelete","canRead","useRBAC","settings","users","navigate","useNavigate","toggleNotification","useNotification","formatMessage","useIntl","search","useLocation","showDeleteConfirmation","setShowDeleteConfirmation","idsToDelete","setIdsToDelete","data","isError","isLoading","useAdminUsers","qs","parse","ignoreQueryPrefix","pagination","CreateAction","useEnterprise","CreateActionCE","CreateActionEE","headers","TABLE_HEADERS","map","header","label","title","id","defaultMessage","handleToggle","prev","deleteAll","useDeleteManyUsersMutation","handleDeleteAll","ids","res","type","message","error","err","handleRowClick","toString","handleDeleteClick","confirmDelete","_jsx","Page","Error","_jsxs","Main","aria-busy","Title","name","Layouts","Header","primaryAction","onClick","subtitle","Action","startActions","_Fragment","SearchInput","target","Filters","Root","options","FILTERS","Trigger","Popover","List","Content","Table","rows","ActionBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Loading","Body","user","Row","cursor","CheckboxCell","cellFormatter","rest","Cell","Typography","textColor","e","stopPropagation","Flex","justifyContent","IconButton","tag","NavLink","to","getDisplayName","variant","Pencil","Trash","Pagination","PageSize","Links","ModalForm","onToggle","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","sortable","roles","role","join","isActive","Status","size","fontWeight","ListPage","UsersListPage","UserListPageEE","ProtectedListPage","read","Protect"],"mappings":"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"}
@@ -295,11 +295,11 @@ const TABLE_HEADERS = [
295
295
  return /*#__PURE__*/ jsx(Flex, {
296
296
  children: /*#__PURE__*/ jsx(Status, {
297
297
  size: "S",
298
- borderWidth: 0,
299
- background: "transparent",
300
- color: "neutral800",
301
298
  variant: isActive ? 'success' : 'danger',
302
299
  children: /*#__PURE__*/ jsx(Typography, {
300
+ tag: "span",
301
+ variant: "omega",
302
+ fontWeight: "bold",
303
303
  children: isActive ? 'Active' : 'Inactive'
304
304
  })
305
305
  })
@@ -1 +1 @@
1
- {"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Users/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography, Status, IconButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport * as qs from 'qs';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\n\nimport { SanitizedAdminUser } from '../../../../../../shared/contracts/shared';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Filters } from '../../../../components/Filters';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { Pagination } from '../../../../components/Pagination';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { Table } from '../../../../components/Table';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useAdminUsers, useDeleteManyUsersMutation } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\n\nimport { CreateActionCE } from './components/CreateActionCE';\nimport { ModalForm } from './components/NewUserForm';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPageCE = () => {\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [isModalOpened, setIsModalOpen] = React.useState(false);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const {\n allowedActions: { canCreate, canDelete, canRead },\n } = useRBAC(permissions.settings?.users);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search } = useLocation();\n const [showDeleteConfirmation, setShowDeleteConfirmation] = React.useState(false);\n const [idsToDelete, setIdsToDelete] = React.useState<Array<SanitizedAdminUser['id']>>([]);\n const { data, isError, isLoading } = useAdminUsers(qs.parse(search, { ignoreQueryPrefix: true }));\n\n const { pagination, users = [] } = data ?? {};\n\n const CreateAction = useEnterprise(\n CreateActionCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE'\n )\n ).CreateActionEE\n );\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const title = formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n });\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const [deleteAll] = useDeleteManyUsersMutation();\n const handleDeleteAll = async (ids: Array<SanitizedAdminUser['id']>) => {\n try {\n const res = await deleteAll({ ids });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'global.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const handleRowClick = (id: SanitizedAdminUser['id']) => () => {\n if (canRead) {\n navigate(id.toString());\n }\n };\n\n const handleDeleteClick = (id: SanitizedAdminUser['id']) => async () => {\n setIdsToDelete([id]);\n setShowDeleteConfirmation(true);\n };\n\n const confirmDelete = async () => {\n await handleDeleteAll(idsToDelete);\n setShowDeleteConfirmation(false);\n };\n\n // block rendering until the EE component is fully loaded\n if (!CreateAction) {\n return null;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Users',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={canCreate && <CreateAction onClick={handleToggle} />}\n title={title}\n subtitle={formatMessage({\n id: 'Settings.permissions.users.listview.header.subtitle',\n defaultMessage: 'All the users who have access to the Strapi admin panel',\n })}\n />\n <Layouts.Action\n startActions={\n <>\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n <Filters.Root options={FILTERS}>\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n </>\n }\n />\n <Layouts.Content>\n <Table.Root rows={users} headers={headers}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n {canDelete ? <Table.HeaderCheckboxCell /> : null}\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {users.map((user) => (\n <Table.Row\n key={user.id}\n onClick={handleRowClick(user.id)}\n cursor={canRead ? 'pointer' : 'default'}\n >\n {canDelete ? <Table.CheckboxCell id={user.id} /> : null}\n {headers.map(({ cellFormatter, name, ...rest }) => {\n return (\n <Table.Cell key={name}>\n {typeof cellFormatter === 'function' ? (\n cellFormatter(user, { name, ...rest })\n ) : (\n // @ts-expect-error – name === \"roles\" has the data value of `AdminRole[]` but the header has a cellFormatter value so this shouldn't be called.\n <Typography textColor=\"neutral800\">{user[name] || '-'}</Typography>\n )}\n </Table.Cell>\n );\n })}\n {canRead || canDelete ? (\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n {canRead ? (\n <IconButton\n tag={NavLink}\n to={user.id.toString()}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {canDelete ? (\n <IconButton\n onClick={handleDeleteClick(user.id)}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {isModalOpened && <ModalForm onToggle={handleToggle} />}\n <Dialog.Root open={showDeleteConfirmation} onOpenChange={setShowDeleteConfirmation}>\n <ConfirmDialog onConfirm={confirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nconst TABLE_HEADERS: Array<\n Omit<Table.Header<SanitizedAdminUser, any>, 'label'> & { label: MessageDescriptor }\n> = [\n {\n name: 'firstname',\n label: {\n id: 'Settings.permissions.users.firstname',\n defaultMessage: 'Firstname',\n },\n sortable: true,\n },\n {\n name: 'lastname',\n label: {\n id: 'Settings.permissions.users.lastname',\n defaultMessage: 'Lastname',\n },\n sortable: true,\n },\n {\n name: 'email',\n label: { id: 'Settings.permissions.users.email', defaultMessage: 'Email' },\n sortable: true,\n },\n {\n name: 'roles',\n label: {\n id: 'Settings.permissions.users.roles',\n defaultMessage: 'Roles',\n },\n sortable: false,\n cellFormatter({ roles }) {\n return (\n <Typography textColor=\"neutral800\">{roles.map((role) => role.name).join(',\\n')}</Typography>\n );\n },\n },\n {\n name: 'username',\n label: {\n id: 'Settings.permissions.users.username',\n defaultMessage: 'Username',\n },\n sortable: true,\n },\n {\n name: 'isActive',\n label: {\n id: 'Settings.permissions.users.user-status',\n defaultMessage: 'User status',\n },\n sortable: false,\n cellFormatter({ isActive }) {\n return (\n <Flex>\n <Status\n size=\"S\"\n borderWidth={0}\n background=\"transparent\"\n color=\"neutral800\"\n variant={isActive ? 'success' : 'danger'}\n >\n <Typography>{isActive ? 'Active' : 'Inactive'}</Typography>\n </Status>\n </Flex>\n );\n },\n },\n];\n\nconst FILTERS = [\n {\n name: 'firstname',\n label: 'Firstname',\n type: 'string',\n },\n {\n name: 'lastname',\n label: 'Lastname',\n type: 'string',\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n },\n {\n name: 'username',\n label: 'Username',\n type: 'string',\n },\n {\n name: 'isActive',\n label: 'Active user',\n type: 'boolean',\n },\n] satisfies Filters.Filter[];\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\n// component which determines whether this page should render the CE or EE page\nconst ListPage = () => {\n const UsersListPage = useEnterprise(\n ListPageCE,\n async () =>\n // eslint-disable-next-line import/no-cycle\n (await import('../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage'))\n .UserListPageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!UsersListPage) {\n return null;\n }\n\n return <UsersListPage />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.users.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage, ListPageCE };\n"],"names":["ListPageCE","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isModalOpened","setIsModalOpen","React","useState","permissions","useTypedSelector","state","admin_app","allowedActions","canCreate","canDelete","canRead","useRBAC","settings","users","navigate","useNavigate","toggleNotification","useNotification","formatMessage","useIntl","search","useLocation","showDeleteConfirmation","setShowDeleteConfirmation","idsToDelete","setIdsToDelete","data","isError","isLoading","useAdminUsers","qs","parse","ignoreQueryPrefix","pagination","CreateAction","useEnterprise","CreateActionCE","CreateActionEE","headers","TABLE_HEADERS","map","header","label","title","id","defaultMessage","handleToggle","prev","deleteAll","useDeleteManyUsersMutation","handleDeleteAll","ids","res","type","message","error","err","handleRowClick","toString","handleDeleteClick","confirmDelete","_jsx","Page","Error","_jsxs","Main","aria-busy","Title","name","Layouts","Header","primaryAction","onClick","subtitle","Action","startActions","_Fragment","SearchInput","target","Filters","Root","options","FILTERS","Trigger","Popover","List","Content","Table","rows","ActionBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Loading","Body","user","Row","cursor","CheckboxCell","cellFormatter","rest","Cell","Typography","textColor","e","stopPropagation","Flex","justifyContent","IconButton","tag","NavLink","to","getDisplayName","variant","Pencil","Trash","Pagination","PageSize","Links","ModalForm","onToggle","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","sortable","roles","role","join","isActive","Status","size","borderWidth","background","color","ListPage","UsersListPage","UserListPageEE","ProtectedListPage","read","Protect"],"mappings":"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"}
1
+ {"version":3,"file":"ListPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Users/ListPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex, Typography, Status, IconButton, Dialog } from '@strapi/design-system';\nimport { Pencil, Trash } from '@strapi/icons';\nimport * as qs from 'qs';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { NavLink, useLocation, useNavigate } from 'react-router-dom';\n\nimport { SanitizedAdminUser } from '../../../../../../shared/contracts/shared';\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { Filters } from '../../../../components/Filters';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { Pagination } from '../../../../components/Pagination';\nimport { SearchInput } from '../../../../components/SearchInput';\nimport { Table } from '../../../../components/Table';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useEnterprise } from '../../../../hooks/useEnterprise';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useAdminUsers, useDeleteManyUsersMutation } from '../../../../services/users';\nimport { getDisplayName } from '../../../../utils/users';\n\nimport { CreateActionCE } from './components/CreateActionCE';\nimport { ModalForm } from './components/NewUserForm';\n\n/* -------------------------------------------------------------------------------------------------\n * ListPageCE\n * -----------------------------------------------------------------------------------------------*/\n\nconst ListPageCE = () => {\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n const [isModalOpened, setIsModalOpen] = React.useState(false);\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const {\n allowedActions: { canCreate, canDelete, canRead },\n } = useRBAC(permissions.settings?.users);\n const navigate = useNavigate();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { search } = useLocation();\n const [showDeleteConfirmation, setShowDeleteConfirmation] = React.useState(false);\n const [idsToDelete, setIdsToDelete] = React.useState<Array<SanitizedAdminUser['id']>>([]);\n const { data, isError, isLoading } = useAdminUsers(qs.parse(search, { ignoreQueryPrefix: true }));\n\n const { pagination, users = [] } = data ?? {};\n\n const CreateAction = useEnterprise(\n CreateActionCE,\n async () =>\n (\n await import(\n '../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/components/CreateActionEE'\n )\n ).CreateActionEE\n );\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n const title = formatMessage({\n id: 'global.users',\n defaultMessage: 'Users',\n });\n\n const handleToggle = () => {\n setIsModalOpen((prev) => !prev);\n };\n\n const [deleteAll] = useDeleteManyUsersMutation();\n const handleDeleteAll = async (ids: Array<SanitizedAdminUser['id']>) => {\n try {\n const res = await deleteAll({ ids });\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'global.error',\n defaultMessage: 'An error occurred',\n }),\n });\n }\n };\n\n const handleRowClick = (id: SanitizedAdminUser['id']) => () => {\n if (canRead) {\n navigate(id.toString());\n }\n };\n\n const handleDeleteClick = (id: SanitizedAdminUser['id']) => async () => {\n setIdsToDelete([id]);\n setShowDeleteConfirmation(true);\n };\n\n const confirmDelete = async () => {\n await handleDeleteAll(idsToDelete);\n setShowDeleteConfirmation(false);\n };\n\n // block rendering until the EE component is fully loaded\n if (!CreateAction) {\n return null;\n }\n\n if (isError) {\n return <Page.Error />;\n }\n\n return (\n <Page.Main aria-busy={isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Users',\n }\n )}\n </Page.Title>\n <Layouts.Header\n primaryAction={canCreate && <CreateAction onClick={handleToggle} />}\n title={title}\n subtitle={formatMessage({\n id: 'Settings.permissions.users.listview.header.subtitle',\n defaultMessage: 'All the users who have access to the Strapi admin panel',\n })}\n />\n <Layouts.Action\n startActions={\n <>\n <SearchInput\n label={formatMessage(\n { id: 'app.component.search.label', defaultMessage: 'Search for {target}' },\n { target: title }\n )}\n />\n <Filters.Root options={FILTERS}>\n <Filters.Trigger />\n <Filters.Popover />\n <Filters.List />\n </Filters.Root>\n </>\n }\n />\n <Layouts.Content>\n <Table.Root rows={users} headers={headers}>\n <Table.ActionBar />\n <Table.Content>\n <Table.Head>\n {canDelete ? <Table.HeaderCheckboxCell /> : null}\n {headers.map((header) => (\n <Table.HeaderCell key={header.name} {...header} />\n ))}\n </Table.Head>\n <Table.Empty />\n <Table.Loading />\n <Table.Body>\n {users.map((user) => (\n <Table.Row\n key={user.id}\n onClick={handleRowClick(user.id)}\n cursor={canRead ? 'pointer' : 'default'}\n >\n {canDelete ? <Table.CheckboxCell id={user.id} /> : null}\n {headers.map(({ cellFormatter, name, ...rest }) => {\n return (\n <Table.Cell key={name}>\n {typeof cellFormatter === 'function' ? (\n cellFormatter(user, { name, ...rest })\n ) : (\n // @ts-expect-error – name === \"roles\" has the data value of `AdminRole[]` but the header has a cellFormatter value so this shouldn't be called.\n <Typography textColor=\"neutral800\">{user[name] || '-'}</Typography>\n )}\n </Table.Cell>\n );\n })}\n {canRead || canDelete ? (\n <Table.Cell onClick={(e) => e.stopPropagation()}>\n <Flex justifyContent=\"end\">\n {canRead ? (\n <IconButton\n tag={NavLink}\n to={user.id.toString()}\n label={formatMessage(\n { id: 'app.component.table.edit', defaultMessage: 'Edit {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Pencil />\n </IconButton>\n ) : null}\n {canDelete ? (\n <IconButton\n onClick={handleDeleteClick(user.id)}\n label={formatMessage(\n { id: 'global.delete-target', defaultMessage: 'Delete {target}' },\n { target: getDisplayName(user) }\n )}\n variant=\"ghost\"\n >\n <Trash />\n </IconButton>\n ) : null}\n </Flex>\n </Table.Cell>\n ) : null}\n </Table.Row>\n ))}\n </Table.Body>\n </Table.Content>\n </Table.Root>\n <Pagination.Root {...pagination}>\n <Pagination.PageSize />\n <Pagination.Links />\n </Pagination.Root>\n </Layouts.Content>\n {isModalOpened && <ModalForm onToggle={handleToggle} />}\n <Dialog.Root open={showDeleteConfirmation} onOpenChange={setShowDeleteConfirmation}>\n <ConfirmDialog onConfirm={confirmDelete} />\n </Dialog.Root>\n </Page.Main>\n );\n};\n\nconst TABLE_HEADERS: Array<\n Omit<Table.Header<SanitizedAdminUser, any>, 'label'> & { label: MessageDescriptor }\n> = [\n {\n name: 'firstname',\n label: {\n id: 'Settings.permissions.users.firstname',\n defaultMessage: 'Firstname',\n },\n sortable: true,\n },\n {\n name: 'lastname',\n label: {\n id: 'Settings.permissions.users.lastname',\n defaultMessage: 'Lastname',\n },\n sortable: true,\n },\n {\n name: 'email',\n label: { id: 'Settings.permissions.users.email', defaultMessage: 'Email' },\n sortable: true,\n },\n {\n name: 'roles',\n label: {\n id: 'Settings.permissions.users.roles',\n defaultMessage: 'Roles',\n },\n sortable: false,\n cellFormatter({ roles }) {\n return (\n <Typography textColor=\"neutral800\">{roles.map((role) => role.name).join(',\\n')}</Typography>\n );\n },\n },\n {\n name: 'username',\n label: {\n id: 'Settings.permissions.users.username',\n defaultMessage: 'Username',\n },\n sortable: true,\n },\n {\n name: 'isActive',\n label: {\n id: 'Settings.permissions.users.user-status',\n defaultMessage: 'User status',\n },\n sortable: false,\n cellFormatter({ isActive }) {\n return (\n <Flex>\n <Status size=\"S\" variant={isActive ? 'success' : 'danger'}>\n <Typography tag=\"span\" variant=\"omega\" fontWeight=\"bold\">\n {isActive ? 'Active' : 'Inactive'}\n </Typography>\n </Status>\n </Flex>\n );\n },\n },\n];\n\nconst FILTERS = [\n {\n name: 'firstname',\n label: 'Firstname',\n type: 'string',\n },\n {\n name: 'lastname',\n label: 'Lastname',\n type: 'string',\n },\n {\n name: 'email',\n label: 'Email',\n type: 'email',\n },\n {\n name: 'username',\n label: 'Username',\n type: 'string',\n },\n {\n name: 'isActive',\n label: 'Active user',\n type: 'boolean',\n },\n] satisfies Filters.Filter[];\n\n/* -------------------------------------------------------------------------------------------------\n * ListPage\n * -----------------------------------------------------------------------------------------------*/\n\n// component which determines whether this page should render the CE or EE page\nconst ListPage = () => {\n const UsersListPage = useEnterprise(\n ListPageCE,\n async () =>\n // eslint-disable-next-line import/no-cycle\n (await import('../../../../../../ee/admin/src/pages/SettingsPage/pages/Users/ListPage'))\n .UserListPageEE\n );\n\n // block rendering until the EE component is fully loaded\n if (!UsersListPage) {\n return null;\n }\n\n return <UsersListPage />;\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedListPage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedListPage = () => {\n const permissions = useTypedSelector((state) => state.admin_app.permissions.settings?.users.read);\n\n return (\n <Page.Protect permissions={permissions}>\n <ListPage />\n </Page.Protect>\n );\n};\n\nexport { ProtectedListPage, ListPage, ListPageCE };\n"],"names":["ListPageCE","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","isModalOpened","setIsModalOpen","React","useState","permissions","useTypedSelector","state","admin_app","allowedActions","canCreate","canDelete","canRead","useRBAC","settings","users","navigate","useNavigate","toggleNotification","useNotification","formatMessage","useIntl","search","useLocation","showDeleteConfirmation","setShowDeleteConfirmation","idsToDelete","setIdsToDelete","data","isError","isLoading","useAdminUsers","qs","parse","ignoreQueryPrefix","pagination","CreateAction","useEnterprise","CreateActionCE","CreateActionEE","headers","TABLE_HEADERS","map","header","label","title","id","defaultMessage","handleToggle","prev","deleteAll","useDeleteManyUsersMutation","handleDeleteAll","ids","res","type","message","error","err","handleRowClick","toString","handleDeleteClick","confirmDelete","_jsx","Page","Error","_jsxs","Main","aria-busy","Title","name","Layouts","Header","primaryAction","onClick","subtitle","Action","startActions","_Fragment","SearchInput","target","Filters","Root","options","FILTERS","Trigger","Popover","List","Content","Table","rows","ActionBar","Head","HeaderCheckboxCell","HeaderCell","Empty","Loading","Body","user","Row","cursor","CheckboxCell","cellFormatter","rest","Cell","Typography","textColor","e","stopPropagation","Flex","justifyContent","IconButton","tag","NavLink","to","getDisplayName","variant","Pencil","Trash","Pagination","PageSize","Links","ModalForm","onToggle","Dialog","open","onOpenChange","ConfirmDialog","onConfirm","sortable","roles","role","join","isActive","Status","size","fontWeight","ListPage","UsersListPage","UserListPageEE","ProtectedListPage","read","Protect"],"mappings":"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"}