@strapi/admin 5.21.0 → 5.23.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 (132) hide show
  1. package/dist/admin/admin/src/StrapiApp.js +38 -8
  2. package/dist/admin/admin/src/StrapiApp.js.map +1 -1
  3. package/dist/admin/admin/src/StrapiApp.mjs +36 -6
  4. package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
  5. package/dist/admin/admin/src/components/GuidedTour/Context.js +23 -8
  6. package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
  7. package/dist/admin/admin/src/components/GuidedTour/Context.mjs +23 -8
  8. package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
  9. package/dist/admin/admin/src/components/GuidedTour/Overview.js +7 -5
  10. package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
  11. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs +7 -5
  12. package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
  13. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js +156 -0
  14. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js.map +1 -0
  15. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs +154 -0
  16. package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs.map +1 -0
  17. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js +221 -0
  18. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js.map +1 -0
  19. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs +219 -0
  20. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs.map +1 -0
  21. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +219 -0
  22. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -0
  23. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +217 -0
  24. package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -0
  25. package/dist/admin/admin/src/components/GuidedTour/{Step.js → Steps/Step.js} +116 -71
  26. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -0
  27. package/dist/admin/admin/src/components/GuidedTour/{Step.mjs → Steps/Step.mjs} +117 -74
  28. package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -0
  29. package/dist/admin/admin/src/components/GuidedTour/Tours.js +47 -322
  30. package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
  31. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +48 -324
  32. package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
  33. package/dist/admin/admin/src/components/GuidedTour/utils/constants.js +19 -0
  34. package/dist/admin/admin/src/components/GuidedTour/utils/constants.js.map +1 -0
  35. package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs +17 -0
  36. package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs.map +1 -0
  37. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js +31 -0
  38. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -0
  39. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs +29 -0
  40. package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -0
  41. package/dist/admin/admin/src/components/SubNav.js +3 -1
  42. package/dist/admin/admin/src/components/SubNav.js.map +1 -1
  43. package/dist/admin/admin/src/components/SubNav.mjs +3 -1
  44. package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
  45. package/dist/admin/admin/src/components/Widgets.js +27 -9
  46. package/dist/admin/admin/src/components/Widgets.js.map +1 -1
  47. package/dist/admin/admin/src/components/Widgets.mjs +28 -10
  48. package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
  49. package/dist/admin/admin/src/features/Tracking.js.map +1 -1
  50. package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
  51. package/dist/admin/admin/src/pages/Home/HomePage.js +40 -33
  52. package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
  53. package/dist/admin/admin/src/pages/Home/HomePage.mjs +41 -34
  54. package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
  55. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +17 -14
  56. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
  57. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +17 -14
  58. package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
  59. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +31 -6
  60. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
  61. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +12 -6
  62. package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
  63. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +28 -24
  64. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
  65. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +28 -24
  66. package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
  67. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
  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/ListView.js +56 -57
  70. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
  71. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +57 -58
  72. package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
  73. package/dist/admin/admin/src/services/apiTokens.js +0 -1
  74. package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
  75. package/dist/admin/admin/src/services/apiTokens.mjs +0 -1
  76. package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
  77. package/dist/admin/admin/src/translations/en.json.js +35 -21
  78. package/dist/admin/admin/src/translations/en.json.js.map +1 -1
  79. package/dist/admin/admin/src/translations/en.json.mjs +35 -21
  80. package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
  81. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js +131 -0
  82. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -0
  83. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs +129 -0
  84. package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -0
  85. package/dist/admin/ee/admin/src/constants.js +3 -1
  86. package/dist/admin/ee/admin/src/constants.js.map +1 -1
  87. package/dist/admin/ee/admin/src/constants.mjs +3 -2
  88. package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
  89. package/dist/admin/index.js +6 -2
  90. package/dist/admin/index.js.map +1 -1
  91. package/dist/admin/index.mjs +2 -0
  92. package/dist/admin/index.mjs.map +1 -1
  93. package/dist/admin/src/components/GuidedTour/Context.d.ts +26 -9
  94. package/dist/admin/src/components/GuidedTour/Steps/ApiTokensSteps.d.ts +20 -0
  95. package/dist/admin/src/components/GuidedTour/Steps/ContentManagerSteps.d.ts +21 -0
  96. package/dist/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.d.ts +30 -0
  97. package/dist/admin/src/components/GuidedTour/{Step.d.ts → Steps/Step.d.ts} +25 -6
  98. package/dist/admin/src/components/GuidedTour/Tours.d.ts +53 -14
  99. package/dist/admin/src/components/GuidedTour/utils/constants.d.ts +15 -0
  100. package/dist/admin/src/components/GuidedTour/utils/migrations.d.ts +6 -0
  101. package/dist/admin/src/features/Tracking.d.ts +20 -2
  102. package/dist/admin/src/index.d.ts +5 -0
  103. package/dist/admin/src/pages/Home/HomePage.d.ts +2 -2
  104. package/dist/ee/admin/src/components/AuditLogs/Widgets.d.ts +2 -0
  105. package/dist/ee/admin/src/constants.d.ts +1 -0
  106. package/dist/server/server/src/controllers/admin.js +2 -5
  107. package/dist/server/server/src/controllers/admin.js.map +1 -1
  108. package/dist/server/server/src/controllers/admin.mjs +2 -5
  109. package/dist/server/server/src/controllers/admin.mjs.map +1 -1
  110. package/dist/server/server/src/services/index.js +0 -2
  111. package/dist/server/server/src/services/index.js.map +1 -1
  112. package/dist/server/server/src/services/index.mjs +0 -2
  113. package/dist/server/server/src/services/index.mjs.map +1 -1
  114. package/dist/server/src/controllers/admin.d.ts +1 -1
  115. package/dist/server/src/controllers/admin.d.ts.map +1 -1
  116. package/dist/server/src/controllers/index.d.ts +1 -1
  117. package/dist/server/src/index.d.ts +1 -6
  118. package/dist/server/src/index.d.ts.map +1 -1
  119. package/dist/server/src/services/constants.d.ts +1 -0
  120. package/dist/server/src/services/guided-tour.d.ts +2 -3
  121. package/dist/server/src/services/guided-tour.d.ts.map +1 -1
  122. package/dist/server/src/services/index.d.ts +0 -5
  123. package/dist/server/src/services/index.d.ts.map +1 -1
  124. package/dist/shared/contracts/admin.d.ts +2 -2
  125. package/dist/shared/contracts/admin.d.ts.map +1 -1
  126. package/package.json +7 -7
  127. package/dist/admin/admin/src/components/GuidedTour/Step.js.map +0 -1
  128. package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +0 -1
  129. package/dist/server/server/src/services/guided-tour.js +0 -61
  130. package/dist/server/server/src/services/guided-tour.js.map +0 -1
  131. package/dist/server/server/src/services/guided-tour.mjs +0 -59
  132. package/dist/server/server/src/services/guided-tour.mjs.map +0 -1
@@ -149,6 +149,9 @@ const ListView = ()=>{
149
149
  };
150
150
  return /*#__PURE__*/ jsxRuntime.jsxs(jsxRuntime.Fragment, {
151
151
  children: [
152
+ apiTokens$1.length > 0 && /*#__PURE__*/ jsxRuntime.jsx(Tours.tours.apiTokens.Introduction, {
153
+ children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.Box, {})
154
+ }),
152
155
  /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Title, {
153
156
  children: formatMessage({
154
157
  id: 'Settings.PageTitle',
@@ -166,70 +169,66 @@ const ListView = ()=>{
166
169
  id: 'Settings.apiTokens.description',
167
170
  defaultMessage: 'List of generated tokens to consume the API'
168
171
  }),
169
- primaryAction: canCreate && /*#__PURE__*/ jsxRuntime.jsx(Tours.tours.apiTokens.CreateAnAPIToken, {
170
- children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
171
- tag: reactRouterDom.Link,
172
- "data-testid": "create-api-token-button",
173
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
174
- size: "S",
175
- onClick: ()=>trackUsage('willAddTokenFromList', {
176
- tokenType: constants.API_TOKEN_TYPE
177
- }),
178
- to: "/settings/api-tokens/create",
179
- children: formatMessage({
180
- id: 'Settings.apiTokens.create',
181
- defaultMessage: 'Create new API Token'
182
- })
172
+ primaryAction: canCreate && /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
173
+ tag: reactRouterDom.Link,
174
+ "data-testid": "create-api-token-button",
175
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
176
+ size: "S",
177
+ onClick: ()=>trackUsage('willAddTokenFromList', {
178
+ tokenType: constants.API_TOKEN_TYPE
179
+ }),
180
+ to: "/settings/api-tokens/create",
181
+ children: formatMessage({
182
+ id: 'Settings.apiTokens.create',
183
+ defaultMessage: 'Create new API Token'
183
184
  })
184
185
  })
185
186
  }),
186
187
  !canRead ? /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.NoPermissions, {}) : /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Main, {
187
188
  "aria-busy": isLoading,
188
- children: /*#__PURE__*/ jsxRuntime.jsx(Tours.tours.apiTokens.Introduction, {
189
- children: /*#__PURE__*/ jsxRuntime.jsxs(Layout.Layouts.Content, {
190
- children: [
191
- apiTokens$1.length > 0 && /*#__PURE__*/ jsxRuntime.jsx(Table.Table, {
192
- permissions: {
193
- canRead,
194
- canDelete,
195
- canUpdate
196
- },
197
- headers: headers,
198
- isLoading: isLoading,
199
- onConfirmDelete: handleDelete,
200
- tokens: apiTokens$1,
201
- tokenType: constants.API_TOKEN_TYPE
189
+ children: /*#__PURE__*/ jsxRuntime.jsxs(Layout.Layouts.Content, {
190
+ children: [
191
+ apiTokens$1.length > 0 && /*#__PURE__*/ jsxRuntime.jsx(Table.Table, {
192
+ permissions: {
193
+ canRead,
194
+ canDelete,
195
+ canUpdate
196
+ },
197
+ headers: headers,
198
+ isLoading: isLoading,
199
+ onConfirmDelete: handleDelete,
200
+ tokens: apiTokens$1,
201
+ tokenType: constants.API_TOKEN_TYPE
202
+ }),
203
+ canCreate && apiTokens$1.length === 0 ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.EmptyStateLayout, {
204
+ icon: /*#__PURE__*/ jsxRuntime.jsx(symbols.EmptyDocuments, {
205
+ width: "16rem"
202
206
  }),
203
- canCreate && apiTokens$1.length === 0 ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.EmptyStateLayout, {
204
- icon: /*#__PURE__*/ jsxRuntime.jsx(symbols.EmptyDocuments, {
205
- width: "16rem"
206
- }),
207
- content: formatMessage({
208
- id: 'Settings.apiTokens.addFirstToken',
209
- defaultMessage: 'Add your first API Token'
210
- }),
211
- action: /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
212
- tag: reactRouterDom.Link,
213
- variant: "secondary",
214
- startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
215
- to: "/settings/api-tokens/create",
216
- children: formatMessage({
217
- id: 'Settings.apiTokens.addNewToken',
218
- defaultMessage: 'Add new API Token'
219
- })
220
- })
221
- }) : null,
222
- !canCreate && apiTokens$1.length === 0 ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.EmptyStateLayout, {
223
- icon: /*#__PURE__*/ jsxRuntime.jsx(symbols.EmptyDocuments, {
224
- width: "16rem"
225
- }),
226
- content: formatMessage({
227
- id: 'Settings.apiTokens.emptyStateLayout',
228
- defaultMessage: 'You don’t have any content yet...'
207
+ content: formatMessage({
208
+ id: 'Settings.apiTokens.addFirstToken',
209
+ defaultMessage: 'Add your first API Token'
210
+ }),
211
+ action: /*#__PURE__*/ jsxRuntime.jsx(designSystem.LinkButton, {
212
+ tag: reactRouterDom.Link,
213
+ variant: "secondary",
214
+ startIcon: /*#__PURE__*/ jsxRuntime.jsx(icons.Plus, {}),
215
+ to: "/settings/api-tokens/create",
216
+ children: formatMessage({
217
+ id: 'Settings.apiTokens.addNewToken',
218
+ defaultMessage: 'Add new API Token'
229
219
  })
230
- }) : null
231
- ]
232
- })
220
+ })
221
+ }) : null,
222
+ !canCreate && apiTokens$1.length === 0 ? /*#__PURE__*/ jsxRuntime.jsx(designSystem.EmptyStateLayout, {
223
+ icon: /*#__PURE__*/ jsxRuntime.jsx(symbols.EmptyDocuments, {
224
+ width: "16rem"
225
+ }),
226
+ content: formatMessage({
227
+ id: 'Settings.apiTokens.emptyStateLayout',
228
+ defaultMessage: 'You don’t have any content yet...'
229
+ })
230
+ }) : null
231
+ ]
233
232
  })
234
233
  })
235
234
  ]
