user_groups: Extract function to check if group can be used as subgroup.

We would use the same function in further commit to not add pills
for invalid subgroups by typing the full group name.
This commit is contained in:
Sahil Batra
2024-10-25 15:08:36 +05:30
committed by Tim Abbott
parent 5cdd17a7f1
commit 98255677d7

View File

@@ -311,28 +311,35 @@ export function get_recursive_group_members(target_user_group: UserGroup): Set<n
return members;
}
export function get_potential_subgroups(target_user_group_id: number): UserGroup[] {
export function check_group_can_be_subgroup(
subgroup: UserGroup,
target_user_group: UserGroup,
): boolean {
// This logic could be optimized if we maintained a reverse map
// from each group to the groups containing it, which might be a
// useful data structure for other code paths as well.
const target_user_group = get_user_group_from_id(target_user_group_id);
const already_subgroup_ids = target_user_group.direct_subgroup_ids;
return get_all_realm_user_groups().filter((user_group) => {
if (user_group.id === target_user_group.id) {
return false;
}
if (subgroup.id === target_user_group.id) {
return false;
}
if (already_subgroup_ids.has(user_group.id)) {
return false;
}
if (already_subgroup_ids.has(subgroup.id)) {
return false;
}
const recursive_subgroup_ids = get_recursive_subgroups(user_group);
assert(recursive_subgroup_ids !== undefined);
if (recursive_subgroup_ids.has(target_user_group.id)) {
return false;
}
return true;
});
const recursive_subgroup_ids = get_recursive_subgroups(subgroup);
assert(recursive_subgroup_ids !== undefined);
if (recursive_subgroup_ids.has(target_user_group.id)) {
return false;
}
return true;
}
export function get_potential_subgroups(target_user_group_id: number): UserGroup[] {
const target_user_group = get_user_group_from_id(target_user_group_id);
return get_all_realm_user_groups().filter((user_group) =>
check_group_can_be_subgroup(user_group, target_user_group),
);
}
export function get_direct_subgroups_of_group(target_user_group: UserGroup): UserGroup[] {