setting: Divide user_invite_restriction into a checkbox and dropdown.

This commit divides the user_invite_restriction setting dropdown to
a checkbox and a dropdown.
The checkbox is used for 'realm_invite_required' setting and dropdown
for 'realm_invite_to_realm_policy'.

This separation of UI elements is fine as these two settings are
separate in database also and also helps in removing excess if-else
conditions and switch cases.
This commit is contained in:
sahil839
2021-05-24 01:10:20 +05:30
committed by Tim Abbott
parent 8846df6b53
commit d8c4b96b12
5 changed files with 23 additions and 104 deletions

View File

@@ -181,6 +181,7 @@ function test_submit_settings_form(override, submit_form) {
realm_default_twenty_four_hour_time: false,
realm_invite_to_stream_policy: settings_config.common_policy_values.by_admins_only.code,
realm_create_stream_policy: settings_config.common_policy_values.by_members.code,
realm_invite_to_realm_policy: settings_config.common_policy_values.by_members.code,
});
override(global, "setTimeout", (func) => func());
@@ -231,6 +232,11 @@ function test_submit_settings_form(override, submit_form) {
email_address_visibility_elem.attr("id", "id_realm_email_address_visibility");
email_address_visibility_elem.data = () => "number";
const invite_to_realm_policy_elem = $("#id_realm_invite_to_realm_policy");
invite_to_realm_policy_elem.val("2");
invite_to_realm_policy_elem.attr("id", "id_realm_invite_to_realm_policy");
invite_to_realm_policy_elem.data = () => "number";
let subsection_elem = $(`#org-${CSS.escape(subsection)}`);
subsection_elem.closest = () => subsection_elem;
subsection_elem.set_find_results(".prop-element", [
@@ -470,6 +476,7 @@ function test_sync_realm_settings() {
test_common_policy("create_stream_policy");
test_common_policy("invite_to_stream_policy");
test_common_policy("invite_to_realm_policy");
{
/* Test message content edit limit minutes sync */

View File

@@ -43,6 +43,9 @@ const admin_settings_label = {
defaultMessage: "Prevent users from changing their email address",
}),
realm_avatar_changes_disabled: $t({defaultMessage: "Prevent users from changing their avatar"}),
realm_invite_required: $t({
defaultMessage: "Invitations are required for joining this organization",
}),
};
function insert_tip_box() {
@@ -122,6 +125,7 @@ export function build_page() {
bot_creation_policy_values: settings_bots.bot_creation_policy_values,
email_address_visibility_values: settings_config.email_address_visibility_values,
can_invite_others_to_realm: settings_data.user_can_invite_others_to_realm(),
realm_invite_required: page_params.realm_invite_required,
...settings_org.get_organization_settings_options(),
};

View File

@@ -180,49 +180,6 @@ function get_property_value(property_name) {
return "no_restriction";
}
if (property_name === "realm_user_invite_restriction") {
if (!page_params.realm_invite_required) {
if (
page_params.realm_invite_to_realm_policy ===
settings_config.common_policy_values.by_admins_only.code
) {
return "no_invite_required_by_admins_only";
}
if (
page_params.realm_invite_to_realm_policy ===
settings_config.common_policy_values.by_moderators_only.code
) {
return "no_invite_required_by_moderators_only";
}
if (
page_params.realm_invite_to_realm_policy ===
settings_config.common_policy_values.by_full_members.code
) {
return "no_invite_required_by_full_members";
}
return "no_invite_required";
}
if (
page_params.realm_invite_to_realm_policy ===
settings_config.common_policy_values.by_admins_only.code
) {
return "by_admins_only";
}
if (
page_params.realm_invite_to_realm_policy ===
settings_config.common_policy_values.by_moderators_only.code
) {
return "by_moderators_only";
}
if (
page_params.realm_invite_to_realm_policy ===
settings_config.common_policy_values.by_full_members.code
) {
return "by_full_members";
}
return "by_anyone";
}
if (property_name === "realm_default_twenty_four_hour_time") {
return JSON.stringify(page_params[property_name]);
}
@@ -245,7 +202,7 @@ const simple_dropdown_properties = [
"realm_user_group_edit_policy",
"realm_private_message_policy",
"realm_add_emoji_by_admins_only",
"realm_user_invite_restriction",
"realm_invite_to_realm_policy",
"realm_wildcard_mention_policy",
"realm_move_messages_between_streams_policy",
];
@@ -502,10 +459,6 @@ export function sync_realm_settings(property) {
case "allow_message_deleting":
property = "msg_delete_limit_setting";
break;
case "invite_required":
case "invite_to_realm_policy":
property = "user_invite_restriction";
break;
}
const element = $(`#id_realm_${CSS.escape(property)}`);
if (element.length) {
@@ -896,49 +849,6 @@ export function build_page() {
break;
}
const user_invite_restriction = $("#id_realm_user_invite_restriction").val();
switch (user_invite_restriction) {
case "no_invite_required":
data.invite_required = false;
data.invite_to_realm_policy =
settings_config.common_policy_values.by_members.code;
break;
case "no_invite_required_by_admins_only":
data.invite_required = false;
data.invite_to_realm_policy =
settings_config.common_policy_values.by_admins_only.code;
break;
case "no_invite_required_by_moderators_only":
data.invite_required = false;
data.invite_to_realm_policy =
settings_config.common_policy_values.by_moderators_only.code;
break;
case "no_invite_required_by_full_members":
data.invite_required = false;
data.invite_to_realm_policy =
settings_config.common_policy_values.by_full_members.code;
break;
case "by_admins_only":
data.invite_required = true;
data.invite_to_realm_policy =
settings_config.common_policy_values.by_admins_only.code;
break;
case "by_moderators_only":
data.invite_required = true;
data.invite_to_realm_policy =
settings_config.common_policy_values.by_moderators_only.code;
break;
case "by_full_members":
data.invite_required = true;
data.invite_to_realm_policy =
settings_config.common_policy_values.by_full_members.code;
break;
default:
data.invite_required = true;
data.invite_to_realm_policy =
settings_config.common_policy_values.by_members.code;
}
const waiting_period_threshold = $("#id_realm_waiting_period_setting").val();
switch (waiting_period_threshold) {
case "none":

View File

@@ -1589,14 +1589,14 @@ body:not(.night-mode) #settings_page .custom_user_field .datepicker {
#id_realm_user_group_edit_policy,
#id_realm_email_address_visibility,
#id_realm_wildcard_mention_policy,
#id_realm_move_messages_between_streams_policy {
#id_realm_move_messages_between_streams_policy,
#id_realm_invite_to_realm_policy {
width: 250px;
}
#id_realm_bot_creation_policy,
#id_realm_giphy_rating,
#id_realm_org_join_restrictions,
#id_realm_user_invite_restriction {
#id_realm_org_join_restrictions {
width: 100%;
}

View File

@@ -8,17 +8,15 @@
</div>
<div class="m-10 inline-block organization-permissions-parent">
<div class="input-group">
<label for="realm_user_invite_restriction" class="dropdown-title">{{t "Are invitations required for joining the organization?" }}</label>
<select name="realm_user_invite_restriction" id="id_realm_user_invite_restriction" class="prop-element">
<option value="no_invite_required">{{t "No. Members and admins can send invitations." }}</option>
<option value="no_invite_required_by_full_members">{{t "No. Only full members and admins can send invitations." }}</option>
<option value="no_invite_required_by_moderators_only">{{t "No. Only moderators and admins can send invitations." }}</option>
<option value="no_invite_required_by_admins_only">{{t "No. Only admins can send invitations." }}</option>
<option value="by_anyone">{{t "Yes. Members and admins can send invitations." }}</option>
<option value="by_full_members">{{t "Yes. Only full members and admins can send invitations."}}</option>
<option value="by_moderators_only">{{t "Yes. Only moderators and admins can send invitations." }}</option>
<option value="by_admins_only">{{t "Yes. Only admins can send invitations." }}</option>
<label for="realm_invite_to_realm_policy" class="dropdown-title">{{t "Who can invite users to this organization" }}</label>
<select name="realm_invite_to_realm_policy" id="id_realm_invite_to_realm_policy" class="prop-element" data-setting-widget-type="number">
{{> dropdown_options_widget option_values=common_policy_values}}
</select>
{{> settings_checkbox
setting_name="realm_invite_required"
prefix="id_"
is_checked=realm_invite_required
label=admin_settings_label.realm_invite_required}}
</div>
<div class="input-group">