@strapi/admin 5.51.1 → 5.51.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/StrapiApp.js +3 -3
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +3 -3
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +35 -26
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +35 -27
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +1 -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 +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +1 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +1 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +1 -1
- 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 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +3 -2
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +3 -2
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/users.js +1 -1
- package/dist/admin/admin/src/utils/users.js.map +1 -1
- package/dist/admin/admin/src/utils/users.mjs +1 -1
- package/dist/admin/admin/src/utils/users.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js +640 -684
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +640 -684
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/ee/admin/src/constants.js +22 -26
- package/dist/admin/ee/admin/src/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/constants.mjs +22 -26
- package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js +16 -20
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs +16 -20
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs.map +1 -1
- package/dist/admin/src/pages/Auth/components/Register.d.ts +10 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.d.ts +3 -1
- package/dist/ee/server/src/destroy.d.ts +1 -4
- package/dist/ee/server/src/destroy.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +3 -3
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +3 -3
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +1 -1
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/destroy.js +1 -1
- package/dist/server/ee/server/src/destroy.js.map +1 -1
- package/dist/server/ee/server/src/destroy.mjs +1 -1
- package/dist/server/ee/server/src/destroy.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +1 -3
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +1 -3
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/index.js.map +1 -1
- package/dist/server/ee/server/src/services/index.mjs +2 -2
- package/dist/server/ee/server/src/services/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.js +2 -2
- package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.mjs +4 -4
- package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.js +2 -2
- package/dist/server/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.mjs +2 -2
- package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js +1 -2
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs +2 -2
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/services/encryption.js +1 -1
- package/dist/server/server/src/services/encryption.js.map +1 -1
- package/dist/server/server/src/services/encryption.mjs +1 -1
- package/dist/server/server/src/services/encryption.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +4 -8
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs +5 -5
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/permission.js +1 -5
- package/dist/server/server/src/services/transfer/permission.js.map +1 -1
- package/dist/server/server/src/services/transfer/permission.mjs +2 -2
- package/dist/server/server/src/services/transfer/permission.mjs.map +1 -1
- package/dist/server/server/src/services/user.js +1 -1
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +1 -1
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts +1 -1
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/transfer/permission.d.ts +2 -2
- package/dist/server/src/services/transfer/permission.d.ts.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormHead.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst ActionButton = styled(Button)`\n white-space: nowrap;\n`;\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <ActionButton\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </ActionButton>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex width=\"100%\" gap={2} wrap={{ initial: 'wrap', medium: 'nowrap' }}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n <Flex width=\"100%\" gap={2}>\n {token?.id && toggleToken && canShowToken === true && (\n <tours.apiTokens.ViewAPIToken>\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <ActionButton\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </ActionButton>\n </Tooltip>\n </tours.apiTokens.ViewAPIToken>\n )}\n <ActionButton\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </ActionButton>\n </Flex>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton />\n </Box>\n }\n ellipsis\n />\n );\n};\n"],"names":["ActionButton","styled","Button","Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","startIcon","ArrowClockwise","size","variant","onClick","name","fullWidth","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","width","gap","wrap","initial","medium","tours","apiTokens","ViewAPIToken","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","Box","display","BackButton","ellipsis"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormHead.js","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst ActionButton = styled(Button)`\n white-space: nowrap;\n`;\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <ActionButton\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </ActionButton>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex width=\"100%\" gap={2} wrap={{ initial: 'wrap', medium: 'nowrap' }}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n <Flex width=\"100%\" gap={2}>\n {token?.id && toggleToken && canShowToken === true && (\n <tours.apiTokens.ViewAPIToken>\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <ActionButton\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </ActionButton>\n </Tooltip>\n </tours.apiTokens.ViewAPIToken>\n )}\n <ActionButton\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </ActionButton>\n </Flex>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton />\n </Box>\n }\n ellipsis\n />\n );\n};\n"],"names":["ActionButton","styled","Button","Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","startIcon","ArrowClockwise","size","variant","onClick","name","fullWidth","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","width","gap","wrap","initial","medium","tours","apiTokens","ViewAPIToken","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","Box","display","BackButton","ellipsis"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FormHead.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst ActionButton = styled(Button)`\n white-space: nowrap;\n`;\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <ActionButton\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </ActionButton>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex width=\"100%\" gap={2} wrap={{ initial: 'wrap', medium: 'nowrap' }}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n <Flex width=\"100%\" gap={2}>\n {token?.id && toggleToken && canShowToken === true && (\n <tours.apiTokens.ViewAPIToken>\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <ActionButton\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </ActionButton>\n </Tooltip>\n </tours.apiTokens.ViewAPIToken>\n )}\n <ActionButton\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </ActionButton>\n </Flex>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton />\n </Box>\n }\n ellipsis\n />\n );\n};\n"],"names":["ActionButton","styled","Button","Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","startIcon","ArrowClockwise","size","variant","onClick","name","fullWidth","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","width","gap","wrap","initial","medium","tours","apiTokens","ViewAPIToken","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","Box","display","BackButton","ellipsis"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"FormHead.mjs","sources":["../../../../../../../../admin/src/pages/Settings/components/Tokens/FormHead.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Dialog, Flex, Tooltip } from '@strapi/design-system';\nimport { Check, ArrowClockwise, Eye, EyeStriked } from '@strapi/icons';\nimport { MessageDescriptor, useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport { ConfirmDialog } from '../../../../components/ConfirmDialog';\nimport { tours } from '../../../../components/GuidedTour/Tours';\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport { useRegenerateTokenMutation } from '../../../../services/transferTokens';\n\nimport type { Data } from '@strapi/types';\n\ninterface RegenerateProps {\n onRegenerate?: (newKey: string) => void;\n url: string;\n}\n\nconst ActionButton = styled(Button)`\n white-space: nowrap;\n`;\n\nconst Regenerate = ({ onRegenerate, url }: RegenerateProps) => {\n const { formatMessage } = useIntl();\n const [showConfirmDialog, setShowConfirmDialog] = React.useState(false);\n\n const [isLoadingConfirmation, setIsLoadingConfirmation] = React.useState(false);\n const { toggleNotification } = useNotification();\n const { _unstableFormatAPIError: formatAPIError } = useAPIErrorHandler();\n\n const [regenerateToken] = useRegenerateTokenMutation();\n\n const regenerateData = async () => {\n try {\n const res = await regenerateToken(url);\n\n if ('error' in res) {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n\n return;\n }\n\n if (onRegenerate) {\n onRegenerate(res.data.accessKey);\n }\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({\n id: 'notification.error',\n defaultMessage: 'Something went wrong',\n }),\n });\n } finally {\n setIsLoadingConfirmation(false);\n }\n };\n\n const handleConfirmRegeneration = async () => {\n regenerateData();\n setShowConfirmDialog(false);\n };\n\n return (\n <Dialog.Root open={showConfirmDialog} onOpenChange={setShowConfirmDialog}>\n <Dialog.Trigger>\n <ActionButton\n startIcon={<ArrowClockwise />}\n type=\"button\"\n size=\"S\"\n variant=\"tertiary\"\n onClick={() => setShowConfirmDialog(true)}\n name=\"regenerate\"\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </ActionButton>\n </Dialog.Trigger>\n\n <ConfirmDialog\n title={formatMessage({\n id: 'Settings.tokens.RegenerateDialog.title',\n defaultMessage: 'Regenerate token',\n })}\n endAction={\n <Button\n startIcon={<ArrowClockwise />}\n loading={isLoadingConfirmation}\n onClick={handleConfirmRegeneration}\n >\n {formatMessage({\n id: 'Settings.tokens.Button.regenerate',\n defaultMessage: 'Regenerate',\n })}\n </Button>\n }\n >\n {formatMessage({\n id: 'Settings.tokens.popUpWarning.message',\n defaultMessage: 'Are you sure you want to regenerate this token?',\n })}\n </ConfirmDialog>\n </Dialog.Root>\n );\n};\n\ninterface Token {\n id: Data.ID;\n name: string;\n}\n\ninterface FormHeadProps<TToken extends Token | null> {\n title: MessageDescriptor;\n token: TToken;\n canEditInputs: boolean;\n canRegenerate: boolean;\n canShowToken?: boolean;\n setToken: (token: TToken) => void;\n toggleToken?: () => void;\n showToken?: boolean;\n isSubmitting: boolean;\n regenerateUrl: string;\n}\n\nexport const FormHead = <TToken extends Token | null>({\n title,\n token,\n setToken,\n toggleToken,\n showToken,\n canShowToken,\n canEditInputs,\n canRegenerate,\n isSubmitting,\n regenerateUrl,\n}: FormHeadProps<TToken>) => {\n const { formatMessage } = useIntl();\n const handleRegenerate = (newKey: string) => {\n setToken({\n ...token,\n accessKey: newKey,\n });\n toggleToken?.();\n };\n\n return (\n <Layouts.Header\n title={token?.name || formatMessage(title)}\n primaryAction={\n canEditInputs ? (\n <Flex width=\"100%\" gap={2} wrap={{ initial: 'wrap', medium: 'nowrap' }}>\n {canRegenerate && token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )}\n <Flex width=\"100%\" gap={2}>\n {token?.id && toggleToken && canShowToken === true && (\n <tours.apiTokens.ViewAPIToken>\n <Tooltip\n label={\n !canShowToken &&\n formatMessage({\n id: 'Settings.tokens.encryptionKeyMissing',\n defaultMessage:\n 'In order to view the token, you need a valid encryption key in the admin configuration',\n })\n }\n >\n <ActionButton\n type=\"button\"\n startIcon={showToken ? <EyeStriked /> : <Eye />}\n variant=\"secondary\"\n onClick={() => toggleToken?.()}\n disabled={!canShowToken}\n fullWidth\n >\n {formatMessage({\n id: 'Settings.tokens.viewToken',\n defaultMessage: 'View token',\n })}\n </ActionButton>\n </Tooltip>\n </tours.apiTokens.ViewAPIToken>\n )}\n <ActionButton\n disabled={isSubmitting}\n loading={isSubmitting}\n startIcon={<Check />}\n type=\"submit\"\n size=\"S\"\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </ActionButton>\n </Flex>\n </Flex>\n ) : (\n canRegenerate &&\n token?.id && (\n <Regenerate\n onRegenerate={handleRegenerate}\n url={`${regenerateUrl}${token?.id ?? ''}`}\n />\n )\n )\n }\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton />\n </Box>\n }\n ellipsis\n />\n );\n};\n"],"names":["ActionButton","styled","Button","Regenerate","onRegenerate","url","formatMessage","useIntl","showConfirmDialog","setShowConfirmDialog","React","useState","isLoadingConfirmation","setIsLoadingConfirmation","toggleNotification","useNotification","_unstableFormatAPIError","formatAPIError","useAPIErrorHandler","regenerateToken","useRegenerateTokenMutation","regenerateData","res","type","message","error","data","accessKey","id","defaultMessage","handleConfirmRegeneration","_jsxs","Dialog","Root","open","onOpenChange","_jsx","Trigger","startIcon","ArrowClockwise","size","variant","onClick","name","fullWidth","ConfirmDialog","title","endAction","loading","FormHead","token","setToken","toggleToken","showToken","canShowToken","canEditInputs","canRegenerate","isSubmitting","regenerateUrl","handleRegenerate","newKey","Layouts","Header","primaryAction","Flex","width","gap","wrap","initial","medium","tours","apiTokens","ViewAPIToken","Tooltip","label","EyeStriked","Eye","disabled","Check","navigationAction","Box","display","BackButton","ellipsis"],"mappings":";;;;;;;;;;;;;;AAsBA,MAAMA,YAAAA,GAAeC,MAAAA,CAAOC,MAAAA,CAAO;;AAEnC,CAAC;AAED,MAAMC,aAAa,CAAC,EAAEC,YAAY,EAAEC,GAAG,EAAmB,GAAA;IACxD,MAAM,EAAEC,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAM,CAACC,iBAAAA,EAAmBC,oBAAAA,CAAqB,GAAGC,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;AAEjE,IAAA,MAAM,CAACC,qBAAAA,EAAuBC,wBAAAA,CAAyB,GAAGH,KAAAA,CAAMC,QAAQ,CAAC,KAAA,CAAA;IACzE,MAAM,EAAEG,kBAAkB,EAAE,GAAGC,eAAAA,EAAAA;AAC/B,IAAA,MAAM,EAAEC,uBAAAA,EAAyBC,cAAc,EAAE,GAAGC,kBAAAA,EAAAA;IAEpD,MAAM,CAACC,gBAAgB,GAAGC,0BAAAA,EAAAA;AAE1B,IAAA,MAAMC,cAAAA,GAAiB,UAAA;QACrB,IAAI;YACF,MAAMC,GAAAA,GAAM,MAAMH,eAAAA,CAAgBd,GAAAA,CAAAA;AAElC,YAAA,IAAI,WAAWiB,GAAAA,EAAK;gBAClBR,kBAAAA,CAAmB;oBACjBS,IAAAA,EAAM,QAAA;oBACNC,OAAAA,EAASP,cAAAA,CAAeK,IAAIG,KAAK;AACnC,iBAAA,CAAA;AAEA,gBAAA;AACF,YAAA;AAEA,YAAA,IAAIrB,YAAAA,EAAc;gBAChBA,YAAAA,CAAakB,GAAAA,CAAII,IAAI,CAACC,SAAS,CAAA;AACjC,YAAA;AACF,QAAA,CAAA,CAAE,OAAM;YACNb,kBAAAA,CAAmB;gBACjBS,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASlB,aAAAA,CAAc;oBACrBsB,EAAAA,EAAI,oBAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;AACF,aAAA,CAAA;QACF,CAAA,QAAU;YACRhB,wBAAAA,CAAyB,KAAA,CAAA;AAC3B,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,MAAMiB,yBAAAA,GAA4B,UAAA;AAChCT,QAAAA,cAAAA,EAAAA;QACAZ,oBAAAA,CAAqB,KAAA,CAAA;AACvB,IAAA,CAAA;IAEA,qBACEsB,IAAA,CAACC,OAAOC,IAAI,EAAA;QAACC,IAAAA,EAAM1B,iBAAAA;QAAmB2B,YAAAA,EAAc1B,oBAAAA;;AAClD,0BAAA2B,GAAA,CAACJ,OAAOK,OAAO,EAAA;AACb,gBAAA,QAAA,gBAAAD,GAAA,CAACpC,YAAAA,EAAAA;AACCsC,oBAAAA,SAAAA,gBAAWF,GAAA,CAACG,cAAAA,EAAAA,EAAAA,CAAAA;oBACZhB,IAAAA,EAAK,QAAA;oBACLiB,IAAAA,EAAK,GAAA;oBACLC,OAAAA,EAAQ,UAAA;AACRC,oBAAAA,OAAAA,EAAS,IAAMjC,oBAAAA,CAAqB,IAAA,CAAA;oBACpCkC,IAAAA,EAAK,YAAA;oBACLC,SAAS,EAAA,IAAA;8BAERtC,aAAAA,CAAc;wBACbsB,EAAAA,EAAI,4BAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;;0BAIJO,GAAA,CAACS,aAAAA,EAAAA;AACCC,gBAAAA,KAAAA,EAAOxC,aAAAA,CAAc;oBACnBsB,EAAAA,EAAI,wCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA,CAAA;AACAkB,gBAAAA,SAAAA,gBACEX,GAAA,CAAClC,MAAAA,EAAAA;AACCoC,oBAAAA,SAAAA,gBAAWF,GAAA,CAACG,cAAAA,EAAAA,EAAAA,CAAAA;oBACZS,OAAAA,EAASpC,qBAAAA;oBACT8B,OAAAA,EAASZ,yBAAAA;8BAERxB,aAAAA,CAAc;wBACbsB,EAAAA,EAAI,mCAAA;wBACJC,cAAAA,EAAgB;AAClB,qBAAA;;0BAIHvB,aAAAA,CAAc;oBACbsB,EAAAA,EAAI,sCAAA;oBACJC,cAAAA,EAAgB;AAClB,iBAAA;;;;AAIR,CAAA;AAoBO,MAAMoB,WAAW,CAA8B,EACpDH,KAAK,EACLI,KAAK,EACLC,QAAQ,EACRC,WAAW,EACXC,SAAS,EACTC,YAAY,EACZC,aAAa,EACbC,aAAa,EACbC,YAAY,EACZC,aAAa,EACS,GAAA;IACtB,MAAM,EAAEpD,aAAa,EAAE,GAAGC,OAAAA,EAAAA;AAC1B,IAAA,MAAMoD,mBAAmB,CAACC,MAAAA,GAAAA;QACxBT,QAAAA,CAAS;AACP,YAAA,GAAGD,KAAK;YACRvB,SAAAA,EAAWiC;AACb,SAAA,CAAA;AACAR,QAAAA,WAAAA,IAAAA;AACF,IAAA,CAAA;IAEA,qBACEhB,GAAA,CAACyB,QAAQC,MAAM,EAAA;QACbhB,KAAAA,EAAOI,KAAAA,EAAOP,QAAQrC,aAAAA,CAAcwC,KAAAA,CAAAA;AACpCiB,QAAAA,aAAAA,EACER,8BACExB,IAAA,CAACiC,IAAAA,EAAAA;YAAKC,KAAAA,EAAM,MAAA;YAAOC,GAAAA,EAAK,CAAA;YAAGC,IAAAA,EAAM;gBAAEC,OAAAA,EAAS,MAAA;gBAAQC,MAAAA,EAAQ;AAAS,aAAA;;gBAClEb,aAAAA,IAAiBN,KAAAA,EAAOtB,oBACvBQ,GAAA,CAACjC,UAAAA,EAAAA;oBACCC,YAAAA,EAAcuD,gBAAAA;AACdtD,oBAAAA,GAAAA,EAAK,CAAA,EAAGqD,aAAAA,CAAAA,EAAgBR,KAAAA,EAAOtB,EAAAA,IAAM,EAAA,CAAA;;8BAGzCG,IAAA,CAACiC,IAAAA,EAAAA;oBAAKC,KAAAA,EAAM,MAAA;oBAAOC,GAAAA,EAAK,CAAA;;wBACrBhB,KAAAA,EAAOtB,EAAAA,IAAMwB,eAAeE,YAAAA,KAAiB,IAAA,kBAC5ClB,IAACkC,KAAAA,CAAMC,SAAS,CAACC,YAAY,EAAA;AAC3B,4BAAA,QAAA,gBAAApC,GAAA,CAACqC,OAAAA,EAAAA;gCACCC,KAAAA,EACE,CAACpB,gBACDhD,aAAAA,CAAc;oCACZsB,EAAAA,EAAI,sCAAA;oCACJC,cAAAA,EACE;AACJ,iCAAA,CAAA;AAGF,gCAAA,QAAA,gBAAAO,GAAA,CAACpC,YAAAA,EAAAA;oCACCuB,IAAAA,EAAK,QAAA;oCACLe,SAAAA,EAAWe,SAAAA,iBAAYjB,GAAA,CAACuC,UAAAA,EAAAA,EAAAA,CAAAA,iBAAgBvC,GAAA,CAACwC,GAAAA,EAAAA,EAAAA,CAAAA;oCACzCnC,OAAAA,EAAQ,WAAA;AACRC,oCAAAA,OAAAA,EAAS,IAAMU,WAAAA,IAAAA;AACfyB,oCAAAA,QAAAA,EAAU,CAACvB,YAAAA;oCACXV,SAAS,EAAA,IAAA;8CAERtC,aAAAA,CAAc;wCACbsB,EAAAA,EAAI,2BAAA;wCACJC,cAAAA,EAAgB;AAClB,qCAAA;;;;sCAKRO,GAAA,CAACpC,YAAAA,EAAAA;4BACC6E,QAAAA,EAAUpB,YAAAA;4BACVT,OAAAA,EAASS,YAAAA;AACTnB,4BAAAA,SAAAA,gBAAWF,GAAA,CAAC0C,KAAAA,EAAAA,EAAAA,CAAAA;4BACZvD,IAAAA,EAAK,QAAA;4BACLiB,IAAAA,EAAK,GAAA;4BACLI,SAAS,EAAA,IAAA;sCAERtC,aAAAA,CAAc;gCACbsB,EAAAA,EAAI,aAAA;gCACJC,cAAAA,EAAgB;AAClB,6BAAA;;;;;aAKN2B,aAAAA,IACAN,KAAAA,EAAOtB,oBACLQ,GAAA,CAACjC,UAAAA,EAAAA;YACCC,YAAAA,EAAcuD,gBAAAA;AACdtD,YAAAA,GAAAA,EAAK,CAAA,EAAGqD,aAAAA,CAAAA,EAAgBR,KAAAA,EAAOtB,EAAAA,IAAM,EAAA,CAAA;;AAK7CmD,QAAAA,gBAAAA;sBAEE3C,GAAA,CAAC4C,GAAAA,EAAAA;YAAIC,OAAAA,EAAS;gBAAEb,OAAAA,EAAS,MAAA;gBAAQC,MAAAA,EAAQ;AAAQ,aAAA;AAC/C,YAAA,QAAA,gBAAAjC,GAAA,CAAC8C,UAAAA,EAAAA,EAAAA;;QAGLC,QAAQ,EAAA;;AAGd;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatePage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const { id } = useParams();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { currentData: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\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 const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.roles.created', defaultMessage: 'created' }),\n });\n\n navigate(`../roles/${res.data.id.toString()}`, { replace: true });\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if ((isLoadingPermissionsLayout && isLoadingRole) || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <Layouts.Header\n primaryAction={\n <Flex width=\"100%\" gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button\n type=\"submit\"\n loading={isSubmitting}\n disabled={hasLocaleValidationErrors}\n startIcon={<Check />}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput type=\"text\" onChange={handleChange} value={values.name} />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n >\n <Field.Label>\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Field.Label>\n <Textarea onChange={handleChange} value={values.description} />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: 1.2rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <CreatePage />\n </Page.Protect>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["CREATE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","CreatePage","useParams","toggleNotification","useNotification","formatMessage","useIntl","navigate","useNavigate","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","currentData","permissionsLayout","useGetRolePermissionLayoutQuery","role","rolePermissions","isLoadingRole","useGetRolePermissionsQuery","skip","refetchOnMountOrArgChange","createRole","useCreateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","handleCreateRoleSubmit","data","formik","current","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","getPermissions","Array","isArray","length","updateRes","permissions","defaultMessage","toString","replace","err","_jsx","Page","Loading","_jsxs","Main","Title","Formik","initialValues","format","Date","onSubmit","validationSchema","validateOnChange","values","errors","handleReset","handleChange","isSubmitting","Form","_Fragment","Layouts","Header","primaryAction","Flex","width","gap","Button","variant","onClick","resetForm","fullWidth","loading","disabled","startIcon","Check","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","m","xs","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","onLocaleValidationChange","ref","layout","styled","div","theme","colors","primary200","primary100","spaces","primary600","borderRadius","ProtectedCreatePage","useTypedSelector","state","admin_app","settings","roles","create","Protect"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuCA;;AAEkG,qGAElG,MAAMA,aAAAA,GAAgBC,cAAAA,CAAIC,MAAM,EAAA,CAAGC,KAAK,CAAC;IACvCC,IAAAA,EAAMH,cAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,CAACC,iCAAAA,CAAiBD,QAAQ,CAACE,EAAE,CAAA;IACxDC,WAAAA,EAAaR,cAAAA,CAAII,MAAM,EAAA,CAAGC,QAAQ,CAACC,iCAAAA,CAAiBD,QAAQ,CAACE,EAAE;AACjE,CAAA,CAAA;AAUA;;;AAGC,UACKE,UAAAA,GAAa,IAAA;IACjB,MAAM,EAAEF,EAAE,EAAE,GAAGG,wBAAAA,EAAAA;IACf,MAAM,EAAEC,kBAAkB,EAAE,GAAGC,6BAAAA,EAAAA;IAC/B,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAC1B,IAAA,MAAMC,QAAAA,GAAWC,0BAAAA,EAAAA;IACjB,MAAMC,cAAAA,GAAiBC,gBAAAA,CAAMC,MAAM,CAAiB,IAAA,CAAA;AACpD,IAAA,MAAM,CAACC,yBAAAA,EAA2BC,4BAAAA,CAA6B,GAAGH,gBAAAA,CAAMI,QAAQ,CAAC,KAAA,CAAA;IACjF,MAAM,EAAEC,UAAU,EAAE,GAAGC,oBAAAA,EAAAA;AACvB,IAAA,MAAM,EACJC,uBAAAA,EAAyBC,cAAc,EACvCC,+BAAAA,EAAiCC,sBAAsB,EACxD,GAAGC,qCAAAA,EAAAA;IAEJ,MAAM,EAAEC,WAAWC,0BAA0B,EAAEC,aAAaC,iBAAiB,EAAE,GAC7EC,qCAAAA,CAAgC;AAC9B;;;AAGC,UACDC,MAAM5B,EAAAA,IAAM;AACd,KAAA,CAAA;AAEF;;;MAIA,MAAM,EAAEyB,WAAAA,EAAaI,eAAe,EAAEN,SAAAA,EAAWO,aAAa,EAAE,GAAGC,gCAAAA,CACjE;QACE/B,EAAAA,EAAIA;KACN,EACA;AACEgC,QAAAA,IAAAA,EAAM,CAAChC,EAAAA;QACPiC,yBAAAA,EAA2B;AAC7B,KAAA,CAAA;IAGF,MAAM,CAACC,WAAW,GAAGC,2BAAAA,EAAAA;IACrB,MAAM,CAACC,sBAAsB,GAAGC,sCAAAA,EAAAA;IAEhC,MAAMC,sBAAAA,GAAyB,OAC7BC,IAAAA,EACAC,MAAAA,GAAAA;;QAGA,IAAI9B,cAAAA,CAAe+B,OAAO,EAAE5B,yBAAAA,EAAAA,EAA6B;AACvD,YAAA;AACF,QAAA;QAEA,IAAI;AACF,YAAA,IAAIb,EAAAA,EAAI;gBACNgB,UAAAA,CAAW,mBAAA,CAAA;YACb,CAAA,MAAO;gBACLA,UAAAA,CAAW,mBAAA,CAAA;AACb,YAAA;YAEA,MAAM0B,GAAAA,GAAM,MAAMR,UAAAA,CAAWK,IAAAA,CAAAA;AAE7B,YAAA,IAAI,WAAWG,GAAAA,EAAK;gBAClB,IAAIC,0BAAAA,CAAiBD,IAAIE,KAAK,CAAA,IAAKF,IAAIE,KAAK,CAAChD,IAAI,KAAK,iBAAA,EAAmB;AACvE4C,oBAAAA,MAAAA,CAAOK,SAAS,CAACxB,sBAAAA,CAAuBqB,GAAAA,CAAIE,KAAK,CAAA,CAAA;gBACnD,CAAA,MAAO;oBACLxC,kBAAAA,CAAmB;wBACjB0C,IAAAA,EAAM,QAAA;wBACNC,OAAAA,EAAS5B,cAAAA,CAAeuB,IAAIE,KAAK;AACnC,qBAAA,CAAA;AACF,gBAAA;AAEA,gBAAA;AACF,YAAA;YAEA,MAAM,EAAEI,iBAAiB,EAAE,GAAGtC,eAAe+B,OAAO,EAAEQ,oBAAoB,EAAC;AAE3E,YAAA,IAAIP,GAAAA,CAAIH,IAAI,CAACvC,EAAE,IAAIkD,KAAAA,CAAMC,OAAO,CAACH,iBAAAA,CAAAA,IAAsBA,iBAAAA,CAAkBI,MAAM,GAAG,CAAA,EAAG;gBACnF,MAAMC,SAAAA,GAAY,MAAMjB,qBAAAA,CAAsB;oBAC5CpC,EAAAA,EAAI0C,GAAAA,CAAIH,IAAI,CAACvC,EAAE;oBACfsD,WAAAA,EAAaN;AACf,iBAAA,CAAA;AAEA,gBAAA,IAAI,WAAWK,SAAAA,EAAW;oBACxB,IAAIV,0BAAAA,CAAiBU,UAAUT,KAAK,CAAA,IAAKS,UAAUT,KAAK,CAAChD,IAAI,KAAK,iBAAA,EAAmB;AACnF4C,wBAAAA,MAAAA,CAAOK,SAAS,CAACxB,sBAAAA,CAAuBgC,SAAAA,CAAUT,KAAK,CAAA,CAAA;oBACzD,CAAA,MAAO;wBACLxC,kBAAAA,CAAmB;4BACjB0C,IAAAA,EAAM,QAAA;4BACNC,OAAAA,EAAS5B,cAAAA,CAAekC,UAAUT,KAAK;AACzC,yBAAA,CAAA;AACF,oBAAA;AAEA,oBAAA;AACF,gBAAA;AACF,YAAA;YAEAxC,kBAAAA,CAAmB;gBACjB0C,IAAAA,EAAM,SAAA;AACNC,gBAAAA,OAAAA,EAASzC,aAAAA,CAAc;oBAAEN,EAAAA,EAAI,wBAAA;oBAA0BuD,cAAAA,EAAgB;AAAU,iBAAA;AACnF,aAAA,CAAA;YAEA/C,QAAAA,CAAS,CAAC,SAAS,EAAEkC,GAAAA,CAAIH,IAAI,CAACvC,EAAE,CAACwD,QAAQ,EAAA,CAAA,CAAI,EAAE;gBAAEC,OAAAA,EAAS;AAAK,aAAA,CAAA;AACjE,QAAA,CAAA,CAAE,OAAOC,GAAAA,EAAK;YACZtD,kBAAAA,CAAmB;gBACjB0C,IAAAA,EAAM,QAAA;AACNC,gBAAAA,OAAAA,EAASzC,aAAAA,CAAc;oBAAEN,EAAAA,EAAI,oBAAA;oBAAsBuD,cAAAA,EAAgB;AAAoB,iBAAA;AACzF,aAAA,CAAA;AACF,QAAA;AACF,IAAA,CAAA;AAEA,IAAA,IAAI,0BAAC/B,IAA8BM,aAAAA,IAAkB,CAACJ,iBAAAA,EAAmB;QACvE,qBAAOiC,cAAA,CAACC,iBAAKC,OAAO,EAAA,EAAA,CAAA;AACtB,IAAA;AAEA,IAAA,qBACEC,eAAA,CAACC,iBAAAA,EAAAA;;AACC,0BAAAJ,cAAA,CAACC,iBAAKI,KAAK,EAAA;0BACR1D,aAAAA,CACC;oBAAEN,EAAAA,EAAI,oBAAA;oBAAsBuD,cAAAA,EAAgB;iBAAoB,EAChE;oBACE3D,IAAAA,EAAM;AACR,iBAAA;;0BAGJ+D,cAAA,CAACM,aAAAA,EAAAA;gBACCC,aAAAA,EACE;oBACEtE,IAAAA,EAAM,EAAA;AACNK,oBAAAA,WAAAA,EAAa,GAAGK,aAAAA,CAAc;wBAC5BN,EAAAA,EAAI,6BAAA;wBACJuD,cAAAA,EAAgB;AAClB,qBAAA,CAAA,CAAG,CAAC,EAAEY,cAAAA,CAAO,IAAIC,QAAQ,KAAA,CAAA,CAAA;AAC3B,iBAAA;gBAEFC,QAAAA,EAAU/B,sBAAAA;gBACVgC,gBAAAA,EAAkB9E,aAAAA;gBAClB+E,gBAAAA,EAAkB,KAAA;AAEjB,gBAAA,QAAA,EAAA,CAAC,EAAEC,MAAM,EAAEC,MAAM,EAAEC,WAAW,EAAEC,YAAY,EAAEC,YAAY,EAAE,iBAC3DjB,cAAA,CAACkB,WAAAA,EAAAA;gDACCf,eAAA,CAAAgB,mBAAA,EAAA;;AACE,8CAAAnB,cAAA,CAACoB,eAAQC,MAAM,EAAA;AACbC,oCAAAA,aAAAA,gBACEnB,eAAA,CAACoB,iBAAAA,EAAAA;wCAAKC,KAAAA,EAAM,MAAA;wCAAOC,GAAAA,EAAK,CAAA;;0DACtBzB,cAAA,CAAC0B,mBAAAA,EAAAA;gDACCC,OAAAA,EAAQ,WAAA;gDACRC,OAAAA,EAAS,IAAA;AACPb,oDAAAA,WAAAA,EAAAA;AACAhE,oDAAAA,cAAAA,CAAe+B,OAAO,EAAE+C,SAAAA,EAAAA;AAC1B,gDAAA,CAAA;gDACAC,SAAS,EAAA,IAAA;0DAERnF,aAAAA,CAAc;oDACbN,EAAAA,EAAI,6BAAA;oDACJuD,cAAAA,EAAgB;AAClB,iDAAA;;0DAEFI,cAAA,CAAC0B,mBAAAA,EAAAA;gDACCvC,IAAAA,EAAK,QAAA;gDACL4C,OAAAA,EAASd,YAAAA;gDACTe,QAAAA,EAAU9E,yBAAAA;AACV+E,gDAAAA,SAAAA,gBAAWjC,cAAA,CAACkC,WAAAA,EAAAA,EAAAA,CAAAA;gDACZJ,SAAS,EAAA,IAAA;0DAERnF,aAAAA,CAAc;oDACbN,EAAAA,EAAI,aAAA;oDACJuD,cAAAA,EAAgB;AAClB,iDAAA;;;;AAINuC,oCAAAA,KAAAA,EAAOxF,aAAAA,CAAc;wCACnBN,EAAAA,EAAI,6BAAA;wCACJuD,cAAAA,EAAgB;AAClB,qCAAA,CAAA;AACAwC,oCAAAA,QAAAA,EAAUzF,aAAAA,CAAc;wCACtBN,EAAAA,EAAI,mCAAA;wCACJuD,cAAAA,EAAgB;AAClB,qCAAA,CAAA;AACAyC,oCAAAA,gBAAAA;kDAEErC,cAAA,CAACsC,gBAAAA,EAAAA;wCAAIC,OAAAA,EAAS;4CAAEC,OAAAA,EAAS,MAAA;4CAAQC,MAAAA,EAAQ;AAAQ,yCAAA;AAC/C,wCAAA,QAAA,gBAAAzC,cAAA,CAAC0C,qBAAAA,EAAAA;4CAAWC,QAAAA,EAAS;;;;AAI3B,8CAAA3C,cAAA,CAACoB,eAAQwB,OAAO,EAAA;AACd,oCAAA,QAAA,gBAAAzC,eAAA,CAACoB,iBAAAA,EAAAA;wCAAKsB,SAAAA,EAAU,QAAA;wCAASC,UAAAA,EAAW,SAAA;wCAAUrB,GAAAA,EAAK,CAAA;;0DACjDzB,cAAA,CAACsC,gBAAAA,EAAAA;gDAAIS,UAAAA,EAAW,UAAA;gDAAWC,OAAAA,EAAS,CAAA;gDAAGC,MAAAA,EAAO,cAAA;gDAAeC,SAAS,EAAA,IAAA;AACpE,gDAAA,QAAA,gBAAA/C,eAAA,CAACoB,iBAAAA,EAAAA;oDAAKsB,SAAAA,EAAU,QAAA;oDAASC,UAAAA,EAAW,SAAA;oDAAUrB,GAAAA,EAAK,CAAA;;sEACjDtB,eAAA,CAACoB,iBAAAA,EAAAA;4DAAK4B,cAAAA,EAAe,eAAA;;8EACnBhD,eAAA,CAACmC,gBAAAA,EAAAA;;sFACCtC,cAAA,CAACsC,gBAAAA,EAAAA;AACC,4EAAA,QAAA,gBAAAtC,cAAA,CAACoD,uBAAAA,EAAAA;gFAAWC,UAAAA,EAAW,MAAA;0FACpB1G,aAAAA,CAAc;oFACbN,EAAAA,EAAI,gBAAA;oFACJuD,cAAAA,EAAgB;AAClB,iFAAA;;;sFAGJI,cAAA,CAACsC,gBAAAA,EAAAA;AACC,4EAAA,QAAA,gBAAAtC,cAAA,CAACoD,uBAAAA,EAAAA;gFAAWzB,OAAAA,EAAQ,IAAA;gFAAK2B,SAAAA,EAAU,YAAA;0FAChC3G,aAAAA,CAAc;oFACbN,EAAAA,EAAI,iCAAA;oFACJuD,cAAAA,EAAgB;AAClB,iFAAA;;;;;8EAINI,cAAA,CAACuD,eAAAA,EAAAA;8EACE5G,aAAAA,CACC;wEACEN,EAAAA,EAAI,4CAAA;wEACJuD,cAAAA,EACE;qEACJ,EACA;wEAAE4D,MAAAA,EAAQ;AAAE,qEAAA;;;;AAIlB,sEAAArD,eAAA,CAACsD,kBAAKC,IAAI,EAAA;4DAACjC,GAAAA,EAAK,CAAA;;AACd,8EAAAzB,cAAA,CAACyD,kBAAKE,IAAI,EAAA;oEAACC,CAAAA,EAAG,CAAA;oEAAGC,EAAAA,EAAI,EAAA;oEAAIhB,SAAAA,EAAU,QAAA;oEAASC,UAAAA,EAAW,SAAA;4FACrD3C,eAAA,CAAC2D,mBAAMJ,IAAI,EAAA;wEACTzH,IAAAA,EAAK,MAAA;wEACLgD,KAAAA,EAAO6B,MAAAA,CAAO7E,IAAI,IAAIU,aAAAA,CAAc;AAAEN,4EAAAA,EAAAA,EAAIyE,OAAO7E;AAAK,yEAAA,CAAA;wEACtDE,QAAQ,EAAA,IAAA;;AAER,0FAAA6D,cAAA,CAAC8D,mBAAMC,KAAK,EAAA;0FACTpH,aAAAA,CAAc;oFACbN,EAAAA,EAAI,aAAA;oFACJuD,cAAAA,EAAgB;AAClB,iFAAA;;0FAEFI,cAAA,CAACgE,sBAAAA,EAAAA;gFAAU7E,IAAAA,EAAK,MAAA;gFAAO8E,QAAAA,EAAUjD,YAAAA;AAAckD,gFAAAA,KAAAA,EAAOrD,OAAO5E;;AAC7D,0FAAA+D,cAAA,CAAC8D,mBAAMK,KAAK,EAAA,EAAA;;;;AAGhB,8EAAAnE,cAAA,CAACyD,kBAAKE,IAAI,EAAA;oEAACC,CAAAA,EAAG,CAAA;oEAAGC,EAAAA,EAAI,EAAA;oEAAIhB,SAAAA,EAAU,QAAA;oEAASC,UAAAA,EAAW,SAAA;4FACrD3C,eAAA,CAAC2D,mBAAMJ,IAAI,EAAA;wEACTzH,IAAAA,EAAK,aAAA;wEACLgD,KAAAA,EAAO6B,MAAAA,CAAOxE,WAAW,IAAIK,aAAAA,CAAc;AAAEN,4EAAAA,EAAAA,EAAIyE,OAAOxE;AAAY,yEAAA,CAAA;;AAEpE,0FAAA0D,cAAA,CAAC8D,mBAAMC,KAAK,EAAA;0FACTpH,aAAAA,CAAc;oFACbN,EAAAA,EAAI,oBAAA;oFACJuD,cAAAA,EAAgB;AAClB,iFAAA;;0FAEFI,cAAA,CAACoE,qBAAAA,EAAAA;gFAASH,QAAAA,EAAUjD,YAAAA;AAAckD,gFAAAA,KAAAA,EAAOrD,OAAOvE;;;;;;;;;;0DAM1D0D,cAAA,CAACsC,gBAAAA,EAAAA;gDAAIW,MAAAA,EAAO,cAAA;gDAAeC,SAAS,EAAA,IAAA;AAClC,gDAAA,QAAA,gBAAAlD,cAAA,CAACqE,uBAAAA,EAAAA;oDACCC,cAAAA,EAAgB,KAAA;oDAChBC,wBAAAA,EAA0BpH,4BAAAA;oDAC1BqH,GAAAA,EAAKzH,cAAAA;oDACL4C,WAAAA,EAAazB,eAAAA;oDACbuG,MAAAA,EAAQ1G;;;;;;;;;;;;AAW9B;AAEA,MAAMwF,eAAAA,GAAkBmB,uBAAAA,CAAOC,GAAG;oBACd,EAAE,CAAC,EAAEC,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACC,UAAU,CAAC;cAC/C,EAAE,CAAC,EAAEF,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACE,UAAU,CAAC;AAC5C,WAAA,EAAE,CAAC,EAAEH,KAAK,EAAE,GAAK,CAAA,EAAGA,MAAMI,MAAM,CAAC,CAAA,CAAE,CAAC,CAAC,EAAEJ,KAAAA,CAAMI,MAAM,CAAC,CAAA,CAAE,EAAE,CAAC;SAC3D,EAAE,CAAC,EAAEJ,KAAK,EAAE,GAAKA,KAAAA,CAAMC,MAAM,CAACI,UAAU,CAAC;AACjC,iBAAA,EAAE,CAAC,EAAEL,KAAK,EAAE,GAAKA,KAAAA,CAAMM,YAAY,CAAC;;;AAGrD,CAAC;AAED;;AAEkG,2GAE5FC,mBAAAA,GAAsB,IAAA;IAC1B,MAAMxF,WAAAA,GAAcyF,sBAAAA,CAClB,CAACC,KAAAA,GAAUA,KAAAA,CAAMC,SAAS,CAAC3F,WAAW,CAAC4F,QAAQ,EAAEC,KAAAA,CAAMC,MAAAA,CAAAA;IAGzD,qBACEzF,cAAA,CAACC,iBAAKyF,OAAO,EAAA;QAAC/F,WAAAA,EAAaA,WAAAA;AACzB,QAAA,QAAA,gBAAAK,cAAA,CAACzD,UAAAA,EAAAA,EAAAA;;AAGP;;;;;"}
|
|
1
|
+
{"version":3,"file":"CreatePage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const { id } = useParams();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { currentData: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\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 const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.roles.created', defaultMessage: 'created' }),\n });\n\n navigate(`../roles/${res.data.id.toString()}`, { replace: true });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if ((isLoadingPermissionsLayout && isLoadingRole) || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <Layouts.Header\n primaryAction={\n <Flex width=\"100%\" gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button\n type=\"submit\"\n loading={isSubmitting}\n disabled={hasLocaleValidationErrors}\n startIcon={<Check />}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput type=\"text\" onChange={handleChange} value={values.name} />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n >\n <Field.Label>\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Field.Label>\n <Textarea onChange={handleChange} value={values.description} />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: 1.2rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <CreatePage />\n </Page.Protect>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["CREATE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","CreatePage","useParams","toggleNotification","useNotification","formatMessage","useIntl","navigate","useNavigate","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","currentData","permissionsLayout","useGetRolePermissionLayoutQuery","role","rolePermissions","isLoadingRole","useGetRolePermissionsQuery","skip","refetchOnMountOrArgChange","createRole","useCreateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","handleCreateRoleSubmit","data","formik","current","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","getPermissions","Array","isArray","length","updateRes","permissions","defaultMessage","toString","replace","_jsx","Page","Loading","_jsxs","Main","Title","Formik","initialValues","format","Date","onSubmit","validationSchema","validateOnChange","values","errors","handleReset","handleChange","isSubmitting","Form","_Fragment","Layouts","Header","primaryAction","Flex","width","gap","Button","variant","onClick","resetForm","fullWidth","loading","disabled","startIcon","Check","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","m","xs","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","onLocaleValidationChange","ref","layout","styled","div","theme","colors","primary200","primary100","spaces","primary600","borderRadius","ProtectedCreatePage","useTypedSelector","state","admin_app","settings","roles","create","Protect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreatePage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const { id } = useParams();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { currentData: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\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 const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.roles.created', defaultMessage: 'created' }),\n });\n\n navigate(`../roles/${res.data.id.toString()}`, { replace: true });\n } catch (err) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if ((isLoadingPermissionsLayout && isLoadingRole) || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <Layouts.Header\n primaryAction={\n <Flex width=\"100%\" gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button\n type=\"submit\"\n loading={isSubmitting}\n disabled={hasLocaleValidationErrors}\n startIcon={<Check />}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput type=\"text\" onChange={handleChange} value={values.name} />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n >\n <Field.Label>\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Field.Label>\n <Textarea onChange={handleChange} value={values.description} />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: 1.2rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <CreatePage />\n </Page.Protect>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["CREATE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","CreatePage","useParams","toggleNotification","useNotification","formatMessage","useIntl","navigate","useNavigate","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","currentData","permissionsLayout","useGetRolePermissionLayoutQuery","role","rolePermissions","isLoadingRole","useGetRolePermissionsQuery","skip","refetchOnMountOrArgChange","createRole","useCreateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","handleCreateRoleSubmit","data","formik","current","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","getPermissions","Array","isArray","length","updateRes","permissions","defaultMessage","toString","replace","err","_jsx","Page","Loading","_jsxs","Main","Title","Formik","initialValues","format","Date","onSubmit","validationSchema","validateOnChange","values","errors","handleReset","handleChange","isSubmitting","Form","_Fragment","Layouts","Header","primaryAction","Flex","width","gap","Button","variant","onClick","resetForm","fullWidth","loading","disabled","startIcon","Check","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","m","xs","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","onLocaleValidationChange","ref","layout","styled","div","theme","colors","primary200","primary100","spaces","primary600","borderRadius","ProtectedCreatePage","useTypedSelector","state","admin_app","settings","roles","create","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"CreatePage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/CreatePage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Main,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { format } from 'date-fns';\nimport { Formik, Form, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { useNavigate, useParams } from 'react-router-dom';\nimport { styled } from 'styled-components';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useCreateRoleMutation,\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\n\n/* -------------------------------------------------------------------------------------------------\n * CreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst CREATE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().required(translatedErrors.required.id),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface CreateRoleFormValues {\n name: string;\n description: string;\n}\n\n/**\n * TODO: this whole section of the app needs refactoring. Using a ref to\n * manage the state of the child is nonsensical.\n */\nconst CreatePage = () => {\n const { id } = useParams();\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const navigate = useNavigate();\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, currentData: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n /**\n * We need this so if we're cloning a role, we can fetch\n * the current permissions that role has.\n */\n const { currentData: rolePermissions, isLoading: isLoadingRole } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [createRole] = useCreateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n const handleCreateRoleSubmit = async (\n data: CreateRoleFormValues,\n formik: FormikHelpers<CreateRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n if (id) {\n trackUsage('willDuplicateRole');\n } else {\n trackUsage('willCreateNewRole');\n }\n\n const res = await createRole(data);\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 const { permissionsToSend } = permissionsRef.current?.getPermissions() ?? {};\n\n if (res.data.id && Array.isArray(permissionsToSend) && permissionsToSend.length > 0) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n }\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'Settings.roles.created', defaultMessage: 'created' }),\n });\n\n navigate(`../roles/${res.data.id.toString()}`, { replace: true });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n if ((isLoadingPermissionsLayout && isLoadingRole) || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n initialValues={\n {\n name: '',\n description: `${formatMessage({\n id: 'Settings.roles.form.created',\n defaultMessage: 'Created',\n })} ${format(new Date(), 'PPP')}`,\n } satisfies CreateRoleFormValues\n }\n onSubmit={handleCreateRoleSubmit}\n validationSchema={CREATE_SCHEMA}\n validateOnChange={false}\n >\n {({ values, errors, handleReset, handleChange, isSubmitting }) => (\n <Form>\n <>\n <Layouts.Header\n primaryAction={\n <Flex width=\"100%\" gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n fullWidth\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button\n type=\"submit\"\n loading={isSubmitting}\n disabled={hasLocaleValidationErrors}\n startIcon={<Check />}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n </Flex>\n }\n title={formatMessage({\n id: 'Settings.roles.create.title',\n defaultMessage: 'Create a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <Box background=\"neutral0\" padding={6} shadow=\"filterShadow\" hasRadius>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex justifyContent=\"space-between\">\n <Box>\n <Box>\n <Typography fontWeight=\"bold\">\n {formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography variant=\"pi\" textColor=\"neutral600\">\n {formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <UsersRoleNumber>\n {formatMessage(\n {\n id: 'Settings.roles.form.button.users-with-role',\n defaultMessage:\n '{number, plural, =0 {# users} one {# user} other {# users}} with this role',\n },\n { number: 0 }\n )}\n </UsersRoleNumber>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"name\"\n error={errors.name && formatMessage({ id: errors.name })}\n required\n >\n <Field.Label>\n {formatMessage({\n id: 'global.name',\n defaultMessage: 'Name',\n })}\n </Field.Label>\n <TextInput type=\"text\" onChange={handleChange} value={values.name} />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item m={6} xs={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"description\"\n error={errors.description && formatMessage({ id: errors.description })}\n >\n <Field.Label>\n {formatMessage({\n id: 'global.description',\n defaultMessage: 'Description',\n })}\n </Field.Label>\n <Textarea onChange={handleChange} value={values.description} />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={false}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n ref={permissionsRef}\n permissions={rolePermissions}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </>\n </Form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst UsersRoleNumber = styled.div`\n border: 1px solid ${({ theme }) => theme.colors.primary200};\n background: ${({ theme }) => theme.colors.primary100};\n padding: ${({ theme }) => `${theme.spaces[2]} ${theme.spaces[4]}`};\n color: ${({ theme }) => theme.colors.primary600};\n border-radius: ${({ theme }) => theme.borderRadius};\n font-size: 1.2rem;\n font-weight: bold;\n`;\n\n/* -------------------------------------------------------------------------------------------------\n * ProtectedCreatePage\n * -----------------------------------------------------------------------------------------------*/\n\nconst ProtectedCreatePage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.create\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <CreatePage />\n </Page.Protect>\n );\n};\n\nexport { CreatePage, ProtectedCreatePage };\n"],"names":["CREATE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","CreatePage","useParams","toggleNotification","useNotification","formatMessage","useIntl","navigate","useNavigate","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","currentData","permissionsLayout","useGetRolePermissionLayoutQuery","role","rolePermissions","isLoadingRole","useGetRolePermissionsQuery","skip","refetchOnMountOrArgChange","createRole","useCreateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","handleCreateRoleSubmit","data","formik","current","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","getPermissions","Array","isArray","length","updateRes","permissions","defaultMessage","toString","replace","_jsx","Page","Loading","_jsxs","Main","Title","Formik","initialValues","format","Date","onSubmit","validationSchema","validateOnChange","values","errors","handleReset","handleChange","isSubmitting","Form","_Fragment","Layouts","Header","primaryAction","Flex","width","gap","Button","variant","onClick","resetForm","fullWidth","loading","disabled","startIcon","Check","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","direction","alignItems","background","padding","shadow","hasRadius","justifyContent","Typography","fontWeight","textColor","UsersRoleNumber","number","Grid","Root","Item","m","xs","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","onLocaleValidationChange","ref","layout","styled","div","theme","colors","primary200","primary100","spaces","primary600","borderRadius","ProtectedCreatePage","useTypedSelector","state","admin_app","settings","roles","create","Protect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\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 if (role.code !== 'strapi-super-admin' && permissionsToSend) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n\n if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin' || hasLocaleValidationErrors}\n loading={isSubmitting}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","current","permissionsToSend","didUpdateConditions","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Button","startIcon","Check","disabled","loading","fullWidth","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","Flex","direction","alignItems","gap","RoleForm","onChange","onBlur","shadow","hasRadius","Permissions","onLocaleValidationChange","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditPage.js","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\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 if (role.code !== 'strapi-super-admin' && permissionsToSend) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n\n if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin' || hasLocaleValidationErrors}\n loading={isSubmitting}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","current","permissionsToSend","didUpdateConditions","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Button","startIcon","Check","disabled","loading","fullWidth","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","Flex","direction","alignItems","gap","RoleForm","onChange","onBlur","shadow","hasRadius","Permissions","onLocaleValidationChange","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
|