@strapi/admin 5.19.0 → 5.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/StrapiApp.js +20 -4
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +21 -5
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/Filters.js +10 -1
- package/dist/admin/admin/src/components/Filters.js.map +1 -1
- package/dist/admin/admin/src/components/Filters.mjs +10 -1
- package/dist/admin/admin/src/components/Filters.mjs.map +1 -1
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.js +18 -43
- package/dist/admin/admin/src/components/GuidedTour/Context.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.mjs +17 -42
- package/dist/admin/admin/src/components/GuidedTour/Context.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.js +10 -6
- package/dist/admin/admin/src/components/GuidedTour/Overview.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Overview.mjs +11 -7
- package/dist/admin/admin/src/components/GuidedTour/Overview.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.js +6 -6
- package/dist/admin/admin/src/components/GuidedTour/Step.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.mjs +7 -7
- package/dist/admin/admin/src/components/GuidedTour/Step.mjs.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.js +10 -16
- package/dist/admin/admin/src/components/GuidedTour/Tours.js.map +1 -0
- package/dist/admin/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.mjs +11 -17
- package/dist/admin/admin/src/components/GuidedTour/Tours.mjs.map +1 -0
- package/dist/admin/admin/src/components/LeftMenu.js +1 -1
- package/dist/admin/admin/src/components/LeftMenu.js.map +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs +1 -1
- package/dist/admin/admin/src/components/LeftMenu.mjs.map +1 -1
- package/dist/admin/admin/src/components/Providers.js +9 -10
- package/dist/admin/admin/src/components/Providers.js.map +1 -1
- package/dist/admin/admin/src/components/Providers.mjs +9 -10
- package/dist/admin/admin/src/components/Providers.mjs.map +1 -1
- package/dist/admin/admin/src/components/SubNav.js +1 -1
- package/dist/admin/admin/src/components/SubNav.js.map +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs +1 -1
- package/dist/admin/admin/src/components/SubNav.mjs.map +1 -1
- package/dist/admin/admin/src/components/Widgets.js +185 -0
- package/dist/admin/admin/src/components/Widgets.js.map +1 -1
- package/dist/admin/admin/src/components/Widgets.mjs +186 -2
- package/dist/admin/admin/src/components/Widgets.mjs.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.js +34 -16
- package/dist/admin/admin/src/core/apis/Widgets.js.map +1 -1
- package/dist/admin/admin/src/core/apis/Widgets.mjs +34 -16
- package/dist/admin/admin/src/core/apis/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/layouts/AuthenticatedLayout.js +1 -18
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs +1 -18
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +0 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +0 -11
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +7 -4
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +7 -4
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +2 -2
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +6 -6
- 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 +6 -6
- 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 +1 -7
- 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 +2 -8
- 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 +1 -8
- 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 +1 -8
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/ListView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +0 -2
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +0 -2
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/services/admin.js +1 -2
- package/dist/admin/admin/src/services/admin.js.map +1 -1
- package/dist/admin/admin/src/services/admin.mjs +1 -2
- package/dist/admin/admin/src/services/admin.mjs.map +1 -1
- package/dist/admin/admin/src/services/api.js +4 -1
- package/dist/admin/admin/src/services/api.js.map +1 -1
- package/dist/admin/admin/src/services/api.mjs +4 -1
- package/dist/admin/admin/src/services/api.mjs.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.js +5 -4
- package/dist/admin/admin/src/services/apiTokens.js.map +1 -1
- package/dist/admin/admin/src/services/apiTokens.mjs +5 -4
- package/dist/admin/admin/src/services/apiTokens.mjs.map +1 -1
- package/dist/admin/admin/src/services/homepage.js +31 -0
- package/dist/admin/admin/src/services/homepage.js.map +1 -0
- package/dist/admin/admin/src/services/homepage.mjs +28 -0
- package/dist/admin/admin/src/services/homepage.mjs.map +1 -0
- package/dist/admin/admin/src/services/users.js +4 -2
- package/dist/admin/admin/src/services/users.js.map +1 -1
- package/dist/admin/admin/src/services/users.mjs +4 -2
- package/dist/admin/admin/src/services/users.mjs.map +1 -1
- package/dist/admin/admin/src/services/webhooks.js +9 -5
- package/dist/admin/admin/src/services/webhooks.js.map +1 -1
- package/dist/admin/admin/src/services/webhooks.mjs +9 -5
- package/dist/admin/admin/src/services/webhooks.mjs.map +1 -1
- package/dist/admin/admin/src/translations/en.json.js +16 -3
- package/dist/admin/admin/src/translations/en.json.js.map +1 -1
- package/dist/admin/admin/src/translations/en.json.mjs +16 -3
- package/dist/admin/admin/src/translations/en.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/es.json.js +9 -0
- package/dist/admin/admin/src/translations/es.json.js.map +1 -1
- package/dist/admin/admin/src/translations/es.json.mjs +9 -0
- package/dist/admin/admin/src/translations/es.json.mjs.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.js +9 -0
- package/dist/admin/admin/src/translations/fr.json.js.map +1 -1
- package/dist/admin/admin/src/translations/fr.json.mjs +9 -0
- package/dist/admin/admin/src/translations/fr.json.mjs.map +1 -1
- package/dist/admin/admin/tests/utils.js +25 -28
- package/dist/admin/admin/tests/utils.js.map +1 -1
- package/dist/admin/admin/tests/utils.mjs +25 -28
- package/dist/admin/admin/tests/utils.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs +3 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/AuditLogs/ListPage.mjs.map +1 -1
- package/dist/admin/index.js +4 -4
- package/dist/admin/index.mjs +2 -2
- package/dist/admin/src/components/Filters.d.ts +3 -1
- package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Context.d.ts +3 -3
- package/dist/admin/src/components/GuidedTour/Overview.d.ts +1 -0
- package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Step.d.ts +1 -1
- package/dist/admin/src/components/Widgets.d.ts +2 -1
- package/dist/admin/src/core/apis/Widgets.d.ts +9 -5
- package/dist/admin/src/core/store/configure.d.ts +2 -2
- package/dist/admin/src/core/store/hooks.d.ts +2 -2
- package/dist/admin/src/features/Tracking.d.ts +2 -2
- package/dist/admin/src/hooks/useAdminRoles.d.ts +1 -1
- package/dist/admin/src/index.d.ts +3 -3
- package/dist/admin/src/pages/Settings/components/Tokens/TokenBox.d.ts +1 -1
- package/dist/admin/src/pages/Settings/pages/Webhooks/hooks/useWebhooks.d.ts +4 -4
- package/dist/admin/src/selectors.d.ts +2 -2
- package/dist/admin/src/services/admin.d.ts +6 -6
- package/dist/admin/src/services/api.d.ts +1 -1
- package/dist/admin/src/services/apiTokens.d.ts +1 -1
- package/dist/admin/src/services/auth.d.ts +10 -10
- package/dist/admin/src/services/contentApi.d.ts +1 -1
- package/dist/admin/src/services/contentManager.d.ts +1 -1
- package/dist/admin/src/services/homepage.d.ts +14 -0
- package/dist/admin/src/services/transferTokens.d.ts +1 -1
- package/dist/admin/src/services/users.d.ts +8 -8
- package/dist/admin/src/services/webhooks.d.ts +2 -2
- package/dist/admin/tests/utils.d.ts +1 -1
- package/dist/ee/admin/src/services/auditLogs.d.ts +1 -1
- package/dist/ee/server/src/audit-logs/services/lifecycles.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +10 -9
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +10 -9
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/server/src/controllers/homepage.js +15 -0
- package/dist/server/server/src/controllers/homepage.js.map +1 -0
- package/dist/server/server/src/controllers/homepage.mjs +13 -0
- package/dist/server/server/src/controllers/homepage.mjs.map +1 -0
- package/dist/server/server/src/controllers/index.js +3 -1
- package/dist/server/server/src/controllers/index.js.map +1 -1
- package/dist/server/server/src/controllers/index.mjs +3 -1
- package/dist/server/server/src/controllers/index.mjs.map +1 -1
- package/dist/server/server/src/domain/user.js +3 -1
- package/dist/server/server/src/domain/user.js.map +1 -1
- package/dist/server/server/src/domain/user.mjs +3 -1
- package/dist/server/server/src/domain/user.mjs.map +1 -1
- package/dist/server/server/src/routes/homepage.js +17 -0
- package/dist/server/server/src/routes/homepage.js.map +1 -0
- package/dist/server/server/src/routes/homepage.mjs +15 -0
- package/dist/server/server/src/routes/homepage.mjs.map +1 -0
- package/dist/server/server/src/routes/index.js +3 -1
- package/dist/server/server/src/routes/index.js.map +1 -1
- package/dist/server/server/src/routes/index.mjs +3 -1
- package/dist/server/server/src/routes/index.mjs.map +1 -1
- package/dist/server/server/src/services/homepage.js +34 -0
- package/dist/server/server/src/services/homepage.js.map +1 -0
- package/dist/server/server/src/services/homepage.mjs +32 -0
- package/dist/server/server/src/services/homepage.mjs.map +1 -0
- package/dist/server/server/src/services/index.js +3 -1
- package/dist/server/server/src/services/index.js.map +1 -1
- package/dist/server/server/src/services/index.mjs +3 -1
- package/dist/server/server/src/services/index.mjs.map +1 -1
- package/dist/server/src/controllers/homepage.d.ts +15 -0
- package/dist/server/src/controllers/homepage.d.ts.map +1 -0
- package/dist/server/src/controllers/index.d.ts +13 -0
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/domain/user.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +26 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/homepage.d.ts +10 -0
- package/dist/server/src/routes/homepage.d.ts.map +1 -0
- package/dist/server/src/routes/index.d.ts.map +1 -1
- package/dist/server/src/services/homepage.d.ts +15 -0
- package/dist/server/src/services/homepage.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +13 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/shared/contracts/homepage.d.ts +30 -0
- package/dist/shared/contracts/homepage.d.ts.map +1 -1
- package/package.json +8 -9
- package/dist/admin/admin/src/components/GuidedTour/Homepage.js +0 -132
- package/dist/admin/admin/src/components/GuidedTour/Homepage.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs +0 -130
- package/dist/admin/admin/src/components/GuidedTour/Homepage.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Modal.js +0 -278
- package/dist/admin/admin/src/components/GuidedTour/Modal.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Modal.mjs +0 -276
- package/dist/admin/admin/src/components/GuidedTour/Modal.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.js +0 -54
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs +0 -51
- package/dist/admin/admin/src/components/GuidedTour/Ornaments.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.js +0 -206
- package/dist/admin/admin/src/components/GuidedTour/Provider.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs +0 -184
- package/dist/admin/admin/src/components/GuidedTour/Provider.mjs.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/constants.js +0 -167
- package/dist/admin/admin/src/components/GuidedTour/constants.js.map +0 -1
- package/dist/admin/admin/src/components/GuidedTour/constants.mjs +0 -164
- package/dist/admin/admin/src/components/GuidedTour/constants.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Context.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Overview.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Step.mjs.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.js.map +0 -1
- package/dist/admin/admin/src/components/UnstableGuidedTour/Tours.mjs.map +0 -1
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.js +0 -19
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.js.map +0 -1
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs +0 -17
- package/dist/admin/admin/src/pages/Home/components/GuidedTour.mjs.map +0 -1
- package/dist/admin/src/components/GuidedTour/Homepage.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Modal.d.ts +0 -2
- package/dist/admin/src/components/GuidedTour/Ornaments.d.ts +0 -13
- package/dist/admin/src/components/GuidedTour/Provider.d.ts +0 -39
- package/dist/admin/src/components/GuidedTour/constants.d.ts +0 -165
- package/dist/admin/src/components/UnstableGuidedTour/Overview.d.ts +0 -1
- package/dist/admin/src/pages/Home/components/GuidedTour.d.ts +0 -1
- /package/dist/admin/src/components/{UnstableGuidedTour → GuidedTour}/Tours.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../../components/GuidedTour/Provider';\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { TokenBox, UnstableApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const setCurrentStep = useGuidedTour('EditView', (state) => state.setCurrentStep);\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\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 if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n setCurrentStep('apiTokens.success');\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\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 const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n {window.strapi.future.isEnabled('unstableGuidedTour') ? (\n <UnstableApiTokenBox\n token={apiToken.accessKey}\n tokenType={API_TOKEN_TYPE}\n />\n ) : (\n <TokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n )}\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","setCurrentStep","useGuidedTour","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","window","strapi","future","isEnabled","UnstableApiTokenBox","TokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditViewPage.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\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 { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { TokenBox, ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\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 if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\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 const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
|
|
@@ -4,7 +4,6 @@ import { Flex } from '@strapi/design-system';
|
|
|
4
4
|
import { Formik, Form } from 'formik';
|
|
5
5
|
import { useIntl } from 'react-intl';
|
|
6
6
|
import { useLocation, useMatch, useNavigate } from 'react-router-dom';
|
|
7
|
-
import { useGuidedTour } from '../../../../../components/GuidedTour/Provider.mjs';
|
|
8
7
|
import { Layouts } from '../../../../../components/Layouts/Layout.mjs';
|
|
9
8
|
import { Page } from '../../../../../components/PageHelpers.mjs';
|
|
10
9
|
import { useTypedSelector } from '../../../../../core/store/hooks.mjs';
|
|
@@ -17,7 +16,7 @@ import { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../servic
|
|
|
17
16
|
import { isBaseQueryError } from '../../../../../utils/baseQuery.mjs';
|
|
18
17
|
import { API_TOKEN_TYPE } from '../../../components/Tokens/constants.mjs';
|
|
19
18
|
import { FormHead } from '../../../components/Tokens/FormHead.mjs';
|
|
20
|
-
import {
|
|
19
|
+
import { ApiTokenBox } from '../../../components/Tokens/TokenBox.mjs';
|
|
21
20
|
import { ApiTokenPermissionsProvider } from './apiTokenPermissions.mjs';
|
|
22
21
|
import { FormApiTokenContainer } from './components/FormApiTokenContainer.mjs';
|
|
23
22
|
import { Permissions } from './components/Permissions.mjs';
|
|
@@ -38,7 +37,6 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
38
37
|
const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));
|
|
39
38
|
const hideTimerRef = React.useRef(null);
|
|
40
39
|
const { trackUsage } = useTracking();
|
|
41
|
-
const setCurrentStep = useGuidedTour('EditView', (state)=>state.setCurrentStep);
|
|
42
40
|
const { allowedActions: { canCreate, canUpdate, canRegenerate } } = useRBAC(permissions.settings?.['api-tokens']);
|
|
43
41
|
const [state, dispatch] = React.useReducer(reducer, initialState);
|
|
44
42
|
const match = useMatch('/settings/api-tokens/:id');
|
|
@@ -222,7 +220,6 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
222
220
|
},
|
|
223
221
|
replace: true
|
|
224
222
|
});
|
|
225
|
-
setCurrentStep('apiTokens.success');
|
|
226
223
|
} else {
|
|
227
224
|
const res = await updateToken({
|
|
228
225
|
id: id,
|
|
@@ -354,10 +351,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
354
351
|
gap: 6,
|
|
355
352
|
children: [
|
|
356
353
|
apiToken?.accessKey && showToken && /*#__PURE__*/ jsx(Fragment, {
|
|
357
|
-
children:
|
|
358
|
-
token: apiToken.accessKey,
|
|
359
|
-
tokenType: API_TOKEN_TYPE
|
|
360
|
-
}) : /*#__PURE__*/ jsx(TokenBox, {
|
|
354
|
+
children: /*#__PURE__*/ jsx(ApiTokenBox, {
|
|
361
355
|
token: apiToken.accessKey,
|
|
362
356
|
tokenType: API_TOKEN_TYPE
|
|
363
357
|
})
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditViewPage.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../../components/GuidedTour/Provider';\nimport { Layouts } from '../../../../../components/Layouts/Layout';\nimport { Page } from '../../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../../core/store/hooks';\nimport { useNotification } from '../../../../../features/Notifications';\nimport { useTracking } from '../../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../../hooks/useAPIErrorHandler';\nimport { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { TokenBox, UnstableApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const setCurrentStep = useGuidedTour('EditView', (state) => state.setCurrentStep);\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\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 if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n setCurrentStep('apiTokens.success');\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\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 const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n {window.strapi.future.isEnabled('unstableGuidedTour') ? (\n <UnstableApiTokenBox\n token={apiToken.accessKey}\n tokenType={API_TOKEN_TYPE}\n />\n ) : (\n <TokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n )}\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","setCurrentStep","useGuidedTour","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","window","strapi","future","isEnabled","UnstableApiTokenBox","TokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditViewPage.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Flex } from '@strapi/design-system';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useMatch, useNavigate } from 'react-router-dom';\n\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 { useRBAC } from '../../../../../hooks/useRBAC';\nimport {\n useCreateAPITokenMutation,\n useGetAPITokenQuery,\n useUpdateAPITokenMutation,\n} from '../../../../../services/apiTokens';\nimport { useGetPermissionsQuery, useGetRoutesQuery } from '../../../../../services/contentApi';\nimport { isBaseQueryError } from '../../../../../utils/baseQuery';\nimport { API_TOKEN_TYPE } from '../../../components/Tokens/constants';\nimport { FormHead } from '../../../components/Tokens/FormHead';\nimport { TokenBox, ApiTokenBox } from '../../../components/Tokens/TokenBox';\n\nimport {\n ApiTokenPermissionsContextValue,\n ApiTokenPermissionsProvider,\n} from './apiTokenPermissions';\nimport { FormApiTokenContainer } from './components/FormApiTokenContainer';\nimport { Permissions } from './components/Permissions';\nimport { schema } from './constants';\nimport { initialState, reducer } from './reducer';\n\nimport type { Get, ApiToken } from '../../../../../../../shared/contracts/api-token';\n\n/**\n * TODO: this could definitely be refactored to avoid using redux and instead just use the\n * server response as the source of the truth for the data.\n */\nexport const EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const { state: locationState } = useLocation();\n const permissions = useTypedSelector((state) => state.admin_app.permissions);\n const [apiToken, setApiToken] = React.useState<ApiToken | null>(\n locationState?.apiToken?.accessKey\n ? {\n ...locationState.apiToken,\n }\n : null\n );\n const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));\n const hideTimerRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);\n const { trackUsage } = useTracking();\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions.settings?.['api-tokens']);\n const [state, dispatch] = React.useReducer(reducer, initialState);\n const match = useMatch('/settings/api-tokens/:id');\n const id = match?.params?.id;\n const isCreating = id === 'create';\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidtionErrors,\n } = useAPIErrorHandler();\n\n const navigate = useNavigate();\n\n const contentAPIPermissionsQuery = useGetPermissionsQuery();\n const contentAPIRoutesQuery = useGetRoutesQuery();\n /**\n * Separate effects otherwise we could end\n * up duplicating the same notification.\n */\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIPermissionsQuery.error),\n });\n }\n }, [contentAPIPermissionsQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(contentAPIRoutesQuery.error),\n });\n }\n }, [contentAPIRoutesQuery.error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n if (contentAPIPermissionsQuery.data) {\n dispatch({\n type: 'UPDATE_PERMISSIONS_LAYOUT',\n value: contentAPIPermissionsQuery.data,\n });\n }\n }, [contentAPIPermissionsQuery.data]);\n\n React.useEffect(() => {\n if (contentAPIRoutesQuery.data) {\n dispatch({\n type: 'UPDATE_ROUTES',\n value: contentAPIRoutesQuery.data,\n });\n }\n }, [contentAPIRoutesQuery.data]);\n\n React.useEffect(() => {\n if (apiToken) {\n if (apiToken.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (apiToken.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (apiToken.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: apiToken?.permissions,\n });\n }\n }\n }, [apiToken]);\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error, isLoading } = useGetAPITokenQuery(id!, {\n skip: !id || isCreating || !!apiToken,\n });\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 if (data) {\n setApiToken(data);\n\n if (data.type === 'read-only') {\n dispatch({\n type: 'ON_CHANGE_READ_ONLY',\n });\n }\n if (data.type === 'full-access') {\n dispatch({\n type: 'SELECT_ALL_ACTIONS',\n });\n }\n if (data.type === 'custom') {\n dispatch({\n type: 'UPDATE_PERMISSIONS',\n value: data?.permissions,\n });\n }\n }\n }, [data]);\n\n React.useEffect(() => {\n // Only set up timer when token is shown\n if (showToken) {\n hideTimerRef.current = setTimeout(() => {\n setShowToken(false);\n }, 30000); // 30 seconds\n\n // Cleanup on unmount or when showToken changes\n return () => {\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n }\n }, [showToken]);\n\n const [createToken] = useCreateAPITokenMutation();\n const [updateToken] = useUpdateAPITokenMutation();\n\n interface FormValues extends Pick<Get.Response['data'], 'name' | 'description'> {\n lifespan: Get.Response['data']['lifespan'] | undefined;\n type: Get.Response['data']['type'] | undefined;\n }\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: API_TOKEN_TYPE,\n });\n\n try {\n if (isCreating) {\n const res = await createToken({\n ...body,\n // lifespan must be \"null\" for unlimited (0 would mean instantly expired and isn't accepted)\n lifespan:\n body?.lifespan && body.lifespan !== '0' ? parseInt(body.lifespan.toString(), 10) : null,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokencreated',\n defaultMessage: 'API Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n\n navigate(`../api-tokens/${res.data.id.toString()}`, {\n state: { apiToken: res.data },\n replace: true,\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n type: body.type,\n permissions: body.type === 'custom' ? state.selectedActions : null,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidtionErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.apitokenedited',\n defaultMessage: 'API Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: res.data.type,\n tokenType: API_TOKEN_TYPE,\n });\n }\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 const [hasChangedPermissions, setHasChangedPermissions] = React.useState(false);\n\n const handleChangeCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChange']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'ON_CHANGE',\n value,\n });\n };\n\n const handleChangeSelectAllCheckbox = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['onChangeSelectAll']>[0]) => {\n setHasChangedPermissions(true);\n dispatch({\n type: 'SELECT_ALL_IN_PERMISSION',\n value,\n });\n };\n\n const setSelectedAction = ({\n target: { value },\n }: Parameters<ApiTokenPermissionsContextValue['value']['setSelectedAction']>[0]) => {\n dispatch({\n type: 'SET_SELECTED_ACTION',\n value,\n });\n };\n\n const toggleToken = () => {\n setShowToken((prev) => !prev);\n if (hideTimerRef.current) {\n clearTimeout(hideTimerRef.current);\n hideTimerRef.current = null;\n }\n };\n\n const providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const canShowToken = !!apiToken?.accessKey;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <ApiTokenPermissionsProvider value={providerValue}>\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={{\n name: apiToken?.name || '',\n description: apiToken?.description || '',\n type: apiToken?.type,\n lifespan: apiToken?.lifespan,\n }}\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values, setFieldValue }) => {\n if (hasChangedPermissions && values?.type !== 'custom') {\n setFieldValue('type', 'custom');\n }\n\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.apiTokens.createPage.title',\n defaultMessage: 'Create API Token',\n }}\n token={apiToken}\n setToken={setApiToken}\n toggleToken={toggleToken}\n showToken={showToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n canShowToken={canShowToken}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {apiToken?.accessKey && showToken && (\n <>\n <ApiTokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\n </>\n )}\n\n <FormApiTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n apiToken={apiToken}\n onDispatch={dispatch}\n setHasChangedPermissions={setHasChangedPermissions}\n />\n <Permissions\n disabled={\n !canEditInputs ||\n values?.type === 'read-only' ||\n values?.type === 'full-access'\n }\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n </ApiTokenPermissionsProvider>\n );\n};\n\nexport const ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n"],"names":["EditView","formatMessage","useIntl","toggleNotification","useNotification","state","locationState","useLocation","permissions","useTypedSelector","admin_app","apiToken","setApiToken","React","useState","accessKey","showToken","setShowToken","Boolean","hideTimerRef","useRef","trackUsage","useTracking","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","settings","dispatch","useReducer","reducer","initialState","match","useMatch","id","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidtionErrors","useAPIErrorHandler","navigate","useNavigate","contentAPIPermissionsQuery","useGetPermissionsQuery","contentAPIRoutesQuery","useGetRoutesQuery","useEffect","error","type","message","data","value","tokenType","API_TOKEN_TYPE","isLoading","useGetAPITokenQuery","skip","current","setTimeout","clearTimeout","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","toggleToken","prev","providerValue","onChange","onChangeSelectAll","canEditInputs","canShowToken","_jsx","Page","Loading","ApiTokenPermissionsProvider","_jsxs","Main","Title","Formik","validationSchema","schema","validateOnChange","initialValues","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","setFieldValue","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","_Fragment","ApiTokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
|
|
@@ -8,10 +8,9 @@ var symbols = require('@strapi/icons/symbols');
|
|
|
8
8
|
var qs = require('qs');
|
|
9
9
|
var reactIntl = require('react-intl');
|
|
10
10
|
var reactRouterDom = require('react-router-dom');
|
|
11
|
-
var
|
|
11
|
+
var Tours = require('../../../../components/GuidedTour/Tours.js');
|
|
12
12
|
var Layout = require('../../../../components/Layouts/Layout.js');
|
|
13
13
|
var PageHelpers = require('../../../../components/PageHelpers.js');
|
|
14
|
-
var Tours = require('../../../../components/UnstableGuidedTour/Tours.js');
|
|
15
14
|
var hooks = require('../../../../core/store/hooks.js');
|
|
16
15
|
var Notifications = require('../../../../features/Notifications.js');
|
|
17
16
|
var Tracking = require('../../../../features/Tracking.js');
|
|
@@ -83,13 +82,7 @@ const ListView = ()=>{
|
|
|
83
82
|
const { allowedActions: { canRead, canCreate, canDelete, canUpdate } } = useRBAC.useRBAC(permissions);
|
|
84
83
|
const navigate = reactRouterDom.useNavigate();
|
|
85
84
|
const { trackUsage } = Tracking.useTracking();
|
|
86
|
-
const startSection = Provider.useGuidedTour('ListView', (state)=>state.startSection);
|
|
87
85
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler.useAPIErrorHandler();
|
|
88
|
-
React__namespace.useEffect(()=>{
|
|
89
|
-
startSection('apiTokens');
|
|
90
|
-
}, [
|
|
91
|
-
startSection
|
|
92
|
-
]);
|
|
93
86
|
React__namespace.useEffect(()=>{
|
|
94
87
|
navigate({
|
|
95
88
|
search: qs__namespace.stringify({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { tours as unstable_tours } from '../../../../components/UnstableGuidedTour/Tours';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nimport type { Data } from '@strapi/types';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <unstable_tours.apiTokens.CreateAnAPIToken>\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n </unstable_tours.apiTokens.CreateAnAPIToken>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <unstable_tours.apiTokens.Introduction>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\n </unstable_tours.apiTokens.Introduction>\n </Page.Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["TABLE_HEADERS","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canCreate","canDelete","canUpdate","useRBAC","navigate","useNavigate","trackUsage","useTracking","startSection","useGuidedTour","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","headers","map","header","useOnce","tokenType","API_TOKEN_TYPE","data","apiTokens","isLoading","error","useGetAPITokensQuery","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","unstable_tours","CreateAnAPIToken","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Introduction","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
|
|
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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"}
|
|
@@ -6,10 +6,9 @@ import { EmptyDocuments } from '@strapi/icons/symbols';
|
|
|
6
6
|
import * as qs from 'qs';
|
|
7
7
|
import { useIntl } from 'react-intl';
|
|
8
8
|
import { useNavigate, Link } from 'react-router-dom';
|
|
9
|
-
import {
|
|
9
|
+
import { tours } from '../../../../components/GuidedTour/Tours.mjs';
|
|
10
10
|
import { Layouts } from '../../../../components/Layouts/Layout.mjs';
|
|
11
11
|
import { Page } from '../../../../components/PageHelpers.mjs';
|
|
12
|
-
import { tours } from '../../../../components/UnstableGuidedTour/Tours.mjs';
|
|
13
12
|
import { useTypedSelector } from '../../../../core/store/hooks.mjs';
|
|
14
13
|
import { useNotification } from '../../../../features/Notifications.mjs';
|
|
15
14
|
import { useTracking } from '../../../../features/Tracking.mjs';
|
|
@@ -61,13 +60,7 @@ const ListView = ()=>{
|
|
|
61
60
|
const { allowedActions: { canRead, canCreate, canDelete, canUpdate } } = useRBAC(permissions);
|
|
62
61
|
const navigate = useNavigate();
|
|
63
62
|
const { trackUsage } = useTracking();
|
|
64
|
-
const startSection = useGuidedTour('ListView', (state)=>state.startSection);
|
|
65
63
|
const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();
|
|
66
|
-
React.useEffect(()=>{
|
|
67
|
-
startSection('apiTokens');
|
|
68
|
-
}, [
|
|
69
|
-
startSection
|
|
70
|
-
]);
|
|
71
64
|
React.useEffect(()=>{
|
|
72
65
|
navigate({
|
|
73
66
|
search: qs.stringify({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ListView.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/ApiTokens/ListView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { EmptyStateLayout, LinkButton } from '@strapi/design-system';\nimport { Plus } from '@strapi/icons';\nimport { EmptyDocuments } from '@strapi/icons/symbols';\nimport * as qs from 'qs';\nimport { useIntl } from 'react-intl';\nimport { Link, useNavigate } from 'react-router-dom';\n\nimport { useGuidedTour } from '../../../../components/GuidedTour/Provider';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { tours as unstable_tours } from '../../../../components/UnstableGuidedTour/Tours';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useOnce } from '../../../../hooks/useOnce';\nimport { useRBAC } from '../../../../hooks/useRBAC';\nimport { useDeleteAPITokenMutation, useGetAPITokensQuery } from '../../../../services/apiTokens';\nimport { API_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { Table } from '../../components/Tokens/Table';\n\nimport type { Data } from '@strapi/types';\n\nconst TABLE_HEADERS = [\n {\n name: 'name',\n label: {\n id: 'Settings.apiTokens.ListView.headers.name',\n defaultMessage: 'Name',\n },\n sortable: true,\n },\n {\n name: 'description',\n label: {\n id: 'Settings.apiTokens.ListView.headers.description',\n defaultMessage: 'Description',\n },\n sortable: false,\n },\n {\n name: 'createdAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.createdAt',\n defaultMessage: 'Created at',\n },\n sortable: false,\n },\n {\n name: 'lastUsedAt',\n label: {\n id: 'Settings.apiTokens.ListView.headers.lastUsedAt',\n defaultMessage: 'Last used',\n },\n sortable: false,\n },\n];\n\nexport const ListView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens']\n );\n const {\n allowedActions: { canRead, canCreate, canDelete, canUpdate },\n } = useRBAC(permissions);\n const navigate = useNavigate();\n const { trackUsage } = useTracking();\n const startSection = useGuidedTour('ListView', (state) => state.startSection);\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n React.useEffect(() => {\n startSection('apiTokens');\n }, [startSection]);\n\n React.useEffect(() => {\n navigate({ search: qs.stringify({ sort: 'name:ASC' }, { encode: false }) });\n }, [navigate]);\n\n const headers = TABLE_HEADERS.map((header) => ({\n ...header,\n label: formatMessage(header.label),\n }));\n\n useOnce(() => {\n trackUsage('willAccessTokenList', {\n tokenType: API_TOKEN_TYPE,\n });\n });\n\n const { data: apiTokens = [], isLoading, error } = useGetAPITokensQuery();\n\n React.useEffect(() => {\n if (error) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(error),\n });\n }\n }, [error, formatAPIError, toggleNotification]);\n\n React.useEffect(() => {\n trackUsage('didAccessTokenList', { number: apiTokens.length, tokenType: API_TOKEN_TYPE });\n }, [apiTokens, trackUsage]);\n\n const [deleteToken] = useDeleteAPITokenMutation();\n\n const handleDelete = async (id: Data.ID) => {\n try {\n const res = await deleteToken(id);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n trackUsage('didDeleteToken');\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n };\n\n return (\n <>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n { name: 'API Tokens' }\n )}\n </Page.Title>\n <Layouts.Header\n title={formatMessage({ id: 'Settings.apiTokens.title', defaultMessage: 'API Tokens' })}\n subtitle={formatMessage({\n id: 'Settings.apiTokens.description',\n defaultMessage: 'List of generated tokens to consume the API',\n })}\n primaryAction={\n canCreate && (\n <unstable_tours.apiTokens.CreateAnAPIToken>\n <LinkButton\n tag={Link}\n data-testid=\"create-api-token-button\"\n startIcon={<Plus />}\n size=\"S\"\n onClick={() =>\n trackUsage('willAddTokenFromList', {\n tokenType: API_TOKEN_TYPE,\n })\n }\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.create',\n defaultMessage: 'Create new API Token',\n })}\n </LinkButton>\n </unstable_tours.apiTokens.CreateAnAPIToken>\n )\n }\n />\n {!canRead ? (\n <Page.NoPermissions />\n ) : (\n <Page.Main aria-busy={isLoading}>\n <unstable_tours.apiTokens.Introduction>\n <Layouts.Content>\n {apiTokens.length > 0 && (\n <Table\n permissions={{ canRead, canDelete, canUpdate }}\n headers={headers}\n isLoading={isLoading}\n onConfirmDelete={handleDelete}\n tokens={apiTokens}\n tokenType={API_TOKEN_TYPE}\n />\n )}\n {canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.addFirstToken',\n defaultMessage: 'Add your first API Token',\n })}\n action={\n <LinkButton\n tag={Link}\n variant=\"secondary\"\n startIcon={<Plus />}\n to=\"/settings/api-tokens/create\"\n >\n {formatMessage({\n id: 'Settings.apiTokens.addNewToken',\n defaultMessage: 'Add new API Token',\n })}\n </LinkButton>\n }\n />\n ) : null}\n {!canCreate && apiTokens.length === 0 ? (\n <EmptyStateLayout\n icon={<EmptyDocuments width=\"16rem\" />}\n content={formatMessage({\n id: 'Settings.apiTokens.emptyStateLayout',\n defaultMessage: 'You don’t have any content yet...',\n })}\n />\n ) : null}\n </Layouts.Content>\n </unstable_tours.apiTokens.Introduction>\n </Page.Main>\n )}\n </>\n );\n};\n\nexport const ProtectedListView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['api-tokens'].main\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <ListView />\n </Page.Protect>\n );\n};\n"],"names":["TABLE_HEADERS","name","label","id","defaultMessage","sortable","ListView","formatMessage","useIntl","toggleNotification","useNotification","permissions","useTypedSelector","state","admin_app","settings","allowedActions","canRead","canCreate","canDelete","canUpdate","useRBAC","navigate","useNavigate","trackUsage","useTracking","startSection","useGuidedTour","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","React","useEffect","search","qs","stringify","sort","encode","headers","map","header","useOnce","tokenType","API_TOKEN_TYPE","data","apiTokens","isLoading","error","useGetAPITokensQuery","type","message","number","length","deleteToken","useDeleteAPITokenMutation","handleDelete","res","_jsxs","_Fragment","_jsx","Page","Title","Layouts","Header","title","subtitle","primaryAction","unstable_tours","CreateAnAPIToken","LinkButton","tag","Link","data-testid","startIcon","Plus","size","onClick","to","NoPermissions","Main","aria-busy","Introduction","Content","Table","onConfirmDelete","tokens","EmptyStateLayout","icon","EmptyDocuments","width","content","action","variant","ProtectedListView","main","Protect"],"mappings":"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"}
|
|
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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"}
|
|
@@ -7,7 +7,6 @@ var formik = require('formik');
|
|
|
7
7
|
var reactIntl = require('react-intl');
|
|
8
8
|
var reactRouterDom = require('react-router-dom');
|
|
9
9
|
var yup = require('yup');
|
|
10
|
-
var Provider = require('../../../../components/GuidedTour/Provider.js');
|
|
11
10
|
var Layout = require('../../../../components/Layouts/Layout.js');
|
|
12
11
|
var PageHelpers = require('../../../../components/PageHelpers.js');
|
|
13
12
|
var hooks = require('../../../../core/store/hooks.js');
|
|
@@ -63,7 +62,6 @@ const schema = yup__namespace.object().shape({
|
|
|
63
62
|
...locationState.transferToken
|
|
64
63
|
} : null);
|
|
65
64
|
const { trackUsage } = Tracking.useTracking();
|
|
66
|
-
Provider.useGuidedTour('EditView', (state)=>state.setCurrentStep);
|
|
67
65
|
const permissions = hooks.useTypedSelector((state)=>state.admin_app.permissions.settings?.['transfer-tokens']);
|
|
68
66
|
const { allowedActions: { canCreate, canUpdate, canRegenerate } } = useRBAC.useRBAC(permissions);
|
|
69
67
|
const match = reactRouterDom.useMatch('/settings/transfer-tokens/:id');
|