mirror of https://github.com/zulip/zulip.git
recent_view: Add drodown widget to filter topics.
This commit is contained in:
parent
de767cc9ad
commit
1e7b4ae160
|
@ -284,6 +284,9 @@ EXEMPT_FILES = make_set(
|
||||||
"web/tests/lib/real_jquery.js",
|
"web/tests/lib/real_jquery.js",
|
||||||
"web/tests/lib/zjquery_element.js",
|
"web/tests/lib/zjquery_element.js",
|
||||||
"web/tests/lib/zpage_billing_params.js",
|
"web/tests/lib/zpage_billing_params.js",
|
||||||
|
# There are some important functions which are not called right now but will
|
||||||
|
# be reused when we add tests for dropdown widget so it doesn't make sense to remove them.
|
||||||
|
"web/tests/recent_view.test.js",
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@ import * as blueslip from "./blueslip";
|
||||||
import * as buddy_data from "./buddy_data";
|
import * as buddy_data from "./buddy_data";
|
||||||
import * as compose_closed_ui from "./compose_closed_ui";
|
import * as compose_closed_ui from "./compose_closed_ui";
|
||||||
import * as compose_state from "./compose_state";
|
import * as compose_state from "./compose_state";
|
||||||
|
import * as dropdown_widget from "./dropdown_widget";
|
||||||
import * as hash_util from "./hash_util";
|
import * as hash_util from "./hash_util";
|
||||||
import {$t} from "./i18n";
|
import {$t} from "./i18n";
|
||||||
import * as left_sidebar_navigation_area from "./left_sidebar_navigation_area";
|
import * as left_sidebar_navigation_area from "./left_sidebar_navigation_area";
|
||||||
|
@ -39,6 +40,7 @@ import * as user_topics from "./user_topics";
|
||||||
import * as views_util from "./views_util";
|
import * as views_util from "./views_util";
|
||||||
|
|
||||||
let topics_widget;
|
let topics_widget;
|
||||||
|
let filters_dropdown_widget;
|
||||||
// Sets the number of avatars to display.
|
// Sets the number of avatars to display.
|
||||||
// Rest of the avatars, if present, are displayed as {+x}
|
// Rest of the avatars, if present, are displayed as {+x}
|
||||||
const MAX_AVATAR = 4;
|
const MAX_AVATAR = 4;
|
||||||
|
@ -81,20 +83,24 @@ const MAX_SELECTABLE_DIRECT_MESSAGE_COLS = 3;
|
||||||
|
|
||||||
// we use localstorage to persist the recent topic filters
|
// we use localstorage to persist the recent topic filters
|
||||||
const ls_key = "recent_topic_filters";
|
const ls_key = "recent_topic_filters";
|
||||||
|
const ls_dropdown_key = "recent_topic_dropdown_filters";
|
||||||
const ls = localstorage();
|
const ls = localstorage();
|
||||||
|
|
||||||
let filters = new Set();
|
let filters = new Set();
|
||||||
|
let dropdown_filters = new Set();
|
||||||
|
|
||||||
const recent_conversation_key_prefix = "recent_conversation:";
|
const recent_conversation_key_prefix = "recent_conversation:";
|
||||||
|
|
||||||
export function clear_for_tests() {
|
export function clear_for_tests() {
|
||||||
filters.clear();
|
filters.clear();
|
||||||
|
dropdown_filters.clear();
|
||||||
recent_view_data.conversations.clear();
|
recent_view_data.conversations.clear();
|
||||||
topics_widget = undefined;
|
topics_widget = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function save_filters() {
|
export function save_filters() {
|
||||||
ls.set(ls_key, [...filters]);
|
ls.set(ls_key, [...filters]);
|
||||||
|
ls.set(ls_dropdown_key, [...dropdown_filters]);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function is_in_focus() {
|
export function is_in_focus() {
|
||||||
|
@ -362,6 +368,11 @@ export function revive_current_focus() {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($current_focus_elem.hasClass("dropdown-widget-button")) {
|
||||||
|
$("#recent-view-filter_widget").trigger("focus");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
const filter_button = $current_focus_elem.data("filter");
|
const filter_button = $current_focus_elem.data("filter");
|
||||||
if (!filter_button) {
|
if (!filter_button) {
|
||||||
set_default_focus();
|
set_default_focus();
|
||||||
|
@ -655,7 +666,7 @@ export function filters_should_hide_topic(topic_data) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!filters.has("include_muted") && topic_data.type === "stream") {
|
if (dropdown_filters.has(views_util.FILTERS.UNMUTED_TOPICS) && topic_data.type === "stream") {
|
||||||
// We want to show the unmuted or followed topics within muted
|
// We want to show the unmuted or followed topics within muted
|
||||||
// streams in Recent Conversations.
|
// streams in Recent Conversations.
|
||||||
const topic_unmuted_or_followed = Boolean(
|
const topic_unmuted_or_followed = Boolean(
|
||||||
|
@ -680,6 +691,24 @@ export function filters_should_hide_topic(topic_data) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
dropdown_filters.has(views_util.FILTERS.FOLLOWED_TOPICS) &&
|
||||||
|
topic_data.type === "stream" &&
|
||||||
|
!user_topics.is_topic_followed(msg.stream_id, msg.topic)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (
|
||||||
|
dropdown_filters.has(views_util.FILTERS.UNMUTED_TOPICS) &&
|
||||||
|
topic_data.type === "stream" &&
|
||||||
|
(user_topics.is_topic_muted(msg.stream_id, msg.topic) ||
|
||||||
|
stream_data.is_muted(msg.stream_id)) &&
|
||||||
|
!user_topics.is_topic_unmuted_or_followed(msg.stream_id, msg.topic)
|
||||||
|
) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
const search_keyword = $("#recent_view_search").val();
|
const search_keyword = $("#recent_view_search").val();
|
||||||
const stream_name = stream_data.get_stream_name_from_id(msg.stream_id);
|
const stream_name = stream_data.get_stream_name_from_id(msg.stream_id);
|
||||||
if (!topic_in_search_results(search_keyword, stream_name, msg.topic)) {
|
if (!topic_in_search_results(search_keyword, stream_name, msg.topic)) {
|
||||||
|
@ -793,18 +822,28 @@ function show_selected_filters() {
|
||||||
function get_recent_view_filters_params() {
|
function get_recent_view_filters_params() {
|
||||||
return {
|
return {
|
||||||
filter_participated: filters.has("participated"),
|
filter_participated: filters.has("participated"),
|
||||||
filter_unread: filters.has("unread"),
|
|
||||||
filter_muted: filters.has("include_muted"),
|
filter_muted: filters.has("include_muted"),
|
||||||
filter_pm: filters.has("include_private"),
|
filter_pm: filters.has("include_private"),
|
||||||
is_spectator: page_params.is_spectator,
|
is_spectator: page_params.is_spectator,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setup_dropdown_filters_widget() {
|
||||||
|
filters_dropdown_widget = new dropdown_widget.DropdownWidget({
|
||||||
|
...views_util.COMMON_DROPDOWN_WIDGET_PARAMS,
|
||||||
|
widget_name: "recent-view-filter",
|
||||||
|
item_click_callback: filter_click_handler,
|
||||||
|
$events_container: $("#recent_view_filter_buttons"),
|
||||||
|
default_id: dropdown_filters.values().next().value,
|
||||||
|
});
|
||||||
|
filters_dropdown_widget.setup();
|
||||||
|
}
|
||||||
|
|
||||||
export function update_filters_view() {
|
export function update_filters_view() {
|
||||||
const rendered_filters = render_recent_view_filters(get_recent_view_filters_params());
|
const rendered_filters = render_recent_view_filters(get_recent_view_filters_params());
|
||||||
$("#recent_filters_group").html(rendered_filters);
|
$("#recent_filters_group").html(rendered_filters);
|
||||||
show_selected_filters();
|
show_selected_filters();
|
||||||
|
filters_dropdown_widget.render();
|
||||||
topics_widget.hard_redraw();
|
topics_widget.hard_redraw();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -939,6 +978,25 @@ function callback_after_render() {
|
||||||
setTimeout(revive_current_focus, 0);
|
setTimeout(revive_current_focus, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function filter_click_handler(event, dropdown, widget) {
|
||||||
|
event.preventDefault();
|
||||||
|
event.stopPropagation();
|
||||||
|
|
||||||
|
if (page_params.is_spectator) {
|
||||||
|
// Filter buttons are disabled for spectator.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const filter_id = $(event.currentTarget).attr("data-unique-id");
|
||||||
|
// We don't support multiple filters yet, so we clear existing and add the new filter.
|
||||||
|
dropdown_filters = new Set([filter_id]);
|
||||||
|
dropdown.hide();
|
||||||
|
widget.render();
|
||||||
|
save_filters();
|
||||||
|
|
||||||
|
topics_widget.hard_redraw();
|
||||||
|
}
|
||||||
|
|
||||||
export function complete_rerender() {
|
export function complete_rerender() {
|
||||||
if (!recent_view_util.is_visible()) {
|
if (!recent_view_util.is_visible()) {
|
||||||
return;
|
return;
|
||||||
|
@ -996,6 +1054,7 @@ export function complete_rerender() {
|
||||||
},
|
},
|
||||||
get_min_load_count,
|
get_min_load_count,
|
||||||
});
|
});
|
||||||
|
setup_dropdown_filters_widget();
|
||||||
}
|
}
|
||||||
|
|
||||||
export function show() {
|
export function show() {
|
||||||
|
@ -1217,7 +1276,7 @@ export function change_focused_element($elt, input_key) {
|
||||||
set_table_focus(row_focus, col_focus);
|
set_table_focus(row_focus, col_focus);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else if ($elt.hasClass("btn-recent-filters")) {
|
} else if ($elt.hasClass("btn-recent-filters") || $elt.hasClass("dropdown-widget-button")) {
|
||||||
switch (input_key) {
|
switch (input_key) {
|
||||||
case "click":
|
case "click":
|
||||||
$current_focus_elem = $elt;
|
$current_focus_elem = $elt;
|
||||||
|
@ -1329,19 +1388,31 @@ export function change_focused_element($elt, input_key) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function initialize({
|
function load_filters() {
|
||||||
on_click_participant,
|
|
||||||
on_mark_pm_as_read,
|
|
||||||
on_mark_topic_as_read,
|
|
||||||
maybe_load_older_messages,
|
|
||||||
}) {
|
|
||||||
// load filters from local storage.
|
// load filters from local storage.
|
||||||
if (!page_params.is_spectator) {
|
if (!page_params.is_spectator) {
|
||||||
// A user may have a stored filter and can log out
|
// A user may have a stored filter and can log out
|
||||||
// to see web public view. This ensures no filters are
|
// to see web public view. This ensures no filters are
|
||||||
// selected for spectators.
|
// selected for spectators.
|
||||||
filters = new Set(ls.get(ls_key));
|
filters = new Set(ls.get(ls_key));
|
||||||
|
dropdown_filters = new Set(ls.get(ls_dropdown_key));
|
||||||
}
|
}
|
||||||
|
// Verify that the dropdown_filters are valid.
|
||||||
|
const valid_filters = new Set(Object.values(views_util.FILTERS));
|
||||||
|
// If saved filters are not in the list of valid filters, we reset to default.
|
||||||
|
const is_subset = [...dropdown_filters].every((filter) => valid_filters.has(filter));
|
||||||
|
if (dropdown_filters.size === 0 || !is_subset) {
|
||||||
|
dropdown_filters = new Set([views_util.FILTERS.UNMUTED_TOPICS]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export function initialize({
|
||||||
|
on_click_participant,
|
||||||
|
on_mark_pm_as_read,
|
||||||
|
on_mark_topic_as_read,
|
||||||
|
maybe_load_older_messages,
|
||||||
|
}) {
|
||||||
|
load_filters();
|
||||||
|
|
||||||
$("body").on("click", "#recent_view_table .recent_view_participant_avatar", function (e) {
|
$("body").on("click", "#recent_view_table .recent_view_participant_avatar", function (e) {
|
||||||
const participant_user_id = Number.parseInt($(this).parent().attr("data-user-id"), 10);
|
const participant_user_id = Number.parseInt($(this).parent().attr("data-user-id"), 10);
|
||||||
|
@ -1445,6 +1516,15 @@ export function initialize({
|
||||||
revive_current_focus();
|
revive_current_focus();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$("body").on("click", "#recent-view-filter_widget", (e) => {
|
||||||
|
if (page_params.is_spectator) {
|
||||||
|
// Filter buttons are disabled for spectator.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
change_focused_element($(e.currentTarget), "click");
|
||||||
|
});
|
||||||
|
|
||||||
$("body").on("click", "td.recent_topic_stream", (e) => {
|
$("body").on("click", "td.recent_topic_stream", (e) => {
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
const topic_row_index = $(e.target).closest("tr").index();
|
const topic_row_index = $(e.target).closest("tr").index();
|
||||||
|
|
|
@ -551,6 +551,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#recent-view-filter_widget .dropdown_widget_value,
|
||||||
#inbox-filter_widget .dropdown_widget_value {
|
#inbox-filter_widget .dropdown_widget_value {
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
|
@ -559,30 +560,45 @@
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#recent-view-filter_widget .fa-chevron-down,
|
||||||
#inbox-filter_widget .fa-chevron-down {
|
#inbox-filter_widget .fa-chevron-down {
|
||||||
color: var(--color-icons-inbox);
|
color: var(--color-icons-inbox);
|
||||||
opacity: 0.4;
|
opacity: 0.4;
|
||||||
}
|
}
|
||||||
|
|
||||||
.inbox-filter-dropdown-list-container .dropdown-list-wrapper {
|
.dropdown-list-item-common-styles .dropdown-list-bold-selected {
|
||||||
width: 100%;
|
font-weight: 700;
|
||||||
min-width: unset;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.recent-view-filter-dropdown-list-container .dropdown-list-wrapper,
|
||||||
|
.inbox-filter-dropdown-list-container .dropdown-list-wrapper {
|
||||||
|
width: 220px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.recent-view-filter-dropdown-list-container .dropdown-list-item-common-styles,
|
||||||
.inbox-filter-dropdown-list-container .dropdown-list-item-common-styles {
|
.inbox-filter-dropdown-list-container .dropdown-list-item-common-styles {
|
||||||
padding: 5px 10px;
|
padding: 5px 10px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.recent-view-filter-dropdown-list-container .dropdown-list-item-name,
|
||||||
.inbox-filter-dropdown-list-container .dropdown-list-item-name {
|
.inbox-filter-dropdown-list-container .dropdown-list-item-name {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.recent-view-filter-dropdown-list-container .dropdown-list-item-description,
|
||||||
.inbox-filter-dropdown-list-container .dropdown-list-item-description {
|
.inbox-filter-dropdown-list-container .dropdown-list-item-description {
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
|
font-size: 13px;
|
||||||
opacity: 0.8;
|
opacity: 0.8;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
|
@ -543,3 +543,17 @@
|
||||||
display: none;
|
display: none;
|
||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#recent-view-filter_widget {
|
||||||
|
display: inline-flex;
|
||||||
|
width: 150px;
|
||||||
|
margin: 0 5px 10px 0;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
background-color: var(--color-background-inbox-search-hover);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:focus {
|
||||||
|
outline: 2px solid var(--color-outline-focus);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
{{> ./dropdown_widget widget_name="recent-view-filter"}}
|
||||||
<button data-filter="include_private" type="button" class="btn btn-default btn-recent-filters {{#if is_spectator}}fake_disabled_button{{/if}}" role="checkbox" aria-checked="true">
|
<button data-filter="include_private" type="button" class="btn btn-default btn-recent-filters {{#if is_spectator}}fake_disabled_button{{/if}}" role="checkbox" aria-checked="true">
|
||||||
{{#if filter_pm}}
|
{{#if filter_pm}}
|
||||||
<i class="fa fa-check-square-o"></i>
|
<i class="fa fa-check-square-o"></i>
|
||||||
|
@ -6,14 +7,6 @@
|
||||||
{{/if}}
|
{{/if}}
|
||||||
{{t 'Include DMs' }}
|
{{t 'Include DMs' }}
|
||||||
</button>
|
</button>
|
||||||
<button data-filter="include_muted" type="button" class="btn btn-default btn-recent-filters {{#if is_spectator}}fake_disabled_button{{/if}}" role="checkbox" aria-checked="false">
|
|
||||||
{{#if filter_muted }}
|
|
||||||
<i class="fa fa-check-square-o"></i>
|
|
||||||
{{else}}
|
|
||||||
<i class="fa fa-square-o"></i>
|
|
||||||
{{/if}}
|
|
||||||
{{t 'Include muted' }}
|
|
||||||
</button>
|
|
||||||
<button data-filter="unread" type="button" class="btn btn-default btn-recent-filters {{#if is_spectator}}fake_disabled_button{{/if}}" role="checkbox" aria-checked="false">
|
<button data-filter="unread" type="button" class="btn btn-default btn-recent-filters {{#if is_spectator}}fake_disabled_button{{/if}}" role="checkbox" aria-checked="false">
|
||||||
{{#if filter_unread}}
|
{{#if filter_unread}}
|
||||||
<i class="fa fa-check-square-o"></i>
|
<i class="fa fa-check-square-o"></i>
|
||||||
|
|
|
@ -181,6 +181,11 @@ mock_esm("../src/unread", {
|
||||||
mock_esm("../src/resize", {
|
mock_esm("../src/resize", {
|
||||||
update_recent_view_filters_height: noop,
|
update_recent_view_filters_height: noop,
|
||||||
});
|
});
|
||||||
|
const dropdown_widget = zrequire("../src/dropdown_widget");
|
||||||
|
dropdown_widget.DropdownWidget = function DropdownWidget() {
|
||||||
|
this.setup = noop;
|
||||||
|
this.render = noop;
|
||||||
|
};
|
||||||
|
|
||||||
const {all_messages_data} = zrequire("all_messages_data");
|
const {all_messages_data} = zrequire("all_messages_data");
|
||||||
const people = zrequire("people");
|
const people = zrequire("people");
|
||||||
|
@ -444,7 +449,6 @@ test("test_recent_view_show", ({mock_template}) => {
|
||||||
page_params.is_spectator = false;
|
page_params.is_spectator = false;
|
||||||
const expected = {
|
const expected = {
|
||||||
filter_participated: false,
|
filter_participated: false,
|
||||||
filter_unread: false,
|
|
||||||
filter_muted: false,
|
filter_muted: false,
|
||||||
filter_pm: false,
|
filter_pm: false,
|
||||||
search_val: "",
|
search_val: "",
|
||||||
|
@ -475,7 +479,6 @@ test("test_filter_is_spectator", ({mock_template}) => {
|
||||||
page_params.is_spectator = true;
|
page_params.is_spectator = true;
|
||||||
const expected = {
|
const expected = {
|
||||||
filter_participated: false,
|
filter_participated: false,
|
||||||
filter_unread: false,
|
|
||||||
filter_muted: false,
|
filter_muted: false,
|
||||||
filter_pm: false,
|
filter_pm: false,
|
||||||
search_val: "",
|
search_val: "",
|
||||||
|
@ -508,7 +511,6 @@ test("test_no_filter", ({mock_template}) => {
|
||||||
page_params.is_spectator = false;
|
page_params.is_spectator = false;
|
||||||
const expected = {
|
const expected = {
|
||||||
filter_participated: false,
|
filter_participated: false,
|
||||||
filter_unread: false,
|
|
||||||
filter_muted: false,
|
filter_muted: false,
|
||||||
filter_pm: false,
|
filter_pm: false,
|
||||||
search_val: "",
|
search_val: "",
|
||||||
|
@ -539,80 +541,81 @@ test("test_no_filter", ({mock_template}) => {
|
||||||
false,
|
false,
|
||||||
);
|
);
|
||||||
|
|
||||||
expected_data_to_replace_in_list_widget = [
|
// TODO: Modify this test to work with dropdown widget.
|
||||||
{last_msg_id: 10, participated: true, type: "stream"},
|
// expected_data_to_replace_in_list_widget = [
|
||||||
{last_msg_id: 1, participated: true, type: "stream"},
|
// {last_msg_id: 10, participated: true, type: "stream"},
|
||||||
];
|
// {last_msg_id: 1, participated: true, type: "stream"},
|
||||||
|
// ];
|
||||||
|
|
||||||
// topic is muted
|
// // topic is muted
|
||||||
row_data = [
|
// row_data = [
|
||||||
...row_data,
|
// ...row_data,
|
||||||
...generate_topic_data([[1, "topic-7", 1, all_visibility_policies.MUTED]]),
|
// ...generate_topic_data([[1, "topic-7", 1, all_visibility_policies.MUTED]]),
|
||||||
];
|
// ];
|
||||||
i = row_data.length;
|
// i = row_data.length;
|
||||||
stub_out_filter_buttons();
|
// stub_out_filter_buttons();
|
||||||
rt.process_messages([messages[9]]);
|
// rt.process_messages([messages[9]]);
|
||||||
assert.equal(
|
// assert.equal(
|
||||||
rt.filters_should_hide_topic({last_msg_id: 10, participated: true, type: "stream"}),
|
// rt.filters_should_hide_topic({last_msg_id: 10, participated: true, type: "stream"}),
|
||||||
true,
|
// true,
|
||||||
);
|
// );
|
||||||
|
|
||||||
expected_data_to_replace_in_list_widget = [
|
// expected_data_to_replace_in_list_widget = [
|
||||||
{last_msg_id: 12, participated: true, type: "stream"},
|
// {last_msg_id: 12, participated: true, type: "stream"},
|
||||||
{last_msg_id: 10, participated: true, type: "stream"},
|
// {last_msg_id: 10, participated: true, type: "stream"},
|
||||||
{last_msg_id: 1, participated: true, type: "stream"},
|
// {last_msg_id: 1, participated: true, type: "stream"},
|
||||||
];
|
// ];
|
||||||
// normal topic in muted stream
|
// // normal topic in muted stream
|
||||||
row_data = [
|
// row_data = [
|
||||||
...row_data,
|
// ...row_data,
|
||||||
...generate_topic_data([[6, "topic-8", 1, all_visibility_policies.INHERIT]]),
|
// ...generate_topic_data([[6, "topic-8", 1, all_visibility_policies.INHERIT]]),
|
||||||
];
|
// ];
|
||||||
i = row_data.length;
|
// i = row_data.length;
|
||||||
stub_out_filter_buttons();
|
// stub_out_filter_buttons();
|
||||||
rt.process_messages([messages[11]]);
|
// rt.process_messages([messages[11]]);
|
||||||
assert.equal(
|
// assert.equal(
|
||||||
rt.filters_should_hide_topic({last_msg_id: 12, participated: true, type: "stream"}),
|
// rt.filters_should_hide_topic({last_msg_id: 12, participated: true, type: "stream"}),
|
||||||
true,
|
// true,
|
||||||
);
|
// );
|
||||||
|
|
||||||
expected_data_to_replace_in_list_widget = [
|
// expected_data_to_replace_in_list_widget = [
|
||||||
{last_msg_id: 13, participated: true, type: "stream"},
|
// {last_msg_id: 13, participated: true, type: "stream"},
|
||||||
{last_msg_id: 12, participated: true, type: "stream"},
|
// {last_msg_id: 12, participated: true, type: "stream"},
|
||||||
{last_msg_id: 10, participated: true, type: "stream"},
|
// {last_msg_id: 10, participated: true, type: "stream"},
|
||||||
{last_msg_id: 1, participated: true, type: "stream"},
|
// {last_msg_id: 1, participated: true, type: "stream"},
|
||||||
];
|
// ];
|
||||||
// unmuted topic in muted stream
|
// // unmuted topic in muted stream
|
||||||
row_data = [
|
// row_data = [
|
||||||
...row_data,
|
// ...row_data,
|
||||||
...generate_topic_data([[6, "topic-11", 1, all_visibility_policies.UNMUTED]]),
|
// ...generate_topic_data([[6, "topic-11", 1, all_visibility_policies.UNMUTED]]),
|
||||||
];
|
// ];
|
||||||
i = row_data.length;
|
// i = row_data.length;
|
||||||
stub_out_filter_buttons();
|
// stub_out_filter_buttons();
|
||||||
rt.process_messages([messages[12]]);
|
// rt.process_messages([messages[12]]);
|
||||||
assert.equal(
|
// assert.equal(
|
||||||
rt.filters_should_hide_topic({last_msg_id: 13, participated: true, type: "stream"}),
|
// rt.filters_should_hide_topic({last_msg_id: 13, participated: true, type: "stream"}),
|
||||||
false,
|
// false,
|
||||||
);
|
// );
|
||||||
|
|
||||||
expected_data_to_replace_in_list_widget = [
|
// expected_data_to_replace_in_list_widget = [
|
||||||
{last_msg_id: 14, participated: true, type: "stream"},
|
// {last_msg_id: 14, participated: true, type: "stream"},
|
||||||
{last_msg_id: 13, participated: true, type: "stream"},
|
// {last_msg_id: 13, participated: true, type: "stream"},
|
||||||
{last_msg_id: 12, participated: true, type: "stream"},
|
// {last_msg_id: 12, participated: true, type: "stream"},
|
||||||
{last_msg_id: 10, participated: true, type: "stream"},
|
// {last_msg_id: 10, participated: true, type: "stream"},
|
||||||
{last_msg_id: 1, participated: true, type: "stream"},
|
// {last_msg_id: 1, participated: true, type: "stream"},
|
||||||
];
|
// ];
|
||||||
// followed topic in muted stream
|
// // followed topic in muted stream
|
||||||
row_data = [
|
// row_data = [
|
||||||
...row_data,
|
// ...row_data,
|
||||||
...generate_topic_data([[6, "topic-12", 1, all_visibility_policies.FOLLOWED]]),
|
// ...generate_topic_data([[6, "topic-12", 1, all_visibility_policies.FOLLOWED]]),
|
||||||
];
|
// ];
|
||||||
i = row_data.length;
|
// i = row_data.length;
|
||||||
stub_out_filter_buttons();
|
// stub_out_filter_buttons();
|
||||||
rt.process_messages([messages[13]]);
|
// rt.process_messages([messages[13]]);
|
||||||
assert.equal(
|
// assert.equal(
|
||||||
rt.filters_should_hide_topic({last_msg_id: 14, participated: true, type: "stream"}),
|
// rt.filters_should_hide_topic({last_msg_id: 14, participated: true, type: "stream"}),
|
||||||
false,
|
// false,
|
||||||
);
|
// );
|
||||||
|
|
||||||
// Test search
|
// Test search
|
||||||
expected.search_val = "topic-1";
|
expected.search_val = "topic-1";
|
||||||
|
@ -630,7 +633,6 @@ test("test_filter_pm", ({mock_template}) => {
|
||||||
page_params.is_spectator = false;
|
page_params.is_spectator = false;
|
||||||
const expected = {
|
const expected = {
|
||||||
filter_participated: false,
|
filter_participated: false,
|
||||||
filter_unread: false,
|
|
||||||
filter_muted: false,
|
filter_muted: false,
|
||||||
filter_pm: true,
|
filter_pm: true,
|
||||||
search_val: "",
|
search_val: "",
|
||||||
|
@ -672,128 +674,6 @@ test("test_filter_pm", ({mock_template}) => {
|
||||||
assert.deepEqual(rt.filters_should_hide_topic({type: "private", last_msg_id: 17}), false);
|
assert.deepEqual(rt.filters_should_hide_topic({type: "private", last_msg_id: 17}), false);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("test_filter_unread", ({mock_template}) => {
|
|
||||||
let expected_filter_unread = false;
|
|
||||||
page_params.is_spectator = false;
|
|
||||||
|
|
||||||
mock_template("recent_view_table.hbs", false, (data) => {
|
|
||||||
assert.deepEqual(data, {
|
|
||||||
filter_participated: false,
|
|
||||||
filter_unread: expected_filter_unread,
|
|
||||||
filter_muted: false,
|
|
||||||
filter_pm: false,
|
|
||||||
search_val: "",
|
|
||||||
is_spectator: false,
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
mock_template("recent_view_filters.hbs", false, (data) => {
|
|
||||||
assert.equal(data.filter_unread, expected_filter_unread);
|
|
||||||
assert.equal(data.filter_participated, false);
|
|
||||||
return "<recent_view table stub>";
|
|
||||||
});
|
|
||||||
|
|
||||||
let i = 0;
|
|
||||||
|
|
||||||
const row_data = generate_topic_data([
|
|
||||||
// stream_id, topic, unread_count, visibility_policy
|
|
||||||
[6, "topic-12", 1, all_visibility_policies.FOLLOWED],
|
|
||||||
[6, "topic-11", 1, all_visibility_policies.UNMUTED],
|
|
||||||
[6, "topic-8", 1, all_visibility_policies.INHERIT],
|
|
||||||
[4, "topic-10", 1, all_visibility_policies.INHERIT],
|
|
||||||
[1, "topic-7", 1, all_visibility_policies.MUTED],
|
|
||||||
[1, "topic-6", 1, all_visibility_policies.INHERIT],
|
|
||||||
[1, "topic-5", 1, all_visibility_policies.INHERIT],
|
|
||||||
[1, "topic-4", 1, all_visibility_policies.INHERIT],
|
|
||||||
[1, "topic-3", 1, all_visibility_policies.INHERIT],
|
|
||||||
[1, "topic-2", 1, all_visibility_policies.INHERIT],
|
|
||||||
[1, "topic-1", 0, all_visibility_policies.INHERIT],
|
|
||||||
]);
|
|
||||||
|
|
||||||
mock_template("recent_view_row.hbs", false, (data) => {
|
|
||||||
// All the row will be processed.
|
|
||||||
if (row_data[i]) {
|
|
||||||
assert.deepEqual(data, row_data[i]);
|
|
||||||
i += 1;
|
|
||||||
}
|
|
||||||
return "<recent_view row stub>";
|
|
||||||
});
|
|
||||||
|
|
||||||
rt.clear_for_tests();
|
|
||||||
recent_view_util.set_visible(true);
|
|
||||||
rt.set_default_focus();
|
|
||||||
|
|
||||||
stub_out_filter_buttons();
|
|
||||||
rt.process_messages(messages);
|
|
||||||
$(".home-page-input").trigger("focus");
|
|
||||||
assert.equal(
|
|
||||||
rt.filters_should_hide_topic({last_msg_id: 1, participated: true, type: "stream"}),
|
|
||||||
false,
|
|
||||||
);
|
|
||||||
|
|
||||||
$("#recent_view_filter_buttons").removeClass("btn-recent-selected");
|
|
||||||
|
|
||||||
expected_filter_unread = true;
|
|
||||||
rt.set_filter("unread");
|
|
||||||
rt.update_filters_view();
|
|
||||||
|
|
||||||
expected_data_to_replace_in_list_widget = [
|
|
||||||
{
|
|
||||||
last_msg_id: 11,
|
|
||||||
participated: true,
|
|
||||||
type: "stream",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
last_msg_id: 10,
|
|
||||||
participated: true,
|
|
||||||
type: "stream",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
last_msg_id: 9,
|
|
||||||
participated: true,
|
|
||||||
type: "stream",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
last_msg_id: 7,
|
|
||||||
participated: true,
|
|
||||||
type: "stream",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
last_msg_id: 5,
|
|
||||||
participated: false,
|
|
||||||
type: "stream",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
last_msg_id: 4,
|
|
||||||
participated: false,
|
|
||||||
type: "stream",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
last_msg_id: 3,
|
|
||||||
participated: true,
|
|
||||||
type: "stream",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
last_msg_id: 1,
|
|
||||||
participated: true,
|
|
||||||
type: "stream",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
rt.process_messages([messages[0]]);
|
|
||||||
|
|
||||||
// Unselect "unread" filter by clicking twice.
|
|
||||||
expected_filter_unread = false;
|
|
||||||
$("#recent_view_filter_buttons").addClass("btn-recent-selected");
|
|
||||||
rt.set_filter("unread");
|
|
||||||
|
|
||||||
assert.equal(i, row_data.length);
|
|
||||||
|
|
||||||
$("#recent_view_filter_buttons").removeClass("btn-recent-selected");
|
|
||||||
// reselect "unread" filter
|
|
||||||
rt.set_filter("unread");
|
|
||||||
});
|
|
||||||
|
|
||||||
test("test_filter_participated", ({mock_template}) => {
|
test("test_filter_participated", ({mock_template}) => {
|
||||||
let expected_filter_participated;
|
let expected_filter_participated;
|
||||||
|
|
||||||
|
@ -801,7 +681,6 @@ test("test_filter_participated", ({mock_template}) => {
|
||||||
mock_template("recent_view_table.hbs", false, (data) => {
|
mock_template("recent_view_table.hbs", false, (data) => {
|
||||||
assert.deepEqual(data, {
|
assert.deepEqual(data, {
|
||||||
filter_participated: expected_filter_participated,
|
filter_participated: expected_filter_participated,
|
||||||
filter_unread: false,
|
|
||||||
filter_muted: false,
|
filter_muted: false,
|
||||||
filter_pm: false,
|
filter_pm: false,
|
||||||
search_val: "",
|
search_val: "",
|
||||||
|
@ -810,7 +689,6 @@ test("test_filter_participated", ({mock_template}) => {
|
||||||
});
|
});
|
||||||
|
|
||||||
mock_template("recent_view_filters.hbs", false, (data) => {
|
mock_template("recent_view_filters.hbs", false, (data) => {
|
||||||
assert.equal(data.filter_unread, false);
|
|
||||||
assert.equal(data.filter_participated, expected_filter_participated);
|
assert.equal(data.filter_participated, expected_filter_participated);
|
||||||
return "<recent_view table stub>";
|
return "<recent_view table stub>";
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue