Message List Content: Fix crash in calculateSenderGroups (#5554)
This commit is contained in:
parent
2072059cf4
commit
dffbd96001
@ -21,17 +21,18 @@ export function isAlbum(messageOrAlbum: ApiMessage | IAlbum): messageOrAlbum is
|
|||||||
export function groupMessages(
|
export function groupMessages(
|
||||||
messages: ApiMessage[], firstUnreadId?: number, topMessageId?: number, isChatWithSelf?: boolean,
|
messages: ApiMessage[], firstUnreadId?: number, topMessageId?: number, isChatWithSelf?: boolean,
|
||||||
) {
|
) {
|
||||||
let currentSenderGroup: SenderGroup = [];
|
const initDateGroup: MessageDateGroup = {
|
||||||
let currentDateGroup = {
|
|
||||||
originalDate: messages[0].date,
|
originalDate: messages[0].date,
|
||||||
datetime: getDayStartAt(messages[0].date * 1000),
|
datetime: getDayStartAt(messages[0].date * 1000),
|
||||||
senderGroups: [currentSenderGroup],
|
senderGroups: [[]],
|
||||||
};
|
};
|
||||||
let currentAlbum: IAlbum | undefined;
|
let currentAlbum: IAlbum | undefined;
|
||||||
|
|
||||||
const dateGroups: MessageDateGroup[] = [currentDateGroup];
|
const dateGroups: MessageDateGroup[] = [initDateGroup];
|
||||||
|
|
||||||
messages.forEach((message, index) => {
|
messages.forEach((message, index) => {
|
||||||
|
const currentDateGroup = dateGroups[dateGroups.length - 1];
|
||||||
|
const currentSenderGroup = currentDateGroup.senderGroups[currentDateGroup.senderGroups.length - 1];
|
||||||
if (message.isInAlbum) {
|
if (message.isInAlbum) {
|
||||||
if (!currentAlbum) {
|
if (!currentAlbum) {
|
||||||
currentAlbum = {
|
currentAlbum = {
|
||||||
@ -76,19 +77,16 @@ export function groupMessages(
|
|||||||
currentAlbum = undefined;
|
currentAlbum = undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
const lastSenderGroupItem = currentSenderGroup[currentSenderGroup.length - 1];
|
const lastMessageInSenderGroup = currentSenderGroup[currentSenderGroup.length - 1];
|
||||||
if (nextMessage) {
|
if (nextMessage && !currentAlbum) {
|
||||||
const nextMessageDayStartsAt = getDayStartAt(nextMessage.date * 1000);
|
const nextMessageDayStartsAt = getDayStartAt(nextMessage.date * 1000);
|
||||||
if (currentDateGroup.datetime !== nextMessageDayStartsAt) {
|
if (currentDateGroup.datetime !== nextMessageDayStartsAt) {
|
||||||
currentDateGroup = {
|
const newDateGroup: MessageDateGroup = {
|
||||||
originalDate: nextMessage.date,
|
originalDate: nextMessage.date,
|
||||||
datetime: nextMessageDayStartsAt,
|
datetime: nextMessageDayStartsAt,
|
||||||
senderGroups: [],
|
senderGroups: [[]],
|
||||||
};
|
};
|
||||||
dateGroups.push(currentDateGroup);
|
dateGroups.push(newDateGroup);
|
||||||
|
|
||||||
currentSenderGroup = [];
|
|
||||||
currentDateGroup.senderGroups.push(currentSenderGroup);
|
|
||||||
} else if (
|
} else if (
|
||||||
nextMessage.id === firstUnreadId
|
nextMessage.id === firstUnreadId
|
||||||
|| message.senderId !== nextMessage.senderId
|
|| message.senderId !== nextMessage.senderId
|
||||||
@ -101,13 +99,13 @@ export function groupMessages(
|
|||||||
|| (nextMessage.date - message.date) > GROUP_INTERVAL_SECONDS
|
|| (nextMessage.date - message.date) > GROUP_INTERVAL_SECONDS
|
||||||
|| (topMessageId
|
|| (topMessageId
|
||||||
&& (message.id === topMessageId
|
&& (message.id === topMessageId
|
||||||
|| (lastSenderGroupItem
|
|| (lastMessageInSenderGroup
|
||||||
&& 'mainMessage' in lastSenderGroupItem && lastSenderGroupItem.mainMessage?.id === topMessageId))
|
&& 'mainMessage' in lastMessageInSenderGroup
|
||||||
|
&& lastMessageInSenderGroup.mainMessage?.id === topMessageId))
|
||||||
&& nextMessage.id !== topMessageId)
|
&& nextMessage.id !== topMessageId)
|
||||||
|| (isChatWithSelf && message.forwardInfo?.fromId !== nextMessage.forwardInfo?.fromId)
|
|| (isChatWithSelf && message.forwardInfo?.fromId !== nextMessage.forwardInfo?.fromId)
|
||||||
) {
|
) {
|
||||||
currentSenderGroup = [];
|
currentDateGroup.senderGroups.push([]);
|
||||||
currentDateGroup.senderGroups.push(currentSenderGroup);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user