@strapi/admin 5.13.0-beta.0 → 5.13.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/layouts/AuthenticatedLayout.js.map +1 -1
- package/dist/admin/admin/src/layouts/AuthenticatedLayout.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +4 -76
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +5 -77
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +19 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +21 -3
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/TokenBox.js +4 -1
- 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 +4 -1
- 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 +32 -2
- 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 +32 -2
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/EditViewPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +1 -0
- 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 +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/translations/ru.json.js +14 -1
- package/dist/admin/admin/src/translations/ru.json.js.map +1 -1
- package/dist/admin/admin/src/translations/ru.json.mjs +14 -1
- package/dist/admin/admin/src/translations/ru.json.mjs.map +1 -1
- package/dist/admin/src/pages/Settings/components/Tokens/FormHead.d.ts +4 -1
- package/dist/server/server/src/content-types/api-token.js +7 -0
- package/dist/server/server/src/content-types/api-token.js.map +1 -1
- package/dist/server/server/src/content-types/api-token.mjs +7 -0
- package/dist/server/server/src/content-types/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/api-token.js +21 -3
- package/dist/server/server/src/services/api-token.js.map +1 -1
- package/dist/server/server/src/services/api-token.mjs +21 -3
- package/dist/server/server/src/services/api-token.mjs.map +1 -1
- package/dist/server/server/src/services/encryption.js +62 -0
- package/dist/server/server/src/services/encryption.js.map +1 -0
- package/dist/server/server/src/services/encryption.mjs +60 -0
- package/dist/server/server/src/services/encryption.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/content-types/api-token.d.ts +7 -0
- package/dist/server/src/content-types/api-token.d.ts.map +1 -1
- package/dist/server/src/content-types/index.d.ts +7 -0
- package/dist/server/src/content-types/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +11 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/services/api-token.d.ts.map +1 -1
- package/dist/server/src/services/encryption.d.ts +6 -0
- package/dist/server/src/services/encryption.d.ts.map +1 -0
- package/dist/server/src/services/index.d.ts +4 -0
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/shared/contracts/api-token.d.ts +1 -0
- package/dist/shared/contracts/api-token.d.ts.map +1 -1
- package/package.json +7 -7
- package/dist/admin/admin/src/pages/Home/components/ContentManagerWidgets.js +0 -179
- package/dist/admin/admin/src/pages/Home/components/ContentManagerWidgets.js.map +0 -1
- package/dist/admin/admin/src/pages/Home/components/ContentManagerWidgets.mjs +0 -176
- package/dist/admin/admin/src/pages/Home/components/ContentManagerWidgets.mjs.map +0 -1
- package/dist/admin/admin/src/services/homepage.js +0 -28
- package/dist/admin/admin/src/services/homepage.js.map +0 -1
- package/dist/admin/admin/src/services/homepage.mjs +0 -26
- package/dist/admin/admin/src/services/homepage.mjs.map +0 -1
- package/dist/admin/src/pages/Home/components/ContentManagerWidgets.d.ts +0 -3
- package/dist/admin/src/services/homepage.d.ts +0 -5
|
@@ -56,6 +56,8 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
56
56
|
const [apiToken, setApiToken] = React__namespace.useState(locationState?.apiToken?.accessKey ? {
|
|
57
57
|
...locationState.apiToken
|
|
58
58
|
} : null);
|
|
59
|
+
const [showToken, setShowToken] = React__namespace.useState(Boolean(locationState?.apiToken?.accessKey));
|
|
60
|
+
const hideTimerRef = React__namespace.useRef(null);
|
|
59
61
|
const { trackUsage } = Tracking.useTracking();
|
|
60
62
|
const setCurrentStep = Provider.useGuidedTour('EditView', (state)=>state.setCurrentStep);
|
|
61
63
|
const { allowedActions: { canCreate, canUpdate, canRegenerate } } = useRBAC.useRBAC(permissions.settings?.['api-tokens']);
|
|
@@ -182,6 +184,23 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
182
184
|
}, [
|
|
183
185
|
data
|
|
184
186
|
]);
|
|
187
|
+
React__namespace.useEffect(()=>{
|
|
188
|
+
// Only set up timer when token is shown
|
|
189
|
+
if (showToken) {
|
|
190
|
+
hideTimerRef.current = setTimeout(()=>{
|
|
191
|
+
setShowToken(false);
|
|
192
|
+
}, 30000); // 30 seconds
|
|
193
|
+
// Cleanup on unmount or when showToken changes
|
|
194
|
+
return ()=>{
|
|
195
|
+
if (hideTimerRef.current) {
|
|
196
|
+
clearTimeout(hideTimerRef.current);
|
|
197
|
+
hideTimerRef.current = null;
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
}, [
|
|
202
|
+
showToken
|
|
203
|
+
]);
|
|
185
204
|
const [createToken] = apiTokens.useCreateAPITokenMutation();
|
|
186
205
|
const [updateToken] = apiTokens.useUpdateAPITokenMutation();
|
|
187
206
|
const handleSubmit = async (body, formik)=>{
|
|
@@ -287,6 +306,13 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
287
306
|
value
|
|
288
307
|
});
|
|
289
308
|
};
|
|
309
|
+
const toggleToken = ()=>{
|
|
310
|
+
setShowToken((prev)=>!prev);
|
|
311
|
+
if (hideTimerRef.current) {
|
|
312
|
+
clearTimeout(hideTimerRef.current);
|
|
313
|
+
hideTimerRef.current = null;
|
|
314
|
+
}
|
|
315
|
+
};
|
|
290
316
|
const providerValue = {
|
|
291
317
|
...state,
|
|
292
318
|
onChange: handleChangeCheckbox,
|
|
@@ -294,6 +320,7 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
294
320
|
setSelectedAction
|
|
295
321
|
};
|
|
296
322
|
const canEditInputs = canUpdate && !isCreating || canCreate && isCreating;
|
|
323
|
+
const canShowToken = !!apiToken?.accessKey;
|
|
297
324
|
if (isLoading) {
|
|
298
325
|
return /*#__PURE__*/ jsxRuntime.jsx(PageHelpers.Page.Loading, {});
|
|
299
326
|
}
|
|
@@ -333,8 +360,11 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
333
360
|
},
|
|
334
361
|
token: apiToken,
|
|
335
362
|
setToken: setApiToken,
|
|
363
|
+
toggleToken: toggleToken,
|
|
364
|
+
showToken: showToken,
|
|
336
365
|
canEditInputs: canEditInputs,
|
|
337
366
|
canRegenerate: canRegenerate,
|
|
367
|
+
canShowToken: canShowToken,
|
|
338
368
|
isSubmitting: isSubmitting,
|
|
339
369
|
regenerateUrl: "/admin/api-tokens/"
|
|
340
370
|
}),
|
|
@@ -344,8 +374,8 @@ var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
|
|
|
344
374
|
alignItems: "stretch",
|
|
345
375
|
gap: 6,
|
|
346
376
|
children: [
|
|
347
|
-
|
|
348
|
-
token: apiToken
|
|
377
|
+
apiToken?.accessKey && showToken && /*#__PURE__*/ jsxRuntime.jsx(TokenBox.TokenBox, {
|
|
378
|
+
token: apiToken.accessKey,
|
|
349
379
|
tokenType: constants.API_TOKEN_TYPE
|
|
350
380
|
}),
|
|
351
381
|
/*#__PURE__*/ jsxRuntime.jsx(FormApiTokenContainer.FormApiTokenContainer, {
|
|
@@ -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 } 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 { 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 /**\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 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 providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\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 canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {Boolean(apiToken?.name) && (\n <TokenBox token={apiToken?.accessKey} tokenType={API_TOKEN_TYPE} />\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","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","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","providerValue","onChange","onChangeSelectAll","canEditInputs","_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","Boolean","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 { 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 } 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 <TokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\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","TokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
|
|
@@ -35,6 +35,8 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
35
35
|
const [apiToken, setApiToken] = React.useState(locationState?.apiToken?.accessKey ? {
|
|
36
36
|
...locationState.apiToken
|
|
37
37
|
} : null);
|
|
38
|
+
const [showToken, setShowToken] = React.useState(Boolean(locationState?.apiToken?.accessKey));
|
|
39
|
+
const hideTimerRef = React.useRef(null);
|
|
38
40
|
const { trackUsage } = useTracking();
|
|
39
41
|
const setCurrentStep = useGuidedTour('EditView', (state)=>state.setCurrentStep);
|
|
40
42
|
const { allowedActions: { canCreate, canUpdate, canRegenerate } } = useRBAC(permissions.settings?.['api-tokens']);
|
|
@@ -161,6 +163,23 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
161
163
|
}, [
|
|
162
164
|
data
|
|
163
165
|
]);
|
|
166
|
+
React.useEffect(()=>{
|
|
167
|
+
// Only set up timer when token is shown
|
|
168
|
+
if (showToken) {
|
|
169
|
+
hideTimerRef.current = setTimeout(()=>{
|
|
170
|
+
setShowToken(false);
|
|
171
|
+
}, 30000); // 30 seconds
|
|
172
|
+
// Cleanup on unmount or when showToken changes
|
|
173
|
+
return ()=>{
|
|
174
|
+
if (hideTimerRef.current) {
|
|
175
|
+
clearTimeout(hideTimerRef.current);
|
|
176
|
+
hideTimerRef.current = null;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
}, [
|
|
181
|
+
showToken
|
|
182
|
+
]);
|
|
164
183
|
const [createToken] = useCreateAPITokenMutation();
|
|
165
184
|
const [updateToken] = useUpdateAPITokenMutation();
|
|
166
185
|
const handleSubmit = async (body, formik)=>{
|
|
@@ -266,6 +285,13 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
266
285
|
value
|
|
267
286
|
});
|
|
268
287
|
};
|
|
288
|
+
const toggleToken = ()=>{
|
|
289
|
+
setShowToken((prev)=>!prev);
|
|
290
|
+
if (hideTimerRef.current) {
|
|
291
|
+
clearTimeout(hideTimerRef.current);
|
|
292
|
+
hideTimerRef.current = null;
|
|
293
|
+
}
|
|
294
|
+
};
|
|
269
295
|
const providerValue = {
|
|
270
296
|
...state,
|
|
271
297
|
onChange: handleChangeCheckbox,
|
|
@@ -273,6 +299,7 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
273
299
|
setSelectedAction
|
|
274
300
|
};
|
|
275
301
|
const canEditInputs = canUpdate && !isCreating || canCreate && isCreating;
|
|
302
|
+
const canShowToken = !!apiToken?.accessKey;
|
|
276
303
|
if (isLoading) {
|
|
277
304
|
return /*#__PURE__*/ jsx(Page.Loading, {});
|
|
278
305
|
}
|
|
@@ -312,8 +339,11 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
312
339
|
},
|
|
313
340
|
token: apiToken,
|
|
314
341
|
setToken: setApiToken,
|
|
342
|
+
toggleToken: toggleToken,
|
|
343
|
+
showToken: showToken,
|
|
315
344
|
canEditInputs: canEditInputs,
|
|
316
345
|
canRegenerate: canRegenerate,
|
|
346
|
+
canShowToken: canShowToken,
|
|
317
347
|
isSubmitting: isSubmitting,
|
|
318
348
|
regenerateUrl: "/admin/api-tokens/"
|
|
319
349
|
}),
|
|
@@ -323,8 +353,8 @@ import { reducer, initialState } from './reducer.mjs';
|
|
|
323
353
|
alignItems: "stretch",
|
|
324
354
|
gap: 6,
|
|
325
355
|
children: [
|
|
326
|
-
|
|
327
|
-
token: apiToken
|
|
356
|
+
apiToken?.accessKey && showToken && /*#__PURE__*/ jsx(TokenBox, {
|
|
357
|
+
token: apiToken.accessKey,
|
|
328
358
|
tokenType: API_TOKEN_TYPE
|
|
329
359
|
}),
|
|
330
360
|
/*#__PURE__*/ jsx(FormApiTokenContainer, {
|
|
@@ -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 } 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 { 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 /**\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 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 providerValue = {\n ...state,\n onChange: handleChangeCheckbox,\n onChangeSelectAll: handleChangeSelectAllCheckbox,\n setSelectedAction,\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\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 canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/api-tokens/\"\n />\n\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {Boolean(apiToken?.name) && (\n <TokenBox token={apiToken?.accessKey} tokenType={API_TOKEN_TYPE} />\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","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","createToken","useCreateAPITokenMutation","updateToken","useUpdateAPITokenMutation","handleSubmit","body","formik","res","lifespan","parseInt","toString","selectedActions","isBaseQueryError","name","setErrors","defaultMessage","replace","description","hasChangedPermissions","setHasChangedPermissions","handleChangeCheckbox","target","handleChangeSelectAllCheckbox","setSelectedAction","providerValue","onChange","onChangeSelectAll","canEditInputs","_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","Boolean","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 { 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 } 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 <TokenBox token={apiToken.accessKey} tokenType={API_TOKEN_TYPE} />\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","TokenBox","FormApiTokenContainer","onDispatch","Permissions","disabled","ProtectedEditView","read","Protect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/TransferTokens/EditView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Grid, Typography } from '@strapi/design-system';\nimport { Formik, Form, FormikErrors, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useNavigate, useMatch } from 'react-router-dom';\nimport * as yup from 'yup';\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 useCreateTransferTokenMutation,\n useGetTransferTokenQuery,\n useUpdateTransferTokenMutation,\n} from '../../../../services/transferTokens';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\nimport { TRANSFER_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { FormHead } from '../../components/Tokens/FormHead';\nimport { LifeSpanInput } from '../../components/Tokens/LifeSpanInput';\nimport { TokenBox } from '../../components/Tokens/TokenBox';\nimport { TokenDescription } from '../../components/Tokens/TokenDescription';\nimport { TokenName } from '../../components/Tokens/TokenName';\nimport { TokenTypeSelect } from '../../components/Tokens/TokenTypeSelect';\n\nimport type {\n TransferToken,\n SanitizedTransferToken,\n} from '../../../../../../shared/contracts/transfer';\n\nconst schema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required.id),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required.id),\n permissions: yup.string().required(translatedErrors.required.id),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * EditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const { state: locationState } = useLocation();\n const [transferToken, setTransferToken] = React.useState<\n TransferToken | SanitizedTransferToken | null\n >(\n locationState && 'accessKey' in locationState.transferToken\n ? {\n ...locationState.transferToken,\n }\n : null\n );\n const { trackUsage } = useTracking();\n const setCurrentStep = useGuidedTour('EditView', (state) => state.setCurrentStep);\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens']\n );\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions);\n const match = useMatch('/settings/transfer-tokens/:id');\n\n const id = match?.params?.id;\n const isCreating = id === 'create';\n\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error } = useGetTransferTokenQuery(id!, {\n skip: isCreating || transferToken !== null || !id,\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 setTransferToken(data);\n }\n }, [data]);\n\n const [createToken] = useCreateTransferTokenMutation();\n const [updateToken] = useUpdateTransferTokenMutation();\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n\n const permissions = body.permissions.split('-');\n\n const isPermissionsTransferPermission = (\n permission: string[]\n ): permission is Array<'push' | 'pull'> => {\n if (permission.length === 1) {\n return permission[0] === 'push' || permission[0] === 'pull';\n }\n\n return permission[0] === 'push' && permission[1] === 'pull';\n };\n\n // this type-guard is necessary to satisfy the type for `permissions` in the request body,\n // because String.split returns stringp[]\n if (isPermissionsTransferPermission(permissions)) {\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'\n ? parseInt(body.lifespan.toString(), 10)\n : null,\n permissions,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n setTransferToken(res.data);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.transfertokencreated',\n defaultMessage: 'Transfer Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: transferToken?.permissions,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n\n navigate(`../transfer-tokens/${res.data.id.toString()}`, {\n replace: true,\n state: { transferToken: res.data },\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n permissions,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n setTransferToken(res.data);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.transfertokenedited',\n defaultMessage: 'Transfer Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: transferToken?.permissions,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n }\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const isLoading = !isCreating && !transferToken;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Transfer Tokens',\n }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={\n {\n name: transferToken?.name || '',\n description: transferToken?.description || '',\n lifespan: transferToken?.lifespan || null,\n /**\n * We need to cast the permissions to satisfy the type for `permissions`\n * in the request body incase we don't have a transferToken and instead\n * use an empty string.\n */\n permissions: (transferToken?.permissions.join('-') ?? '') as FormValues['permissions'],\n } satisfies FormValues\n }\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values }) => {\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.transferTokens.createPage.title',\n defaultMessage: 'TokenCreate Transfer Token',\n }}\n token={transferToken}\n setToken={setTransferToken}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/transfer/tokens/\"\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {transferToken &&\n Boolean(transferToken?.name) &&\n 'accessKey' in transferToken && (\n <TokenBox token={transferToken.accessKey} tokenType={TRANSFER_TOKEN_TYPE} />\n )}\n <FormTransferTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n transferToken={transferToken}\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FormTransferTokenContainer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormValues extends Pick<TransferToken, 'description' | 'name' | 'lifespan'> {\n permissions: Extract<TransferToken['permissions'][number], string>;\n}\n\ninterface FormTransferTokenContainerProps {\n errors: FormikErrors<FormValues>;\n onChange: ({ target: { name, value } }: { target: { name: string; value: string } }) => void;\n canEditInputs: boolean;\n values: FormValues;\n isCreating: boolean;\n transferToken: Partial<TransferToken> | null;\n}\n\nconst FormTransferTokenContainer = ({\n errors = {},\n onChange,\n canEditInputs,\n isCreating,\n values,\n transferToken = {},\n}: FormTransferTokenContainerProps) => {\n const { formatMessage } = useIntl();\n\n const typeOptions = [\n {\n value: 'push',\n label: {\n id: 'Settings.transferTokens.types.push',\n defaultMessage: 'Push',\n },\n },\n {\n value: 'pull',\n label: {\n id: 'Settings.transferTokens.types.pull',\n defaultMessage: 'Pull',\n },\n },\n {\n value: 'push-pull',\n label: {\n id: 'Settings.transferTokens.types.push-pull',\n defaultMessage: 'Full Access',\n },\n },\n ];\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid.Root gap={5}>\n <Grid.Item key=\"name\" col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <TokenName\n error={errors['name']}\n value={values['name']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </Grid.Item>\n <Grid.Item key=\"description\" col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <TokenDescription\n error={errors['description']}\n value={values['description']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </Grid.Item>\n <Grid.Item key=\"lifespan\" col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LifeSpanInput\n isCreating={isCreating}\n error={errors['lifespan']}\n value={values['lifespan']}\n onChange={onChange}\n token={transferToken}\n />\n </Grid.Item>\n <Grid.Item key=\"permissions\" col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <TokenTypeSelect\n name=\"permissions\"\n value={values['permissions']}\n error={errors['permissions']}\n label={{\n id: 'Settings.tokens.form.type',\n defaultMessage: 'Token type',\n }}\n // @ts-expect-error – DS Select passes number | string, will be fixed in V2\n onChange={(value: string) => {\n onChange({ target: { name: 'permissions', value } });\n }}\n options={typeOptions}\n canEditInputs={canEditInputs}\n />\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\nexport { EditView, ProtectedEditView };\n"],"names":["schema","yup","object","shape","name","string","max","required","translatedErrors","id","description","nullable","lifespan","number","integer","min","defined","permissions","EditView","formatMessage","useIntl","toggleNotification","useNotification","navigate","useNavigate","state","locationState","useLocation","transferToken","setTransferToken","React","useState","trackUsage","useTracking","useGuidedTour","setCurrentStep","useTypedSelector","admin_app","settings","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","match","useMatch","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","useEffect","tokenType","TRANSFER_TOKEN_TYPE","data","error","useGetTransferTokenQuery","skip","type","message","createToken","useCreateTransferTokenMutation","updateToken","useUpdateTransferTokenMutation","handleSubmit","body","formik","split","isPermissionsTransferPermission","permission","length","res","parseInt","toString","isBaseQueryError","setErrors","defaultMessage","replace","err","canEditInputs","isLoading","_jsx","Page","Loading","_jsxs","Main","Title","Formik","validationSchema","validateOnChange","initialValues","join","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","Form","FormHead","title","token","setToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","Boolean","TokenBox","accessKey","FormTransferTokenContainer","onChange","ProtectedEditView","read","Protect","typeOptions","value","label","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Typography","variant","tag","Grid","Root","Item","col","xs","TokenName","TokenDescription","LifeSpanInput","TokenTypeSelect","target","options"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditView.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/TransferTokens/EditView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Flex, Grid, Typography } from '@strapi/design-system';\nimport { Formik, Form, FormikErrors, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useLocation, useNavigate, useMatch } from 'react-router-dom';\nimport * as yup from 'yup';\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 useCreateTransferTokenMutation,\n useGetTransferTokenQuery,\n useUpdateTransferTokenMutation,\n} from '../../../../services/transferTokens';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\nimport { TRANSFER_TOKEN_TYPE } from '../../components/Tokens/constants';\nimport { FormHead } from '../../components/Tokens/FormHead';\nimport { LifeSpanInput } from '../../components/Tokens/LifeSpanInput';\nimport { TokenBox } from '../../components/Tokens/TokenBox';\nimport { TokenDescription } from '../../components/Tokens/TokenDescription';\nimport { TokenName } from '../../components/Tokens/TokenName';\nimport { TokenTypeSelect } from '../../components/Tokens/TokenTypeSelect';\n\nimport type {\n TransferToken,\n SanitizedTransferToken,\n} from '../../../../../../shared/contracts/transfer';\n\nconst schema = yup.object().shape({\n name: yup.string().max(100).required(translatedErrors.required.id),\n description: yup.string().nullable(),\n lifespan: yup.number().integer().min(0).nullable().defined(translatedErrors.required.id),\n permissions: yup.string().required(translatedErrors.required.id),\n});\n\n/* -------------------------------------------------------------------------------------------------\n * EditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst EditView = () => {\n const { formatMessage } = useIntl();\n const { toggleNotification } = useNotification();\n const navigate = useNavigate();\n const { state: locationState } = useLocation();\n const [transferToken, setTransferToken] = React.useState<\n TransferToken | SanitizedTransferToken | null\n >(\n locationState && 'accessKey' in locationState.transferToken\n ? {\n ...locationState.transferToken,\n }\n : null\n );\n const { trackUsage } = useTracking();\n const setCurrentStep = useGuidedTour('EditView', (state) => state.setCurrentStep);\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens']\n );\n const {\n allowedActions: { canCreate, canUpdate, canRegenerate },\n } = useRBAC(permissions);\n const match = useMatch('/settings/transfer-tokens/:id');\n\n const id = match?.params?.id;\n const isCreating = id === 'create';\n\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n React.useEffect(() => {\n trackUsage(isCreating ? 'didAddTokenFromList' : 'didEditTokenFromList', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }, [isCreating, trackUsage]);\n\n const { data, error } = useGetTransferTokenQuery(id!, {\n skip: isCreating || transferToken !== null || !id,\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 setTransferToken(data);\n }\n }, [data]);\n\n const [createToken] = useCreateTransferTokenMutation();\n const [updateToken] = useUpdateTransferTokenMutation();\n\n const handleSubmit = async (body: FormValues, formik: FormikHelpers<FormValues>) => {\n trackUsage(isCreating ? 'willCreateToken' : 'willEditToken', {\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n\n const permissions = body.permissions.split('-');\n\n const isPermissionsTransferPermission = (\n permission: string[]\n ): permission is Array<'push' | 'pull'> => {\n if (permission.length === 1) {\n return permission[0] === 'push' || permission[0] === 'pull';\n }\n\n return permission[0] === 'push' && permission[1] === 'pull';\n };\n\n // this type-guard is necessary to satisfy the type for `permissions` in the request body,\n // because String.split returns stringp[]\n if (isPermissionsTransferPermission(permissions)) {\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'\n ? parseInt(body.lifespan.toString(), 10)\n : null,\n permissions,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n setTransferToken(res.data);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.transfertokencreated',\n defaultMessage: 'Transfer Token successfully created',\n }),\n });\n\n trackUsage('didCreateToken', {\n type: transferToken?.permissions,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n\n navigate(`../transfer-tokens/${res.data.id.toString()}`, {\n replace: true,\n state: { transferToken: res.data },\n });\n } else {\n const res = await updateToken({\n id: id!,\n name: body.name,\n description: body.description,\n permissions,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n setTransferToken(res.data);\n\n toggleNotification({\n type: 'success',\n message: formatMessage({\n id: 'notification.success.transfertokenedited',\n defaultMessage: 'Transfer Token successfully edited',\n }),\n });\n\n trackUsage('didEditToken', {\n type: transferToken?.permissions,\n tokenType: TRANSFER_TOKEN_TYPE,\n });\n }\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n }\n }\n };\n\n const canEditInputs = (canUpdate && !isCreating) || (canCreate && isCreating);\n const isLoading = !isCreating && !transferToken;\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Transfer Tokens',\n }\n )}\n </Page.Title>\n <Formik\n validationSchema={schema}\n validateOnChange={false}\n initialValues={\n {\n name: transferToken?.name || '',\n description: transferToken?.description || '',\n lifespan: transferToken?.lifespan || null,\n /**\n * We need to cast the permissions to satisfy the type for `permissions`\n * in the request body incase we don't have a transferToken and instead\n * use an empty string.\n */\n permissions: (transferToken?.permissions.join('-') ?? '') as FormValues['permissions'],\n } satisfies FormValues\n }\n enableReinitialize\n onSubmit={(body, actions) => handleSubmit(body, actions)}\n >\n {({ errors, handleChange, isSubmitting, values }) => {\n return (\n <Form>\n <FormHead\n title={{\n id: 'Settings.transferTokens.createPage.title',\n defaultMessage: 'TokenCreate Transfer Token',\n }}\n token={transferToken}\n setToken={setTransferToken}\n canShowToken={false}\n canEditInputs={canEditInputs}\n canRegenerate={canRegenerate}\n isSubmitting={isSubmitting}\n regenerateUrl=\"/admin/transfer/tokens/\"\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n {transferToken &&\n Boolean(transferToken?.name) &&\n 'accessKey' in transferToken && (\n <TokenBox token={transferToken.accessKey} tokenType={TRANSFER_TOKEN_TYPE} />\n )}\n <FormTransferTokenContainer\n errors={errors}\n onChange={handleChange}\n canEditInputs={canEditInputs}\n isCreating={isCreating}\n values={values}\n transferToken={transferToken}\n />\n </Flex>\n </Layouts.Content>\n </Form>\n );\n }}\n </Formik>\n </Page.Main>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedEditView\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedEditView = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.['transfer-tokens'].read\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditView />\n </Page.Protect>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * FormTransferTokenContainer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface FormValues extends Pick<TransferToken, 'description' | 'name' | 'lifespan'> {\n permissions: Extract<TransferToken['permissions'][number], string>;\n}\n\ninterface FormTransferTokenContainerProps {\n errors: FormikErrors<FormValues>;\n onChange: ({ target: { name, value } }: { target: { name: string; value: string } }) => void;\n canEditInputs: boolean;\n values: FormValues;\n isCreating: boolean;\n transferToken: Partial<TransferToken> | null;\n}\n\nconst FormTransferTokenContainer = ({\n errors = {},\n onChange,\n canEditInputs,\n isCreating,\n values,\n transferToken = {},\n}: FormTransferTokenContainerProps) => {\n const { formatMessage } = useIntl();\n\n const typeOptions = [\n {\n value: 'push',\n label: {\n id: 'Settings.transferTokens.types.push',\n defaultMessage: 'Push',\n },\n },\n {\n value: 'pull',\n label: {\n id: 'Settings.transferTokens.types.pull',\n defaultMessage: 'Pull',\n },\n },\n {\n value: 'push-pull',\n label: {\n id: 'Settings.transferTokens.types.push-pull',\n defaultMessage: 'Full Access',\n },\n },\n ];\n\n return (\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n <Grid.Root gap={5}>\n <Grid.Item key=\"name\" col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <TokenName\n error={errors['name']}\n value={values['name']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </Grid.Item>\n <Grid.Item key=\"description\" col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <TokenDescription\n error={errors['description']}\n value={values['description']}\n canEditInputs={canEditInputs}\n onChange={onChange}\n />\n </Grid.Item>\n <Grid.Item key=\"lifespan\" col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <LifeSpanInput\n isCreating={isCreating}\n error={errors['lifespan']}\n value={values['lifespan']}\n onChange={onChange}\n token={transferToken}\n />\n </Grid.Item>\n <Grid.Item key=\"permissions\" col={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <TokenTypeSelect\n name=\"permissions\"\n value={values['permissions']}\n error={errors['permissions']}\n label={{\n id: 'Settings.tokens.form.type',\n defaultMessage: 'Token type',\n }}\n // @ts-expect-error – DS Select passes number | string, will be fixed in V2\n onChange={(value: string) => {\n onChange({ target: { name: 'permissions', value } });\n }}\n options={typeOptions}\n canEditInputs={canEditInputs}\n />\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\nexport { EditView, ProtectedEditView };\n"],"names":["schema","yup","object","shape","name","string","max","required","translatedErrors","id","description","nullable","lifespan","number","integer","min","defined","permissions","EditView","formatMessage","useIntl","toggleNotification","useNotification","navigate","useNavigate","state","locationState","useLocation","transferToken","setTransferToken","React","useState","trackUsage","useTracking","useGuidedTour","setCurrentStep","useTypedSelector","admin_app","settings","allowedActions","canCreate","canUpdate","canRegenerate","useRBAC","match","useMatch","params","isCreating","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","useEffect","tokenType","TRANSFER_TOKEN_TYPE","data","error","useGetTransferTokenQuery","skip","type","message","createToken","useCreateTransferTokenMutation","updateToken","useUpdateTransferTokenMutation","handleSubmit","body","formik","split","isPermissionsTransferPermission","permission","length","res","parseInt","toString","isBaseQueryError","setErrors","defaultMessage","replace","err","canEditInputs","isLoading","_jsx","Page","Loading","_jsxs","Main","Title","Formik","validationSchema","validateOnChange","initialValues","join","enableReinitialize","onSubmit","actions","errors","handleChange","isSubmitting","values","Form","FormHead","title","token","setToken","canShowToken","regenerateUrl","Layouts","Content","Flex","direction","alignItems","gap","Boolean","TokenBox","accessKey","FormTransferTokenContainer","onChange","ProtectedEditView","read","Protect","typeOptions","value","label","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Typography","variant","tag","Grid","Root","Item","col","xs","TokenName","TokenDescription","LifeSpanInput","TokenTypeSelect","target","options"],"mappings":"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"}
|