diff --git a/tools/test-js-with-node b/tools/test-js-with-node index cb627d2301..89f9e5663a 100755 --- a/tools/test-js-with-node +++ b/tools/test-js-with-node @@ -111,6 +111,7 @@ EXEMPT_FILES = make_set( "web/src/giphy.ts", "web/src/giphy_state.ts", "web/src/global.ts", + "web/src/group_permission_settings.ts", "web/src/group_setting_pill.ts", "web/src/hash_util.ts", "web/src/hashchange.ts", diff --git a/web/src/group_permission_settings.ts b/web/src/group_permission_settings.ts index b311058576..4ba194f849 100644 --- a/web/src/group_permission_settings.ts +++ b/web/src/group_permission_settings.ts @@ -1,3 +1,5 @@ +import {z} from "zod"; + import {realm} from "./state_data.ts"; import type {GroupPermissionSetting} from "./state_data.ts"; @@ -14,3 +16,20 @@ export function get_group_permission_setting_config( } return permission_config_dict; } + +export const group_setting_name_schema = z.enum([ + "can_add_members_group", + "can_join_group", + "can_leave_group", + "can_manage_group", + "can_mention_group", + "can_remove_members_group", +]); + +export type GroupSettingName = z.infer; + +export function get_group_permission_settings(): GroupSettingName[] { + return z + .array(group_setting_name_schema) + .parse(Object.keys(realm.server_supported_permission_settings.group)); +} diff --git a/web/src/settings_components.ts b/web/src/settings_components.ts index e85cb5918a..8084e257e4 100644 --- a/web/src/settings_components.ts +++ b/web/src/settings_components.ts @@ -10,6 +10,7 @@ import * as blueslip from "./blueslip.ts"; import * as compose_banner from "./compose_banner.ts"; import type {DropdownWidget} from "./dropdown_widget.ts"; import * as group_permission_settings from "./group_permission_settings.ts"; +import type {GroupSettingName} from "./group_permission_settings.ts"; import * as group_setting_pill from "./group_setting_pill.ts"; import {$t} from "./i18n.ts"; import { @@ -1559,17 +1560,6 @@ export function set_group_setting_widget_value( } } -export const group_setting_name_schema = z.enum([ - "can_add_members_group", - "can_join_group", - "can_leave_group", - "can_manage_group", - "can_mention_group", - "can_remove_members_group", -]); - -export type GroupSettingName = z.infer; - export function create_group_setting_widget({ $pill_container, setting_name, diff --git a/web/src/user_group_create.ts b/web/src/user_group_create.ts index 68aadfe45a..7c1944ad64 100644 --- a/web/src/user_group_create.ts +++ b/web/src/user_group_create.ts @@ -2,6 +2,7 @@ import $ from "jquery"; import assert from "minimalistic-assert"; import * as channel from "./channel.ts"; +import * as group_permission_settings from "./group_permission_settings.ts"; import {$t, $t_html} from "./i18n.ts"; import * as keydown_util from "./keydown_util.ts"; import * as loading from "./loading.ts"; @@ -262,11 +263,11 @@ export function set_up_handlers(): void { // This will always be enabled when creating a user group. settings_components.enable_opening_typeahead_on_clicking_label($container); - const permission_settings = Object.keys(realm.server_supported_permission_settings.group); + const permission_settings = group_permission_settings.get_group_permission_settings(); for (const setting_name of permission_settings) { const widget = settings_components.create_group_setting_widget({ $pill_container: $(`#id_new_group_${CSS.escape(setting_name)}`), - setting_name: settings_components.group_setting_name_schema.parse(setting_name), + setting_name, }); group_setting_widget_map.set(setting_name, widget); } diff --git a/web/src/user_group_edit.ts b/web/src/user_group_edit.ts index eedf47f644..cfab50e75a 100644 --- a/web/src/user_group_edit.ts +++ b/web/src/user_group_edit.ts @@ -21,6 +21,7 @@ import type {Toggle} from "./components.ts"; import * as compose_banner from "./compose_banner.ts"; import * as confirm_dialog from "./confirm_dialog.ts"; import * as dialog_widget from "./dialog_widget.ts"; +import * as group_permission_settings from "./group_permission_settings.ts"; import * as hash_util from "./hash_util.ts"; import {$t, $t_html} from "./i18n.ts"; import * as ListWidget from "./list_widget.ts"; @@ -29,7 +30,6 @@ import * as overlays from "./overlays.ts"; import * as people from "./people.ts"; import * as scroll_util from "./scroll_util.ts"; import * as settings_components from "./settings_components.ts"; -import {group_setting_name_schema} from "./settings_components.ts"; import * as settings_config from "./settings_config.ts"; import * as settings_data from "./settings_data.ts"; import * as settings_org from "./settings_org.ts"; @@ -193,9 +193,7 @@ function show_membership_settings(group: UserGroup): void { } function show_general_settings(group: UserGroup): void { - const permission_settings = z - .array(group_setting_name_schema) - .parse(Object.keys(realm.server_supported_permission_settings.group)); + const permission_settings = group_permission_settings.get_group_permission_settings(); for (const setting_name of permission_settings) { settings_components.create_group_setting_widget({ $pill_container: $(`#id_${CSS.escape(setting_name)}`),