settings_config: Pass settings object as parameter to all_notifications.

We pass user_settings object to all_notifications and
get_notifications_table_row_data such that we can use these
functions for realm-level settings also.
This commit is contained in:
Sahil Batra
2021-08-27 19:16:23 +05:30
committed by Tim Abbott
parent de1aa25059
commit 8b9b0638c6
6 changed files with 32 additions and 16 deletions

View File

@@ -22,13 +22,19 @@ run_test("all_notifications", () => {
// is passed. In this case, we articulate that with
// wildcard_mentions_notify being undefined, which will be
// the case, if a wrong setting_name is passed.
assert.throws(settings_config.all_notifications, {
name: "TypeError",
message: "Incorrect setting_name passed: wildcard_mentions_notify",
});
let error_message;
let error_name;
try {
settings_config.all_notifications(user_settings);
} catch (error) {
error_name = error.name;
error_message = error.message;
}
assert.equal(error_name, "TypeError");
assert.equal(error_message, "Incorrect setting_name passed: wildcard_mentions_notify");
user_settings.wildcard_mentions_notify = false;
const notifications = settings_config.all_notifications();
const notifications = settings_config.all_notifications(user_settings);
assert.deepEqual(notifications.general_settings, [
{

View File

@@ -100,13 +100,13 @@ export function build_page() {
color_scheme_values: settings_config.color_scheme_values,
default_view_values: settings_config.default_view_values,
twenty_four_hour_time_values: settings_config.twenty_four_hour_time_values,
general_settings: settings_config.all_notifications().general_settings,
notification_settings: settings_config.all_notifications().settings,
general_settings: settings_config.all_notifications(user_settings).general_settings,
notification_settings: settings_config.all_notifications(user_settings).settings,
email_notifications_batching_period_values:
settings_config.email_notifications_batching_period_values,
desktop_icon_count_display_values: settings_config.desktop_icon_count_display_values,
show_push_notifications_tooltip:
settings_config.all_notifications().show_push_notifications_tooltip,
settings_config.all_notifications(user_settings).show_push_notifications_tooltip,
display_settings: settings_config.get_all_display_settings(),
user_can_change_name: settings_data.user_can_change_name(),
user_can_change_avatar: settings_data.user_can_change_avatar(),

View File

@@ -2,7 +2,7 @@ import Handlebars from "handlebars/runtime";
import {$t, $t_html} from "./i18n";
import {page_params} from "./page_params";
import {user_settings} from "./user_settings";
import type {UserSettingsType} from "./user_settings";
/*
This file contains translations between the integer values used in
@@ -404,7 +404,8 @@ export const stream_specific_notification_settings = [
"wildcard_mentions_notify",
];
type PageParamsItem = keyof typeof user_settings;
type SettingsObjectType = UserSettingsType;
type PageParamsItem = keyof SettingsObjectType;
export const stream_notification_settings: PageParamsItem[] = [
"enable_stream_desktop_notifications",
"enable_stream_audible_notifications",
@@ -495,6 +496,7 @@ type NotificationSettingCheckbox = {
export function get_notifications_table_row_data(
notify_settings: PageParamsItem[],
settings_object: SettingsObjectType,
): NotificationSettingCheckbox[] {
return general_notifications_table_labels.realm.map((column, index) => {
const setting_name = notify_settings[index];
@@ -506,7 +508,7 @@ export function get_notifications_table_row_data(
};
}
const checked = user_settings[setting_name];
const checked = settings_object[setting_name];
if (typeof checked !== "boolean") {
throw new TypeError(`Incorrect setting_name passed: ${setting_name}`);
}
@@ -537,16 +539,20 @@ export interface AllNotifications {
};
}
export const all_notifications = (): AllNotifications => ({
export const all_notifications = (settings_object: SettingsObjectType): AllNotifications => ({
general_settings: [
{
label: $t({defaultMessage: "Streams"}),
notification_settings: get_notifications_table_row_data(stream_notification_settings),
notification_settings: get_notifications_table_row_data(
stream_notification_settings,
settings_object,
),
},
{
label: $t({defaultMessage: "PMs, mentions, and alerts"}),
notification_settings: get_notifications_table_row_data(
pm_mention_notification_settings,
settings_object,
),
},
],

View File

@@ -12,6 +12,7 @@ import * as settings_ui from "./settings_ui";
import * as stream_edit from "./stream_edit";
import * as stream_settings_data from "./stream_settings_data";
import * as unread_ui from "./unread_ui";
import {user_settings} from "./user_settings";
function rerender_ui() {
const unmatched_streams_table = $("#stream-specific-notify-table");
@@ -31,7 +32,9 @@ function rerender_ui() {
stream,
stream_specific_notification_settings:
settings_config.stream_specific_notification_settings,
is_disabled: settings_config.all_notifications().show_push_notifications_tooltip,
is_disabled:
settings_config.all_notifications(user_settings)
.show_push_notifications_tooltip,
}),
);
}

View File

@@ -485,7 +485,8 @@ export function is_notification_setting(setting_label) {
export function stream_settings(sub) {
const settings_labels = settings_config.general_notifications_table_labels.stream;
const check_realm_setting = settings_config.all_notifications().show_push_notifications_tooltip;
const check_realm_setting =
settings_config.all_notifications(user_settings).show_push_notifications_tooltip;
const settings = Object.keys(settings_labels).map((setting) => {
const ret = {

View File

@@ -1,4 +1,4 @@
type UserSettingsType = {
export type UserSettingsType = {
color_scheme: number;
default_language: string;
default_view: string;