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_default_twenty_four_hour_time: false,
realm_invite_to_stream_policy: settings_config.common_policy_values.by_admins_only.code, 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_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()); 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.attr("id", "id_realm_email_address_visibility");
email_address_visibility_elem.data = () => "number"; 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)}`); let subsection_elem = $(`#org-${CSS.escape(subsection)}`);
subsection_elem.closest = () => subsection_elem; subsection_elem.closest = () => subsection_elem;
subsection_elem.set_find_results(".prop-element", [ 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("create_stream_policy");
test_common_policy("invite_to_stream_policy"); test_common_policy("invite_to_stream_policy");
test_common_policy("invite_to_realm_policy");
{ {
/* Test message content edit limit minutes sync */ /* 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", defaultMessage: "Prevent users from changing their email address",
}), }),
realm_avatar_changes_disabled: $t({defaultMessage: "Prevent users from changing their avatar"}), 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() { function insert_tip_box() {
@@ -122,6 +125,7 @@ export function build_page() {
bot_creation_policy_values: settings_bots.bot_creation_policy_values, bot_creation_policy_values: settings_bots.bot_creation_policy_values,
email_address_visibility_values: settings_config.email_address_visibility_values, email_address_visibility_values: settings_config.email_address_visibility_values,
can_invite_others_to_realm: settings_data.user_can_invite_others_to_realm(), 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(), ...settings_org.get_organization_settings_options(),
}; };

View File

@@ -180,49 +180,6 @@ function get_property_value(property_name) {
return "no_restriction"; 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") { if (property_name === "realm_default_twenty_four_hour_time") {
return JSON.stringify(page_params[property_name]); return JSON.stringify(page_params[property_name]);
} }
@@ -245,7 +202,7 @@ const simple_dropdown_properties = [
"realm_user_group_edit_policy", "realm_user_group_edit_policy",
"realm_private_message_policy", "realm_private_message_policy",
"realm_add_emoji_by_admins_only", "realm_add_emoji_by_admins_only",
"realm_user_invite_restriction", "realm_invite_to_realm_policy",
"realm_wildcard_mention_policy", "realm_wildcard_mention_policy",
"realm_move_messages_between_streams_policy", "realm_move_messages_between_streams_policy",
]; ];
@@ -502,10 +459,6 @@ export function sync_realm_settings(property) {
case "allow_message_deleting": case "allow_message_deleting":
property = "msg_delete_limit_setting"; property = "msg_delete_limit_setting";
break; break;
case "invite_required":
case "invite_to_realm_policy":
property = "user_invite_restriction";
break;
} }
const element = $(`#id_realm_${CSS.escape(property)}`); const element = $(`#id_realm_${CSS.escape(property)}`);
if (element.length) { if (element.length) {
@@ -896,49 +849,6 @@ export function build_page() {
break; 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(); const waiting_period_threshold = $("#id_realm_waiting_period_setting").val();
switch (waiting_period_threshold) { switch (waiting_period_threshold) {
case "none": 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_user_group_edit_policy,
#id_realm_email_address_visibility, #id_realm_email_address_visibility,
#id_realm_wildcard_mention_policy, #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; width: 250px;
} }
#id_realm_bot_creation_policy, #id_realm_bot_creation_policy,
#id_realm_giphy_rating, #id_realm_giphy_rating,
#id_realm_org_join_restrictions, #id_realm_org_join_restrictions {
#id_realm_user_invite_restriction {
width: 100%; width: 100%;
} }

View File

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