mirror of
https://github.com/zulip/zulip.git
synced 2025-11-05 22:43:42 +00:00
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:
@@ -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[] {
|
||||
|
||||
Reference in New Issue
Block a user