diff --git a/packages/web/src/components/PermissionCatalogField/ActionField.jsx b/packages/web/src/components/PermissionCatalogField/ActionField.jsx index 43d86de8..3bf2dde6 100644 --- a/packages/web/src/components/PermissionCatalogField/ActionField.jsx +++ b/packages/web/src/components/PermissionCatalogField/ActionField.jsx @@ -1,46 +1,37 @@ -import React, { useEffect, useRef } from 'react'; +import React from 'react'; import { useFormContext } from 'react-hook-form'; -import { Typography } from '@mui/material'; import PropTypes from 'prop-types'; import ControlledCheckbox from 'components/ControlledCheckbox'; const ActionField = ({ action, subject, disabled, name, syncIsCreator }) => { - const { watch, formState, resetField } = useFormContext(); - - const actionFieldName = `${name}.${subject.key}.${action.key}.value`; - const actionFieldValue = watch(actionFieldName); + const { formState, resetField } = useFormContext(); + const actionDefaultValue = + formState.defaultValues?.[name]?.[subject.key]?.[action.key].value; const conditionFieldName = `${name}.${subject.key}.${action.key}.conditions.isCreator`; const conditionFieldTouched = formState.touchedFields?.[name]?.[subject.key]?.[action.key]?.conditions ?.isCreator === true; - const defaultActionFieldValueRef = useRef(actionFieldValue); - - useEffect(() => { - if (defaultActionFieldValueRef?.current === undefined) { - defaultActionFieldValueRef.current = actionFieldValue; - } else if ( + const handleSyncIsCreator = (newValue) => { + if ( syncIsCreator && - defaultActionFieldValueRef?.current === false && + actionDefaultValue === false && !conditionFieldTouched ) { - resetField(conditionFieldName, { defaultValue: actionFieldValue }); + resetField(conditionFieldName, { defaultValue: newValue }); } - }, [actionFieldValue, syncIsCreator]); + }; return ( - - {action.subjects.includes(subject.key) && ( - - )} - - {!action.subjects.includes(subject.key) && '-'} - + { + handleSyncIsCreator(value); + }} + /> ); }; diff --git a/packages/web/src/components/PermissionCatalogField/index.ee.jsx b/packages/web/src/components/PermissionCatalogField/index.ee.jsx index 3846ada5..5f2bf909 100644 --- a/packages/web/src/components/PermissionCatalogField/index.ee.jsx +++ b/packages/web/src/components/PermissionCatalogField/index.ee.jsx @@ -70,13 +70,18 @@ const PermissionCatalogField = ({ {permissionCatalog?.actions.map((action) => ( - + + {action.subjects.includes(subject.key) && ( + + )} + {!action.subjects.includes(subject.key) && '-'} + ))} diff --git a/packages/web/src/pages/EditRole/index.ee.jsx b/packages/web/src/pages/EditRole/index.ee.jsx index 29e0e584..1ed4881c 100644 --- a/packages/web/src/pages/EditRole/index.ee.jsx +++ b/packages/web/src/pages/EditRole/index.ee.jsx @@ -27,11 +27,12 @@ export default function EditRole() { const formatMessage = useFormatMessage(); const navigate = useNavigate(); const { roleId } = useParams(); - const { data, isLoading: isRoleLoading } = useRole({ roleId }); + const { data: roleData, isLoading: isRoleLoading } = useRole({ roleId }); const { mutateAsync: updateRole, isPending: isUpdateRolePending } = useAdminUpdateRole(roleId); const { data: permissionCatalogData } = usePermissionCatalog(); - const role = data?.data; + const role = roleData?.data; + const permissionCatalog = permissionCatalogData?.data; const enqueueSnackbar = useEnqueueSnackbar(); const handleRoleUpdate = async (roleData) => { @@ -56,24 +57,20 @@ export default function EditRole() { } }; - const roleWithComputedPermissions = getRoleWithComputedPermissions(role); + const defaultValues = React.useMemo(() => { + const roleWithComputedPermissions = getRoleWithComputedPermissions(role); + const computedPermissionsDefaultValues = + getComputedPermissionsDefaultValues(permissionCatalog); - const computedPermissionsDefaultValues = React.useMemo( - () => getComputedPermissionsDefaultValues(permissionCatalogData?.data), - [permissionCatalogData], - ); - - const defaultValues = React.useMemo( - () => ({ + return { ...roleWithComputedPermissions, computedPermissions: merge( {}, computedPermissionsDefaultValues, roleWithComputedPermissions.computedPermissions, ), - }), - [roleWithComputedPermissions, computedPermissionsDefaultValues], - ); + }; + }, [role, permissionCatalog]); return ( @@ -113,13 +110,11 @@ export default function EditRole() { /> )} - -