@strapi/admin 5.22.0 → 5.23.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/components/GuidedTour/Context.js +48 -8
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs +48 -9
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.js +35 -24
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs +36 -25
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js +156 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs +154 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ApiTokensSteps.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js +221 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs +219 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentManagerSteps.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +219 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +217 -0
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/{Step.js → Steps/Step.js} +116 -71
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/{Step.mjs → Steps/Step.mjs} +117 -74
- package/dist/admin/admin/src/components/GuidedTour/Steps/Step.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/Tours.js +47 -324
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs +48 -326
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.js +19 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs +17 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/constants.mjs.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js +31 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.js.map +1 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs +29 -0
- package/dist/admin/admin/src/components/GuidedTour/utils/migrations.mjs.map +1 -0
- package/dist/admin/admin/src/components/SubNav.js +3 -1
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +3 -1
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js +4 -0
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.mjs +5 -1
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +10 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +10 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +17 -14
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +17 -14
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js +31 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs +12 -6
- package/dist/admin/admin/src/pages/Settings/components/Tokens/Table.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +28 -24
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs +28 -24
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js +56 -57
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs +57 -58
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.js +0 -1
- package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.mjs +0 -1
- package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +33 -21
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +33 -21
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js +2 -2
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.js.map +1 -1
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs +2 -2
- package/dist/admin/ee/admin/src/components/AuditLogs/Widgets.mjs.map +1 -1
- package/dist/admin/index.js +6 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +2 -0
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/components/GuidedTour/Context.d.ts +28 -10
- package/dist/admin/src/components/GuidedTour/Steps/ApiTokensSteps.d.ts +20 -0
- package/dist/admin/src/components/GuidedTour/Steps/ContentManagerSteps.d.ts +21 -0
- package/dist/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.d.ts +30 -0
- package/dist/admin/src/components/GuidedTour/{Step.d.ts → Steps/Step.d.ts} +25 -6
- package/dist/admin/src/components/GuidedTour/Tours.d.ts +53 -14
- package/dist/admin/src/components/GuidedTour/utils/constants.d.ts +15 -0
- package/dist/admin/src/components/GuidedTour/utils/migrations.d.ts +6 -0
- package/dist/admin/src/features/Tracking.d.ts +23 -4
- package/dist/admin/src/index.d.ts +5 -0
- package/dist/admin/src/pages/Home/HomePage.d.ts +2 -2
- package/dist/server/server/src/controllers/admin.js +2 -5
- package/dist/server/server/src/controllers/admin.js.map +1 -1
- package/dist/server/server/src/controllers/admin.mjs +2 -5
- package/dist/server/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/server/src/services/index.js +0 -2
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs +0 -2
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/src/controllers/admin.d.ts +1 -1
- package/dist/server/src/controllers/admin.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +1 -1
- package/dist/server/src/index.d.ts +1 -6
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/constants.d.ts +1 -0
- package/dist/server/src/services/guided-tour.d.ts +2 -3
- package/dist/server/src/services/guided-tour.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +0 -5
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/shared/contracts/admin.d.ts +2 -2
- package/dist/shared/contracts/admin.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/admin/admin/src/components/GuidedTour/Step.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +0 -1
- package/dist/server/server/src/services/guided-tour.js +0 -61
- package/dist/server/server/src/services/guided-tour.js.map +0 -1
- package/dist/server/server/src/services/guided-tour.mjs +0 -59
- package/dist/server/server/src/services/guided-tour.mjs.map +0 -1
|
@@ -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(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
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__*/
|
|
167
|
-
children:
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
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
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
}),
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
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
|
-
})
|
|
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":";;;;;;;;;;;;;;;;;;;;;AAwBA,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;AAEvB,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;AAEpDC,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;QACdR,QAAS,CAAA;YAAES,MAAQC,EAAAA,EAAAA,CAAGC,SAAS,CAAC;gBAAEC,IAAM,EAAA;aAAc,EAAA;gBAAEC,MAAQ,EAAA;AAAM,aAAA;AAAG,SAAA,CAAA;KACxE,EAAA;AAACb,QAAAA;AAAS,KAAA,CAAA;AAEb,IAAA,MAAMc,UAAUpC,aAAcqC,CAAAA,GAAG,CAAC,CAACC,UAAY;AAC7C,YAAA,GAAGA,MAAM;YACTpC,KAAOK,EAAAA,aAAAA,CAAc+B,OAAOpC,KAAK;SACnC,CAAA,CAAA;IAEAqC,OAAQ,CAAA,IAAA;AACNf,QAAAA,UAAAA,CAAW,qBAAuB,EAAA;YAChCgB,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;YACTpC,kBAAmB,CAAA;gBACjBsC,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASrB,cAAekB,CAAAA,KAAAA;AAC1B,aAAA,CAAA;AACF;KACC,EAAA;AAACA,QAAAA,KAAAA;AAAOlB,QAAAA,cAAAA;AAAgBlB,QAAAA;AAAmB,KAAA,CAAA;AAE9CoB,IAAAA,KAAAA,CAAMC,SAAS,CAAC,IAAA;AACdN,QAAAA,UAAAA,CAAW,oBAAsB,EAAA;AAAEyB,YAAAA,MAAAA,EAAQN,UAAUO,MAAM;YAAEV,SAAWC,EAAAA;AAAe,SAAA,CAAA;KACtF,EAAA;AAACE,QAAAA,SAAAA;AAAWnB,QAAAA;AAAW,KAAA,CAAA;IAE1B,MAAM,CAAC2B,YAAY,GAAGC,yBAAAA,EAAAA;AAEtB,IAAA,MAAMC,eAAe,OAAOlD,EAAAA,GAAAA;QAC1B,IAAI;YACF,MAAMmD,GAAAA,GAAM,MAAMH,WAAYhD,CAAAA,EAAAA,CAAAA;AAE9B,YAAA,IAAI,WAAWmD,GAAK,EAAA;gBAClB7C,kBAAmB,CAAA;oBACjBsC,IAAM,EAAA,QAAA;oBACNC,OAASrB,EAAAA,cAAAA,CAAe2B,IAAIT,KAAK;AACnC,iBAAA,CAAA;AAEA,gBAAA;AACF;YAEArB,UAAW,CAAA,gBAAA,CAAA;AACb,SAAA,CAAE,OAAM;YACNf,kBAAmB,CAAA;gBACjBsC,IAAM,EAAA,QAAA;AACNC,gBAAAA,OAAAA,EAASzC,aAAc,CAAA;oBACrBJ,EAAI,EAAA,oBAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA;AACF,aAAA,CAAA;AACF;AACF,KAAA;IAEA,qBACEmD,IAAA,CAAAC,QAAA,EAAA;;AACE,0BAAAC,GAAA,CAACC,KAAKC,KAAK,EAAA;0BACRpD,aACC,CAAA;oBAAEJ,EAAI,EAAA,oBAAA;oBAAsBC,cAAgB,EAAA;iBAC5C,EAAA;oBAAEH,IAAM,EAAA;AAAa,iBAAA;;AAGzB,0BAAAwD,GAAA,CAACG,QAAQC,MAAM,EAAA;AACbC,gBAAAA,KAAAA,EAAOvD,aAAc,CAAA;oBAAEJ,EAAI,EAAA,0BAAA;oBAA4BC,cAAgB,EAAA;AAAa,iBAAA,CAAA;AACpF2D,gBAAAA,QAAAA,EAAUxD,aAAc,CAAA;oBACtBJ,EAAI,EAAA,gCAAA;oBACJC,cAAgB,EAAA;AAClB,iBAAA,CAAA;AACA4D,gBAAAA,aAAAA,EACE9C,SACE,kBAAAuC,GAAA,CAACQ,KAAMtB,CAAAA,SAAS,CAACuB,gBAAgB,EAAA;AAC/B,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,IACPlD,WAAW,sBAAwB,EAAA;gCACjCgB,SAAWC,EAAAA;AACb,6BAAA,CAAA;wBAEFkC,EAAG,EAAA,6BAAA;kCAEFpE,aAAc,CAAA;4BACbJ,EAAI,EAAA,2BAAA;4BACJC,cAAgB,EAAA;AAClB,yBAAA;;;;AAMT,YAAA,CAACa,wBACAwC,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,CAAMtB,SAAS,CAACoC,YAAY,EAAA;4CAC3BxB,IAAA,CAACK,QAAQoB,OAAO,EAAA;;4BACbrC,SAAUO,CAAAA,MAAM,GAAG,CAAA,kBAClBO,GAACwB,CAAAA,KAAAA,EAAAA;gCACCtE,WAAa,EAAA;AAAEM,oCAAAA,OAAAA;AAASE,oCAAAA,SAAAA;AAAWC,oCAAAA;AAAU,iCAAA;gCAC7CgB,OAASA,EAAAA,OAAAA;gCACTQ,SAAWA,EAAAA,SAAAA;gCACXsC,eAAiB7B,EAAAA,YAAAA;gCACjB8B,MAAQxC,EAAAA,SAAAA;gCACRH,SAAWC,EAAAA;;AAGdvB,4BAAAA,SAAAA,IAAayB,SAAUO,CAAAA,MAAM,KAAK,CAAA,iBACjCO,GAAC2B,CAAAA,gBAAAA,EAAAA;AACCC,gCAAAA,IAAAA,gBAAM5B,GAAC6B,CAAAA,cAAAA,EAAAA;oCAAeC,KAAM,EAAA;;AAC5BC,gCAAAA,OAAAA,EAASjF,aAAc,CAAA;oCACrBJ,EAAI,EAAA,kCAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA,CAAA;AACAqF,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;8CAEFpE,aAAc,CAAA;wCACbJ,EAAI,EAAA,gCAAA;wCACJC,cAAgB,EAAA;AAClB,qCAAA;;AAIJ,6BAAA,CAAA,GAAA,IAAA;AACH,4BAAA,CAACc,SAAayB,IAAAA,SAAAA,CAAUO,MAAM,KAAK,kBAClCO,GAAC2B,CAAAA,gBAAAA,EAAAA;AACCC,gCAAAA,IAAAA,gBAAM5B,GAAC6B,CAAAA,cAAAA,EAAAA;oCAAeC,KAAM,EAAA;;AAC5BC,gCAAAA,OAAAA,EAASjF,aAAc,CAAA;oCACrBJ,EAAI,EAAA,qCAAA;oCACJC,cAAgB,EAAA;AAClB,iCAAA;AAEA,6BAAA,CAAA,GAAA;;;;;;;AAOlB;MAEauF,iBAAoB,GAAA,IAAA;AAC/B,IAAA,MAAMhF,WAAcC,GAAAA,gBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAMC,CAAAA,SAAS,CAACH,WAAW,CAACI,QAAQ,GAAG,aAAa,CAAC6E,IAAAA,CAAAA;IAGlE,qBACEnC,GAAA,CAACC,KAAKmC,OAAO,EAAA;QAAClF,WAAaA,EAAAA,WAAAA;AACzB,QAAA,QAAA,gBAAA8C,GAACnD,CAAAA,QAAAA,EAAAA,EAAAA;;AAGP;;;;"}
|
|
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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"}
|
|
@@ -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: [
|
|
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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"}
|
|
@@ -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: [
|
|
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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"}
|
|
@@ -89,7 +89,7 @@ var en = {
|
|
|
89
89
|
"HomePage.widget.loading": "Loading widget content",
|
|
90
90
|
"HomePage.widget.error": "Couldn't load widget content.",
|
|
91
91
|
"HomePage.widget.no-data": "No content found.",
|
|
92
|
-
"HomePage.widget.no-permissions": "You don
|
|
92
|
+
"HomePage.widget.no-permissions": "You don't have the permission to see this widget",
|
|
93
93
|
"Media Library": "Media Library",
|
|
94
94
|
"New entry": "New entry",
|
|
95
95
|
Password: Password,
|
|
@@ -103,6 +103,7 @@ var en = {
|
|
|
103
103
|
"Roles.RoleRow.user-count": "{number, plural, =0 {# user} one {# user} other {# users}}",
|
|
104
104
|
"Roles.components.List.empty.withSearch": "There is no role corresponding to the search ({search})...",
|
|
105
105
|
"Settings.PageTitle": "Settings — {name}",
|
|
106
|
+
"Settings.apiTokens.copy.lastWarning": "Copy your API token",
|
|
106
107
|
"Settings.apiTokens.ListView.headers.createdAt": "Created at",
|
|
107
108
|
"Settings.apiTokens.ListView.headers.description": "Description",
|
|
108
109
|
"Settings.apiTokens.ListView.headers.lastUsedAt": "Last used",
|
|
@@ -824,32 +825,42 @@ var en = {
|
|
|
824
825
|
selectButtonTitle: selectButtonTitle,
|
|
825
826
|
skipToContent: skipToContent,
|
|
826
827
|
submit: submit,
|
|
827
|
-
"tours.contentTypeBuilder.Introduction.title": "Content-Type Builder",
|
|
828
|
-
"tours.contentTypeBuilder.Introduction.content": "
|
|
828
|
+
"tours.contentTypeBuilder.Introduction.title": "Welcome to the Content-Type Builder!",
|
|
829
|
+
"tours.contentTypeBuilder.Introduction.content": "Here you create and manage the structure of your app with collection types, single types, and reusable components. Let's dive in!",
|
|
829
830
|
"tours.contentTypeBuilder.CollectionTypes.title": "Collection Types",
|
|
830
|
-
"tours.contentTypeBuilder.CollectionTypes.content": "
|
|
831
|
+
"tours.contentTypeBuilder.CollectionTypes.content": "These are your go-to for managing multiple entries — think blog posts or products.",
|
|
831
832
|
"tours.contentTypeBuilder.SingleTypes.title": "Single Types",
|
|
832
|
-
"tours.contentTypeBuilder.SingleTypes.content": "
|
|
833
|
+
"tours.contentTypeBuilder.SingleTypes.content": "Perfect for one-off entries like your homepage or site settings.",
|
|
833
834
|
"tours.contentTypeBuilder.Components.title": "Components",
|
|
834
|
-
"tours.contentTypeBuilder.Components.content": "
|
|
835
|
-
"tours.contentTypeBuilder.
|
|
836
|
-
"tours.contentTypeBuilder.
|
|
835
|
+
"tours.contentTypeBuilder.Components.content": "Build it once, reuse it everywhere. Use components for things like buttons, cards, or sliders.",
|
|
836
|
+
"tours.contentTypeBuilder.YourTurn.title": "Your turn — Build something!",
|
|
837
|
+
"tours.contentTypeBuilder.YourTurn.content": "Go ahead and create a collection type or single type. Click the \"+\" button, pick a name, hit \"Continue\", and we'll guide you from there.",
|
|
838
|
+
"tours.contentTypeBuilder.AddFields.title": "Add a field to bring it to life",
|
|
839
|
+
"tours.contentTypeBuilder.AddFields.content": "Start by adding your first field — like a name, image, or relation. Your content type needs a shape before it can hold content.",
|
|
840
|
+
"tours.contentTypeBuilder.Save.title": "Don't leave without saving!",
|
|
841
|
+
"tours.contentTypeBuilder.Save.content": "Click the \"Save\" button to lock in your content type and avoid losing your work. Almost done!",
|
|
842
|
+
"tours.contentTypeBuilder.Finish.title": "First Step: Done! 🎉",
|
|
843
|
+
"tours.contentTypeBuilder.Finish.content": "You've built your first content type! Now head over to the Content Manager to start adding entries!",
|
|
844
|
+
"tours.apiTokens.Introduction.title": "Last but not least, API tokens",
|
|
845
|
+
"tours.apiTokens.Introduction.content": "Control API access with highly customizable permissions.",
|
|
846
|
+
"tours.apiTokens.ManageAPIToken.title": "Manage an API token",
|
|
847
|
+
"tours.apiTokens.ManageAPIToken.content": "Click the \"Pencil\" icon to view and update an existing API token.",
|
|
848
|
+
"tours.apiTokens.ViewAPIToken.title": "View API token",
|
|
849
|
+
"tours.apiTokens.ViewAPIToken.content": "Click the \"View token\" button to see your API token.",
|
|
850
|
+
"tours.apiTokens.CopyAPIToken.title": "Copy your API token",
|
|
851
|
+
"tours.apiTokens.CopyAPIToken.content": "Click the \"Copy\" button to save your API token, you will need it to make requests to your application. {spacer} Still have questions? Learn more about <a>API tokens</a>.",
|
|
852
|
+
"tours.apiTokens.FinalStep.title": "Congratulations, it's time to deploy your application!",
|
|
853
|
+
"tours.apiTokens.FinalStep.content": "You have everything you need to deploy your application and share content with the world.",
|
|
837
854
|
"tours.contentManager.Introduction.title": "Content manager",
|
|
838
855
|
"tours.contentManager.Introduction.content": "Create and manage content from your collection types and single types.",
|
|
839
|
-
"tours.
|
|
840
|
-
"tours.
|
|
841
|
-
"tours.apiTokens.CreateAnAPIToken.title": "Create an API token",
|
|
842
|
-
"tours.apiTokens.CreateAnAPIToken.content": "Create a new API token. Choose a name, duration and type.",
|
|
843
|
-
"tours.apiTokens.CopyAPIToken.title": "Copy your new API token",
|
|
844
|
-
"tours.apiTokens.CopyAPIToken.content": "Make sure to do it now, you won't be able to see it again. You'll need to generate a new one if you lose it.",
|
|
845
|
-
"tours.apiTokens.FinalStep.title": "It's time to deploy your application!",
|
|
846
|
-
"tours.apiTokens.FinalStep.content": "Your application is ready to be deployed and its content to be shared with the world!",
|
|
856
|
+
"tours.contentManager.CreateNewEntry.title": "Create new entry",
|
|
857
|
+
"tours.contentManager.CreateNewEntry.content": "Click the \"Create new entry\" button to create and publish a new entry for this collection type.",
|
|
847
858
|
"tours.contentManager.Fields.title": "Fields",
|
|
848
|
-
"tours.contentManager.Fields.content": "
|
|
859
|
+
"tours.contentManager.Fields.content": "First, fill in the fields you created in the Content-Type Builder.",
|
|
849
860
|
"tours.contentManager.Publish.title": "Publish",
|
|
850
|
-
"tours.contentManager.Publish.content": "Publish
|
|
851
|
-
"tours.contentManager.FinalStep.title": "
|
|
852
|
-
"tours.contentManager.FinalStep.content": "Now that you've created and published
|
|
861
|
+
"tours.contentManager.Publish.content": "Then click the \"Publish\" button to make your content available through the content API.",
|
|
862
|
+
"tours.contentManager.FinalStep.title": "Time to setup API tokens!",
|
|
863
|
+
"tours.contentManager.FinalStep.content": "Now that you've created and published an entry, let's setup an API token to manage access to your content.",
|
|
853
864
|
"tours.stepCount": "Step {currentStep} of {tourLength}",
|
|
854
865
|
"tours.skip": "Skip",
|
|
855
866
|
"tours.next": "Next",
|
|
@@ -860,7 +871,7 @@ var en = {
|
|
|
860
871
|
"tours.overview.tasks": "Your tasks",
|
|
861
872
|
"tours.overview.contentTypeBuilder.label": "Create your schema",
|
|
862
873
|
"tours.overview.contentManager.label": "Create and publish content",
|
|
863
|
-
"tours.overview.apiTokens.label": "
|
|
874
|
+
"tours.overview.apiTokens.label": "Copy an API token",
|
|
864
875
|
"tours.overview.strapiCloud.label": "Deploy your application to Strapi Cloud",
|
|
865
876
|
"tours.overview.strapiCloud.link": "Read documentation",
|
|
866
877
|
"tours.overview.tour.link": "Start",
|
|
@@ -870,6 +881,7 @@ var en = {
|
|
|
870
881
|
"tours.profile.description": "You can reset the guided tour at any time.",
|
|
871
882
|
"tours.profile.reset": "Reset guided tour",
|
|
872
883
|
"tours.profile.notification.success.reset": "Guided tour reset",
|
|
884
|
+
"tours.overview.completed": "{completed}% completed",
|
|
873
885
|
"widget.key-statistics.title": "Project statistics",
|
|
874
886
|
"widget.key-statistics.list.admins": "Admins",
|
|
875
887
|
"widget.key-statistics.list.apiTokens": "API Tokens",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -85,7 +85,7 @@ var en = {
|
|
|
85
85
|
"HomePage.widget.loading": "Loading widget content",
|
|
86
86
|
"HomePage.widget.error": "Couldn't load widget content.",
|
|
87
87
|
"HomePage.widget.no-data": "No content found.",
|
|
88
|
-
"HomePage.widget.no-permissions": "You don
|
|
88
|
+
"HomePage.widget.no-permissions": "You don't have the permission to see this widget",
|
|
89
89
|
"Media Library": "Media Library",
|
|
90
90
|
"New entry": "New entry",
|
|
91
91
|
Password: Password,
|
|
@@ -99,6 +99,7 @@ var en = {
|
|
|
99
99
|
"Roles.RoleRow.user-count": "{number, plural, =0 {# user} one {# user} other {# users}}",
|
|
100
100
|
"Roles.components.List.empty.withSearch": "There is no role corresponding to the search ({search})...",
|
|
101
101
|
"Settings.PageTitle": "Settings — {name}",
|
|
102
|
+
"Settings.apiTokens.copy.lastWarning": "Copy your API token",
|
|
102
103
|
"Settings.apiTokens.ListView.headers.createdAt": "Created at",
|
|
103
104
|
"Settings.apiTokens.ListView.headers.description": "Description",
|
|
104
105
|
"Settings.apiTokens.ListView.headers.lastUsedAt": "Last used",
|
|
@@ -820,32 +821,42 @@ var en = {
|
|
|
820
821
|
selectButtonTitle: selectButtonTitle,
|
|
821
822
|
skipToContent: skipToContent,
|
|
822
823
|
submit: submit,
|
|
823
|
-
"tours.contentTypeBuilder.Introduction.title": "Content-Type Builder",
|
|
824
|
-
"tours.contentTypeBuilder.Introduction.content": "
|
|
824
|
+
"tours.contentTypeBuilder.Introduction.title": "Welcome to the Content-Type Builder!",
|
|
825
|
+
"tours.contentTypeBuilder.Introduction.content": "Here you create and manage the structure of your app with collection types, single types, and reusable components. Let's dive in!",
|
|
825
826
|
"tours.contentTypeBuilder.CollectionTypes.title": "Collection Types",
|
|
826
|
-
"tours.contentTypeBuilder.CollectionTypes.content": "
|
|
827
|
+
"tours.contentTypeBuilder.CollectionTypes.content": "These are your go-to for managing multiple entries — think blog posts or products.",
|
|
827
828
|
"tours.contentTypeBuilder.SingleTypes.title": "Single Types",
|
|
828
|
-
"tours.contentTypeBuilder.SingleTypes.content": "
|
|
829
|
+
"tours.contentTypeBuilder.SingleTypes.content": "Perfect for one-off entries like your homepage or site settings.",
|
|
829
830
|
"tours.contentTypeBuilder.Components.title": "Components",
|
|
830
|
-
"tours.contentTypeBuilder.Components.content": "
|
|
831
|
-
"tours.contentTypeBuilder.
|
|
832
|
-
"tours.contentTypeBuilder.
|
|
831
|
+
"tours.contentTypeBuilder.Components.content": "Build it once, reuse it everywhere. Use components for things like buttons, cards, or sliders.",
|
|
832
|
+
"tours.contentTypeBuilder.YourTurn.title": "Your turn — Build something!",
|
|
833
|
+
"tours.contentTypeBuilder.YourTurn.content": "Go ahead and create a collection type or single type. Click the \"+\" button, pick a name, hit \"Continue\", and we'll guide you from there.",
|
|
834
|
+
"tours.contentTypeBuilder.AddFields.title": "Add a field to bring it to life",
|
|
835
|
+
"tours.contentTypeBuilder.AddFields.content": "Start by adding your first field — like a name, image, or relation. Your content type needs a shape before it can hold content.",
|
|
836
|
+
"tours.contentTypeBuilder.Save.title": "Don't leave without saving!",
|
|
837
|
+
"tours.contentTypeBuilder.Save.content": "Click the \"Save\" button to lock in your content type and avoid losing your work. Almost done!",
|
|
838
|
+
"tours.contentTypeBuilder.Finish.title": "First Step: Done! 🎉",
|
|
839
|
+
"tours.contentTypeBuilder.Finish.content": "You've built your first content type! Now head over to the Content Manager to start adding entries!",
|
|
840
|
+
"tours.apiTokens.Introduction.title": "Last but not least, API tokens",
|
|
841
|
+
"tours.apiTokens.Introduction.content": "Control API access with highly customizable permissions.",
|
|
842
|
+
"tours.apiTokens.ManageAPIToken.title": "Manage an API token",
|
|
843
|
+
"tours.apiTokens.ManageAPIToken.content": "Click the \"Pencil\" icon to view and update an existing API token.",
|
|
844
|
+
"tours.apiTokens.ViewAPIToken.title": "View API token",
|
|
845
|
+
"tours.apiTokens.ViewAPIToken.content": "Click the \"View token\" button to see your API token.",
|
|
846
|
+
"tours.apiTokens.CopyAPIToken.title": "Copy your API token",
|
|
847
|
+
"tours.apiTokens.CopyAPIToken.content": "Click the \"Copy\" button to save your API token, you will need it to make requests to your application. {spacer} Still have questions? Learn more about <a>API tokens</a>.",
|
|
848
|
+
"tours.apiTokens.FinalStep.title": "Congratulations, it's time to deploy your application!",
|
|
849
|
+
"tours.apiTokens.FinalStep.content": "You have everything you need to deploy your application and share content with the world.",
|
|
833
850
|
"tours.contentManager.Introduction.title": "Content manager",
|
|
834
851
|
"tours.contentManager.Introduction.content": "Create and manage content from your collection types and single types.",
|
|
835
|
-
"tours.
|
|
836
|
-
"tours.
|
|
837
|
-
"tours.apiTokens.CreateAnAPIToken.title": "Create an API token",
|
|
838
|
-
"tours.apiTokens.CreateAnAPIToken.content": "Create a new API token. Choose a name, duration and type.",
|
|
839
|
-
"tours.apiTokens.CopyAPIToken.title": "Copy your new API token",
|
|
840
|
-
"tours.apiTokens.CopyAPIToken.content": "Make sure to do it now, you won't be able to see it again. You'll need to generate a new one if you lose it.",
|
|
841
|
-
"tours.apiTokens.FinalStep.title": "It's time to deploy your application!",
|
|
842
|
-
"tours.apiTokens.FinalStep.content": "Your application is ready to be deployed and its content to be shared with the world!",
|
|
852
|
+
"tours.contentManager.CreateNewEntry.title": "Create new entry",
|
|
853
|
+
"tours.contentManager.CreateNewEntry.content": "Click the \"Create new entry\" button to create and publish a new entry for this collection type.",
|
|
843
854
|
"tours.contentManager.Fields.title": "Fields",
|
|
844
|
-
"tours.contentManager.Fields.content": "
|
|
855
|
+
"tours.contentManager.Fields.content": "First, fill in the fields you created in the Content-Type Builder.",
|
|
845
856
|
"tours.contentManager.Publish.title": "Publish",
|
|
846
|
-
"tours.contentManager.Publish.content": "Publish
|
|
847
|
-
"tours.contentManager.FinalStep.title": "
|
|
848
|
-
"tours.contentManager.FinalStep.content": "Now that you've created and published
|
|
857
|
+
"tours.contentManager.Publish.content": "Then click the \"Publish\" button to make your content available through the content API.",
|
|
858
|
+
"tours.contentManager.FinalStep.title": "Time to setup API tokens!",
|
|
859
|
+
"tours.contentManager.FinalStep.content": "Now that you've created and published an entry, let's setup an API token to manage access to your content.",
|
|
849
860
|
"tours.stepCount": "Step {currentStep} of {tourLength}",
|
|
850
861
|
"tours.skip": "Skip",
|
|
851
862
|
"tours.next": "Next",
|
|
@@ -856,7 +867,7 @@ var en = {
|
|
|
856
867
|
"tours.overview.tasks": "Your tasks",
|
|
857
868
|
"tours.overview.contentTypeBuilder.label": "Create your schema",
|
|
858
869
|
"tours.overview.contentManager.label": "Create and publish content",
|
|
859
|
-
"tours.overview.apiTokens.label": "
|
|
870
|
+
"tours.overview.apiTokens.label": "Copy an API token",
|
|
860
871
|
"tours.overview.strapiCloud.label": "Deploy your application to Strapi Cloud",
|
|
861
872
|
"tours.overview.strapiCloud.link": "Read documentation",
|
|
862
873
|
"tours.overview.tour.link": "Start",
|
|
@@ -866,6 +877,7 @@ var en = {
|
|
|
866
877
|
"tours.profile.description": "You can reset the guided tour at any time.",
|
|
867
878
|
"tours.profile.reset": "Reset guided tour",
|
|
868
879
|
"tours.profile.notification.success.reset": "Guided tour reset",
|
|
880
|
+
"tours.overview.completed": "{completed}% completed",
|
|
869
881
|
"widget.key-statistics.title": "Project statistics",
|
|
870
882
|
"widget.key-statistics.list.admins": "Admins",
|
|
871
883
|
"widget.key-statistics.list.apiTokens": "API Tokens",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"en.json.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -28,7 +28,7 @@ const LastActivityTable = ({ items })=>{
|
|
|
28
28
|
return `/settings/audit-logs?pageSize=${constants.AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC&id=${item.id}`;
|
|
29
29
|
};
|
|
30
30
|
const handleRowClick = (document)=>()=>{
|
|
31
|
-
trackUsage('
|
|
31
|
+
trackUsage('willOpenAuditLogDetailsFromHome');
|
|
32
32
|
const link = getAuditLogDetailsLink(document);
|
|
33
33
|
navigate(link);
|
|
34
34
|
};
|
|
@@ -81,7 +81,7 @@ const LastActivityTable = ({ items })=>{
|
|
|
81
81
|
children: /*#__PURE__*/ jsxRuntime.jsx(designSystem.IconButton, {
|
|
82
82
|
tag: reactRouterDom.Link,
|
|
83
83
|
to: getAuditLogDetailsLink(item),
|
|
84
|
-
onClick: ()=>trackUsage('
|
|
84
|
+
onClick: ()=>trackUsage('willOpenAuditLogDetailsFromHome'),
|
|
85
85
|
label: formatMessage({
|
|
86
86
|
id: 'global.details',
|
|
87
87
|
defaultMessage: 'Details'
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Widgets.js","sources":["../../../../../../../ee/admin/src/components/AuditLogs/Widgets.tsx"],"sourcesContent":["import { useTracking, Widget } from '@strapi/admin/strapi-admin';\nimport { Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { RelativeTime as BaseRelativeTime } from '../../../../../admin/src/components/RelativeTime';\nimport { useQueryParams } from '../../../../../admin/src/hooks/useQueryParams';\nimport { AuditLog } from '../../../../../shared/contracts/audit-logs';\nimport { AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../constants';\nimport { getDefaultMessage } from '../../pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages';\nimport { useGetAuditLogsQuery } from '../../services/auditLogs';\n\nconst RelativeTime = styled(BaseRelativeTime)`\n display: inline-block;\n\n &::first-letter {\n text-transform: uppercase;\n }\n`;\n\nconst LastActivityTable = ({ items }: { items: AuditLog[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getAuditLogDetailsLink = (item: AuditLog): string => {\n return `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC&id=${item.id}`;\n };\n\n const handleRowClick = (document: AuditLog) => () => {\n trackUsage('
|
|
1
|
+
{"version":3,"file":"Widgets.js","sources":["../../../../../../../ee/admin/src/components/AuditLogs/Widgets.tsx"],"sourcesContent":["import { useTracking, Widget } from '@strapi/admin/strapi-admin';\nimport { Box, IconButton, Table, Tbody, Td, Tr, Typography } from '@strapi/design-system';\nimport { Eye } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\nimport { styled } from 'styled-components';\n\nimport { RelativeTime as BaseRelativeTime } from '../../../../../admin/src/components/RelativeTime';\nimport { useQueryParams } from '../../../../../admin/src/hooks/useQueryParams';\nimport { AuditLog } from '../../../../../shared/contracts/audit-logs';\nimport { AUDIT_LOGS_DEFAULT_PAGE_SIZE } from '../../constants';\nimport { getDefaultMessage } from '../../pages/SettingsPage/pages/AuditLogs/utils/getActionTypesDefaultMessages';\nimport { useGetAuditLogsQuery } from '../../services/auditLogs';\n\nconst RelativeTime = styled(BaseRelativeTime)`\n display: inline-block;\n\n &::first-letter {\n text-transform: uppercase;\n }\n`;\n\nconst LastActivityTable = ({ items }: { items: AuditLog[] }) => {\n const { formatMessage } = useIntl();\n const { trackUsage } = useTracking();\n const navigate = useNavigate();\n\n const getAuditLogDetailsLink = (item: AuditLog): string => {\n return `/settings/audit-logs?pageSize=${AUDIT_LOGS_DEFAULT_PAGE_SIZE}&page=1&sort=date:DESC&id=${item.id}`;\n };\n\n const handleRowClick = (document: AuditLog) => () => {\n trackUsage('willOpenAuditLogDetailsFromHome');\n const link = getAuditLogDetailsLink(document);\n navigate(link);\n };\n\n return (\n <Table colCount={4} rowCount={items?.length ?? 0}>\n <Tbody>\n {items?.map((item) => {\n const action = formatMessage(\n {\n id: `Settings.permissions.auditLogs.${item.action}`,\n // @ts-expect-error – getDefaultMessage probably doesn't benefit from being so strongly typed unless we just add string at the end.\n defaultMessage: getDefaultMessage(item.action),\n },\n { model: (item.payload.model as string) ?? '' }\n );\n const userDisplayName = item.user?.displayName ?? '-';\n return (\n <Tr\n onClick={handleRowClick(item)}\n cursor=\"pointer\"\n key={`lastActivity_auditLog_${item.id}`}\n >\n <Td>\n <Typography title={action} variant=\"omega\" textColor=\"neutral800\">\n {action}\n </Typography>\n </Td>\n <Td>\n <Typography variant=\"omega\" textColor=\"neutral800\">\n <RelativeTime timestamp={new Date(item.date)} />\n </Typography>\n </Td>\n <Td>\n <Typography title={userDisplayName} variant=\"omega\" textColor=\"neutral800\">\n {userDisplayName}\n </Typography>\n </Td>\n <Td onClick={(e) => e.stopPropagation()}>\n <Box display=\"inline-block\">\n <IconButton\n tag={Link}\n to={getAuditLogDetailsLink(item)}\n onClick={() => trackUsage('willOpenAuditLogDetailsFromHome')}\n label={formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n variant=\"ghost\"\n >\n <Eye />\n </IconButton>\n </Box>\n </Td>\n </Tr>\n );\n })}\n </Tbody>\n </Table>\n );\n};\n\nconst AuditLogsWidget = () => {\n const { formatMessage } = useIntl();\n const [{ query }] = useQueryParams();\n const { data, isLoading, error } = useGetAuditLogsQuery(\n {\n ...query,\n page: 1,\n pageSize: 4,\n sort: 'date:DESC',\n },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n if (isLoading) {\n return <Widget.Loading />;\n }\n\n if (error || !data?.results) {\n return <Widget.Error />;\n }\n\n if (data.results.length === 0) {\n return (\n <Widget.NoData>\n {formatMessage({\n id: 'widget.last-activity.no-activity',\n defaultMessage: 'No activity',\n })}\n </Widget.NoData>\n );\n }\n\n return <LastActivityTable items={data.results ?? []} />;\n};\n\nexport { AuditLogsWidget };\n"],"names":["RelativeTime","styled","BaseRelativeTime","LastActivityTable","items","formatMessage","useIntl","trackUsage","useTracking","navigate","useNavigate","getAuditLogDetailsLink","item","AUDIT_LOGS_DEFAULT_PAGE_SIZE","id","handleRowClick","document","link","_jsx","Table","colCount","rowCount","length","Tbody","map","action","defaultMessage","getDefaultMessage","model","payload","userDisplayName","user","displayName","_jsxs","Tr","onClick","cursor","Td","Typography","title","variant","textColor","timestamp","Date","date","e","stopPropagation","Box","display","IconButton","tag","Link","to","label","Eye","AuditLogsWidget","query","useQueryParams","data","isLoading","error","useGetAuditLogsQuery","page","pageSize","sort","refetchOnMountOrArgChange","Widget","Loading","results","Error","NoData"],"mappings":"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"}
|