diff --git a/packages/web/app/src/components/organization/members/permission-selector.tsx b/packages/web/app/src/components/organization/members/permission-selector.tsx index 37f383f00c..74e85294b0 100644 --- a/packages/web/app/src/components/organization/members/permission-selector.tsx +++ b/packages/web/app/src/components/organization/members/permission-selector.tsx @@ -121,113 +121,120 @@ export function PermissionSelector(props: PermissionSelectorProps) { !props.selectedPermissionIds.has(permission.dependsOnId); return ( -
{ - if (ref) { - permissionRefs.current.set(permission.id, ref); - } - }} - > -
-
{permission.title}
-
{permission.description}
-
- {permission.warning && props.selectedPermissionIds.has(permission.id) ? ( -
- - - - - - {permission.warning} - - +
+
{ + if (ref) { + permissionRefs.current.set(permission.id, ref); + } + }} + > +
+
{permission.title}
+
{permission.description}
- ) : ( - !!permission.dependsOnId && - permissionToGroupTitleMapping.has(permission.dependsOnId) && ( + {permission.warning && props.selectedPermissionIds.has(permission.id) ? (
- + - -

- This permission depends on another permission.{' '} - -

-
+ {permission.warning}
- ) - )} - - - - - - Not Selected - Allow - - + onValueChange={value => { + const dependents = dependencyGraph.get(permission.id) ?? []; + if (value === 'allow') { + props.onSelectedPermissionsChange( + new Set([...props.selectedPermissionIds, permission.id]), + ); + } else if (value === 'not-selected') { + const selectedPermissionIds = new Set(props.selectedPermissionIds); + selectedPermissionIds.delete(permission.id); + for (const dependent of dependents) { + selectedPermissionIds.delete(dependent); + } + props.onSelectedPermissionsChange(selectedPermissionIds); + } + setFocusedPermission(null); + }} + > + + + + + Not Selected + Allow + + +
+ {focusedPermission === permission.id && ( +
+ )}
); })}