user_groups: Add helper functions to get options for group-based setting.

This commit adds get_realm_user_groups_for_dropdown_list_widget function
which returns the list of objects containing the display name and id
of system user groups and adds tests for this function.
This commit is contained in:
Sahil Batra
2023-01-09 16:34:10 +05:30
committed by Tim Abbott
parent 73a378d23f
commit 37964b1ccc
3 changed files with 185 additions and 0 deletions

View File

@@ -801,3 +801,34 @@ export const desktop_icon_count_display_values = {
description: $t({defaultMessage: "None"}),
},
};
export const system_user_groups_list = [
{
name: "@role:internet",
display_name: $t({defaultMessage: "Everyone on the internet"}),
},
{
name: "@role:everyone",
display_name: $t({defaultMessage: "Admins, moderators, members and guests"}),
},
{
name: "@role:members",
display_name: $t({defaultMessage: "Admins, moderators and members"}),
},
{
name: "@role:fullmembers",
display_name: $t({defaultMessage: "Admins, moderators and full members"}),
},
{
name: "@role:moderators",
display_name: $t({defaultMessage: "Admins and moderators"}),
},
{
name: "@role:administrators",
display_name: $t({defaultMessage: "Admins"}),
},
{
name: "@role:owners",
display_name: $t({defaultMessage: "Owners"}),
},
];

View File

@@ -1,5 +1,6 @@
import * as blueslip from "./blueslip";
import {FoldDict} from "./fold_dict";
import * as settings_config from "./settings_config";
import type {User, UserGroupUpdateEvent} from "./types";
type UserGroup = {
@@ -15,6 +16,11 @@ type UserGroup = {
// to a Set in the initialize function.
type UserGroupRaw = Omit<UserGroup, "members"> & {members: number[]};
type UserGroupForDropdownListWidget = {
name: string;
value: string;
};
let user_group_name_dict: FoldDict<UserGroup>;
let user_group_by_id_dict: Map<number, UserGroup>;
@@ -195,3 +201,31 @@ export function is_user_in_group(user_group_id: number, user_id: number): boolea
}
return false;
}
export function get_realm_user_groups_for_dropdown_list_widget(
exclude_internet_group: boolean,
exclude_owners_group: boolean,
): UserGroupForDropdownListWidget[] {
return settings_config.system_user_groups_list
.filter((group) => {
if (exclude_internet_group && group.name === "@role:internet") {
return false;
}
if (exclude_owners_group && group.name === "@role:owners") {
return false;
}
return true;
})
.map((group) => {
const user_group = get_user_group_from_name(group.name);
if (!user_group) {
throw new Error(`Unknown group name: ${group.name}`);
}
return {
name: group.display_name,
value: user_group.id.toString(),
};
});
}