Corrected a problem related to the permission toggling
This commit is contained in:
@@ -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>
|
||||
))}
|
||||
|
||||
Reference in New Issue
Block a user