Timeline: Use messageChangeCounter to mark messages read less often
This commit is contained in:
parent
69d0ed3309
commit
af2c884c9f
5 changed files with 162 additions and 6 deletions
|
@ -55,21 +55,22 @@ const {
|
|||
conversationStoppedByMissingVerification,
|
||||
createGroup,
|
||||
discardMessages,
|
||||
messageChanged,
|
||||
openConversationInternal,
|
||||
repairNewestMessage,
|
||||
repairOldestMessage,
|
||||
resetAllChatColors,
|
||||
reviewGroupMemberNameCollision,
|
||||
reviewMessageRequestNameCollision,
|
||||
setComposeGroupAvatar,
|
||||
setComposeGroupName,
|
||||
setComposeSearchTerm,
|
||||
setPreJoinConversation,
|
||||
showArchivedConversations,
|
||||
showChooseGroupMembers,
|
||||
showInbox,
|
||||
startComposing,
|
||||
showChooseGroupMembers,
|
||||
startSettingGroupMetadata,
|
||||
resetAllChatColors,
|
||||
reviewGroupMemberNameCollision,
|
||||
reviewMessageRequestNameCollision,
|
||||
toggleConversationInChooseMembers,
|
||||
} = actions;
|
||||
|
||||
|
@ -317,7 +318,7 @@ describe('both/state/ducks/conversations', () => {
|
|||
function getDefaultMessage(id: string): MessageType {
|
||||
return {
|
||||
attachments: [],
|
||||
conversationId: 'conversationId',
|
||||
conversationId,
|
||||
id,
|
||||
received_at: previousTime,
|
||||
sent_at: previousTime,
|
||||
|
@ -331,6 +332,7 @@ describe('both/state/ducks/conversations', () => {
|
|||
|
||||
function getDefaultConversationMessage(): ConversationMessageType {
|
||||
return {
|
||||
messageChangeCounter: 0,
|
||||
messageIds: [],
|
||||
metrics: {
|
||||
totalUnseen: 0,
|
||||
|
@ -1317,6 +1319,7 @@ describe('both/state/ducks/conversations', () => {
|
|||
},
|
||||
messagesByConversation: {
|
||||
[conversationId]: {
|
||||
messageChangeCounter: 0,
|
||||
metrics: {
|
||||
totalUnseen: 0,
|
||||
},
|
||||
|
@ -1387,6 +1390,139 @@ describe('both/state/ducks/conversations', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('MESSAGE_CHANGED', () => {
|
||||
const startState: ConversationsStateType = {
|
||||
...getEmptyState(),
|
||||
conversationLookup: {
|
||||
[conversationId]: {
|
||||
...getDefaultConversation(),
|
||||
id: conversationId,
|
||||
groupVersion: 2,
|
||||
groupId: 'dGhpc2lzYWdyb3VwaWR0aGlzaXNhZ3JvdXBpZHRoaXM=',
|
||||
},
|
||||
},
|
||||
messagesByConversation: {
|
||||
[conversationId]: {
|
||||
messageChangeCounter: 0,
|
||||
messageIds: [messageId, messageIdTwo, messageIdThree],
|
||||
metrics: {
|
||||
totalUnseen: 0,
|
||||
},
|
||||
scrollToMessageCounter: 0,
|
||||
},
|
||||
},
|
||||
messagesLookup: {
|
||||
[messageId]: {
|
||||
...getDefaultMessage(messageId),
|
||||
displayLimit: undefined,
|
||||
},
|
||||
[messageIdTwo]: {
|
||||
...getDefaultMessage(messageIdTwo),
|
||||
displayLimit: undefined,
|
||||
},
|
||||
[messageIdThree]: {
|
||||
...getDefaultMessage(messageIdThree),
|
||||
displayLimit: undefined,
|
||||
},
|
||||
},
|
||||
};
|
||||
const changedMessage = {
|
||||
...getDefaultMessage(messageId),
|
||||
body: 'changed',
|
||||
displayLimit: undefined,
|
||||
};
|
||||
|
||||
it('updates message data', () => {
|
||||
const state = reducer(
|
||||
startState,
|
||||
messageChanged(messageId, conversationId, changedMessage)
|
||||
);
|
||||
|
||||
assert.deepEqual(state.messagesLookup[messageId], changedMessage);
|
||||
assert.strictEqual(
|
||||
state.messagesByConversation[conversationId]?.messageChangeCounter,
|
||||
0
|
||||
);
|
||||
});
|
||||
|
||||
it('does not update lookup if it is a story reply', () => {
|
||||
const state = reducer(
|
||||
startState,
|
||||
messageChanged(messageId, conversationId, {
|
||||
...changedMessage,
|
||||
storyId: 'story-id',
|
||||
})
|
||||
);
|
||||
|
||||
assert.deepEqual(
|
||||
state.messagesLookup[messageId],
|
||||
startState.messagesLookup[messageId]
|
||||
);
|
||||
assert.strictEqual(
|
||||
state.messagesByConversation[conversationId]?.messageChangeCounter,
|
||||
0
|
||||
);
|
||||
});
|
||||
|
||||
it('increments message change counter if new message has reactions', () => {
|
||||
const changedMessageWithReaction: MessageType = {
|
||||
...changedMessage,
|
||||
reactions: [
|
||||
{
|
||||
emoji: '🎁',
|
||||
fromId: 'some-other-id',
|
||||
timestamp: 2222,
|
||||
targetTimestamp: 1111,
|
||||
targetAuthorUuid: 'author-uuid',
|
||||
},
|
||||
],
|
||||
};
|
||||
const state = reducer(
|
||||
startState,
|
||||
messageChanged(messageId, conversationId, changedMessageWithReaction)
|
||||
);
|
||||
|
||||
assert.deepEqual(
|
||||
state.messagesLookup[messageId],
|
||||
changedMessageWithReaction
|
||||
);
|
||||
assert.strictEqual(
|
||||
state.messagesByConversation[conversationId]?.messageChangeCounter,
|
||||
1
|
||||
);
|
||||
});
|
||||
|
||||
it('does not increment message change counter if only old message had reactions', () => {
|
||||
const updatedStartState = {
|
||||
...startState,
|
||||
messagesLookup: {
|
||||
[messageId]: {
|
||||
...startState.messagesLookup[messageId],
|
||||
reactions: [
|
||||
{
|
||||
emoji: '🎁',
|
||||
fromId: 'some-other-id',
|
||||
timestamp: 2222,
|
||||
targetTimestamp: 1111,
|
||||
targetAuthorUuid: 'author-uuid',
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
};
|
||||
const state = reducer(
|
||||
updatedStartState,
|
||||
messageChanged(messageId, conversationId, changedMessage)
|
||||
);
|
||||
|
||||
assert.deepEqual(state.messagesLookup[messageId], changedMessage);
|
||||
assert.strictEqual(
|
||||
state.messagesByConversation[conversationId]?.messageChangeCounter,
|
||||
0
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('SHOW_ARCHIVED_CONVERSATIONS', () => {
|
||||
it('is a no-op when already at the archive', () => {
|
||||
const state = {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue