Corrected a problem related to the permission toggling

This commit is contained in:
Tiago Ribeiro
2024-11-25 09:47:17 +00:00
parent 593d349617
commit 2160a42964
2 changed files with 18 additions and 17 deletions

View File

@@ -203,14 +203,14 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
.finally(() => setIsLoading(false));
}
const disableCheckbox = (permission: RolePermission) => {
if (!canEditPermissions) return false
if (disableEdit) return false
const enableCheckbox = (permission: RolePermission) => {
if (!canEditPermissions || disableEdit) return false
return doesEntityAllow(user, entity, permission)
}
const togglePermissions = (p: RolePermission) => setPermissions(prev => prev.includes(p) ? prev.filter(x => x !== p) : [...prev, p])
const toggleMultiplePermissions = (p: RolePermission[]) =>
setPermissions(prev => [...prev.filter(x => !p.includes(x)), ...(p.every(x => prev.includes(x)) ? [] : p)])
return (
<>
@@ -271,7 +271,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Checkbox
disabled={!canEditPermissions || disableEdit}
isChecked={mapBy(USER_MANAGEMENT, 'key').every(k => permissions.includes(k))}
onChange={() => mapBy(USER_MANAGEMENT, 'key').forEach(togglePermissions)}
onChange={() => toggleMultiplePermissions(mapBy(USER_MANAGEMENT, 'key').filter(enableCheckbox))}
>
Select all
</Checkbox>
@@ -279,7 +279,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Separator />
<div className="grid grid-cols-2 gap-4">
{USER_MANAGEMENT.map(({ label, key }) => (
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
{label}
</Checkbox>
))}
@@ -292,7 +292,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Checkbox
disabled={!canEditPermissions || disableEdit}
isChecked={mapBy(EXAM_MANAGEMENT, 'key').every(k => permissions.includes(k))}
onChange={() => mapBy(EXAM_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)}
onChange={() => toggleMultiplePermissions(mapBy(EXAM_MANAGEMENT, 'key').filter(enableCheckbox))}
>
Select all
</Checkbox>
@@ -300,7 +300,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Separator />
<div className="grid grid-cols-3 gap-4">
{EXAM_MANAGEMENT.map(({ label, key }) => (
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
{label}
</Checkbox>
))}
@@ -313,7 +313,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Checkbox
disabled={!canEditPermissions || disableEdit}
isChecked={mapBy(CLASSROOM_MANAGEMENT, 'key').every(k => permissions.includes(k))}
onChange={() => mapBy(CLASSROOM_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)}
onChange={() => toggleMultiplePermissions(mapBy(CLASSROOM_MANAGEMENT, 'key').filter(enableCheckbox))}
>
Select all
</Checkbox>
@@ -321,7 +321,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Separator />
<div className="grid grid-cols-2 gap-4">
{CLASSROOM_MANAGEMENT.map(({ label, key }) => (
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
{label}
</Checkbox>
))}
@@ -334,7 +334,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Checkbox
disabled={!canEditPermissions || disableEdit}
isChecked={mapBy(ENTITY_MANAGEMENT, 'key').every(k => permissions.includes(k))}
onChange={() => mapBy(ENTITY_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)}
onChange={() => toggleMultiplePermissions(mapBy(ENTITY_MANAGEMENT, 'key').filter(enableCheckbox))}
>
Select all
</Checkbox>
@@ -342,7 +342,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Separator />
<div className="grid grid-cols-2 gap-4">
{ENTITY_MANAGEMENT.map(({ label, key }) => (
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
{label}
</Checkbox>
))}
@@ -355,7 +355,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Checkbox
disabled={!canEditPermissions || disableEdit}
isChecked={mapBy(ASSIGNMENT_MANAGEMENT, 'key').every(k => permissions.includes(k))}
onChange={() => mapBy(ASSIGNMENT_MANAGEMENT, 'key').filter(disableCheckbox).forEach(togglePermissions)}
onChange={() => toggleMultiplePermissions(mapBy(ASSIGNMENT_MANAGEMENT, 'key').filter(enableCheckbox))}
>
Select all
</Checkbox>
@@ -363,7 +363,7 @@ export default function Role({ user, entity, role, userCount, disableEdit }: Pro
<Separator />
<div className="grid grid-cols-2 gap-4">
{ASSIGNMENT_MANAGEMENT.map(({ label, key }) => (
<Checkbox disabled={disableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
<Checkbox disabled={!enableCheckbox(key)} key={key} isChecked={permissions.includes(key)} onChange={() => togglePermissions(key)}>
{label}
</Checkbox>
))}