@@ -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 { tours } from '../../../../components/GuidedTour/Tours';\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\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\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 <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 </tours.apiTokens.CreateAnAPIToken>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <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 </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","_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","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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"}
1
+ {"version":3,"file":"ListView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, 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 { tours } from '../../../../components/GuidedTour/Tours';\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\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\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 {apiTokens.length > 0 && (\n <tours.apiTokens.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.apiTokens.Introduction>\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","_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","tours","Introduction","Box","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,6 +1,6 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
- import { LinkButton, EmptyStateLayout } from '@strapi/design-system';
3
+ import { Box, LinkButton, EmptyStateLayout } from '@strapi/design-system';
4
4
  import { Plus } from '@strapi/icons';
5
5
  import { EmptyDocuments } from '@strapi/icons/symbols';
6
6
  import * as qs from 'qs';
@@ -127,6 +127,9 @@ const ListView = ()=>{
127
127
  };
128
128
  return /*#__PURE__*/ jsxs(Fragment, {
129
129
  children: [
130
+ apiTokens.length > 0 && /*#__PURE__*/ jsx(tours.apiTokens.Introduction, {
131
+ children: /*#__PURE__*/ jsx(Box, {})
132
+ }),
130
133
  /*#__PURE__*/ jsx(Page.Title, {
131
134
  children: formatMessage({
132
135
  id: 'Settings.PageTitle',
@@ -144,70 +147,66 @@ const ListView = ()=>{
144
147
  id: 'Settings.apiTokens.description',
145
148
  defaultMessage: 'List of generated tokens to consume the API'
146
149
  }),
147
- primaryAction: canCreate && /*#__PURE__*/ jsx(tours.apiTokens.CreateAnAPIToken, {
148
- children: /*#__PURE__*/ jsx(LinkButton, {
149
- tag: Link,
150
- "data-testid": "create-api-token-button",
151
- startIcon: /*#__PURE__*/ jsx(Plus, {}),
152
- size: "S",
153
- onClick: ()=>trackUsage('willAddTokenFromList', {
154
- tokenType: API_TOKEN_TYPE
155
- }),
156
- to: "/settings/api-tokens/create",
157
- children: formatMessage({
158
- id: 'Settings.apiTokens.create',
159
- defaultMessage: 'Create new API Token'
160
- })
150
+ primaryAction: canCreate && /*#__PURE__*/ jsx(LinkButton, {
151
+ tag: Link,
152
+ "data-testid": "create-api-token-button",
153
+ startIcon: /*#__PURE__*/ jsx(Plus, {}),
154
+ size: "S",
155
+ onClick: ()=>trackUsage('willAddTokenFromList', {
156
+ tokenType: API_TOKEN_TYPE
157
+ }),
158
+ to: "/settings/api-tokens/create",
159
+ children: formatMessage({
160
+ id: 'Settings.apiTokens.create',
161
+ defaultMessage: 'Create new API Token'
161
162
  })
162
163
  })
163
164
  }),
164
165
  !canRead ? /*#__PURE__*/ jsx(Page.NoPermissions, {}) : /*#__PURE__*/ jsx(Page.Main, {
165
166
  "aria-busy": isLoading,
166
- children: /*#__PURE__*/ jsx(tours.apiTokens.Introduction, {
167
- children: /*#__PURE__*/ jsxs(Layouts.Content, {
168
- children: [
169
- apiTokens.length > 0 && /*#__PURE__*/ jsx(Table, {
170
- permissions: {
171
- canRead,
172
- canDelete,
173
- canUpdate
174
- },
175
- headers: headers,
176
- isLoading: isLoading,
177
- onConfirmDelete: handleDelete,
178
- tokens: apiTokens,
179
- tokenType: API_TOKEN_TYPE
167
+ children: /*#__PURE__*/ jsxs(Layouts.Content, {
168
+ children: [
169
+ apiTokens.length > 0 && /*#__PURE__*/ jsx(Table, {
170
+ permissions: {
171
+ canRead,
172
+ canDelete,
173
+ canUpdate
174
+ },
175
+ headers: headers,
176
+ isLoading: isLoading,
177
+ onConfirmDelete: handleDelete,
178
+ tokens: apiTokens,
179
+ tokenType: API_TOKEN_TYPE
180
+ }),
181
+ canCreate && apiTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
182
+ icon: /*#__PURE__*/ jsx(EmptyDocuments, {
183
+ width: "16rem"
180
184
  }),
181
- canCreate && apiTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
182
- icon: /*#__PURE__*/ jsx(EmptyDocuments, {
183
- width: "16rem"
184
- }),
185
- content: formatMessage({
186
- id: 'Settings.apiTokens.addFirstToken',
187
- defaultMessage: 'Add your first API Token'
188
- }),
189
- action: /*#__PURE__*/ jsx(LinkButton, {
190
- tag: Link,
191
- variant: "secondary",
192
- startIcon: /*#__PURE__*/ jsx(Plus, {}),
193
- to: "/settings/api-tokens/create",
194
- children: formatMessage({
195
- id: 'Settings.apiTokens.addNewToken',
196
- defaultMessage: 'Add new API Token'
197
- })
198
- })
199
- }) : null,
200
- !canCreate && apiTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
201
- icon: /*#__PURE__*/ jsx(EmptyDocuments, {
202
- width: "16rem"
203
- }),
204
- content: formatMessage({
205
- id: 'Settings.apiTokens.emptyStateLayout',
206
- defaultMessage: 'You don’t have any content yet...'
185
+ content: formatMessage({
186
+ id: 'Settings.apiTokens.addFirstToken',
187
+ defaultMessage: 'Add your first API Token'
188
+ }),
189
+ action: /*#__PURE__*/ jsx(LinkButton, {
190
+ tag: Link,
191
+ variant: "secondary",
192
+ startIcon: /*#__PURE__*/ jsx(Plus, {}),
193
+ to: "/settings/api-tokens/create",
194
+ children: formatMessage({
195
+ id: 'Settings.apiTokens.addNewToken',
196
+ defaultMessage: 'Add new API Token'
207
197
  })
208
- }) : null
209
- ]
210
- })
198
+ })
199
+ }) : null,
200
+ !canCreate && apiTokens.length === 0 ? /*#__PURE__*/ jsx(EmptyStateLayout, {
201
+ icon: /*#__PURE__*/ jsx(EmptyDocuments, {
202
+ width: "16rem"
203
+ }),
204
+ content: formatMessage({
205
+ id: 'Settings.apiTokens.emptyStateLayout',
206
+ defaultMessage: 'You don’t have any content yet...'
207
+ })
208
+ }) : null
209
+ ]
211
210
  })
212
211
  })
213
212
  ]
@@ -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 { tours } from '../../../../components/GuidedTour/Tours';\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\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\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 <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 </tours.apiTokens.CreateAnAPIToken>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <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 </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","_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","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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"}
1
+ {"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, 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 { tours } from '../../../../components/GuidedTour/Tours';\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\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\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 {apiTokens.length > 0 && (\n <tours.apiTokens.Introduction>\n {/* Invisible Anchor */}\n <Box />\n </tours.apiTokens.Introduction>\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","_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","tours","Introduction","Box","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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"}
@@ -44,7 +44,6 @@ const apiTokensService = api.adminApi.enhanceEndpoints({
44
44
  type: 'ApiToken',
45
45
  id: 'LIST'
46
46
  },
47
- 'GuidedTourMeta',
48
47
  'HomepageKeyStatistics'
49
48
  ]
50
49
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"apiTokens.js","sources":["../../../../../admin/src/services/apiTokens.ts"],"sourcesContent":["import * as ApiToken from '../../../shared/contracts/api-token';\n\nimport { adminApi } from './api';\n\nconst apiTokensService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['ApiToken'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getAPITokens: builder.query<ApiToken.List.Response['data'], void>({\n query: () => '/admin/api-tokens',\n transformResponse: (response: ApiToken.List.Response) => response.data,\n providesTags: (res, _err) => [\n ...(res?.map(({ id }) => ({ type: 'ApiToken' as const, id })) ?? []),\n { type: 'ApiToken' as const, id: 'LIST' },\n ],\n }),\n getAPIToken: builder.query<ApiToken.Get.Response['data'], ApiToken.Get.Params['id']>({\n query: (id) => `/admin/api-tokens/${id}`,\n transformResponse: (response: ApiToken.Get.Response) => response.data,\n providesTags: (res, _err, id) => [{ type: 'ApiToken' as const, id }],\n }),\n createAPIToken: builder.mutation<\n ApiToken.Create.Response['data'],\n ApiToken.Create.Request['body']\n >({\n query: (body) => ({\n url: '/admin/api-tokens',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: ApiToken.Create.Response) => response.data,\n invalidatesTags: [\n { type: 'ApiToken' as const, id: 'LIST' },\n 'GuidedTourMeta',\n 'HomepageKeyStatistics',\n ],\n }),\n deleteAPIToken: builder.mutation<\n ApiToken.Revoke.Response['data'],\n ApiToken.Revoke.Params['id']\n >({\n query: (id) => ({\n url: `/admin/api-tokens/${id}`,\n method: 'DELETE',\n }),\n transformResponse: (response: ApiToken.Revoke.Response) => response.data,\n invalidatesTags: (_res, _err, id) => [\n { type: 'ApiToken' as const, id },\n 'HomepageKeyStatistics',\n ],\n }),\n updateAPIToken: builder.mutation<\n ApiToken.Update.Response['data'],\n ApiToken.Update.Params & ApiToken.Update.Request['body']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/api-tokens/${id}`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (response: ApiToken.Update.Response) => response.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'ApiToken' as const, id }],\n }),\n }),\n });\n\nconst {\n useGetAPITokensQuery,\n useGetAPITokenQuery,\n useCreateAPITokenMutation,\n useDeleteAPITokenMutation,\n useUpdateAPITokenMutation,\n} = apiTokensService;\n\nexport {\n useGetAPITokensQuery,\n useGetAPITokenQuery,\n useCreateAPITokenMutation,\n useDeleteAPITokenMutation,\n useUpdateAPITokenMutation,\n};\n"],"names":["apiTokensService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getAPITokens","query","transformResponse","response","data","providesTags","res","_err","map","id","type","getAPIToken","createAPIToken","mutation","body","url","method","invalidatesTags","deleteAPIToken","_res","updateAPIToken","useGetAPITokensQuery","useGetAPITokenQuery","useCreateAPITokenMutation","useDeleteAPITokenMutation","useUpdateAPITokenMutation"],"mappings":";;;;AAIA,MAAMA,gBAAAA,GAAmBC,YACtBC,CAAAA,gBAAgB,CAAC;IAChBC,WAAa,EAAA;AAAC,QAAA;AAAW;AAC3B,CAAA,CAAA,CACCC,eAAe,CAAC;IACfC,SAAW,EAAA,CAACC,WAAa;YACvBC,YAAcD,EAAAA,OAAAA,CAAQE,KAAK,CAAuC;AAChEA,gBAAAA,KAAAA,EAAO,IAAM,mBAAA;gBACbC,iBAAmB,EAAA,CAACC,QAAqCA,GAAAA,QAAAA,CAASC,IAAI;gBACtEC,YAAc,EAAA,CAACC,KAAKC,IAAS,GAAA;AACvBD,wBAAAA,GAAAA,GAAAA,EAAKE,IAAI,CAAC,EAAEC,EAAE,EAAE,IAAM;gCAAEC,IAAM,EAAA,UAAA;AAAqBD,gCAAAA;AAAG,6BAAA,MAAO,EAAE;AACnE,wBAAA;4BAAEC,IAAM,EAAA,UAAA;4BAAqBD,EAAI,EAAA;AAAO;AACzC;AACH,aAAA,CAAA;YACAE,WAAaZ,EAAAA,OAAAA,CAAQE,KAAK,CAA2D;AACnFA,gBAAAA,KAAAA,EAAO,CAACQ,EAAO,GAAA,CAAC,kBAAkB,EAAEA,GAAG,CAAC;gBACxCP,iBAAmB,EAAA,CAACC,QAAoCA,GAAAA,QAAAA,CAASC,IAAI;gBACrEC,YAAc,EAAA,CAACC,GAAKC,EAAAA,IAAAA,EAAME,EAAO,GAAA;AAAC,wBAAA;4BAAEC,IAAM,EAAA,UAAA;AAAqBD,4BAAAA;AAAG;AAAE;AACtE,aAAA,CAAA;YACAG,cAAgBb,EAAAA,OAAAA,CAAQc,QAAQ,CAG9B;gBACAZ,KAAO,EAAA,CAACa,QAAU;wBAChBC,GAAK,EAAA,mBAAA;wBACLC,MAAQ,EAAA,MAAA;wBACRZ,IAAMU,EAAAA;qBACR,CAAA;gBACAZ,iBAAmB,EAAA,CAACC,QAAuCA,GAAAA,QAAAA,CAASC,IAAI;gBACxEa,eAAiB,EAAA;AACf,oBAAA;wBAAEP,IAAM,EAAA,UAAA;wBAAqBD,EAAI,EAAA;AAAO,qBAAA;AACxC,oBAAA,gBAAA;AACA,oBAAA;AACD;AACH,aAAA,CAAA;YACAS,cAAgBnB,EAAAA,OAAAA,CAAQc,QAAQ,CAG9B;gBACAZ,KAAO,EAAA,CAACQ,MAAQ;AACdM,wBAAAA,GAAAA,EAAK,CAAC,kBAAkB,EAAEN,EAAAA,CAAG,CAAC;wBAC9BO,MAAQ,EAAA;qBACV,CAAA;gBACAd,iBAAmB,EAAA,CAACC,QAAuCA,GAAAA,QAAAA,CAASC,IAAI;gBACxEa,eAAiB,EAAA,CAACE,IAAMZ,EAAAA,IAAAA,EAAME,EAAO,GAAA;AACnC,wBAAA;4BAAEC,IAAM,EAAA,UAAA;AAAqBD,4BAAAA;AAAG,yBAAA;AAChC,wBAAA;AACD;AACH,aAAA,CAAA;YACAW,cAAgBrB,EAAAA,OAAAA,CAAQc,QAAQ,CAG9B;AACAZ,gBAAAA,KAAAA,EAAO,CAAC,EAAEQ,EAAE,EAAE,GAAGK,IAAAA,EAAM,IAAM;AAC3BC,wBAAAA,GAAAA,EAAK,CAAC,kBAAkB,EAAEN,EAAAA,CAAG,CAAC;wBAC9BO,MAAQ,EAAA,KAAA;wBACRZ,IAAMU,EAAAA;qBACR,CAAA;gBACAZ,iBAAmB,EAAA,CAACC,QAAuCA,GAAAA,QAAAA,CAASC,IAAI;AACxEa,gBAAAA,eAAAA,EAAiB,CAACE,IAAMZ,EAAAA,IAAAA,EAAM,EAAEE,EAAE,EAAE,GAAK;AAAC,wBAAA;4BAAEC,IAAM,EAAA,UAAA;AAAqBD,4BAAAA;AAAG;AAAE;AAC9E,aAAA;SACF;AACF,CAAA,CAAA;AAEI,MAAA,EACJY,oBAAoB,EACpBC,mBAAmB,EACnBC,yBAAyB,EACzBC,yBAAyB,EACzBC,yBAAyB,EAC1B,GAAGhC;;;;;;;;"}
1
+ {"version":3,"file":"apiTokens.js","sources":["../../../../../admin/src/services/apiTokens.ts"],"sourcesContent":["import * as ApiToken from '../../../shared/contracts/api-token';\n\nimport { adminApi } from './api';\n\nconst apiTokensService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['ApiToken'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getAPITokens: builder.query<ApiToken.List.Response['data'], void>({\n query: () => '/admin/api-tokens',\n transformResponse: (response: ApiToken.List.Response) => response.data,\n providesTags: (res, _err) => [\n ...(res?.map(({ id }) => ({ type: 'ApiToken' as const, id })) ?? []),\n { type: 'ApiToken' as const, id: 'LIST' },\n ],\n }),\n getAPIToken: builder.query<ApiToken.Get.Response['data'], ApiToken.Get.Params['id']>({\n query: (id) => `/admin/api-tokens/${id}`,\n transformResponse: (response: ApiToken.Get.Response) => response.data,\n providesTags: (res, _err, id) => [{ type: 'ApiToken' as const, id }],\n }),\n createAPIToken: builder.mutation<\n ApiToken.Create.Response['data'],\n ApiToken.Create.Request['body']\n >({\n query: (body) => ({\n url: '/admin/api-tokens',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: ApiToken.Create.Response) => response.data,\n invalidatesTags: [{ type: 'ApiToken' as const, id: 'LIST' }, 'HomepageKeyStatistics'],\n }),\n deleteAPIToken: builder.mutation<\n ApiToken.Revoke.Response['data'],\n ApiToken.Revoke.Params['id']\n >({\n query: (id) => ({\n url: `/admin/api-tokens/${id}`,\n method: 'DELETE',\n }),\n transformResponse: (response: ApiToken.Revoke.Response) => response.data,\n invalidatesTags: (_res, _err, id) => [\n { type: 'ApiToken' as const, id },\n 'HomepageKeyStatistics',\n ],\n }),\n updateAPIToken: builder.mutation<\n ApiToken.Update.Response['data'],\n ApiToken.Update.Params & ApiToken.Update.Request['body']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/api-tokens/${id}`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (response: ApiToken.Update.Response) => response.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'ApiToken' as const, id }],\n }),\n }),\n });\n\nconst {\n useGetAPITokensQuery,\n useGetAPITokenQuery,\n useCreateAPITokenMutation,\n useDeleteAPITokenMutation,\n useUpdateAPITokenMutation,\n} = apiTokensService;\n\nexport {\n useGetAPITokensQuery,\n useGetAPITokenQuery,\n useCreateAPITokenMutation,\n useDeleteAPITokenMutation,\n useUpdateAPITokenMutation,\n};\n"],"names":["apiTokensService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getAPITokens","query","transformResponse","response","data","providesTags","res","_err","map","id","type","getAPIToken","createAPIToken","mutation","body","url","method","invalidatesTags","deleteAPIToken","_res","updateAPIToken","useGetAPITokensQuery","useGetAPITokenQuery","useCreateAPITokenMutation","useDeleteAPITokenMutation","useUpdateAPITokenMutation"],"mappings":"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"}
@@ -42,7 +42,6 @@ const apiTokensService = adminApi.enhanceEndpoints({
42
42
  type: 'ApiToken',
43
43
  id: 'LIST'
44
44
  },
45
- 'GuidedTourMeta',
46
45
  'HomepageKeyStatistics'
47
46
  ]
48
47
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"apiTokens.mjs","sources":["../../../../../admin/src/services/apiTokens.ts"],"sourcesContent":["import * as ApiToken from '../../../shared/contracts/api-token';\n\nimport { adminApi } from './api';\n\nconst apiTokensService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['ApiToken'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getAPITokens: builder.query<ApiToken.List.Response['data'], void>({\n query: () => '/admin/api-tokens',\n transformResponse: (response: ApiToken.List.Response) => response.data,\n providesTags: (res, _err) => [\n ...(res?.map(({ id }) => ({ type: 'ApiToken' as const, id })) ?? []),\n { type: 'ApiToken' as const, id: 'LIST' },\n ],\n }),\n getAPIToken: builder.query<ApiToken.Get.Response['data'], ApiToken.Get.Params['id']>({\n query: (id) => `/admin/api-tokens/${id}`,\n transformResponse: (response: ApiToken.Get.Response) => response.data,\n providesTags: (res, _err, id) => [{ type: 'ApiToken' as const, id }],\n }),\n createAPIToken: builder.mutation<\n ApiToken.Create.Response['data'],\n ApiToken.Create.Request['body']\n >({\n query: (body) => ({\n url: '/admin/api-tokens',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: ApiToken.Create.Response) => response.data,\n invalidatesTags: [\n { type: 'ApiToken' as const, id: 'LIST' },\n 'GuidedTourMeta',\n 'HomepageKeyStatistics',\n ],\n }),\n deleteAPIToken: builder.mutation<\n ApiToken.Revoke.Response['data'],\n ApiToken.Revoke.Params['id']\n >({\n query: (id) => ({\n url: `/admin/api-tokens/${id}`,\n method: 'DELETE',\n }),\n transformResponse: (response: ApiToken.Revoke.Response) => response.data,\n invalidatesTags: (_res, _err, id) => [\n { type: 'ApiToken' as const, id },\n 'HomepageKeyStatistics',\n ],\n }),\n updateAPIToken: builder.mutation<\n ApiToken.Update.Response['data'],\n ApiToken.Update.Params & ApiToken.Update.Request['body']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/api-tokens/${id}`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (response: ApiToken.Update.Response) => response.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'ApiToken' as const, id }],\n }),\n }),\n });\n\nconst {\n useGetAPITokensQuery,\n useGetAPITokenQuery,\n useCreateAPITokenMutation,\n useDeleteAPITokenMutation,\n useUpdateAPITokenMutation,\n} = apiTokensService;\n\nexport {\n useGetAPITokensQuery,\n useGetAPITokenQuery,\n useCreateAPITokenMutation,\n useDeleteAPITokenMutation,\n useUpdateAPITokenMutation,\n};\n"],"names":["apiTokensService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getAPITokens","query","transformResponse","response","data","providesTags","res","_err","map","id","type","getAPIToken","createAPIToken","mutation","body","url","method","invalidatesTags","deleteAPIToken","_res","updateAPIToken","useGetAPITokensQuery","useGetAPITokenQuery","useCreateAPITokenMutation","useDeleteAPITokenMutation","useUpdateAPITokenMutation"],"mappings":"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"}
1
+ {"version":3,"file":"apiTokens.mjs","sources":["../../../../../admin/src/services/apiTokens.ts"],"sourcesContent":["import * as ApiToken from '../../../shared/contracts/api-token';\n\nimport { adminApi } from './api';\n\nconst apiTokensService = adminApi\n .enhanceEndpoints({\n addTagTypes: ['ApiToken'],\n })\n .injectEndpoints({\n endpoints: (builder) => ({\n getAPITokens: builder.query<ApiToken.List.Response['data'], void>({\n query: () => '/admin/api-tokens',\n transformResponse: (response: ApiToken.List.Response) => response.data,\n providesTags: (res, _err) => [\n ...(res?.map(({ id }) => ({ type: 'ApiToken' as const, id })) ?? []),\n { type: 'ApiToken' as const, id: 'LIST' },\n ],\n }),\n getAPIToken: builder.query<ApiToken.Get.Response['data'], ApiToken.Get.Params['id']>({\n query: (id) => `/admin/api-tokens/${id}`,\n transformResponse: (response: ApiToken.Get.Response) => response.data,\n providesTags: (res, _err, id) => [{ type: 'ApiToken' as const, id }],\n }),\n createAPIToken: builder.mutation<\n ApiToken.Create.Response['data'],\n ApiToken.Create.Request['body']\n >({\n query: (body) => ({\n url: '/admin/api-tokens',\n method: 'POST',\n data: body,\n }),\n transformResponse: (response: ApiToken.Create.Response) => response.data,\n invalidatesTags: [{ type: 'ApiToken' as const, id: 'LIST' }, 'HomepageKeyStatistics'],\n }),\n deleteAPIToken: builder.mutation<\n ApiToken.Revoke.Response['data'],\n ApiToken.Revoke.Params['id']\n >({\n query: (id) => ({\n url: `/admin/api-tokens/${id}`,\n method: 'DELETE',\n }),\n transformResponse: (response: ApiToken.Revoke.Response) => response.data,\n invalidatesTags: (_res, _err, id) => [\n { type: 'ApiToken' as const, id },\n 'HomepageKeyStatistics',\n ],\n }),\n updateAPIToken: builder.mutation<\n ApiToken.Update.Response['data'],\n ApiToken.Update.Params & ApiToken.Update.Request['body']\n >({\n query: ({ id, ...body }) => ({\n url: `/admin/api-tokens/${id}`,\n method: 'PUT',\n data: body,\n }),\n transformResponse: (response: ApiToken.Update.Response) => response.data,\n invalidatesTags: (_res, _err, { id }) => [{ type: 'ApiToken' as const, id }],\n }),\n }),\n });\n\nconst {\n useGetAPITokensQuery,\n useGetAPITokenQuery,\n useCreateAPITokenMutation,\n useDeleteAPITokenMutation,\n useUpdateAPITokenMutation,\n} = apiTokensService;\n\nexport {\n useGetAPITokensQuery,\n useGetAPITokenQuery,\n useCreateAPITokenMutation,\n useDeleteAPITokenMutation,\n useUpdateAPITokenMutation,\n};\n"],"names":["apiTokensService","adminApi","enhanceEndpoints","addTagTypes","injectEndpoints","endpoints","builder","getAPITokens","query","transformResponse","response","data","providesTags","res","_err","map","id","type","getAPIToken","createAPIToken","mutation","body","url","method","invalidatesTags","deleteAPIToken","_res","updateAPIToken","useGetAPITokensQuery","useGetAPITokenQuery","useCreateAPITokenMutation","useDeleteAPITokenMutation","useUpdateAPITokenMutation"],"mappings":"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"}