ducks/conversations: Ensure metrics agree with in-memory messages
* ducks/conversations: Ensure metrics agree with in-memory messages * Clean up logic cleaning up metrics
This commit is contained in:
parent
7aaee0cb64
commit
4af7a9ae2c
2 changed files with 25 additions and 4 deletions
|
@ -795,10 +795,10 @@
|
||||||
let scrollToLatestUnread = true;
|
let scrollToLatestUnread = true;
|
||||||
|
|
||||||
if (newestMessageId) {
|
if (newestMessageId) {
|
||||||
const message = await getMessageById(newestMessageId, {
|
const newestInMemoryMessage = await getMessageById(newestMessageId, {
|
||||||
Message: Whisper.Message,
|
Message: Whisper.Message,
|
||||||
});
|
});
|
||||||
if (!message) {
|
if (!newestInMemoryMessage) {
|
||||||
window.log.warn(
|
window.log.warn(
|
||||||
`loadNewestMessages: did not find message ${newestMessageId}`
|
`loadNewestMessages: did not find message ${newestMessageId}`
|
||||||
);
|
);
|
||||||
|
@ -806,7 +806,9 @@
|
||||||
|
|
||||||
// If newest in-memory message is unread, scrolling down would mean going to
|
// If newest in-memory message is unread, scrolling down would mean going to
|
||||||
// the very bottom, not the oldest unread.
|
// the very bottom, not the oldest unread.
|
||||||
scrollToLatestUnread = !message.isUnread();
|
if (newestInMemoryMessage.isUnread()) {
|
||||||
|
scrollToLatestUnread = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const metrics = await getMessageMetricsForConversation(conversationId);
|
const metrics = await getMessageMetricsForConversation(conversationId);
|
||||||
|
|
|
@ -736,6 +736,21 @@ export function reducer(
|
||||||
|
|
||||||
const lookup = fromPairs(messages.map(message => [message.id, message]));
|
const lookup = fromPairs(messages.map(message => [message.id, message]));
|
||||||
|
|
||||||
|
let { newest, oldest } = metrics;
|
||||||
|
|
||||||
|
// If our metrics are a little out of date, we'll fix them up
|
||||||
|
if (messages.length > 0) {
|
||||||
|
const first = messages[0];
|
||||||
|
if (first && (!oldest || first.received_at < oldest.received_at)) {
|
||||||
|
oldest = pick(first, ['id', 'received_at']);
|
||||||
|
}
|
||||||
|
|
||||||
|
const last = messages[messages.length - 1];
|
||||||
|
if (last && (!newest || last.received_at > newest.received_at)) {
|
||||||
|
newest = pick(last, ['id', 'received_at']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
selectedMessage: scrollToMessageId,
|
selectedMessage: scrollToMessageId,
|
||||||
|
@ -753,7 +768,11 @@ export function reducer(
|
||||||
? existingConversation.scrollToMessageCounter + 1
|
? existingConversation.scrollToMessageCounter + 1
|
||||||
: 0,
|
: 0,
|
||||||
messageIds,
|
messageIds,
|
||||||
metrics,
|
metrics: {
|
||||||
|
...metrics,
|
||||||
|
newest,
|
||||||
|
oldest,
|
||||||
|
},
|
||||||
resetCounter,
|
resetCounter,
|
||||||
heightChangeMessageIds: [],
|
heightChangeMessageIds: [],
|
||||||
},
|
},
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue