message_list_data: Potentially return undefined in first_unread_message_id.

This commit is contained in:
evykassirer 2023-12-27 18:38:59 -08:00 committed by Anders Kaseorg
parent 0cf1d49fee
commit 0f1fa8e159
3 changed files with 10 additions and 7 deletions

View File

@ -1,5 +1,6 @@
import autosize from "autosize";
import $ from "jquery";
import assert from "minimalistic-assert";
import {all_messages_data} from "./all_messages_data";
import * as blueslip from "./blueslip";
@ -131,7 +132,9 @@ export class MessageList {
// message. Regardless of whether the messages are new or
// old, we want to select a message as though we just
// entered this view.
this.select_id(this.first_unread_message_id(), {then_scroll: true, use_closest: true});
const first_unread_message_id = this.first_unread_message_id();
assert(first_unread_message_id !== undefined);
this.select_id(first_unread_message_id, {then_scroll: true, use_closest: true});
}
return render_info;

View File

@ -1,5 +1,3 @@
import assert from "minimalistic-assert";
import * as blueslip from "./blueslip";
import {FetchStatus} from "./fetch_status";
import type {Filter} from "./filter";
@ -285,7 +283,7 @@ export class MessageListData {
this._items = this.unmuted_messages(this._all_items);
}
first_unread_message_id(): number {
first_unread_message_id(): number | undefined {
const first_unread = this._items.find((message) => unread.message_unread(message));
if (first_unread) {
@ -293,9 +291,7 @@ export class MessageListData {
}
// if no unread, return the bottom message
const last = this.last();
assert(last !== undefined);
return last.id;
return this.last()?.id;
}
has_unread_messages(): boolean {

View File

@ -1,5 +1,6 @@
import * as Sentry from "@sentry/browser";
import $ from "jquery";
import assert from "minimalistic-assert";
import {all_messages_data} from "./all_messages_data";
import * as blueslip from "./blueslip";
@ -730,6 +731,8 @@ export function update_selection(opts) {
if (msg_id === undefined) {
msg_id = message_lists.current.first_unread_message_id();
}
// There should be something since it's not visibly empty.
assert(msg_id !== undefined);
const preserve_pre_narrowing_screen_position =
message_lists.current.get(msg_id) !== undefined && select_offset !== undefined;
@ -1122,6 +1125,7 @@ export function deactivate() {
}
message_id_to_select = message_lists.current.selected_id();
}
assert(message_id_to_select !== undefined);
message_lists.current.select_id(message_id_to_select, select_opts);
}