unread_ui: Convert module to typescript.

This commit is contained in:
evykassirer 2023-12-24 15:22:40 -08:00 committed by Anders Kaseorg
parent 8d685d5b5a
commit 6157d83d3a
3 changed files with 23 additions and 11 deletions

View File

@ -255,7 +255,7 @@ EXEMPT_FILES = make_set(
"web/src/ui_util.ts",
"web/src/unread.ts",
"web/src/unread_ops.js",
"web/src/unread_ui.js",
"web/src/unread_ui.ts",
"web/src/upload.js",
"web/src/upload_widget.ts",
"web/src/url-template.d.ts",

View File

@ -25,6 +25,8 @@ type MessageList = {
all_messages: () => Message[];
get: (id: number) => Message | undefined;
pre_narrow_offset?: number;
can_mark_messages_read_without_setting: () => boolean;
resume_reading: () => void;
data: MessageListData;
};

View File

@ -1,25 +1,29 @@
import $ from "jquery";
import assert from "minimalistic-assert";
import render_mark_as_read_disabled_banner from "../templates/unread_banner/mark_as_read_disabled_banner.hbs";
import render_mark_as_read_only_in_conversation_view from "../templates/unread_banner/mark_as_read_only_in_conversation_view.hbs";
import render_mark_as_read_turned_off_banner from "../templates/unread_banner/mark_as_read_turned_off_banner.hbs";
import * as message_lists from "./message_lists";
import type {Message} from "./message_store";
import * as narrow_state from "./narrow_state";
import {page_params} from "./page_params";
import {web_mark_read_on_scroll_policy_values} from "./settings_config";
import * as unread from "./unread";
import type {FullUnreadCountsData} from "./unread";
import {user_settings} from "./user_settings";
let user_closed_unread_banner = false;
const update_unread_counts_hooks = [];
type UpdateUnreadCountsHook = (counts: FullUnreadCountsData, skip_animations: boolean) => void;
const update_unread_counts_hooks: UpdateUnreadCountsHook[] = [];
export function register_update_unread_counts_hook(f) {
export function register_update_unread_counts_hook(f: UpdateUnreadCountsHook): void {
update_unread_counts_hooks.push(f);
}
export function update_unread_banner() {
export function update_unread_banner(): void {
const filter = narrow_state.filter();
const is_conversation_view = filter === undefined ? false : filter.is_conversation_view();
if (
@ -36,6 +40,7 @@ export function update_unread_banner() {
render_mark_as_read_only_in_conversation_view(),
);
} else {
assert(message_lists.current !== undefined);
$("#mark_read_on_scroll_state_banner").html(render_mark_as_read_turned_off_banner());
if (message_lists.current.can_mark_messages_read_without_setting()) {
hide_unread_banner();
@ -43,31 +48,31 @@ export function update_unread_banner() {
}
}
export function hide_unread_banner() {
export function hide_unread_banner(): void {
// Use visibility instead of hide() to prevent messages on the screen from
// shifting vertically.
$("#mark_read_on_scroll_state_banner").toggleClass("invisible", true);
}
export function reset_unread_banner() {
export function reset_unread_banner(): void {
hide_unread_banner();
user_closed_unread_banner = false;
}
export function notify_messages_remain_unread() {
export function notify_messages_remain_unread(): void {
if (!user_closed_unread_banner) {
$("#mark_read_on_scroll_state_banner").toggleClass("invisible", false);
}
}
export function set_count_toggle_button($elem, count) {
export function set_count_toggle_button($elem: JQuery, count: number): JQuery {
if (count === 0) {
return $elem.hide();
}
return $elem.show();
}
export function update_unread_counts(skip_animations = false) {
export function update_unread_counts(skip_animations = false): void {
// Pure computation:
const res = unread.get_counts();
@ -83,7 +88,7 @@ export function update_unread_counts(skip_animations = false) {
set_count_toggle_button($("#streamlist-toggle-unreadcount"), res.home_unread_messages);
}
export function should_display_bankruptcy_banner() {
export function should_display_bankruptcy_banner(): boolean {
// Until we've handled possibly declaring bankruptcy, don't show
// unread counts since they only consider messages that are loaded
// client side and may be different from the numbers reported by
@ -106,10 +111,15 @@ export function should_display_bankruptcy_banner() {
return false;
}
export function initialize({notify_server_messages_read}) {
export function initialize({
notify_server_messages_read,
}: {
notify_server_messages_read: (unread_messages: Message[]) => void;
}): void {
const skip_animations = true;
update_unread_counts(skip_animations);
$("body").on("click", "#mark_view_read", () => {
assert(message_lists.current !== undefined);
// Mark all messages in the current view as read.
//
// BUG: This logic only supports marking messages visible in