@strapi/admin 5.31.1 → 5.31.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js +2 -2
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.js.map +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs +1 -1
- package/dist/admin/admin/src/components/GuidedTour/Steps/ContentTypeBuilderSteps.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +2 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +2 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs +1 -1
- package/dist/admin/admin/src/pages/Home/HomePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.js +6 -0
- package/dist/admin/admin/src/pages/ProfilePage.js.map +1 -1
- package/dist/admin/admin/src/pages/ProfilePage.mjs +6 -0
- package/dist/admin/admin/src/pages/ProfilePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/ActionBoundRoutes.js +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/ActionBoundRoutes.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/ActionBoundRoutes.mjs +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/ActionBoundRoutes.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/CollapsableContentType.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.js +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.mjs +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/FormApiTokenContainer.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/Permissions.js +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/Permissions.mjs +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/ApiTokens/EditView/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js +5 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs +5 -5
- package/dist/admin/admin/src/pages/Settings/pages/ApplicationInfo/ApplicationInfoPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.js +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.mjs +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseAuditLogs.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.js +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.mjs +4 -4
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseContentHistory.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.js +4 -2
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.mjs +4 -2
- package/dist/admin/admin/src/pages/Settings/pages/PurchaseSingleSignOn.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +4 -2
- 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 +4 -2
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs +3 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.js +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.mjs +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/RoleForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs +2 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/components/NewUserForm.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs +2 -0
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/HeadersInput.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs +1 -0
- package/dist/admin/admin/src/pages/Settings/pages/Webhooks/components/WebhookForm.mjs.map +1 -1
- package/dist/admin/admin/src/services/auth.js +1 -12
- package/dist/admin/admin/src/services/auth.js.map +1 -1
- package/dist/admin/admin/src/services/auth.mjs +2 -11
- package/dist/admin/admin/src/services/auth.mjs.map +1 -1
- package/dist/admin/admin/src/translations/vi.json.js +772 -129
- package/dist/admin/admin/src/translations/vi.json.js.map +1 -1
- package/dist/admin/admin/src/translations/vi.json.mjs +764 -130
- package/dist/admin/admin/src/translations/vi.json.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js +7 -0
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.mjs +7 -0
- package/dist/admin/ee/admin/src/pages/AuthPage/components/SSOProviders.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/ApplicationInfoPage/components/AdminSeatInfo.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -0
- 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 -0
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/index.js +0 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +0 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/src/index.d.ts +0 -2
- package/dist/admin/src/services/auth.d.ts +2 -11
- package/dist/ee/server/src/ai/containers/ai.d.ts +4 -0
- package/dist/ee/server/src/ai/containers/ai.d.ts.map +1 -1
- package/dist/ee/server/src/ai/controllers/ai.d.ts.map +1 -1
- package/dist/ee/server/src/ai/routes/ai.d.ts.map +1 -1
- package/dist/server/ee/server/src/ai/containers/ai.js +143 -1
- package/dist/server/ee/server/src/ai/containers/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/containers/ai.mjs +143 -1
- package/dist/server/ee/server/src/ai/containers/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/ai/controllers/ai.js +7 -106
- package/dist/server/ee/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/controllers/ai.mjs +7 -106
- package/dist/server/ee/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.js +0 -3
- package/dist/server/ee/server/src/ai/routes/ai.js.map +1 -1
- package/dist/server/ee/server/src/ai/routes/ai.mjs +0 -3
- package/dist/server/ee/server/src/ai/routes/ai.mjs.map +1 -1
- package/dist/server/server/src/controllers/authenticated-user.js +0 -15
- package/dist/server/server/src/controllers/authenticated-user.js.map +1 -1
- package/dist/server/server/src/controllers/authenticated-user.mjs +0 -15
- package/dist/server/server/src/controllers/authenticated-user.mjs.map +1 -1
- package/dist/server/server/src/routes/users.js +0 -10
- package/dist/server/server/src/routes/users.js.map +1 -1
- package/dist/server/server/src/routes/users.mjs +0 -10
- package/dist/server/server/src/routes/users.mjs.map +1 -1
- package/dist/server/server/src/services/user.js +1 -143
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +1 -143
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/src/controllers/authenticated-user.d.ts +0 -1
- package/dist/server/src/controllers/authenticated-user.d.ts.map +1 -1
- package/dist/server/src/controllers/index.d.ts +0 -1
- package/dist/server/src/controllers/index.d.ts.map +1 -1
- package/dist/server/src/index.d.ts +0 -5
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/routes/users.d.ts.map +1 -1
- package/dist/server/src/services/index.d.ts +0 -4
- package/dist/server/src/services/index.d.ts.map +1 -1
- package/dist/server/src/services/user.d.ts +0 -4
- package/dist/server/src/services/user.d.ts.map +1 -1
- package/dist/shared/contracts/ai.d.ts +1 -1
- package/dist/shared/contracts/users.d.ts +0 -32
- package/dist/shared/contracts/users.d.ts.map +1 -1
- package/package.json +9 -9
- package/dist/admin/admin/src/hooks/useAIAvailability.js +0 -13
- package/dist/admin/admin/src/hooks/useAIAvailability.js.map +0 -1
- package/dist/admin/admin/src/hooks/useAIAvailability.mjs +0 -11
- package/dist/admin/admin/src/hooks/useAIAvailability.mjs.map +0 -1
- package/dist/admin/src/hooks/useAIAvailability.d.ts +0 -5
|
@@ -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 { 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 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 gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />}>\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 col={6} 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 col={6} 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 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","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","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","current","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","gap","Button","variant","onClick","resetForm","loading","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","col","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","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.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 { 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 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 gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />}>\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 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","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","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","current","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","gap","Button","variant","onClick","resetForm","loading","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","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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"}
|
|
@@ -239,7 +239,8 @@ import { Permissions } from './components/Permissions.mjs';
|
|
|
239
239
|
gap: 4,
|
|
240
240
|
children: [
|
|
241
241
|
/*#__PURE__*/ jsx(Grid.Item, {
|
|
242
|
-
|
|
242
|
+
m: 6,
|
|
243
|
+
xs: 12,
|
|
243
244
|
direction: "column",
|
|
244
245
|
alignItems: "stretch",
|
|
245
246
|
children: /*#__PURE__*/ jsxs(Field.Root, {
|
|
@@ -265,7 +266,8 @@ import { Permissions } from './components/Permissions.mjs';
|
|
|
265
266
|
})
|
|
266
267
|
}),
|
|
267
268
|
/*#__PURE__*/ jsx(Grid.Item, {
|
|
268
|
-
|
|
269
|
+
m: 6,
|
|
270
|
+
xs: 12,
|
|
269
271
|
direction: "column",
|
|
270
272
|
alignItems: "stretch",
|
|
271
273
|
children: /*#__PURE__*/ jsxs(Field.Root, {
|
|
@@ -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 { 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 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 gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />}>\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 col={6} 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 col={6} 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 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","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","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","current","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","gap","Button","variant","onClick","resetForm","loading","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","col","Field","Label","TextInput","onChange","value","Error","Textarea","Permissions","isFormDisabled","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 { 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 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 gap={2}>\n <Button\n variant=\"secondary\"\n onClick={() => {\n handleReset();\n permissionsRef.current?.resetForm();\n }}\n >\n {formatMessage({\n id: 'app.components.Button.reset',\n defaultMessage: 'Reset',\n })}\n </Button>\n <Button type=\"submit\" loading={isSubmitting} startIcon={<Check />}>\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 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","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","res","isBaseQueryError","error","setErrors","type","message","permissionsToSend","current","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","gap","Button","variant","onClick","resetForm","loading","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","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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"}
|
|
@@ -202,7 +202,9 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
|
|
|
202
202
|
},
|
|
203
203
|
children: formattedActions.map(({ checkboxName, value, action, displayName, hasConditions })=>{
|
|
204
204
|
return /*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
|
|
205
|
-
col:
|
|
205
|
+
col: 4,
|
|
206
|
+
m: 6,
|
|
207
|
+
xs: 12,
|
|
206
208
|
direction: "column",
|
|
207
209
|
alignItems: "start",
|
|
208
210
|
children: /*#__PURE__*/ jsxRuntime.jsx(CheckboxWrapper, {
|
package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginsAndSettings.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <Grid.Item col={3} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper $disabled={isFormDisabled} $hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","col","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PluginsAndSettings.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper $disabled={isFormDisabled} $hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
|
|
@@ -181,7 +181,9 @@ const SubCategory = ({ actions = [], categoryName, isFormDisabled, subCategoryNa
|
|
|
181
181
|
},
|
|
182
182
|
children: formattedActions.map(({ checkboxName, value, action, displayName, hasConditions })=>{
|
|
183
183
|
return /*#__PURE__*/ jsx(Grid.Item, {
|
|
184
|
-
col:
|
|
184
|
+
col: 4,
|
|
185
|
+
m: 6,
|
|
186
|
+
xs: 12,
|
|
185
187
|
direction: "column",
|
|
186
188
|
alignItems: "start",
|
|
187
189
|
children: /*#__PURE__*/ jsx(CheckboxWrapper, {
|
package/dist/admin/admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PluginsAndSettings.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <Grid.Item col={3} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper $disabled={isFormDisabled} $hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","col","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"PluginsAndSettings.mjs","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/PluginsAndSettings.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport {\n Accordion,\n Box,\n BoxComponent,\n Checkbox,\n Flex,\n Grid,\n Modal,\n Typography,\n} from '@strapi/design-system';\nimport get from 'lodash/get';\nimport { useIntl } from 'react-intl';\nimport { styled } from 'styled-components';\n\nimport {\n SettingPermission,\n PluginPermission,\n} from '../../../../../../../shared/contracts/permissions';\nimport { capitalise } from '../../../../../utils/strings';\nimport {\n PermissionsDataManagerContextValue,\n usePermissionsDataManager,\n} from '../hooks/usePermissionsDataManager';\nimport { createArrayOfValues } from '../utils/createArrayOfValues';\nimport { ChildrenForm, ConditionForm } from '../utils/forms';\nimport { RecursiveRecordOfBooleans, getCheckboxState } from '../utils/getCheckboxState';\nimport { removeConditionKeyFromData } from '../utils/removeConditionKeyFromData';\n\nimport { ConditionsButton } from './ConditionsButton';\nimport { ConditionsModal } from './ConditionsModal';\n\nimport type { GenericLayout } from '../utils/layouts';\n\n/* -------------------------------------------------------------------------------------------------\n * PluginsAndSettingsPermissions\n * -----------------------------------------------------------------------------------------------*/\n\ntype Layout = GenericLayout<SettingPermission | PluginPermission>[];\n\ninterface PluginsAndSettingsPermissionsProps extends Pick<RowProps, 'kind' | 'isFormDisabled'> {\n layout: Layout;\n}\n\nconst PluginsAndSettingsPermissions = ({\n layout,\n ...restProps\n}: PluginsAndSettingsPermissionsProps) => {\n return (\n <Box padding={6} background=\"neutral0\">\n <Accordion.Root size=\"M\">\n {layout.map(({ category, categoryId, childrenForm }, index) => {\n return (\n <Row\n key={category}\n childrenForm={childrenForm}\n variant={index % 2 === 1 ? 'primary' : 'secondary'}\n name={category}\n pathToData={[restProps.kind, categoryId]}\n {...restProps}\n />\n );\n })}\n </Accordion.Root>\n </Box>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * Row\n * -----------------------------------------------------------------------------------------------*/\n\ninterface RowProps\n extends Pick<Layout[number], 'childrenForm'>,\n Pick<Accordion.HeaderProps, 'variant'> {\n kind: Exclude<keyof PermissionsDataManagerContextValue['modifiedData'], `${string}Types`>;\n name: string;\n isFormDisabled?: boolean;\n pathToData: string[];\n}\n\nconst Row = ({\n childrenForm,\n kind,\n name,\n isFormDisabled = false,\n variant,\n pathToData,\n}: RowProps) => {\n const { formatMessage } = useIntl();\n\n const categoryName = name.split('::').pop() ?? '';\n const categoryDisplayName =\n categoryName === 'upload' ? 'Media Library' : capitalise(categoryName.replace(/-/g, ' '));\n\n return (\n <Accordion.Item value={name}>\n <Accordion.Header variant={variant}>\n <Accordion.Trigger\n caretPosition=\"right\"\n description={`${formatMessage(\n { id: 'Settings.permissions.category', defaultMessage: categoryName },\n { category: categoryName }\n )} ${kind === 'plugins' ? 'plugin' : kind}`}\n >\n {categoryDisplayName}\n </Accordion.Trigger>\n </Accordion.Header>\n <Accordion.Content>\n <Box padding={6}>\n {childrenForm.map(({ actions, subCategoryName, subCategoryId }) => (\n <SubCategory\n key={subCategoryName}\n actions={actions}\n categoryName={categoryName}\n isFormDisabled={isFormDisabled}\n subCategoryName={subCategoryName}\n pathToData={[...pathToData, subCategoryId]}\n />\n ))}\n </Box>\n </Accordion.Content>\n </Accordion.Item>\n );\n};\n\n/* -------------------------------------------------------------------------------------------------\n * SubCategory\n * -----------------------------------------------------------------------------------------------*/\n\ninterface SubCategoryProps {\n actions?: Array<SettingPermission | PluginPermission>;\n categoryName: string;\n isFormDisabled?: boolean;\n subCategoryName: string;\n pathToData: string[];\n}\n\nconst SubCategory = ({\n actions = [],\n categoryName,\n isFormDisabled,\n subCategoryName,\n pathToData,\n}: SubCategoryProps) => {\n const { modifiedData, onChangeParentCheckbox, onChangeSimpleCheckbox } =\n usePermissionsDataManager();\n const [isConditionModalOpen, setIsConditionModalOpen] = React.useState(false);\n const { formatMessage } = useIntl();\n\n const mainData = get(modifiedData, pathToData, {});\n\n const dataWithoutCondition = React.useMemo(() => {\n return Object.keys(mainData).reduce<RecursiveRecordOfBooleans>((acc, current) => {\n acc[current] = removeConditionKeyFromData(mainData[current])!;\n\n return acc;\n }, {});\n }, [mainData]);\n\n const { hasAllActionsSelected, hasSomeActionsSelected } = getCheckboxState(dataWithoutCondition);\n\n // We need to format the actions so it matches the shape of the ConditionsModal actions props\n const formattedActions = React.useMemo(() => {\n return actions.map((action) => {\n const checkboxName = [...pathToData, action.action, 'properties', 'enabled'];\n const checkboxValue = get(modifiedData, checkboxName, false);\n const conditionValue = get(modifiedData, [...pathToData, action.action, 'conditions'], {});\n const hasConditions = createArrayOfValues(conditionValue).some((val) => val);\n\n return {\n ...action,\n isDisplayed: checkboxValue,\n checkboxName: checkboxName.join('..'),\n hasSomeActionsSelected: checkboxValue,\n value: checkboxValue,\n hasConditions,\n label: action.displayName,\n actionId: action.action,\n pathToConditionsObject: [...pathToData, action.action],\n };\n });\n }, [actions, modifiedData, pathToData]);\n\n const datum: ChildrenForm = get(modifiedData, [...pathToData], {});\n\n const doesButtonHasCondition = createArrayOfValues(\n Object.entries(datum).reduce<Record<string, ConditionForm>>((acc, current) => {\n const [catName, { conditions }] = current;\n\n acc[catName] = conditions;\n\n return acc;\n }, {})\n ).some((val) => val);\n\n return (\n <>\n <Box>\n <Flex justifyContent=\"space-between\" alignItems=\"center\">\n <Box paddingRight={4}>\n <Typography variant=\"sigma\" textColor=\"neutral600\">\n {subCategoryName}\n </Typography>\n </Box>\n <Border flex={1} />\n <Box paddingLeft={4}>\n <Checkbox\n name={pathToData.join('..')}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeParentCheckbox({\n target: {\n name: pathToData.join('..'),\n value: !!value,\n },\n });\n }}\n checked={hasSomeActionsSelected ? 'indeterminate' : hasAllActionsSelected}\n >\n {formatMessage({ id: 'app.utils.select-all', defaultMessage: 'Select all' })}\n </Checkbox>\n </Box>\n </Flex>\n <Flex paddingTop={6} paddingBottom={6}>\n <Grid.Root gap={2} style={{ flex: 1 }}>\n {formattedActions.map(({ checkboxName, value, action, displayName, hasConditions }) => {\n return (\n <Grid.Item col={4} m={6} xs={12} key={action} direction=\"column\" alignItems=\"start\">\n <CheckboxWrapper $disabled={isFormDisabled} $hasConditions={hasConditions}>\n <Checkbox\n name={checkboxName}\n disabled={isFormDisabled}\n // Keep same signature as packages/core/admin/admin/src/components/Roles/Permissions/index.js l.91\n onCheckedChange={(value) => {\n onChangeSimpleCheckbox({\n target: {\n name: checkboxName,\n value: !!value,\n },\n });\n }}\n checked={value}\n >\n {displayName}\n </Checkbox>\n </CheckboxWrapper>\n </Grid.Item>\n );\n })}\n </Grid.Root>\n <Modal.Root\n open={isConditionModalOpen}\n onOpenChange={() => {\n setIsConditionModalOpen((prev) => !prev);\n }}\n >\n <Modal.Trigger>\n <ConditionsButton hasConditions={doesButtonHasCondition} />\n </Modal.Trigger>\n <ConditionsModal\n headerBreadCrumbs={[categoryName, subCategoryName]}\n actions={formattedActions}\n isFormDisabled={isFormDisabled}\n onClose={() => {\n setIsConditionModalOpen(false);\n }}\n />\n </Modal.Root>\n </Flex>\n </Box>\n </>\n );\n};\n\nconst Border = styled<BoxComponent>(Box)`\n align-self: center;\n border-top: 1px solid ${({ theme }) => theme.colors.neutral150};\n`;\n\nconst CheckboxWrapper = styled.div<{ $hasConditions?: boolean; $disabled?: boolean }>`\n position: relative;\n word-break: keep-all;\n ${({ $hasConditions, $disabled, theme }) =>\n $hasConditions &&\n `\n &:before {\n content: '';\n position: absolute;\n top: -0.4rem;\n left: -0.8rem;\n width: 0.6rem;\n height: 0.6rem;\n border-radius: 2rem;\n background: ${$disabled ? theme.colors.neutral100 : theme.colors.primary600};\n }\n `}\n`;\n\nexport { PluginsAndSettingsPermissions };\n"],"names":["PluginsAndSettingsPermissions","layout","restProps","_jsx","Box","padding","background","Accordion","Root","size","map","category","categoryId","childrenForm","index","Row","variant","name","pathToData","kind","isFormDisabled","formatMessage","useIntl","categoryName","split","pop","categoryDisplayName","capitalise","replace","_jsxs","Item","value","Header","Trigger","caretPosition","description","id","defaultMessage","Content","actions","subCategoryName","subCategoryId","SubCategory","modifiedData","onChangeParentCheckbox","onChangeSimpleCheckbox","usePermissionsDataManager","isConditionModalOpen","setIsConditionModalOpen","React","useState","mainData","get","dataWithoutCondition","useMemo","Object","keys","reduce","acc","current","removeConditionKeyFromData","hasAllActionsSelected","hasSomeActionsSelected","getCheckboxState","formattedActions","action","checkboxName","checkboxValue","conditionValue","hasConditions","createArrayOfValues","some","val","isDisplayed","join","label","displayName","actionId","pathToConditionsObject","datum","doesButtonHasCondition","entries","catName","conditions","_Fragment","Flex","justifyContent","alignItems","paddingRight","Typography","textColor","Border","flex","paddingLeft","Checkbox","disabled","onCheckedChange","target","checked","paddingTop","paddingBottom","Grid","gap","style","col","m","xs","direction","CheckboxWrapper","$disabled","$hasConditions","Modal","open","onOpenChange","prev","ConditionsButton","ConditionsModal","headerBreadCrumbs","onClose","styled","theme","colors","neutral150","div","neutral100","primary600"],"mappings":"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"}
|
|
@@ -58,6 +58,7 @@ const RoleForm = ({ disabled, role, values, errors, onChange, onBlur })=>{
|
|
|
58
58
|
gap: 4,
|
|
59
59
|
children: [
|
|
60
60
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
|
|
61
|
+
xs: 12,
|
|
61
62
|
col: 6,
|
|
62
63
|
direction: "column",
|
|
63
64
|
alignItems: "stretch",
|
|
@@ -86,6 +87,7 @@ const RoleForm = ({ disabled, role, values, errors, onChange, onBlur })=>{
|
|
|
86
87
|
})
|
|
87
88
|
}),
|
|
88
89
|
/*#__PURE__*/ jsxRuntime.jsx(designSystem.Grid.Item, {
|
|
90
|
+
xs: 12,
|
|
89
91
|
col: 6,
|
|
90
92
|
direction: "column",
|
|
91
93
|
alignItems: "stretch",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RoleForm.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/RoleForm.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { FormikProps } from 'formik';\nimport { useIntl } from 'react-intl';\n\nimport type { AdminRole } from '../../../../../hooks/useAdminRoles';\nimport type { EditRoleFormValues } from '../EditPage';\n\ninterface RoleFormProps extends Pick<FormikProps<EditRoleFormValues>, 'values' | 'errors'> {\n onBlur: FormikProps<EditRoleFormValues>['handleBlur'];\n onChange: FormikProps<EditRoleFormValues>['handleChange'];\n disabled?: boolean;\n role: AdminRole;\n}\n\nconst RoleForm = ({ disabled, role, values, errors, onChange, onBlur }: RoleFormProps) => {\n const { formatMessage } = useIntl();\n\n return (\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 {role\n ? role.name\n : formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {role\n ? role.description\n : formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <Button disabled variant=\"secondary\">\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: role.usersCount }\n )}\n </Button>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item col={6} 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\n disabled={disabled}\n onChange={onChange}\n onBlur={onBlur}\n value={values.name || ''}\n type=\"text\"\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={6} 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\n disabled={disabled}\n onChange={onChange}\n onBlur={onBlur}\n value={values.description}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\nexport { RoleForm };\nexport type { RoleFormProps };\n"],"names":["RoleForm","disabled","role","values","errors","onChange","onBlur","formatMessage","useIntl","_jsx","Box","background","padding","shadow","hasRadius","_jsxs","Flex","direction","alignItems","gap","justifyContent","Typography","fontWeight","name","id","defaultMessage","textColor","variant","description","Button","number","usersCount","Grid","Root","Item","col","Field","error","required","Label","TextInput","value","type","Error","Textarea"],"mappings":";;;;;;AAuBA,MAAMA,QAAW,GAAA,CAAC,EAAEC,QAAQ,EAAEC,IAAI,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAEC,MAAM,EAAiB,GAAA;IACnF,MAAM,EAAEC,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1B,IAAA,qBACEC,cAACC,CAAAA,gBAAAA,EAAAA;QAAIC,UAAW,EAAA,UAAA;QAAWC,OAAS,EAAA,CAAA;QAAGC,MAAO,EAAA,cAAA;QAAeC,SAAS,EAAA,IAAA;AACpE,QAAA,QAAA,gBAAAC,eAACC,CAAAA,iBAAAA,EAAAA;YAAKC,SAAU,EAAA,QAAA;YAASC,UAAW,EAAA,SAAA;YAAUC,GAAK,EAAA,CAAA;;8BACjDJ,eAACC,CAAAA,iBAAAA,EAAAA;oBAAKI,cAAe,EAAA,eAAA;;sCACnBL,eAACL,CAAAA,gBAAAA,EAAAA;;8CACCD,cAACC,CAAAA,gBAAAA,EAAAA;AACC,oCAAA,QAAA,gBAAAD,cAACY,CAAAA,uBAAAA,EAAAA;wCAAWC,UAAW,EAAA,MAAA;kDACpBpB,IACGA,GAAAA,IAAAA,CAAKqB,IAAI,GACThB,aAAc,CAAA;4CACZiB,EAAI,EAAA,gBAAA;4CACJC,cAAgB,EAAA;AAClB,yCAAA;;;8CAGRhB,cAACC,CAAAA,gBAAAA,EAAAA;AACC,oCAAA,QAAA,gBAAAD,cAACY,CAAAA,uBAAAA,EAAAA;wCAAWK,SAAU,EAAA,YAAA;wCAAaC,OAAQ,EAAA,IAAA;kDACxCzB,IACGA,GAAAA,IAAAA,CAAK0B,WAAW,GAChBrB,aAAc,CAAA;4CACZiB,EAAI,EAAA,iCAAA;4CACJC,cAAgB,EAAA;AAClB,yCAAA;;;;;sCAIVhB,cAACoB,CAAAA,mBAAAA,EAAAA;4BAAO5B,QAAQ,EAAA,IAAA;4BAAC0B,OAAQ,EAAA,WAAA;sCACtBpB,aACC,CAAA;gCACEiB,EAAI,EAAA,4CAAA;gCACJC,cACE,EAAA;6BAEJ,EAAA;AAAEK,gCAAAA,MAAAA,EAAQ5B,KAAK6B;AAAW,6BAAA;;;;AAIhC,8BAAAhB,eAAA,CAACiB,kBAAKC,IAAI,EAAA;oBAACd,GAAK,EAAA,CAAA;;AACd,sCAAAV,cAAA,CAACuB,kBAAKE,IAAI,EAAA;4BAACC,GAAK,EAAA,CAAA;
|
|
1
|
+
{"version":3,"file":"RoleForm.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/RoleForm.tsx"],"sourcesContent":["import {\n Box,\n Button,\n Field,\n Flex,\n Grid,\n Textarea,\n TextInput,\n Typography,\n} from '@strapi/design-system';\nimport { FormikProps } from 'formik';\nimport { useIntl } from 'react-intl';\n\nimport type { AdminRole } from '../../../../../hooks/useAdminRoles';\nimport type { EditRoleFormValues } from '../EditPage';\n\ninterface RoleFormProps extends Pick<FormikProps<EditRoleFormValues>, 'values' | 'errors'> {\n onBlur: FormikProps<EditRoleFormValues>['handleBlur'];\n onChange: FormikProps<EditRoleFormValues>['handleChange'];\n disabled?: boolean;\n role: AdminRole;\n}\n\nconst RoleForm = ({ disabled, role, values, errors, onChange, onBlur }: RoleFormProps) => {\n const { formatMessage } = useIntl();\n\n return (\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 {role\n ? role.name\n : formatMessage({\n id: 'global.details',\n defaultMessage: 'Details',\n })}\n </Typography>\n </Box>\n <Box>\n <Typography textColor=\"neutral500\" variant=\"pi\">\n {role\n ? role.description\n : formatMessage({\n id: 'Settings.roles.form.description',\n defaultMessage: 'Name and description of the role',\n })}\n </Typography>\n </Box>\n </Box>\n <Button disabled variant=\"secondary\">\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: role.usersCount }\n )}\n </Button>\n </Flex>\n <Grid.Root gap={4}>\n <Grid.Item xs={12} col={6} 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\n disabled={disabled}\n onChange={onChange}\n onBlur={onBlur}\n value={values.name || ''}\n type=\"text\"\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n <Grid.Item xs={12} col={6} 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\n disabled={disabled}\n onChange={onChange}\n onBlur={onBlur}\n value={values.description}\n />\n <Field.Error />\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n );\n};\n\nexport { RoleForm };\nexport type { RoleFormProps };\n"],"names":["RoleForm","disabled","role","values","errors","onChange","onBlur","formatMessage","useIntl","_jsx","Box","background","padding","shadow","hasRadius","_jsxs","Flex","direction","alignItems","gap","justifyContent","Typography","fontWeight","name","id","defaultMessage","textColor","variant","description","Button","number","usersCount","Grid","Root","Item","xs","col","Field","error","required","Label","TextInput","value","type","Error","Textarea"],"mappings":"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"}
|
|
@@ -56,6 +56,7 @@ const RoleForm = ({ disabled, role, values, errors, onChange, onBlur })=>{
|
|
|
56
56
|
gap: 4,
|
|
57
57
|
children: [
|
|
58
58
|
/*#__PURE__*/ jsx(Grid.Item, {
|
|
59
|
+
xs: 12,
|
|
59
60
|
col: 6,
|
|
60
61
|
direction: "column",
|
|
61
62
|
alignItems: "stretch",
|
|
@@ -84,6 +85,7 @@ const RoleForm = ({ disabled, role, values, errors, onChange, onBlur })=>{
|
|
|
84
85
|
})
|
|
85
86
|
}),
|
|
86
87
|
/*#__PURE__*/ jsx(Grid.Item, {
|
|
88
|
+
xs: 12,
|
|
87
89
|
col: 6,
|
|
88
90
|
direction: "column",
|
|
89
91
|
alignItems: "stretch",
|