mirror of
https://github.com/zulip/zulip.git
synced 2025-11-01 20:44:04 +00:00
settings: Refactor code for realm message retention setting.
This commit refactors the code for realm message retention setting to make it more similar to code for other time-limit realm settings. There are still separate functions for the message retention setting but they are similar to that of other time-limit settings and can probably help us to deduplicate the code in future. This refactor also helps us in reusing some code for stream message retention setting for changes in #23013. This commit also fixes a bug where save-discard widget not being hidden when resetting the setting to original value. This can only be reproduced when the original setting value is "retain_forever". Following changes have been done in this commit - - Added data-setting-widget-type attribute which is set to "message-retention-setting" similar to "time-limit" value for message edit and delete limit settings. - Added get_message_retention_setting_value function similar to get_time_limit_setting_value function which is used by get_input_element_value. - Removed "message-retention" block from get_complete_data_for_subsection and the message retention setting is now added to request data in populate_data_for_request itself using data-setting-widget-type attribute. - Updated id and class of elements to support the above changes.
This commit is contained in:
@@ -557,7 +557,9 @@ test("set_up", ({override, override_rewire}) => {
|
||||
);
|
||||
$custom_delete_limit_input.attr("id", "id_realm_message_content_delete_limit_minutes");
|
||||
|
||||
$("#id_realm_message_retention_days").set_parent($.create("<stub retention period parent>"));
|
||||
$("#id_realm_message_retention_custom_input").set_parent(
|
||||
$.create("<stub retention period parent>"),
|
||||
);
|
||||
$("#message_content_in_email_notifications_label").set_parent(
|
||||
$.create("<stub in-content setting checkbox>"),
|
||||
);
|
||||
|
||||
@@ -162,13 +162,6 @@ function get_property_value(property_name, for_realm_default_settings) {
|
||||
return "custom_days";
|
||||
}
|
||||
|
||||
if (property_name === "realm_message_retention_setting") {
|
||||
if (page_params.realm_message_retention_days === settings_config.retain_message_forever) {
|
||||
return "retain_forever";
|
||||
}
|
||||
return "retain_for_period";
|
||||
}
|
||||
|
||||
if (property_name === "realm_org_join_restrictions") {
|
||||
if (page_params.realm_emails_restricted_to_domains) {
|
||||
return "only_selected_domain";
|
||||
@@ -371,19 +364,45 @@ function set_msg_delete_limit_dropdown() {
|
||||
set_time_limit_setting("realm_message_content_delete_limit_seconds");
|
||||
}
|
||||
|
||||
function set_message_retention_setting_dropdown() {
|
||||
const value = get_property_value("realm_message_retention_setting");
|
||||
$("#id_realm_message_retention_setting").val(value);
|
||||
change_element_block_display_property(
|
||||
"id_realm_message_retention_days",
|
||||
value === "retain_for_period",
|
||||
);
|
||||
if (
|
||||
get_property_value("realm_message_retention_days") ===
|
||||
settings_config.retain_message_forever
|
||||
) {
|
||||
$("#id_realm_message_retention_days").val("");
|
||||
function get_message_retention_setting_value($input_elem, for_api_data = true) {
|
||||
const select_elem_val = $input_elem.val();
|
||||
if (select_elem_val === "retain_forever") {
|
||||
if (!for_api_data) {
|
||||
return settings_config.retain_message_forever;
|
||||
}
|
||||
return JSON.stringify("unlimited");
|
||||
}
|
||||
|
||||
const $custom_input = $input_elem.parent().find(".message-retention-setting-custom-input");
|
||||
if ($custom_input.val().length === 0) {
|
||||
return settings_config.retain_message_forever;
|
||||
}
|
||||
return Number.parseInt($custom_input.val(), 10);
|
||||
}
|
||||
|
||||
function get_dropdown_value_for_message_retention_setting(setting_value) {
|
||||
if (setting_value === settings_config.retain_message_forever) {
|
||||
return "retain_forever";
|
||||
}
|
||||
|
||||
return "retain_for_period";
|
||||
}
|
||||
|
||||
function set_message_retention_setting_dropdown() {
|
||||
const value = get_property_value("realm_message_retention_days");
|
||||
const dropdown_val = get_dropdown_value_for_message_retention_setting(value);
|
||||
$("#id_realm_message_retention_days").val(dropdown_val);
|
||||
|
||||
change_element_block_display_property(
|
||||
"id_realm_message_retention_custom_input",
|
||||
dropdown_val === "retain_for_period",
|
||||
);
|
||||
|
||||
let custom_input_val = "";
|
||||
if (dropdown_val === "retain_for_period") {
|
||||
custom_input_val = value;
|
||||
}
|
||||
$("#id_realm_message_retention_custom_input").val(custom_input_val);
|
||||
}
|
||||
|
||||
function set_org_join_restrictions_dropdown() {
|
||||
@@ -484,9 +503,6 @@ function update_dependent_subsettings(property_name) {
|
||||
case "realm_allow_message_editing":
|
||||
update_message_edit_sub_settings(page_params.realm_allow_message_editing);
|
||||
break;
|
||||
case "realm_message_retention_days":
|
||||
set_message_retention_setting_dropdown();
|
||||
break;
|
||||
case "realm_delete_own_message_policy":
|
||||
set_delete_own_message_policy_dropdown(page_params.realm_delete_own_message_policy);
|
||||
break;
|
||||
@@ -578,6 +594,9 @@ function discard_property_element_changes(elem, for_realm_default_settings) {
|
||||
case "realm_message_content_delete_limit_seconds":
|
||||
set_time_limit_setting(property_name);
|
||||
break;
|
||||
case "realm_message_retention_days":
|
||||
set_message_retention_setting_dropdown();
|
||||
break;
|
||||
default:
|
||||
if (property_value !== undefined) {
|
||||
set_input_element_value($elem, property_value);
|
||||
@@ -732,6 +751,8 @@ export function get_input_element_value(input_elem, input_type) {
|
||||
return undefined;
|
||||
case "time-limit":
|
||||
return get_time_limit_setting_value($input_elem);
|
||||
case "message-retention-setting":
|
||||
return get_message_retention_setting_value($input_elem);
|
||||
default:
|
||||
return undefined;
|
||||
}
|
||||
@@ -828,6 +849,9 @@ function check_property_changed(elem, for_realm_default_settings) {
|
||||
case "realm_message_content_delete_limit_seconds":
|
||||
proposed_val = get_time_limit_setting_value($elem, false);
|
||||
break;
|
||||
case "realm_message_retention_days":
|
||||
proposed_val = get_message_retention_setting_value($elem, false);
|
||||
break;
|
||||
case "realm_default_language":
|
||||
proposed_val = $(
|
||||
"#org-notifications .language_selection_widget .language_selection_button span",
|
||||
@@ -984,19 +1008,6 @@ export function register_save_discard_widget_handlers(
|
||||
"#org-notifications .language_selection_widget .language_selection_button span",
|
||||
).attr("data-language-code");
|
||||
break;
|
||||
case "message_retention": {
|
||||
const message_retention_setting_value = $(
|
||||
"#id_realm_message_retention_setting",
|
||||
).val();
|
||||
if (message_retention_setting_value === "retain_forever") {
|
||||
data.message_retention_days = JSON.stringify("unlimited");
|
||||
} else {
|
||||
data.message_retention_days = JSON.stringify(
|
||||
get_input_element_value($("#id_realm_message_retention_days")),
|
||||
);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "other_settings": {
|
||||
const code_block_language_value = default_code_language_widget.value();
|
||||
// No need to JSON-encode, since this value is already a string.
|
||||
@@ -1156,10 +1167,10 @@ export function build_page() {
|
||||
update_custom_value_input("realm_message_content_delete_limit_seconds");
|
||||
});
|
||||
|
||||
$("#id_realm_message_retention_setting").on("change", (e) => {
|
||||
$("#id_realm_message_retention_days").on("change", (e) => {
|
||||
const message_retention_setting_dropdown_value = e.target.value;
|
||||
change_element_block_display_property(
|
||||
"id_realm_message_retention_days",
|
||||
"id_realm_message_retention_custom_input",
|
||||
message_retention_setting_dropdown_value === "retain_for_period",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -69,23 +69,23 @@
|
||||
|
||||
<div class="inline-block organization-settings-parent">
|
||||
<div class="input-group">
|
||||
<label for="id_realm_message_retention_setting" class="dropdown-title">{{t "Message retention period" }}
|
||||
<label for="id_realm_message_retention_days" class="dropdown-title">{{t "Message retention period" }}
|
||||
</label>
|
||||
<select name="realm_message_retention_setting"
|
||||
id="id_realm_message_retention_setting" class="prop-element"
|
||||
<select name="realm_message_retention_days"
|
||||
id="id_realm_message_retention_days" class="prop-element"
|
||||
data-setting-widget-type="message-retention-setting"
|
||||
{{#unless zulip_plan_is_not_limited}}disabled{{/unless}}>
|
||||
<option value="retain_forever">{{t 'Retain forever' }}</option>
|
||||
<option value="retain_for_period">{{t 'Retain for N days after posting' }}</option>
|
||||
</select>
|
||||
|
||||
<div class="dependent-inline-block">
|
||||
<label for="id_realm_message_retention_days" class="inline-block realm-time-limit-label">
|
||||
<label for="id_realm_message_retention_custom_input" class="inline-block realm-time-limit-label">
|
||||
{{t 'N' }}:
|
||||
</label>
|
||||
<input type="text" id="id_realm_message_retention_days" autocomplete="off"
|
||||
name="realm_message_retention_days"
|
||||
class="admin-realm-message-retention-days prop-element"
|
||||
value="{{ realm_message_retention_days }}"
|
||||
<input type="text" id="id_realm_message_retention_custom_input" autocomplete="off"
|
||||
name="realm_message_retention_custom_input"
|
||||
class="admin-realm-message-retention-days message-retention-setting-custom-input"
|
||||
data-setting-widget-type="number"
|
||||
{{#unless zulip_plan_is_not_limited}}disabled{{/unless}}/>
|
||||
</div>
|
||||
|
||||
Reference in New Issue
Block a user