@strapi/admin 5.51.1 → 5.51.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/admin/src/StrapiApp.js +3 -3
- package/dist/admin/admin/src/StrapiApp.js.map +1 -1
- package/dist/admin/admin/src/StrapiApp.mjs +3 -3
- package/dist/admin/admin/src/StrapiApp.mjs.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.js.map +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs +1 -1
- package/dist/admin/admin/src/components/NpsSurvey.mjs.map +1 -1
- package/dist/admin/admin/src/features/Tracking.js +1 -1
- package/dist/admin/admin/src/features/Tracking.js.map +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs +1 -1
- package/dist/admin/admin/src/features/Tracking.mjs.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.js.map +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs +1 -1
- package/dist/admin/admin/src/hooks/useAPIErrorHandler.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.js +35 -26
- package/dist/admin/admin/src/pages/Auth/components/Register.js.map +1 -1
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs +35 -27
- package/dist/admin/admin/src/pages/Auth/components/Register.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/components/Tokens/FormHead.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/CreatePage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/EditPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js +1 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs +1 -3
- package/dist/admin/admin/src/pages/Settings/pages/Roles/components/Permissions.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/TransferTokens/EditView.mjs.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.js.map +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs +1 -1
- package/dist/admin/admin/src/pages/Settings/pages/Users/ListPage.mjs.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.js.map +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs +1 -1
- package/dist/admin/admin/src/pages/UseCasePage.mjs.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.js +3 -2
- package/dist/admin/admin/src/utils/baseQuery.js.map +1 -1
- package/dist/admin/admin/src/utils/baseQuery.mjs +3 -2
- package/dist/admin/admin/src/utils/baseQuery.mjs.map +1 -1
- package/dist/admin/admin/src/utils/users.js +1 -1
- package/dist/admin/admin/src/utils/users.js.map +1 -1
- package/dist/admin/admin/src/utils/users.mjs +1 -1
- package/dist/admin/admin/src/utils/users.mjs.map +1 -1
- package/dist/admin/admin/tests/server.js +640 -684
- package/dist/admin/admin/tests/server.js.map +1 -1
- package/dist/admin/admin/tests/server.mjs +640 -684
- package/dist/admin/admin/tests/server.mjs.map +1 -1
- package/dist/admin/ee/admin/src/constants.js +22 -26
- package/dist/admin/ee/admin/src/constants.js.map +1 -1
- package/dist/admin/ee/admin/src/constants.mjs +22 -26
- package/dist/admin/ee/admin/src/constants.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/SingleSignOnPage.mjs.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js +16 -20
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.js.map +1 -1
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs +16 -20
- package/dist/admin/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.mjs.map +1 -1
- package/dist/admin/src/pages/Auth/components/Register.d.ts +10 -0
- package/dist/ee/admin/src/pages/SettingsPage/pages/Users/components/ModalForm.d.ts +3 -1
- package/dist/ee/server/src/destroy.d.ts +1 -4
- package/dist/ee/server/src/destroy.d.ts.map +1 -1
- package/dist/ee/server/src/index.d.ts.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js +3 -3
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs +3 -3
- package/dist/server/ee/server/src/audit-logs/services/audit-logs.mjs.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.js.map +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs +1 -1
- package/dist/server/ee/server/src/audit-logs/services/lifecycles.mjs.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.js +1 -1
- package/dist/server/ee/server/src/controllers/admin.js.map +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs +1 -1
- package/dist/server/ee/server/src/controllers/admin.mjs.map +1 -1
- package/dist/server/ee/server/src/destroy.js +1 -1
- package/dist/server/ee/server/src/destroy.js.map +1 -1
- package/dist/server/ee/server/src/destroy.mjs +1 -1
- package/dist/server/ee/server/src/destroy.mjs.map +1 -1
- package/dist/server/ee/server/src/index.js +1 -3
- package/dist/server/ee/server/src/index.js.map +1 -1
- package/dist/server/ee/server/src/index.mjs +1 -3
- package/dist/server/ee/server/src/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/index.js.map +1 -1
- package/dist/server/ee/server/src/services/index.mjs +2 -2
- package/dist/server/ee/server/src/services/index.mjs.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.js +2 -2
- package/dist/server/ee/server/src/services/persist-tables.js.map +1 -1
- package/dist/server/ee/server/src/services/persist-tables.mjs +4 -4
- package/dist/server/ee/server/src/services/persist-tables.mjs.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.js +2 -2
- package/dist/server/server/src/ai/controllers/ai.js.map +1 -1
- package/dist/server/server/src/ai/controllers/ai.mjs +2 -2
- package/dist/server/server/src/ai/controllers/ai.mjs.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.js +1 -2
- package/dist/server/server/src/middlewares/rateLimit.js.map +1 -1
- package/dist/server/server/src/middlewares/rateLimit.mjs +2 -2
- package/dist/server/server/src/middlewares/rateLimit.mjs.map +1 -1
- package/dist/server/server/src/services/encryption.js +1 -1
- package/dist/server/server/src/services/encryption.js.map +1 -1
- package/dist/server/server/src/services/encryption.mjs +1 -1
- package/dist/server/server/src/services/encryption.mjs.map +1 -1
- package/dist/server/server/src/services/permission/engine.js +4 -8
- package/dist/server/server/src/services/permission/engine.js.map +1 -1
- package/dist/server/server/src/services/permission/engine.mjs +5 -5
- package/dist/server/server/src/services/permission/engine.mjs.map +1 -1
- package/dist/server/server/src/services/transfer/permission.js +1 -5
- package/dist/server/server/src/services/transfer/permission.js.map +1 -1
- package/dist/server/server/src/services/transfer/permission.mjs +2 -2
- package/dist/server/server/src/services/transfer/permission.mjs.map +1 -1
- package/dist/server/server/src/services/user.js +1 -1
- package/dist/server/server/src/services/user.js.map +1 -1
- package/dist/server/server/src/services/user.mjs +1 -1
- package/dist/server/server/src/services/user.mjs.map +1 -1
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/index.d.ts.map +1 -1
- package/dist/server/src/services/permission/engine.d.ts +1 -1
- package/dist/server/src/services/permission/engine.d.ts.map +1 -1
- package/dist/server/src/services/transfer/permission.d.ts +2 -2
- package/dist/server/src/services/transfer/permission.d.ts.map +1 -1
- package/package.json +10 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EditPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n if (role.code !== 'strapi-super-admin' && permissionsToSend) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n\n if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch (error) {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin' || hasLocaleValidationErrors}\n loading={isSubmitting}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","current","permissionsToSend","didUpdateConditions","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Button","startIcon","Check","disabled","loading","fullWidth","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","Flex","direction","alignItems","gap","RoleForm","onChange","onBlur","shadow","hasRadius","Permissions","onLocaleValidationChange","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"EditPage.mjs","sources":["../../../../../../../../admin/src/pages/Settings/pages/Roles/EditPage.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Box, Button, Flex, Main } from '@strapi/design-system';\nimport { Check } from '@strapi/icons';\nimport { Formik, FormikHelpers } from 'formik';\nimport { useIntl } from 'react-intl';\nimport { Navigate, useMatch } from 'react-router-dom';\nimport * as yup from 'yup';\n\nimport { Layouts } from '../../../../components/Layouts/Layout';\nimport { Page } from '../../../../components/PageHelpers';\nimport { useTypedSelector } from '../../../../core/store/hooks';\nimport { BackButton } from '../../../../features/BackButton';\nimport { useNotification } from '../../../../features/Notifications';\nimport { useTracking } from '../../../../features/Tracking';\nimport { useAdminRoles } from '../../../../hooks/useAdminRoles';\nimport { useAPIErrorHandler } from '../../../../hooks/useAPIErrorHandler';\nimport {\n useGetRolePermissionLayoutQuery,\n useGetRolePermissionsQuery,\n useUpdateRoleMutation,\n useUpdateRolePermissionsMutation,\n} from '../../../../services/users';\nimport { isBaseQueryError } from '../../../../utils/baseQuery';\nimport { translatedErrors } from '../../../../utils/translatedErrors';\n\nimport { Permissions, PermissionsAPI } from './components/Permissions';\nimport { RoleForm } from './components/RoleForm';\n\nconst EDIT_ROLE_SCHEMA = yup.object().shape({\n name: yup.string().required(translatedErrors.required.id),\n description: yup.string().optional(),\n});\n\n/**\n * TODO: be nice if we could just infer this from the schema\n */\ninterface EditRoleFormValues {\n name: string;\n description: string;\n}\n\nconst EditPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const match = useMatch('/settings/roles/:id');\n const id = match?.params.id;\n const permissionsRef = React.useRef<PermissionsAPI>(null);\n const [hasLocaleValidationErrors, setHasLocaleValidationErrors] = React.useState(false);\n const { trackUsage } = useTracking();\n const {\n _unstableFormatAPIError: formatAPIError,\n _unstableFormatValidationErrors: formatValidationErrors,\n } = useAPIErrorHandler();\n\n const { isLoading: isLoadingPermissionsLayout, data: permissionsLayout } =\n useGetRolePermissionLayoutQuery({\n /**\n * Role here is a query param so if there's no role we pass an empty string\n * which returns us a default layout.\n */\n role: id ?? '',\n });\n\n const {\n roles,\n isLoading: isRoleLoading,\n refetch: refetchRole,\n } = useAdminRoles(\n { id },\n {\n refetchOnMountOrArgChange: true,\n }\n );\n\n const role = roles[0] ?? {};\n\n const { data: permissions, isLoading: isLoadingPermissions } = useGetRolePermissionsQuery(\n {\n id: id!,\n },\n {\n skip: !id,\n refetchOnMountOrArgChange: true,\n }\n );\n\n const [updateRole] = useUpdateRoleMutation();\n const [updateRolePermissions] = useUpdateRolePermissionsMutation();\n\n if (!id) {\n return <Navigate to=\"/settings/roles\" />;\n }\n\n const handleEditRoleSubmit = async (\n data: EditRoleFormValues,\n formik: FormikHelpers<EditRoleFormValues>\n ) => {\n // Re-check via ref on submit: state may lag behind the latest matrix edits when save is clicked quickly\n if (permissionsRef.current?.hasLocaleValidationErrors()) {\n return;\n }\n\n try {\n const { permissionsToSend, didUpdateConditions } =\n permissionsRef.current?.getPermissions() ?? {};\n\n const res = await updateRole({\n id,\n ...data,\n });\n\n if ('error' in res) {\n if (isBaseQueryError(res.error) && res.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(res.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(res.error),\n });\n }\n\n return;\n }\n\n if (role.code !== 'strapi-super-admin' && permissionsToSend) {\n const updateRes = await updateRolePermissions({\n id: res.data.id,\n permissions: permissionsToSend,\n });\n\n if ('error' in updateRes) {\n if (isBaseQueryError(updateRes.error) && updateRes.error.name === 'ValidationError') {\n formik.setErrors(formatValidationErrors(updateRes.error));\n } else {\n toggleNotification({\n type: 'danger',\n message: formatAPIError(updateRes.error),\n });\n }\n\n return;\n }\n\n if (didUpdateConditions) {\n trackUsage('didUpdateConditions');\n }\n }\n\n permissionsRef.current?.setFormAfterSubmit();\n\n await refetchRole();\n\n toggleNotification({\n type: 'success',\n message: formatMessage({ id: 'notification.success.saved' }),\n });\n } catch {\n toggleNotification({\n type: 'danger',\n message: formatMessage({ id: 'notification.error', defaultMessage: 'An error occurred' }),\n });\n }\n };\n\n const isFormDisabled = !isRoleLoading && role.code === 'strapi-super-admin';\n\n if (isLoadingPermissionsLayout || isRoleLoading || isLoadingPermissions || !permissionsLayout) {\n return <Page.Loading />;\n }\n\n return (\n <Main>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: 'Roles',\n }\n )}\n </Page.Title>\n <Formik\n enableReinitialize\n initialValues={\n {\n name: role.name ?? '',\n description: role.description ?? '',\n } satisfies EditRoleFormValues\n }\n onSubmit={handleEditRoleSubmit}\n validationSchema={EDIT_ROLE_SCHEMA}\n validateOnChange={false}\n >\n {({ handleSubmit, values, errors, handleChange, handleBlur, isSubmitting }) => (\n <form onSubmit={handleSubmit}>\n <Layouts.Header\n primaryAction={\n <Button\n type=\"submit\"\n startIcon={<Check />}\n disabled={role.code === 'strapi-super-admin' || hasLocaleValidationErrors}\n loading={isSubmitting}\n fullWidth\n >\n {formatMessage({\n id: 'global.save',\n defaultMessage: 'Save',\n })}\n </Button>\n }\n title={formatMessage({\n id: 'Settings.roles.edit.title',\n defaultMessage: 'Edit a role',\n })}\n subtitle={formatMessage({\n id: 'Settings.roles.create.description',\n defaultMessage: 'Define the rights given to the role',\n })}\n navigationAction={\n // The back link for mobile works differently; it is placed higher up in the DOM.\n <Box display={{ initial: 'none', medium: 'block' }}>\n <BackButton fallback=\"../roles\" />\n </Box>\n }\n />\n <Layouts.Content>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={6}>\n <RoleForm\n disabled={isFormDisabled}\n errors={errors}\n values={values}\n onChange={handleChange}\n onBlur={handleBlur}\n role={role}\n />\n <Box shadow=\"filterShadow\" hasRadius>\n <Permissions\n isFormDisabled={isFormDisabled}\n onLocaleValidationChange={setHasLocaleValidationErrors}\n permissions={permissions}\n ref={permissionsRef}\n layout={permissionsLayout}\n />\n </Box>\n </Flex>\n </Layouts.Content>\n </form>\n )}\n </Formik>\n </Main>\n );\n};\n\nconst ProtectedEditPage = () => {\n const permissions = useTypedSelector(\n (state) => state.admin_app.permissions.settings?.roles.update\n );\n\n return (\n <Page.Protect permissions={permissions}>\n <EditPage />\n </Page.Protect>\n );\n};\n\nexport { EditPage, ProtectedEditPage };\nexport type { EditRoleFormValues };\n"],"names":["EDIT_ROLE_SCHEMA","yup","object","shape","name","string","required","translatedErrors","id","description","optional","EditPage","toggleNotification","useNotification","formatMessage","useIntl","match","useMatch","params","permissionsRef","React","useRef","hasLocaleValidationErrors","setHasLocaleValidationErrors","useState","trackUsage","useTracking","_unstableFormatAPIError","formatAPIError","_unstableFormatValidationErrors","formatValidationErrors","useAPIErrorHandler","isLoading","isLoadingPermissionsLayout","data","permissionsLayout","useGetRolePermissionLayoutQuery","role","roles","isRoleLoading","refetch","refetchRole","useAdminRoles","refetchOnMountOrArgChange","permissions","isLoadingPermissions","useGetRolePermissionsQuery","skip","updateRole","useUpdateRoleMutation","updateRolePermissions","useUpdateRolePermissionsMutation","_jsx","Navigate","to","handleEditRoleSubmit","formik","current","permissionsToSend","didUpdateConditions","getPermissions","res","isBaseQueryError","error","setErrors","type","message","code","updateRes","setFormAfterSubmit","defaultMessage","isFormDisabled","Page","Loading","_jsxs","Main","Title","Formik","enableReinitialize","initialValues","onSubmit","validationSchema","validateOnChange","handleSubmit","values","errors","handleChange","handleBlur","isSubmitting","form","Layouts","Header","primaryAction","Button","startIcon","Check","disabled","loading","fullWidth","title","subtitle","navigationAction","Box","display","initial","medium","BackButton","fallback","Content","Flex","direction","alignItems","gap","RoleForm","onChange","onBlur","shadow","hasRadius","Permissions","onLocaleValidationChange","ref","layout","ProtectedEditPage","useTypedSelector","state","admin_app","settings","update","Protect"],"mappings":"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"}
|
|
@@ -470,9 +470,7 @@ const inheritConditionsAtPath = (data, pathToActionObject, actionId, subject, us
|
|
|
470
470
|
*/ case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX':
|
|
471
471
|
{
|
|
472
472
|
const { keys, value, userPermissions } = action;
|
|
473
|
-
const pathToValue =
|
|
474
|
-
...keys.split('..')
|
|
475
|
-
];
|
|
473
|
+
const pathToValue = keys.split('..');
|
|
476
474
|
let nextModifiedDataState = cloneDeep__default.default(state.modifiedData);
|
|
477
475
|
const oldValues = get__default.default(nextModifiedDataState, pathToValue, {});
|
|
478
476
|
const root = pathToValue[0];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Permissions.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Tabs } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport {\n createFieldPermissionChecker,\n createDynamicActionPermissionChecker,\n} from '../utils/createPermissionChecker';\nimport { difference } from '../utils/difference';\nimport {\n ConditionForm,\n Form,\n PropertyChildForm,\n createDefaultCTForm,\n createDefaultForm,\n} from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { hasLocaleValidationErrors } from '../utils/localePermissionValidation';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues, updateValuesWithPermissions } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n hasLocaleValidationErrors: () => boolean;\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n onLocaleValidationChange?: (hasErrors: boolean) => void;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n userPermissions?: AuthPermission[];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n (\n { layout, isFormDisabled, onLocaleValidationChange, permissions = [], userPermissions },\n api\n ) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n onLocaleValidationChange?.(hasLocaleValidationErrors(modifiedData));\n }, [modifiedData, onLocaleValidationChange]);\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n const permissionsToSend = formatPermissionsForAPI(modifiedData).map((perm) =>\n restoreNullLocalesIfUnchanged(perm, permissions, initialData, modifiedData)\n );\n\n return { permissionsToSend, didUpdateConditions };\n },\n hasLocaleValidationErrors() {\n return hasLocaleValidationErrors(modifiedData);\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = React.useCallback(\n (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeCollectionTypeGlobalActionCheckbox = React.useCallback(\n (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeConditions = React.useCallback(\n (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions, userPermissions });\n },\n [userPermissions]\n );\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n >\n <Tabs.Root defaultValue={TAB_LABELS[0].id}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n {TAB_LABELS.map((tabLabel) => (\n <Tabs.Trigger key={tabLabel.id} value={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tabs.Trigger>\n ))}\n </Tabs.List>\n <Tabs.Content value={TAB_LABELS[0].id}>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[1].id}>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[2].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[3].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n </Tabs.Root>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\nconst buildInheritedConditionsFromExisting = (\n existing: unknown,\n enabledConditions: string[] = []\n): Record<string, boolean> | undefined => {\n if (!isObject(existing)) {\n return undefined;\n }\n\n const enabled = new Set(enabledConditions);\n\n return Object.keys(existing).reduce<Record<string, boolean>>((acc, key) => {\n acc[key] = enabled.has(key);\n\n return acc;\n }, {});\n};\n\nconst inheritConditionsAtPath = (\n data: unknown,\n pathToActionObject: string[],\n actionId: string,\n subject: string | null,\n userPermissions: AuthPermission[] | undefined\n) => {\n if (userPermissions === undefined) {\n return;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === actionId && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return;\n }\n\n const obj = data as Record<string, unknown>;\n const existingConditions = get(obj, [...pathToActionObject, 'conditions'], undefined);\n const nextConditions = buildInheritedConditionsFromExisting(\n existingConditions,\n matchingPermission.conditions ?? []\n );\n\n if (nextConditions) {\n set(obj, [...pathToActionObject, 'conditions'], nextConditions);\n }\n};\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value, userPermissions } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n const subjectPermissionChecker = createFieldPermissionChecker(\n actionId,\n collectionType,\n userPermissions\n );\n\n let updatedValues = updateValuesWithPermissions(\n collectionTypeActionData,\n value,\n subjectPermissionChecker\n );\n\n if (value === true) {\n inheritConditionsAtPath(updatedValues, [], actionId, collectionType, userPermissions);\n }\n\n if (value === false && updatedValues.conditions !== undefined) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value, userPermissions } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n const subject =\n pathToModifiedDataCollectionType[pathToModifiedDataCollectionType.length - 1];\n\n Object.keys(objToUpdate).forEach((actionId) => {\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n if (userPermissions !== undefined && propertyName === 'fields') {\n const hasPermission = userPermissions.some((perm) => {\n if (perm.action !== actionId || perm.subject !== subject) return false;\n\n const fields = perm.properties?.fields;\n if (fields === null || fields === undefined) return true;\n if (Array.isArray(fields) && fields.length === 0) return false;\n\n return (\n Array.isArray(fields) &&\n fields.some((f) => rowName === f || rowName.startsWith(`${f}.`))\n );\n });\n\n if (hasPermission === true) {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n const permissionChecker =\n userPermissions !== undefined && propertyName === 'fields'\n ? (path: string[]) => {\n const fullFieldPath = [rowName, ...path].join('.');\n const checker = createFieldPermissionChecker(\n actionId,\n subject,\n userPermissions\n );\n return checker === undefined\n ? true\n : checker(['properties', 'fields', fullFieldPath]);\n }\n : undefined;\n\n const updatedValue = updateValuesWithPermissions(objValue, value, permissionChecker);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n }\n });\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n // In App Token context, conditions are inherited from the user's permissions and must be read-only.\n if (action.userPermissions !== undefined) {\n break;\n }\n\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n const keysArray = action.keys.split('..');\n set(nextModifiedDataState, [...keysArray], action.value);\n\n // In App Token context, when enabling a permission, inherit the user's conditions.\n if (action.value === true && action.userPermissions !== undefined) {\n const propertiesIndex = keysArray.indexOf('properties');\n\n if (propertiesIndex > 0) {\n const actionId = keysArray[propertiesIndex - 1];\n const root = keysArray[0];\n\n if ((root === 'collectionTypes' || root === 'singleTypes') && keysArray.length >= 3) {\n const subject = keysArray[1];\n inheritConditionsAtPath(\n nextModifiedDataState,\n [root, subject, actionId],\n actionId,\n subject,\n action.userPermissions\n );\n } else {\n const pathToActionObject = keysArray.slice(0, propertiesIndex);\n inheritConditionsAtPath(\n nextModifiedDataState,\n pathToActionObject,\n actionId,\n null,\n action.userPermissions\n );\n }\n }\n }\n\n if (action.value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value, userPermissions } = action;\n const pathToValue = [...keys.split('..')];\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n const root = pathToValue[0];\n // Plugin & setting permissions are stored with `subject: null` and their real\n // action id is the full `plugin::`/`admin::` leaf segment (not the UI subcategory).\n // For those, let the checker derive the action from each leaf path (subject stays null).\n const isPluginOrSetting = root === 'plugins' || root === 'settings';\n\n let actionId: string | undefined;\n let subject: string | null | undefined;\n\n if (isPluginOrSetting) {\n subject = null;\n } else {\n if (pathToValue.length >= 2) {\n subject = pathToValue[1];\n }\n\n if (pathToValue.length >= 3) {\n actionId = pathToValue[2];\n }\n }\n\n const permissionChecker = createDynamicActionPermissionChecker(\n subject,\n actionId,\n userPermissions\n );\n\n const updatedValues = updateValuesWithPermissions(oldValues, value, permissionChecker);\n\n // In App Token context, when enabling, inherit conditions from the user's permissions.\n if (value === true && userPermissions !== undefined) {\n const subjectForLookup =\n root === 'collectionTypes' || root === 'singleTypes' ? (subject ?? null) : null;\n\n if (actionId !== undefined && subjectForLookup !== null) {\n inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);\n } else if (isObject(updatedValues)) {\n const updatedValuesObj = updatedValues as Record<string, unknown>;\n\n Object.keys(updatedValuesObj).forEach((key) => {\n const maybeActionObj = updatedValuesObj[key];\n if (isObject(maybeActionObj)) {\n inheritConditionsAtPath(maybeActionObj, [], key, subjectForLookup, userPermissions);\n }\n });\n }\n }\n\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * restoreNullLocalesIfUnchanged\n * Extracted at module level to avoid nesting arrow functions more than 4 levels deep inside\n * the useImperativeHandle → getPermissions → map chain.\n * -----------------------------------------------------------------------------------------------*/\n\ntype SentPermission = Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>;\n\nconst restoreNullLocalesIfUnchanged = (\n perm: SentPermission,\n originalPermissions: Permission[],\n initialData: PermissionForms,\n modifiedData: PermissionForms\n): SentPermission => {\n if (!perm.subject) return perm;\n\n const original = originalPermissions.find(\n (p) => p.action === perm.action && p.subject === perm.subject\n );\n\n // null means \"all locales\" in legacy DBs — preserve it if the user hasn't changed anything\n if (original?.properties?.locales !== null) return perm;\n\n const kind =\n perm.subject in modifiedData.collectionTypes\n ? ('collectionTypes' as const)\n : perm.subject in modifiedData.singleTypes\n ? ('singleTypes' as const)\n : null;\n if (!kind) return perm;\n\n const initialActionForm = initialData[kind]?.[perm.subject]?.[perm.action];\n const modifiedActionForm = modifiedData[kind]?.[perm.subject]?.[perm.action];\n\n if (!initialActionForm || !modifiedActionForm) return perm;\n\n const initialLocaleEntry = (initialActionForm.properties as PropertyChildForm)['locales'];\n const modifiedLocaleEntry = (modifiedActionForm.properties as PropertyChildForm)['locales'];\n\n if (\n !initialLocaleEntry ||\n typeof initialLocaleEntry === 'boolean' ||\n !modifiedLocaleEntry ||\n typeof modifiedLocaleEntry === 'boolean'\n ) {\n return perm;\n }\n\n const localesUnchanged =\n Object.keys(initialLocaleEntry).length === Object.keys(modifiedLocaleEntry).length &&\n Object.entries(initialLocaleEntry).every(\n ([locale, val]) => modifiedLocaleEntry[locale] === val\n );\n\n if (!localesUnchanged) return perm;\n\n return { ...perm, properties: { ...perm.properties, locales: null } };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["TAB_LABELS","labelId","defaultMessage","id","Permissions","React","forwardRef","layout","isFormDisabled","onLocaleValidationChange","permissions","userPermissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useEffect","hasLocaleValidationErrors","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","map","perm","restoreNullLocalesIfUnchanged","resetForm","type","setFormAfterSubmit","handleChangeCollectionTypeLeftActionRowCheckbox","useCallback","pathToCollectionType","propertyName","rowName","value","handleChangeCollectionTypeGlobalActionCheckbox","collectionTypeKind","actionId","handleChangeConditions","conditions","handleChangeSimpleCheckbox","target","name","keys","handleChangeParentCheckbox","_jsx","PermissionsDataManagerProvider","availableConditions","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","_jsxs","Tabs","Root","defaultValue","List","aria-label","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","buildInheritedConditionsFromExisting","existing","enabledConditions","isObject","undefined","enabled","Set","reduce","acc","key","inheritConditionsAtPath","data","pathToActionObject","subject","matchingPermission","find","action","obj","existingConditions","get","nextConditions","set","state","produce","draftState","pathToData","forEach","collectionType","collectionTypeActionData","subjectPermissionChecker","createFieldPermissionChecker","updatedValues","updateValuesWithPermissions","updatedConditions","updateValues","nextModifiedDataState","cloneDeep","pathToModifiedDataCollectionType","split","objToUpdate","length","objValue","pathToDataToSet","hasPermission","fields","properties","Array","isArray","f","startsWith","permissionChecker","path","fullFieldPath","join","checker","updatedValue","updateConditionsToFalse","entries","array","stringPathToData","conditionsToUpdate","keysArray","propertiesIndex","indexOf","root","slice","pathToValue","oldValues","isPluginOrSetting","createDynamicActionPermissionChecker","subjectForLookup","updatedValuesObj","maybeActionObj","originalPermissions","original","p","locales","initialActionForm","modifiedActionForm","initialLocaleEntry","modifiedLocaleEntry","localesUnchanged","every","locale","val","sections","formatLayout","defaultForm","createDefaultCTForm","createDefaultForm"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Permissions.js","sources":["../../../../../../../../../admin/src/pages/Settings/pages/Roles/components/Permissions.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { Tabs } from '@strapi/design-system';\nimport { produce } from 'immer';\nimport cloneDeep from 'lodash/cloneDeep';\nimport get from 'lodash/get';\nimport has from 'lodash/has';\nimport isEmpty from 'lodash/isEmpty';\nimport set from 'lodash/set';\nimport { useIntl } from 'react-intl';\n\nimport * as PermissonContracts from '../../../../../../../shared/contracts/permissions';\nimport { Permission } from '../../../../../../../shared/contracts/shared';\nimport { Permission as AuthPermission } from '../../../../../features/Auth';\nimport { isObject } from '../../../../../utils/objects';\nimport {\n PermissionsDataManagerContextValue,\n PermissionsDataManagerProvider,\n} from '../hooks/usePermissionsDataManager';\nimport {\n createFieldPermissionChecker,\n createDynamicActionPermissionChecker,\n} from '../utils/createPermissionChecker';\nimport { difference } from '../utils/difference';\nimport {\n ConditionForm,\n Form,\n PropertyChildForm,\n createDefaultCTForm,\n createDefaultForm,\n} from '../utils/forms';\nimport { GenericLayout, formatLayout } from '../utils/layouts';\nimport { hasLocaleValidationErrors } from '../utils/localePermissionValidation';\nimport { formatPermissionsForAPI } from '../utils/permissions';\nimport { updateConditionsToFalse } from '../utils/updateConditionsToFalse';\nimport { updateValues, updateValuesWithPermissions } from '../utils/updateValues';\n\nimport { ContentTypes } from './ContentTypes';\nimport { PluginsAndSettingsPermissions } from './PluginsAndSettings';\n\nconst TAB_LABELS = [\n {\n labelId: 'app.components.LeftMenuLinkContainer.collectionTypes',\n defaultMessage: 'Collection Types',\n id: 'collectionTypes',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.singleTypes',\n id: 'singleTypes',\n defaultMessage: 'Single Types',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.plugins',\n defaultMessage: 'Plugins',\n id: 'plugins',\n },\n {\n labelId: 'app.components.LeftMenuLinkContainer.settings',\n defaultMessage: 'Settings',\n id: 'settings',\n },\n] as const;\n\n/* -------------------------------------------------------------------------------------------------\n * Permissions\n * -----------------------------------------------------------------------------------------------*/\n\nexport interface PermissionsAPI {\n getPermissions: () => {\n didUpdateConditions: boolean;\n permissionsToSend: Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>[];\n };\n hasLocaleValidationErrors: () => boolean;\n resetForm: () => void;\n setFormAfterSubmit: () => void;\n}\n\ninterface PermissionsProps {\n isFormDisabled?: boolean;\n onLocaleValidationChange?: (hasErrors: boolean) => void;\n permissions?: Permission[];\n layout: PermissonContracts.GetAll.Response['data'];\n userPermissions?: AuthPermission[];\n}\n\nconst Permissions = React.forwardRef<PermissionsAPI, PermissionsProps>(\n (\n { layout, isFormDisabled, onLocaleValidationChange, permissions = [], userPermissions },\n api\n ) => {\n const [{ initialData, layouts, modifiedData }, dispatch] = React.useReducer(\n reducer,\n initialState,\n () => init(layout, permissions)\n );\n const { formatMessage } = useIntl();\n\n React.useEffect(() => {\n onLocaleValidationChange?.(hasLocaleValidationErrors(modifiedData));\n }, [modifiedData, onLocaleValidationChange]);\n\n React.useImperativeHandle(api, () => {\n return {\n getPermissions() {\n const collectionTypesDiff = difference(\n initialData.collectionTypes,\n modifiedData.collectionTypes\n );\n const singleTypesDiff = difference(initialData.singleTypes, modifiedData.singleTypes);\n\n const contentTypesDiff = { ...collectionTypesDiff, ...singleTypesDiff };\n\n let didUpdateConditions;\n\n if (isEmpty(contentTypesDiff)) {\n didUpdateConditions = false;\n } else {\n didUpdateConditions = Object.values(contentTypesDiff).some((permission = {}) => {\n return Object.values(permission).some((permissionValue) =>\n has(permissionValue, 'conditions')\n );\n });\n }\n\n const permissionsToSend = formatPermissionsForAPI(modifiedData).map((perm) =>\n restoreNullLocalesIfUnchanged(perm, permissions, initialData, modifiedData)\n );\n\n return { permissionsToSend, didUpdateConditions };\n },\n hasLocaleValidationErrors() {\n return hasLocaleValidationErrors(modifiedData);\n },\n resetForm() {\n dispatch({ type: 'RESET_FORM' });\n },\n setFormAfterSubmit() {\n dispatch({ type: 'SET_FORM_AFTER_SUBMIT' });\n },\n } satisfies PermissionsAPI;\n });\n\n const handleChangeCollectionTypeLeftActionRowCheckbox = React.useCallback(\n (\n pathToCollectionType: OnChangeCollectionTypeRowLeftCheckboxAction['pathToCollectionType'],\n propertyName: OnChangeCollectionTypeRowLeftCheckboxAction['propertyName'],\n rowName: OnChangeCollectionTypeRowLeftCheckboxAction['rowName'],\n value: OnChangeCollectionTypeRowLeftCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX',\n pathToCollectionType,\n propertyName,\n rowName,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeCollectionTypeGlobalActionCheckbox = React.useCallback(\n (\n collectionTypeKind: OnChangeCollectionTypeGlobalActionCheckboxAction['collectionTypeKind'],\n actionId: OnChangeCollectionTypeGlobalActionCheckboxAction['actionId'],\n value: OnChangeCollectionTypeGlobalActionCheckboxAction['value']\n ) => {\n dispatch({\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX',\n collectionTypeKind,\n actionId,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeConditions = React.useCallback(\n (conditions: OnChangeConditionsAction['conditions']) => {\n dispatch({ type: 'ON_CHANGE_CONDITIONS', conditions, userPermissions });\n },\n [userPermissions]\n );\n\n const handleChangeSimpleCheckbox: PermissionsDataManagerContextValue['onChangeSimpleCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_SIMPLE_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n const handleChangeParentCheckbox: PermissionsDataManagerContextValue['onChangeParentCheckbox'] =\n React.useCallback(\n ({ target: { name, value } }) => {\n dispatch({\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX',\n keys: name,\n value,\n userPermissions,\n });\n },\n [userPermissions]\n );\n\n return (\n <PermissionsDataManagerProvider\n availableConditions={layout.conditions}\n modifiedData={modifiedData}\n onChangeConditions={handleChangeConditions}\n onChangeSimpleCheckbox={handleChangeSimpleCheckbox}\n onChangeParentCheckbox={handleChangeParentCheckbox}\n onChangeCollectionTypeLeftActionRowCheckbox={\n handleChangeCollectionTypeLeftActionRowCheckbox\n }\n onChangeCollectionTypeGlobalActionCheckbox={handleChangeCollectionTypeGlobalActionCheckbox}\n userPermissions={userPermissions}\n >\n <Tabs.Root defaultValue={TAB_LABELS[0].id}>\n <Tabs.List\n aria-label={formatMessage({\n id: 'Settings.permissions.users.tabs.label',\n defaultMessage: 'Tabs Permissions',\n })}\n >\n {TAB_LABELS.map((tabLabel) => (\n <Tabs.Trigger key={tabLabel.id} value={tabLabel.id}>\n {formatMessage({ id: tabLabel.labelId, defaultMessage: tabLabel.defaultMessage })}\n </Tabs.Trigger>\n ))}\n </Tabs.List>\n <Tabs.Content value={TAB_LABELS[0].id}>\n <ContentTypes\n layout={layouts.collectionTypes}\n kind=\"collectionTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[1].id}>\n <ContentTypes\n layout={layouts.singleTypes}\n kind=\"singleTypes\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[2].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.plugins}\n kind=\"plugins\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n <Tabs.Content value={TAB_LABELS[3].id}>\n <PluginsAndSettingsPermissions\n layout={layouts.settings}\n kind=\"settings\"\n isFormDisabled={isFormDisabled}\n />\n </Tabs.Content>\n </Tabs.Root>\n </PermissionsDataManagerProvider>\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * reducer\n * -----------------------------------------------------------------------------------------------*/\n\ninterface PermissionForms {\n collectionTypes: Form;\n plugins: Record<string, Form>;\n settings: Record<string, Form>;\n singleTypes: Form;\n}\n\ninterface State {\n initialData: PermissionForms;\n modifiedData: PermissionForms;\n layouts: {\n collectionTypes: PermissonContracts.ContentPermission;\n singleTypes: PermissonContracts.ContentPermission;\n plugins: GenericLayout<PermissonContracts.PluginPermission>[];\n settings: GenericLayout<PermissonContracts.SettingPermission>[];\n };\n}\n\nconst initialState = {\n initialData: {},\n modifiedData: {},\n layouts: {},\n};\n\ninterface OnChangeCollectionTypeGlobalActionCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX';\n collectionTypeKind: keyof PermissionForms;\n actionId: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeCollectionTypeRowLeftCheckboxAction {\n type: 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX';\n pathToCollectionType: string;\n propertyName: string;\n rowName: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeConditionsAction {\n type: 'ON_CHANGE_CONDITIONS';\n conditions: Record<string, ConditionForm>;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeSimpleCheckboxAction {\n type: 'ON_CHANGE_SIMPLE_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface OnChangeToggleParentCheckbox {\n type: 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX';\n keys: string;\n value: boolean;\n userPermissions?: AuthPermission[];\n}\n\ninterface ResetFormAction {\n type: 'RESET_FORM';\n}\n\ninterface SetFormAfterSubmitAction {\n type: 'SET_FORM_AFTER_SUBMIT';\n}\n\ntype Action =\n | OnChangeCollectionTypeGlobalActionCheckboxAction\n | OnChangeCollectionTypeRowLeftCheckboxAction\n | OnChangeConditionsAction\n | OnChangeSimpleCheckboxAction\n | OnChangeToggleParentCheckbox\n | ResetFormAction\n | SetFormAfterSubmitAction;\n\nconst buildInheritedConditionsFromExisting = (\n existing: unknown,\n enabledConditions: string[] = []\n): Record<string, boolean> | undefined => {\n if (!isObject(existing)) {\n return undefined;\n }\n\n const enabled = new Set(enabledConditions);\n\n return Object.keys(existing).reduce<Record<string, boolean>>((acc, key) => {\n acc[key] = enabled.has(key);\n\n return acc;\n }, {});\n};\n\nconst inheritConditionsAtPath = (\n data: unknown,\n pathToActionObject: string[],\n actionId: string,\n subject: string | null,\n userPermissions: AuthPermission[] | undefined\n) => {\n if (userPermissions === undefined) {\n return;\n }\n\n const matchingPermission = userPermissions.find(\n (perm) => perm.action === actionId && perm.subject === subject\n );\n\n if (matchingPermission === undefined) {\n return;\n }\n\n const obj = data as Record<string, unknown>;\n const existingConditions = get(obj, [...pathToActionObject, 'conditions'], undefined);\n const nextConditions = buildInheritedConditionsFromExisting(\n existingConditions,\n matchingPermission.conditions ?? []\n );\n\n if (nextConditions) {\n set(obj, [...pathToActionObject, 'conditions'], nextConditions);\n }\n};\n\n/* eslint-disable consistent-return */\nconst reducer = (state: State, action: Action) =>\n produce(state, (draftState) => {\n switch (action.type) {\n case 'ON_CHANGE_COLLECTION_TYPE_GLOBAL_ACTION_CHECKBOX': {\n const { collectionTypeKind, actionId, value, userPermissions } = action;\n const pathToData = ['modifiedData', collectionTypeKind];\n\n Object.keys(get(state, pathToData)).forEach((collectionType) => {\n const collectionTypeActionData = get(\n state,\n [...pathToData, collectionType, actionId],\n undefined\n );\n\n if (collectionTypeActionData) {\n const subjectPermissionChecker = createFieldPermissionChecker(\n actionId,\n collectionType,\n userPermissions\n );\n\n let updatedValues = updateValuesWithPermissions(\n collectionTypeActionData,\n value,\n subjectPermissionChecker\n );\n\n if (value === true) {\n inheritConditionsAtPath(updatedValues, [], actionId, collectionType, userPermissions);\n }\n\n if (value === false && updatedValues.conditions !== undefined) {\n // @ts-expect-error – TODO: type better\n const updatedConditions = updateValues(updatedValues.conditions, false);\n\n updatedValues = { ...updatedValues, conditions: updatedConditions };\n }\n\n set(draftState, [...pathToData, collectionType, actionId], updatedValues);\n }\n });\n\n break;\n }\n case 'ON_CHANGE_COLLECTION_TYPE_ROW_LEFT_CHECKBOX': {\n const { pathToCollectionType, propertyName, rowName, value, userPermissions } = action;\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const pathToModifiedDataCollectionType = pathToCollectionType.split('..');\n\n const objToUpdate = get(nextModifiedDataState, pathToModifiedDataCollectionType, {});\n\n const subject =\n pathToModifiedDataCollectionType[pathToModifiedDataCollectionType.length - 1];\n\n Object.keys(objToUpdate).forEach((actionId) => {\n if (has(objToUpdate[actionId], `properties.${propertyName}`)) {\n const objValue = get(objToUpdate, [actionId, 'properties', propertyName, rowName]);\n const pathToDataToSet = [\n ...pathToModifiedDataCollectionType,\n actionId,\n 'properties',\n propertyName,\n rowName,\n ];\n\n if (!isObject(objValue)) {\n if (userPermissions !== undefined && propertyName === 'fields') {\n const hasPermission = userPermissions.some((perm) => {\n if (perm.action !== actionId || perm.subject !== subject) return false;\n\n const fields = perm.properties?.fields;\n if (fields === null || fields === undefined) return true;\n if (Array.isArray(fields) && fields.length === 0) return false;\n\n return (\n Array.isArray(fields) &&\n fields.some((f) => rowName === f || rowName.startsWith(`${f}.`))\n );\n });\n\n if (hasPermission === true) {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n set(nextModifiedDataState, pathToDataToSet, value);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n } else {\n const permissionChecker =\n userPermissions !== undefined && propertyName === 'fields'\n ? (path: string[]) => {\n const fullFieldPath = [rowName, ...path].join('.');\n const checker = createFieldPermissionChecker(\n actionId,\n subject,\n userPermissions\n );\n return checker === undefined\n ? true\n : checker(['properties', 'fields', fullFieldPath]);\n }\n : undefined;\n\n const updatedValue = updateValuesWithPermissions(objValue, value, permissionChecker);\n\n set(nextModifiedDataState, pathToDataToSet, updatedValue);\n if (value === true && userPermissions !== undefined) {\n inheritConditionsAtPath(\n nextModifiedDataState,\n [...pathToModifiedDataCollectionType, actionId],\n actionId,\n subject,\n userPermissions\n );\n }\n }\n }\n });\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n case 'ON_CHANGE_CONDITIONS': {\n // In App Token context, conditions are inherited from the user's permissions and must be read-only.\n if (action.userPermissions !== undefined) {\n break;\n }\n\n Object.entries(action.conditions).forEach((array) => {\n const [stringPathToData, conditionsToUpdate] = array;\n\n set(\n draftState,\n ['modifiedData', ...stringPathToData.split('..'), 'conditions'],\n conditionsToUpdate\n );\n });\n\n break;\n }\n case 'ON_CHANGE_SIMPLE_CHECKBOX': {\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n\n const keysArray = action.keys.split('..');\n set(nextModifiedDataState, [...keysArray], action.value);\n\n // In App Token context, when enabling a permission, inherit the user's conditions.\n if (action.value === true && action.userPermissions !== undefined) {\n const propertiesIndex = keysArray.indexOf('properties');\n\n if (propertiesIndex > 0) {\n const actionId = keysArray[propertiesIndex - 1];\n const root = keysArray[0];\n\n if ((root === 'collectionTypes' || root === 'singleTypes') && keysArray.length >= 3) {\n const subject = keysArray[1];\n inheritConditionsAtPath(\n nextModifiedDataState,\n [root, subject, actionId],\n actionId,\n subject,\n action.userPermissions\n );\n } else {\n const pathToActionObject = keysArray.slice(0, propertiesIndex);\n inheritConditionsAtPath(\n nextModifiedDataState,\n pathToActionObject,\n actionId,\n null,\n action.userPermissions\n );\n }\n }\n }\n\n if (action.value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, 'modifiedData', nextModifiedDataState);\n\n break;\n }\n /*\n * Here the idea is to retrieve a specific value of the modifiedObject\n * then update all the boolean values of the retrieved one\n * and update the drafState.\n *\n * For instance in order to enable create action for all the fields and locales\n * of the restaurant content type we need to :\n * 1. Retrieve the modifiedData.collectionTypes.restaurant.create object\n * 2. Toggle all the end boolean values to the desired one\n * 3. Update the draftState\n *\n * Since the case works well in order to update what we called \"parent\" checkbox. We can\n * reuse the action when we need to toggle change all the values that depends on this one.\n * A parent checkbox is a checkbox which value is not a boolean but depends on its children ones, therefore,\n * a parent checkbox does not have a represented value in the draftState, they are just helpers.\n *\n * Given the following data:\n *\n * const data = {\n * restaurant: {\n * create: {\n * fields: { name: true },\n * locales: { en: false }\n * }\n * }\n * }\n *\n * The value of the create checkbox for the restaurant will be ƒalse since not all its children have\n * truthy values and in order to set its value to true when need to have all the values of its children set to true.\n *\n * Similarly, we can reuse the logic for the components attributes\n *\n */\n case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX': {\n const { keys, value, userPermissions } = action;\n const pathToValue = keys.split('..');\n let nextModifiedDataState = cloneDeep(state.modifiedData);\n const oldValues = get(nextModifiedDataState, pathToValue, {});\n\n const root = pathToValue[0];\n // Plugin & setting permissions are stored with `subject: null` and their real\n // action id is the full `plugin::`/`admin::` leaf segment (not the UI subcategory).\n // For those, let the checker derive the action from each leaf path (subject stays null).\n const isPluginOrSetting = root === 'plugins' || root === 'settings';\n\n let actionId: string | undefined;\n let subject: string | null | undefined;\n\n if (isPluginOrSetting) {\n subject = null;\n } else {\n if (pathToValue.length >= 2) {\n subject = pathToValue[1];\n }\n\n if (pathToValue.length >= 3) {\n actionId = pathToValue[2];\n }\n }\n\n const permissionChecker = createDynamicActionPermissionChecker(\n subject,\n actionId,\n userPermissions\n );\n\n const updatedValues = updateValuesWithPermissions(oldValues, value, permissionChecker);\n\n // In App Token context, when enabling, inherit conditions from the user's permissions.\n if (value === true && userPermissions !== undefined) {\n const subjectForLookup =\n root === 'collectionTypes' || root === 'singleTypes' ? (subject ?? null) : null;\n\n if (actionId !== undefined && subjectForLookup !== null) {\n inheritConditionsAtPath(updatedValues, [], actionId, subjectForLookup, userPermissions);\n } else if (isObject(updatedValues)) {\n const updatedValuesObj = updatedValues as Record<string, unknown>;\n\n Object.keys(updatedValuesObj).forEach((key) => {\n const maybeActionObj = updatedValuesObj[key];\n if (isObject(maybeActionObj)) {\n inheritConditionsAtPath(maybeActionObj, [], key, subjectForLookup, userPermissions);\n }\n });\n }\n }\n\n set(nextModifiedDataState, pathToValue, updatedValues);\n\n if (value === false) {\n // @ts-expect-error – TODO: type better\n nextModifiedDataState = updateConditionsToFalse(nextModifiedDataState);\n }\n\n set(draftState, ['modifiedData'], nextModifiedDataState);\n\n break;\n }\n case 'RESET_FORM': {\n draftState.modifiedData = state.initialData;\n break;\n }\n case 'SET_FORM_AFTER_SUBMIT': {\n draftState.initialData = state.modifiedData;\n break;\n }\n default:\n return draftState;\n }\n });\n\n/* -------------------------------------------------------------------------------------------------\n * restoreNullLocalesIfUnchanged\n * Extracted at module level to avoid nesting arrow functions more than 4 levels deep inside\n * the useImperativeHandle → getPermissions → map chain.\n * -----------------------------------------------------------------------------------------------*/\n\ntype SentPermission = Omit<Permission, 'id' | 'createdAt' | 'updatedAt' | 'actionParameters'>;\n\nconst restoreNullLocalesIfUnchanged = (\n perm: SentPermission,\n originalPermissions: Permission[],\n initialData: PermissionForms,\n modifiedData: PermissionForms\n): SentPermission => {\n if (!perm.subject) return perm;\n\n const original = originalPermissions.find(\n (p) => p.action === perm.action && p.subject === perm.subject\n );\n\n // null means \"all locales\" in legacy DBs — preserve it if the user hasn't changed anything\n if (original?.properties?.locales !== null) return perm;\n\n const kind =\n perm.subject in modifiedData.collectionTypes\n ? ('collectionTypes' as const)\n : perm.subject in modifiedData.singleTypes\n ? ('singleTypes' as const)\n : null;\n if (!kind) return perm;\n\n const initialActionForm = initialData[kind]?.[perm.subject]?.[perm.action];\n const modifiedActionForm = modifiedData[kind]?.[perm.subject]?.[perm.action];\n\n if (!initialActionForm || !modifiedActionForm) return perm;\n\n const initialLocaleEntry = (initialActionForm.properties as PropertyChildForm)['locales'];\n const modifiedLocaleEntry = (modifiedActionForm.properties as PropertyChildForm)['locales'];\n\n if (\n !initialLocaleEntry ||\n typeof initialLocaleEntry === 'boolean' ||\n !modifiedLocaleEntry ||\n typeof modifiedLocaleEntry === 'boolean'\n ) {\n return perm;\n }\n\n const localesUnchanged =\n Object.keys(initialLocaleEntry).length === Object.keys(modifiedLocaleEntry).length &&\n Object.entries(initialLocaleEntry).every(\n ([locale, val]) => modifiedLocaleEntry[locale] === val\n );\n\n if (!localesUnchanged) return perm;\n\n return { ...perm, properties: { ...perm.properties, locales: null } };\n};\n\n/* -------------------------------------------------------------------------------------------------\n * init (reducer)\n * -----------------------------------------------------------------------------------------------*/\n\nconst init = (\n layout: PermissionsProps['layout'],\n permissions: PermissionsProps['permissions']\n): State => {\n const {\n conditions,\n sections: { collectionTypes, singleTypes, plugins, settings },\n } = layout;\n\n const layouts = {\n collectionTypes,\n singleTypes,\n plugins: formatLayout(plugins, 'plugin'),\n settings: formatLayout(settings, 'category'),\n };\n\n const defaultForm = {\n collectionTypes: createDefaultCTForm(collectionTypes, conditions, permissions),\n singleTypes: createDefaultCTForm(singleTypes, conditions, permissions),\n plugins: createDefaultForm(layouts.plugins, conditions, permissions),\n settings: createDefaultForm(layouts.settings, conditions, permissions),\n };\n\n return {\n initialData: defaultForm,\n modifiedData: defaultForm,\n layouts,\n };\n};\n\nexport { Permissions };\nexport type {\n State,\n OnChangeCollectionTypeRowLeftCheckboxAction,\n OnChangeConditionsAction,\n OnChangeCollectionTypeGlobalActionCheckboxAction,\n};\n"],"names":["TAB_LABELS","labelId","defaultMessage","id","Permissions","React","forwardRef","layout","isFormDisabled","onLocaleValidationChange","permissions","userPermissions","api","initialData","layouts","modifiedData","dispatch","useReducer","reducer","initialState","init","formatMessage","useIntl","useEffect","hasLocaleValidationErrors","useImperativeHandle","getPermissions","collectionTypesDiff","difference","collectionTypes","singleTypesDiff","singleTypes","contentTypesDiff","didUpdateConditions","isEmpty","Object","values","some","permission","permissionValue","has","permissionsToSend","formatPermissionsForAPI","map","perm","restoreNullLocalesIfUnchanged","resetForm","type","setFormAfterSubmit","handleChangeCollectionTypeLeftActionRowCheckbox","useCallback","pathToCollectionType","propertyName","rowName","value","handleChangeCollectionTypeGlobalActionCheckbox","collectionTypeKind","actionId","handleChangeConditions","conditions","handleChangeSimpleCheckbox","target","name","keys","handleChangeParentCheckbox","_jsx","PermissionsDataManagerProvider","availableConditions","onChangeConditions","onChangeSimpleCheckbox","onChangeParentCheckbox","onChangeCollectionTypeLeftActionRowCheckbox","onChangeCollectionTypeGlobalActionCheckbox","_jsxs","Tabs","Root","defaultValue","List","aria-label","tabLabel","Trigger","Content","ContentTypes","kind","PluginsAndSettingsPermissions","plugins","settings","buildInheritedConditionsFromExisting","existing","enabledConditions","isObject","undefined","enabled","Set","reduce","acc","key","inheritConditionsAtPath","data","pathToActionObject","subject","matchingPermission","find","action","obj","existingConditions","get","nextConditions","set","state","produce","draftState","pathToData","forEach","collectionType","collectionTypeActionData","subjectPermissionChecker","createFieldPermissionChecker","updatedValues","updateValuesWithPermissions","updatedConditions","updateValues","nextModifiedDataState","cloneDeep","pathToModifiedDataCollectionType","split","objToUpdate","length","objValue","pathToDataToSet","hasPermission","fields","properties","Array","isArray","f","startsWith","permissionChecker","path","fullFieldPath","join","checker","updatedValue","updateConditionsToFalse","entries","array","stringPathToData","conditionsToUpdate","keysArray","propertiesIndex","indexOf","root","slice","pathToValue","oldValues","isPluginOrSetting","createDynamicActionPermissionChecker","subjectForLookup","updatedValuesObj","maybeActionObj","originalPermissions","original","p","locales","initialActionForm","modifiedActionForm","initialLocaleEntry","modifiedLocaleEntry","localesUnchanged","every","locale","val","sections","formatLayout","defaultForm","createDefaultCTForm","createDefaultForm"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAwCA,MAAMA,UAAAA,GAAa;AACjB,IAAA;QACEC,OAAAA,EAAS,sDAAA;QACTC,cAAAA,EAAgB,kBAAA;QAChBC,EAAAA,EAAI;AACN,KAAA;AACA,IAAA;QACEF,OAAAA,EAAS,kDAAA;QACTE,EAAAA,EAAI,aAAA;QACJD,cAAAA,EAAgB;AAClB,KAAA;AACA,IAAA;QACED,OAAAA,EAAS,8CAAA;QACTC,cAAAA,EAAgB,SAAA;QAChBC,EAAAA,EAAI;AACN,KAAA;AACA,IAAA;QACEF,OAAAA,EAAS,+CAAA;QACTC,cAAAA,EAAgB,UAAA;QAChBC,EAAAA,EAAI;AACN;AACD,CAAA;AAwBD,MAAMC,4BAAcC,gBAAAA,CAAMC,UAAU,CAClC,CACE,EAAEC,MAAM,EAAEC,cAAc,EAAEC,wBAAwB,eAAEC,aAAAA,GAAc,EAAE,EAAEC,eAAe,EAAE,EACvFC,GAAAA,GAAAA;AAEA,IAAA,MAAM,CAAC,EAAEC,WAAW,EAAEC,OAAO,EAAEC,YAAY,EAAE,EAAEC,QAAAA,CAAS,GAAGX,iBAAMY,UAAU,CACzEC,SACAC,YAAAA,EACA,IAAMC,KAAKb,MAAAA,EAAQG,aAAAA,CAAAA,CAAAA;IAErB,MAAM,EAAEW,aAAa,EAAE,GAAGC,iBAAAA,EAAAA;AAE1BjB,IAAAA,gBAAAA,CAAMkB,SAAS,CAAC,IAAA;AACdd,QAAAA,wBAAAA,GAA2Be,oDAAAA,CAA0BT,YAAAA,CAAAA,CAAAA;IACvD,CAAA,EAAG;AAACA,QAAAA,YAAAA;AAAcN,QAAAA;AAAyB,KAAA,CAAA;IAE3CJ,gBAAAA,CAAMoB,mBAAmB,CAACb,GAAAA,EAAK,IAAA;QAC7B,OAAO;AACLc,YAAAA,cAAAA,CAAAA,GAAAA;AACE,gBAAA,MAAMC,sBAAsBC,qBAAAA,CAC1Bf,WAAAA,CAAYgB,eAAe,EAC3Bd,aAAac,eAAe,CAAA;AAE9B,gBAAA,MAAMC,kBAAkBF,qBAAAA,CAAWf,WAAAA,CAAYkB,WAAW,EAAEhB,aAAagB,WAAW,CAAA;AAEpF,gBAAA,MAAMC,gBAAAA,GAAmB;AAAE,oBAAA,GAAGL,mBAAmB;AAAE,oBAAA,GAAGG;AAAgB,iBAAA;gBAEtE,IAAIG,mBAAAA;AAEJ,gBAAA,IAAIC,yBAAQF,gBAAAA,CAAAA,EAAmB;oBAC7BC,mBAAAA,GAAsB,KAAA;gBACxB,CAAA,MAAO;oBACLA,mBAAAA,GAAsBE,MAAAA,CAAOC,MAAM,CAACJ,gBAAAA,CAAAA,CAAkBK,IAAI,CAAC,CAACC,UAAAA,GAAa,EAAE,GAAA;wBACzE,OAAOH,MAAAA,CAAOC,MAAM,CAACE,UAAAA,CAAAA,CAAYD,IAAI,CAAC,CAACE,eAAAA,GACrCC,oBAAAA,CAAID,eAAAA,EAAiB,YAAA,CAAA,CAAA;AAEzB,oBAAA,CAAA,CAAA;AACF,gBAAA;gBAEA,MAAME,iBAAAA,GAAoBC,mCAAAA,CAAwB3B,YAAAA,CAAAA,CAAc4B,GAAG,CAAC,CAACC,IAAAA,GACnEC,6BAAAA,CAA8BD,IAAAA,EAAMlC,aAAAA,EAAaG,WAAAA,EAAaE,YAAAA,CAAAA,CAAAA;gBAGhE,OAAO;AAAE0B,oBAAAA,iBAAAA;AAAmBR,oBAAAA;AAAoB,iBAAA;AAClD,YAAA,CAAA;AACAT,YAAAA,yBAAAA,CAAAA,GAAAA;AACE,gBAAA,OAAOA,oDAAAA,CAA0BT,YAAAA,CAAAA;AACnC,YAAA,CAAA;AACA+B,YAAAA,SAAAA,CAAAA,GAAAA;gBACE9B,QAAAA,CAAS;oBAAE+B,IAAAA,EAAM;AAAa,iBAAA,CAAA;AAChC,YAAA,CAAA;AACAC,YAAAA,kBAAAA,CAAAA,GAAAA;gBACEhC,QAAAA,CAAS;oBAAE+B,IAAAA,EAAM;AAAwB,iBAAA,CAAA;AAC3C,YAAA;AACF,SAAA;AACF,IAAA,CAAA,CAAA;AAEA,IAAA,MAAME,kDAAkD5C,gBAAAA,CAAM6C,WAAW,CACvE,CACEC,oBAAAA,EACAC,cACAC,OAAAA,EACAC,KAAAA,GAAAA;QAEAtC,QAAAA,CAAS;YACP+B,IAAAA,EAAM,6CAAA;AACNI,YAAAA,oBAAAA;AACAC,YAAAA,YAAAA;AACAC,YAAAA,OAAAA;AACAC,YAAAA,KAAAA;AACA3C,YAAAA;AACF,SAAA,CAAA;IACF,CAAA,EACA;AAACA,QAAAA;AAAgB,KAAA,CAAA;AAGnB,IAAA,MAAM4C,iDAAiDlD,gBAAAA,CAAM6C,WAAW,CACtE,CACEM,oBACAC,QAAAA,EACAH,KAAAA,GAAAA;QAEAtC,QAAAA,CAAS;YACP+B,IAAAA,EAAM,kDAAA;AACNS,YAAAA,kBAAAA;AACAC,YAAAA,QAAAA;AACAH,YAAAA,KAAAA;AACA3C,YAAAA;AACF,SAAA,CAAA;IACF,CAAA,EACA;AAACA,QAAAA;AAAgB,KAAA,CAAA;AAGnB,IAAA,MAAM+C,sBAAAA,GAAyBrD,gBAAAA,CAAM6C,WAAW,CAC9C,CAACS,UAAAA,GAAAA;QACC3C,QAAAA,CAAS;YAAE+B,IAAAA,EAAM,sBAAA;AAAwBY,YAAAA,UAAAA;AAAYhD,YAAAA;AAAgB,SAAA,CAAA;IACvE,CAAA,EACA;AAACA,QAAAA;AAAgB,KAAA,CAAA;AAGnB,IAAA,MAAMiD,0BAAAA,GACJvD,gBAAAA,CAAM6C,WAAW,CACf,CAAC,EAAEW,MAAAA,EAAQ,EAAEC,IAAI,EAAER,KAAK,EAAE,EAAE,GAAA;QAC1BtC,QAAAA,CAAS;YACP+B,IAAAA,EAAM,2BAAA;YACNgB,IAAAA,EAAMD,IAAAA;AACNR,YAAAA,KAAAA;AACA3C,YAAAA;AACF,SAAA,CAAA;IACF,CAAA,EACA;AAACA,QAAAA;AAAgB,KAAA,CAAA;AAGrB,IAAA,MAAMqD,0BAAAA,GACJ3D,gBAAAA,CAAM6C,WAAW,CACf,CAAC,EAAEW,MAAAA,EAAQ,EAAEC,IAAI,EAAER,KAAK,EAAE,EAAE,GAAA;QAC1BtC,QAAAA,CAAS;YACP+B,IAAAA,EAAM,kCAAA;YACNgB,IAAAA,EAAMD,IAAAA;AACNR,YAAAA,KAAAA;AACA3C,YAAAA;AACF,SAAA,CAAA;IACF,CAAA,EACA;AAACA,QAAAA;AAAgB,KAAA,CAAA;AAGrB,IAAA,qBACEsD,cAAA,CAACC,wDAAAA,EAAAA;AACCC,QAAAA,mBAAAA,EAAqB5D,OAAOoD,UAAU;QACtC5C,YAAAA,EAAcA,YAAAA;QACdqD,kBAAAA,EAAoBV,sBAAAA;QACpBW,sBAAAA,EAAwBT,0BAAAA;QACxBU,sBAAAA,EAAwBN,0BAAAA;QACxBO,2CAAAA,EACEtB,+CAAAA;QAEFuB,0CAAAA,EAA4CjB,8CAAAA;QAC5C5C,eAAAA,EAAiBA,eAAAA;gCAEjB8D,eAAA,CAACC,kBAAKC,IAAI,EAAA;AAACC,YAAAA,YAAAA,EAAc5E,UAAU,CAAC,CAAA,CAAE,CAACG,EAAE;;AACvC,8BAAA8D,cAAA,CAACS,kBAAKG,IAAI,EAAA;AACRC,oBAAAA,YAAAA,EAAYzD,aAAAA,CAAc;wBACxBlB,EAAAA,EAAI,uCAAA;wBACJD,cAAAA,EAAgB;AAClB,qBAAA,CAAA;AAECF,oBAAAA,QAAAA,EAAAA,UAAAA,CAAW2C,GAAG,CAAC,CAACoC,QAAAA,iBACfd,cAAA,CAACS,kBAAKM,OAAO,EAAA;AAAmB1B,4BAAAA,KAAAA,EAAOyB,SAAS5E,EAAE;sCAC/CkB,aAAAA,CAAc;AAAElB,gCAAAA,EAAAA,EAAI4E,SAAS9E,OAAO;AAAEC,gCAAAA,cAAAA,EAAgB6E,SAAS7E;AAAe,6BAAA;AAD9D6E,yBAAAA,EAAAA,QAAAA,CAAS5E,EAAE,CAAA;;AAKlC,8BAAA8D,cAAA,CAACS,kBAAKO,OAAO,EAAA;AAAC3B,oBAAAA,KAAAA,EAAOtD,UAAU,CAAC,CAAA,CAAE,CAACG,EAAE;AACnC,oBAAA,QAAA,gBAAA8D,cAAA,CAACiB,yBAAAA,EAAAA;AACC3E,wBAAAA,MAAAA,EAAQO,QAAQe,eAAe;wBAC/BsD,IAAAA,EAAK,iBAAA;wBACL3E,cAAAA,EAAgBA;;;AAGpB,8BAAAyD,cAAA,CAACS,kBAAKO,OAAO,EAAA;AAAC3B,oBAAAA,KAAAA,EAAOtD,UAAU,CAAC,CAAA,CAAE,CAACG,EAAE;AACnC,oBAAA,QAAA,gBAAA8D,cAAA,CAACiB,yBAAAA,EAAAA;AACC3E,wBAAAA,MAAAA,EAAQO,QAAQiB,WAAW;wBAC3BoD,IAAAA,EAAK,aAAA;wBACL3E,cAAAA,EAAgBA;;;AAGpB,8BAAAyD,cAAA,CAACS,kBAAKO,OAAO,EAAA;AAAC3B,oBAAAA,KAAAA,EAAOtD,UAAU,CAAC,CAAA,CAAE,CAACG,EAAE;AACnC,oBAAA,QAAA,gBAAA8D,cAAA,CAACmB,gDAAAA,EAAAA;AACC7E,wBAAAA,MAAAA,EAAQO,QAAQuE,OAAO;wBACvBF,IAAAA,EAAK,SAAA;wBACL3E,cAAAA,EAAgBA;;;AAGpB,8BAAAyD,cAAA,CAACS,kBAAKO,OAAO,EAAA;AAAC3B,oBAAAA,KAAAA,EAAOtD,UAAU,CAAC,CAAA,CAAE,CAACG,EAAE;AACnC,oBAAA,QAAA,gBAAA8D,cAAA,CAACmB,gDAAAA,EAAAA;AACC7E,wBAAAA,MAAAA,EAAQO,QAAQwE,QAAQ;wBACxBH,IAAAA,EAAK,UAAA;wBACL3E,cAAAA,EAAgBA;;;;;;AAM5B,CAAA;AAyBF,MAAMW,YAAAA,GAAe;AACnBN,IAAAA,WAAAA,EAAa,EAAC;AACdE,IAAAA,YAAAA,EAAc,EAAC;AACfD,IAAAA,OAAAA,EAAS;AACX,CAAA;AAwDA,MAAMyE,oCAAAA,GAAuC,CAC3CC,QAAAA,EACAC,iBAAAA,GAA8B,EAAE,GAAA;IAEhC,IAAI,CAACC,iBAASF,QAAAA,CAAAA,EAAW;QACvB,OAAOG,SAAAA;AACT,IAAA;IAEA,MAAMC,OAAAA,GAAU,IAAIC,GAAAA,CAAIJ,iBAAAA,CAAAA;AAExB,IAAA,OAAOtD,OAAO4B,IAAI,CAACyB,UAAUM,MAAM,CAA0B,CAACC,GAAAA,EAAKC,GAAAA,GAAAA;AACjED,QAAAA,GAAG,CAACC,GAAAA,CAAI,GAAGJ,OAAAA,CAAQpD,GAAG,CAACwD,GAAAA,CAAAA;QAEvB,OAAOD,GAAAA;AACT,IAAA,CAAA,EAAG,EAAC,CAAA;AACN,CAAA;AAEA,MAAME,uBAAAA,GAA0B,CAC9BC,IAAAA,EACAC,kBAAAA,EACA1C,UACA2C,OAAAA,EACAzF,eAAAA,GAAAA;AAEA,IAAA,IAAIA,oBAAoBgF,SAAAA,EAAW;AACjC,QAAA;AACF,IAAA;AAEA,IAAA,MAAMU,kBAAAA,GAAqB1F,eAAAA,CAAgB2F,IAAI,CAC7C,CAAC1D,IAAAA,GAASA,IAAAA,CAAK2D,MAAM,KAAK9C,QAAAA,IAAYb,IAAAA,CAAKwD,OAAO,KAAKA,OAAAA,CAAAA;AAGzD,IAAA,IAAIC,uBAAuBV,SAAAA,EAAW;AACpC,QAAA;AACF,IAAA;AAEA,IAAA,MAAMa,GAAAA,GAAMN,IAAAA;IACZ,MAAMO,kBAAAA,GAAqBC,qBAAIF,GAAAA,EAAK;AAAIL,QAAAA,GAAAA,kBAAAA;AAAoB,QAAA;KAAa,EAAER,SAAAA,CAAAA;AAC3E,IAAA,MAAMgB,iBAAiBpB,oCAAAA,CACrBkB,kBAAAA,EACAJ,kBAAAA,CAAmB1C,UAAU,IAAI,EAAE,CAAA;AAGrC,IAAA,IAAIgD,cAAAA,EAAgB;AAClBC,QAAAA,oBAAAA,CAAIJ,GAAAA,EAAK;AAAIL,YAAAA,GAAAA,kBAAAA;AAAoB,YAAA;SAAa,EAAEQ,cAAAA,CAAAA;AAClD,IAAA;AACF,CAAA;AAEA,uCACA,MAAMzF,OAAAA,GAAU,CAAC2F,OAAcN,MAAAA,GAC7BO,aAAAA,CAAQD,OAAO,CAACE,UAAAA,GAAAA;AACd,QAAA,OAAQR,OAAOxD,IAAI;YACjB,KAAK,kDAAA;AAAoD,gBAAA;oBACvD,MAAM,EAAES,kBAAkB,EAAEC,QAAQ,EAAEH,KAAK,EAAE3C,eAAe,EAAE,GAAG4F,MAAAA;AACjE,oBAAA,MAAMS,UAAAA,GAAa;AAAC,wBAAA,cAAA;AAAgBxD,wBAAAA;AAAmB,qBAAA;AAEvDrB,oBAAAA,MAAAA,CAAO4B,IAAI,CAAC2C,oBAAAA,CAAIG,OAAOG,UAAAA,CAAAA,CAAAA,CAAaC,OAAO,CAAC,CAACC,cAAAA,GAAAA;wBAC3C,MAAMC,wBAAAA,GAA2BT,qBAC/BG,KAAAA,EACA;AAAIG,4BAAAA,GAAAA,UAAAA;AAAYE,4BAAAA,cAAAA;AAAgBzD,4BAAAA;yBAAS,EACzCkC,SAAAA,CAAAA;AAGF,wBAAA,IAAIwB,wBAAAA,EAA0B;4BAC5B,MAAMC,wBAAAA,GAA2BC,oDAAAA,CAC/B5D,QAAAA,EACAyD,cAAAA,EACAvG,eAAAA,CAAAA;4BAGF,IAAI2G,aAAAA,GAAgBC,wCAAAA,CAClBJ,wBAAAA,EACA7D,KAAAA,EACA8D,wBAAAA,CAAAA;AAGF,4BAAA,IAAI9D,UAAU,IAAA,EAAM;AAClB2C,gCAAAA,uBAAAA,CAAwBqB,aAAAA,EAAe,EAAE,EAAE7D,QAAAA,EAAUyD,cAAAA,EAAgBvG,eAAAA,CAAAA;AACvE,4BAAA;AAEA,4BAAA,IAAI2C,KAAAA,KAAU,KAAA,IAASgE,aAAAA,CAAc3D,UAAU,KAAKgC,SAAAA,EAAW;;AAE7D,gCAAA,MAAM6B,iBAAAA,GAAoBC,yBAAAA,CAAaH,aAAAA,CAAc3D,UAAU,EAAE,KAAA,CAAA;gCAEjE2D,aAAAA,GAAgB;AAAE,oCAAA,GAAGA,aAAa;oCAAE3D,UAAAA,EAAY6D;AAAkB,iCAAA;AACpE,4BAAA;AAEAZ,4BAAAA,oBAAAA,CAAIG,UAAAA,EAAY;AAAIC,gCAAAA,GAAAA,UAAAA;AAAYE,gCAAAA,cAAAA;AAAgBzD,gCAAAA;6BAAS,EAAE6D,aAAAA,CAAAA;AAC7D,wBAAA;AACF,oBAAA,CAAA,CAAA;AAEA,oBAAA;AACF,gBAAA;YACA,KAAK,6CAAA;AAA+C,gBAAA;oBAClD,MAAM,EAAEnE,oBAAoB,EAAEC,YAAY,EAAEC,OAAO,EAAEC,KAAK,EAAE3C,eAAe,EAAE,GAAG4F,MAAAA;oBAChF,IAAImB,qBAAAA,GAAwBC,0BAAAA,CAAUd,KAAAA,CAAM9F,YAAY,CAAA;oBACxD,MAAM6G,gCAAAA,GAAmCzE,oBAAAA,CAAqB0E,KAAK,CAAC,IAAA,CAAA;AAEpE,oBAAA,MAAMC,WAAAA,GAAcpB,oBAAAA,CAAIgB,qBAAAA,EAAuBE,gCAAAA,EAAkC,EAAC,CAAA;AAElF,oBAAA,MAAMxB,UACJwB,gCAAgC,CAACA,gCAAAA,CAAiCG,MAAM,GAAG,CAAA,CAAE;AAE/E5F,oBAAAA,MAAAA,CAAO4B,IAAI,CAAC+D,WAAAA,CAAAA,CAAab,OAAO,CAAC,CAACxD,QAAAA,GAAAA;wBAChC,IAAIjB,oBAAAA,CAAIsF,WAAW,CAACrE,QAAAA,CAAS,EAAE,CAAC,WAAW,EAAEL,YAAAA,CAAAA,CAAc,CAAA,EAAG;4BAC5D,MAAM4E,QAAAA,GAAWtB,qBAAIoB,WAAAA,EAAa;AAACrE,gCAAAA,QAAAA;AAAU,gCAAA,YAAA;AAAcL,gCAAAA,YAAAA;AAAcC,gCAAAA;AAAQ,6BAAA,CAAA;AACjF,4BAAA,MAAM4E,eAAAA,GAAkB;AACnBL,gCAAAA,GAAAA,gCAAAA;AACHnE,gCAAAA,QAAAA;AACA,gCAAA,YAAA;AACAL,gCAAAA,YAAAA;AACAC,gCAAAA;AACD,6BAAA;4BAED,IAAI,CAACqC,iBAASsC,QAAAA,CAAAA,EAAW;gCACvB,IAAIrH,eAAAA,KAAoBgF,SAAAA,IAAavC,YAAAA,KAAiB,QAAA,EAAU;AAC9D,oCAAA,MAAM8E,aAAAA,GAAgBvH,eAAAA,CAAgB0B,IAAI,CAAC,CAACO,IAAAA,GAAAA;wCAC1C,IAAIA,IAAAA,CAAK2D,MAAM,KAAK9C,QAAAA,IAAYb,KAAKwD,OAAO,KAAKA,SAAS,OAAO,KAAA;wCAEjE,MAAM+B,MAAAA,GAASvF,IAAAA,CAAKwF,UAAU,EAAED,MAAAA;AAChC,wCAAA,IAAIA,MAAAA,KAAW,IAAA,IAAQA,MAAAA,KAAWxC,SAAAA,EAAW,OAAO,IAAA;wCACpD,IAAI0C,KAAAA,CAAMC,OAAO,CAACH,MAAAA,CAAAA,IAAWA,OAAOJ,MAAM,KAAK,GAAG,OAAO,KAAA;AAEzD,wCAAA,OACEM,MAAMC,OAAO,CAACH,MAAAA,CAAAA,IACdA,MAAAA,CAAO9F,IAAI,CAAC,CAACkG,CAAAA,GAAMlF,OAAAA,KAAYkF,KAAKlF,OAAAA,CAAQmF,UAAU,CAAC,CAAA,EAAGD,CAAAA,CAAE,CAAC,CAAC,CAAA,CAAA;AAElE,oCAAA,CAAA,CAAA;AAEA,oCAAA,IAAIL,kBAAkB,IAAA,EAAM;AAC1BtB,wCAAAA,oBAAAA,CAAIc,uBAAuBO,eAAAA,EAAiB3E,KAAAA,CAAAA;AAC5C,wCAAA,IAAIA,UAAU,IAAA,EAAM;AAClB2C,4CAAAA,uBAAAA,CACEyB,qBAAAA,EACA;AAAIE,gDAAAA,GAAAA,gCAAAA;AAAkCnE,gDAAAA;AAAS,6CAAA,EAC/CA,UACA2C,OAAAA,EACAzF,eAAAA,CAAAA;AAEJ,wCAAA;AACF,oCAAA;gCACF,CAAA,MAAO;AACLiG,oCAAAA,oBAAAA,CAAIc,uBAAuBO,eAAAA,EAAiB3E,KAAAA,CAAAA;oCAC5C,IAAIA,KAAAA,KAAU,IAAA,IAAQ3C,eAAAA,KAAoBgF,SAAAA,EAAW;AACnDM,wCAAAA,uBAAAA,CACEyB,qBAAAA,EACA;AAAIE,4CAAAA,GAAAA,gCAAAA;AAAkCnE,4CAAAA;AAAS,yCAAA,EAC/CA,UACA2C,OAAAA,EACAzF,eAAAA,CAAAA;AAEJ,oCAAA;AACF,gCAAA;4BACF,CAAA,MAAO;AACL,gCAAA,MAAM8H,iBAAAA,GACJ9H,eAAAA,KAAoBgF,SAAAA,IAAavC,YAAAA,KAAiB,WAC9C,CAACsF,IAAAA,GAAAA;AACC,oCAAA,MAAMC,aAAAA,GAAgB;AAACtF,wCAAAA,OAAAA;AAAYqF,wCAAAA,GAAAA;AAAK,qCAAA,CAACE,IAAI,CAAC,GAAA,CAAA;oCAC9C,MAAMC,OAAAA,GAAUxB,oDAAAA,CACd5D,QAAAA,EACA2C,OAAAA,EACAzF,eAAAA,CAAAA;oCAEF,OAAOkI,OAAAA,KAAYlD,SAAAA,GACf,IAAA,GACAkD,OAAAA,CAAQ;AAAC,wCAAA,YAAA;AAAc,wCAAA,QAAA;AAAUF,wCAAAA;AAAc,qCAAA,CAAA;gCACrD,CAAA,GACAhD,SAAAA;gCAEN,MAAMmD,YAAAA,GAAevB,wCAAAA,CAA4BS,QAAAA,EAAU1E,KAAAA,EAAOmF,iBAAAA,CAAAA;AAElE7B,gCAAAA,oBAAAA,CAAIc,uBAAuBO,eAAAA,EAAiBa,YAAAA,CAAAA;gCAC5C,IAAIxF,KAAAA,KAAU,IAAA,IAAQ3C,eAAAA,KAAoBgF,SAAAA,EAAW;AACnDM,oCAAAA,uBAAAA,CACEyB,qBAAAA,EACA;AAAIE,wCAAAA,GAAAA,gCAAAA;AAAkCnE,wCAAAA;AAAS,qCAAA,EAC/CA,UACA2C,OAAAA,EACAzF,eAAAA,CAAAA;AAEJ,gCAAA;AACF,4BAAA;AACF,wBAAA;AACF,oBAAA,CAAA,CAAA;AAEA,oBAAA,IAAI2C,UAAU,KAAA,EAAO;;AAEnBoE,wBAAAA,qBAAAA,GAAwBqB,+CAAAA,CAAwBrB,qBAAAA,CAAAA;AAClD,oBAAA;AAEAd,oBAAAA,oBAAAA,CAAIG,YAAY,cAAA,EAAgBW,qBAAAA,CAAAA;AAEhC,oBAAA;AACF,gBAAA;YACA,KAAK,sBAAA;AAAwB,gBAAA;;oBAE3B,IAAInB,MAAAA,CAAO5F,eAAe,KAAKgF,SAAAA,EAAW;AACxC,wBAAA;AACF,oBAAA;AAEAxD,oBAAAA,MAAAA,CAAO6G,OAAO,CAACzC,MAAAA,CAAO5C,UAAU,CAAA,CAAEsD,OAAO,CAAC,CAACgC,KAAAA,GAAAA;wBACzC,MAAM,CAACC,gBAAAA,EAAkBC,kBAAAA,CAAmB,GAAGF,KAAAA;AAE/CrC,wBAAAA,oBAAAA,CACEG,UAAAA,EACA;AAAC,4BAAA,cAAA;AAAmBmC,4BAAAA,GAAAA,gBAAAA,CAAiBrB,KAAK,CAAC,IAAA,CAAA;AAAO,4BAAA;yBAAa,EAC/DsB,kBAAAA,CAAAA;AAEJ,oBAAA,CAAA,CAAA;AAEA,oBAAA;AACF,gBAAA;YACA,KAAK,2BAAA;AAA6B,gBAAA;oBAChC,IAAIzB,qBAAAA,GAAwBC,0BAAAA,CAAUd,KAAAA,CAAM9F,YAAY,CAAA;AAExD,oBAAA,MAAMqI,SAAAA,GAAY7C,MAAAA,CAAOxC,IAAI,CAAC8D,KAAK,CAAC,IAAA,CAAA;AACpCjB,oBAAAA,oBAAAA,CAAIc,qBAAAA,EAAuB;AAAI0B,wBAAAA,GAAAA;AAAU,qBAAA,EAAE7C,OAAOjD,KAAK,CAAA;;AAGvD,oBAAA,IAAIiD,OAAOjD,KAAK,KAAK,QAAQiD,MAAAA,CAAO5F,eAAe,KAAKgF,SAAAA,EAAW;wBACjE,MAAM0D,eAAAA,GAAkBD,SAAAA,CAAUE,OAAO,CAAC,YAAA,CAAA;AAE1C,wBAAA,IAAID,kBAAkB,CAAA,EAAG;AACvB,4BAAA,MAAM5F,QAAAA,GAAW2F,SAAS,CAACC,eAAAA,GAAkB,CAAA,CAAE;4BAC/C,MAAME,IAAAA,GAAOH,SAAS,CAAC,CAAA,CAAE;4BAEzB,IAAKG,CAAAA,IAAAA,KAAS,iBAAA,IAAqBA,IAAAA,KAAS,aAAY,KAAMH,SAAAA,CAAUrB,MAAM,IAAI,CAAA,EAAG;gCACnF,MAAM3B,OAAAA,GAAUgD,SAAS,CAAC,CAAA,CAAE;AAC5BnD,gCAAAA,uBAAAA,CACEyB,qBAAAA,EACA;AAAC6B,oCAAAA,IAAAA;AAAMnD,oCAAAA,OAAAA;AAAS3C,oCAAAA;iCAAS,EACzBA,QAAAA,EACA2C,OAAAA,EACAG,MAAAA,CAAO5F,eAAe,CAAA;4BAE1B,CAAA,MAAO;AACL,gCAAA,MAAMwF,kBAAAA,GAAqBiD,SAAAA,CAAUI,KAAK,CAAC,CAAA,EAAGH,eAAAA,CAAAA;AAC9CpD,gCAAAA,uBAAAA,CACEyB,qBAAAA,EACAvB,kBAAAA,EACA1C,QAAAA,EACA,IAAA,EACA8C,OAAO5F,eAAe,CAAA;AAE1B,4BAAA;AACF,wBAAA;AACF,oBAAA;oBAEA,IAAI4F,MAAAA,CAAOjD,KAAK,KAAK,KAAA,EAAO;;AAE1BoE,wBAAAA,qBAAAA,GAAwBqB,+CAAAA,CAAwBrB,qBAAAA,CAAAA;AAClD,oBAAA;AAEAd,oBAAAA,oBAAAA,CAAIG,YAAY,cAAA,EAAgBW,qBAAAA,CAAAA;AAEhC,oBAAA;AACF,gBAAA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCC,UACD,KAAK,kCAAA;AAAoC,gBAAA;AACvC,oBAAA,MAAM,EAAE3D,IAAI,EAAET,KAAK,EAAE3C,eAAe,EAAE,GAAG4F,MAAAA;oBACzC,MAAMkD,WAAAA,GAAc1F,IAAAA,CAAK8D,KAAK,CAAC,IAAA,CAAA;oBAC/B,IAAIH,qBAAAA,GAAwBC,0BAAAA,CAAUd,KAAAA,CAAM9F,YAAY,CAAA;AACxD,oBAAA,MAAM2I,SAAAA,GAAYhD,oBAAAA,CAAIgB,qBAAAA,EAAuB+B,WAAAA,EAAa,EAAC,CAAA;oBAE3D,MAAMF,IAAAA,GAAOE,WAAW,CAAC,CAAA,CAAE;;;;oBAI3B,MAAME,iBAAAA,GAAoBJ,IAAAA,KAAS,SAAA,IAAaA,IAAAA,KAAS,UAAA;oBAEzD,IAAI9F,QAAAA;oBACJ,IAAI2C,OAAAA;AAEJ,oBAAA,IAAIuD,iBAAAA,EAAmB;wBACrBvD,OAAAA,GAAU,IAAA;oBACZ,CAAA,MAAO;wBACL,IAAIqD,WAAAA,CAAY1B,MAAM,IAAI,CAAA,EAAG;4BAC3B3B,OAAAA,GAAUqD,WAAW,CAAC,CAAA,CAAE;AAC1B,wBAAA;wBAEA,IAAIA,WAAAA,CAAY1B,MAAM,IAAI,CAAA,EAAG;4BAC3BtE,QAAAA,GAAWgG,WAAW,CAAC,CAAA,CAAE;AAC3B,wBAAA;AACF,oBAAA;oBAEA,MAAMhB,iBAAAA,GAAoBmB,4DAAAA,CACxBxD,OAAAA,EACA3C,QAAAA,EACA9C,eAAAA,CAAAA;oBAGF,MAAM2G,aAAAA,GAAgBC,wCAAAA,CAA4BmC,SAAAA,EAAWpG,KAAAA,EAAOmF,iBAAAA,CAAAA;;oBAGpE,IAAInF,KAAAA,KAAU,IAAA,IAAQ3C,eAAAA,KAAoBgF,SAAAA,EAAW;AACnD,wBAAA,MAAMkE,mBACJN,IAAAA,KAAS,iBAAA,IAAqBA,IAAAA,KAAS,aAAA,GAAiBnD,WAAW,IAAA,GAAQ,IAAA;wBAE7E,IAAI3C,QAAAA,KAAakC,SAAAA,IAAakE,gBAAAA,KAAqB,IAAA,EAAM;AACvD5D,4BAAAA,uBAAAA,CAAwBqB,aAAAA,EAAe,EAAE,EAAE7D,QAAAA,EAAUoG,gBAAAA,EAAkBlJ,eAAAA,CAAAA;wBACzE,CAAA,MAAO,IAAI+E,iBAAS4B,aAAAA,CAAAA,EAAgB;AAClC,4BAAA,MAAMwC,gBAAAA,GAAmBxC,aAAAA;AAEzBnF,4BAAAA,MAAAA,CAAO4B,IAAI,CAAC+F,gBAAAA,CAAAA,CAAkB7C,OAAO,CAAC,CAACjB,GAAAA,GAAAA;gCACrC,MAAM+D,cAAAA,GAAiBD,gBAAgB,CAAC9D,GAAAA,CAAI;AAC5C,gCAAA,IAAIN,iBAASqE,cAAAA,CAAAA,EAAiB;AAC5B9D,oCAAAA,uBAAAA,CAAwB8D,cAAAA,EAAgB,EAAE,EAAE/D,GAAAA,EAAK6D,gBAAAA,EAAkBlJ,eAAAA,CAAAA;AACrE,gCAAA;AACF,4BAAA,CAAA,CAAA;AACF,wBAAA;AACF,oBAAA;AAEAiG,oBAAAA,oBAAAA,CAAIc,uBAAuB+B,WAAAA,EAAanC,aAAAA,CAAAA;AAExC,oBAAA,IAAIhE,UAAU,KAAA,EAAO;;AAEnBoE,wBAAAA,qBAAAA,GAAwBqB,+CAAAA,CAAwBrB,qBAAAA,CAAAA;AAClD,oBAAA;AAEAd,oBAAAA,oBAAAA,CAAIG,UAAAA,EAAY;AAAC,wBAAA;qBAAe,EAAEW,qBAAAA,CAAAA;AAElC,oBAAA;AACF,gBAAA;YACA,KAAK,YAAA;AAAc,gBAAA;oBACjBX,UAAAA,CAAWhG,YAAY,GAAG8F,KAAAA,CAAMhG,WAAW;AAC3C,oBAAA;AACF,gBAAA;YACA,KAAK,uBAAA;AAAyB,gBAAA;oBAC5BkG,UAAAA,CAAWlG,WAAW,GAAGgG,KAAAA,CAAM9F,YAAY;AAC3C,oBAAA;AACF,gBAAA;AACA,YAAA;gBACE,OAAOgG,UAAAA;AACX;AACF,IAAA,CAAA,CAAA;AAUF,MAAMlE,6BAAAA,GAAgC,CACpCD,IAAAA,EACAoH,mBAAAA,EACAnJ,WAAAA,EACAE,YAAAA,GAAAA;AAEA,IAAA,IAAI,CAAC6B,IAAAA,CAAKwD,OAAO,EAAE,OAAOxD,IAAAA;AAE1B,IAAA,MAAMqH,WAAWD,mBAAAA,CAAoB1D,IAAI,CACvC,CAAC4D,IAAMA,CAAAA,CAAE3D,MAAM,KAAK3D,IAAAA,CAAK2D,MAAM,IAAI2D,CAAAA,CAAE9D,OAAO,KAAKxD,KAAKwD,OAAO,CAAA;;AAI/D,IAAA,IAAI6D,QAAAA,EAAU7B,UAAAA,EAAY+B,OAAAA,KAAY,IAAA,EAAM,OAAOvH,IAAAA;AAEnD,IAAA,MAAMuC,IAAAA,GACJvC,IAAAA,CAAKwD,OAAO,IAAIrF,aAAac,eAAe,GACvC,iBAAA,GACDe,IAAAA,CAAKwD,OAAO,IAAIrF,YAAAA,CAAagB,WAAW,GACrC,aAAA,GACD,IAAA;IACR,IAAI,CAACoD,MAAM,OAAOvC,IAAAA;AAElB,IAAA,MAAMwH,iBAAAA,GAAoBvJ,WAAW,CAACsE,IAAAA,CAAK,GAAGvC,IAAAA,CAAKwD,OAAO,CAAC,GAAGxD,IAAAA,CAAK2D,MAAM,CAAC;AAC1E,IAAA,MAAM8D,kBAAAA,GAAqBtJ,YAAY,CAACoE,IAAAA,CAAK,GAAGvC,IAAAA,CAAKwD,OAAO,CAAC,GAAGxD,IAAAA,CAAK2D,MAAM,CAAC;AAE5E,IAAA,IAAI,CAAC6D,iBAAAA,IAAqB,CAACC,kBAAAA,EAAoB,OAAOzH,IAAAA;AAEtD,IAAA,MAAM0H,qBAAqB,iBAACF,CAAkBhC,UAAgC,CAAC,SAAA,CAAU;AACzF,IAAA,MAAMmC,sBAAsB,kBAACF,CAAmBjC,UAAgC,CAAC,SAAA,CAAU;IAE3F,IACE,CAACkC,sBACD,OAAOA,kBAAAA,KAAuB,aAC9B,CAACC,mBAAAA,IACD,OAAOA,mBAAAA,KAAwB,SAAA,EAC/B;QACA,OAAO3H,IAAAA;AACT,IAAA;IAEA,MAAM4H,gBAAAA,GACJrI,MAAAA,CAAO4B,IAAI,CAACuG,kBAAAA,CAAAA,CAAoBvC,MAAM,KAAK5F,MAAAA,CAAO4B,IAAI,CAACwG,mBAAAA,CAAAA,CAAqBxC,MAAM,IAClF5F,MAAAA,CAAO6G,OAAO,CAACsB,kBAAAA,CAAAA,CAAoBG,KAAK,CACtC,CAAC,CAACC,MAAAA,EAAQC,GAAAA,CAAI,GAAKJ,mBAAmB,CAACG,MAAAA,CAAO,KAAKC,GAAAA,CAAAA;IAGvD,IAAI,CAACH,kBAAkB,OAAO5H,IAAAA;IAE9B,OAAO;AAAE,QAAA,GAAGA,IAAI;QAAEwF,UAAAA,EAAY;AAAE,YAAA,GAAGxF,KAAKwF,UAAU;YAAE+B,OAAAA,EAAS;AAAK;AAAE,KAAA;AACtE,CAAA;AAEA;;qGAIA,MAAM/I,IAAAA,GAAO,CACXb,MAAAA,EACAG,WAAAA,GAAAA;AAEA,IAAA,MAAM,EACJiD,UAAU,EACViH,QAAAA,EAAU,EAAE/I,eAAe,EAAEE,WAAW,EAAEsD,OAAO,EAAEC,QAAQ,EAAE,EAC9D,GAAG/E,MAAAA;AAEJ,IAAA,MAAMO,SAAAA,GAAU;AACde,QAAAA,eAAAA;AACAE,QAAAA,WAAAA;AACAsD,QAAAA,OAAAA,EAASwF,qBAAaxF,OAAAA,EAAS,QAAA,CAAA;AAC/BC,QAAAA,QAAAA,EAAUuF,qBAAavF,QAAAA,EAAU,UAAA;AACnC,KAAA;AAEA,IAAA,MAAMwF,WAAAA,GAAc;QAClBjJ,eAAAA,EAAiBkJ,yBAAAA,CAAoBlJ,iBAAiB8B,UAAAA,EAAYjD,WAAAA,CAAAA;QAClEqB,WAAAA,EAAagJ,yBAAAA,CAAoBhJ,aAAa4B,UAAAA,EAAYjD,WAAAA,CAAAA;AAC1D2E,QAAAA,OAAAA,EAAS2F,uBAAAA,CAAkBlK,SAAAA,CAAQuE,OAAO,EAAE1B,UAAAA,EAAYjD,WAAAA,CAAAA;AACxD4E,QAAAA,QAAAA,EAAU0F,uBAAAA,CAAkBlK,SAAAA,CAAQwE,QAAQ,EAAE3B,UAAAA,EAAYjD,WAAAA;AAC5D,KAAA;IAEA,OAAO;QACLG,WAAAA,EAAaiK,WAAAA;QACb/J,YAAAA,EAAc+J,WAAAA;AACdhK,iBAAAA;AACF,KAAA;AACF,CAAA;;;;"}
|
|
@@ -441,9 +441,7 @@ const inheritConditionsAtPath = (data, pathToActionObject, actionId, subject, us
|
|
|
441
441
|
*/ case 'ON_CHANGE_TOGGLE_PARENT_CHECKBOX':
|
|
442
442
|
{
|
|
443
443
|
const { keys, value, userPermissions } = action;
|
|
444
|
-
const pathToValue =
|
|
445
|
-
...keys.split('..')
|
|
446
|
-
];
|
|
444
|
+
const pathToValue = keys.split('..');
|
|
447
445
|
let nextModifiedDataState = cloneDeep(state.modifiedData);
|
|
448
446
|
const oldValues = get(nextModifiedDataState, pathToValue, {});
|
|
449
447
|
const root = pathToValue[0];
|