You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
import is from '@sindresorhus/is';
|
|
import { Message } from './Message';
|
|
|
|
|
|
interface ConversationLastMessageUpdate {
|
|
lastMessage: string | null;
|
|
timestamp: number | null;
|
|
}
|
|
|
|
export const createLastMessageUpdate = ({
|
|
currentLastMessageText,
|
|
currentTimestamp,
|
|
lastMessage,
|
|
lastMessageNotificationText,
|
|
}: {
|
|
currentLastMessageText: string | null,
|
|
currentTimestamp: number | null,
|
|
lastMessage: Message | null,
|
|
lastMessageNotificationText: string | null,
|
|
}): ConversationLastMessageUpdate => {
|
|
if (lastMessage === null) {
|
|
return {
|
|
lastMessage: '',
|
|
timestamp: null,
|
|
};
|
|
}
|
|
|
|
const { type } = lastMessage;
|
|
const isVerifiedChangeMessage = type === 'verified-change';
|
|
const isExpiringMessage = is.object(lastMessage.expirationTimerUpdate);
|
|
const shouldUpdateTimestamp = !isVerifiedChangeMessage && !isExpiringMessage;
|
|
|
|
const newTimestamp = shouldUpdateTimestamp ?
|
|
lastMessage.sent_at :
|
|
currentTimestamp;
|
|
|
|
const shouldUpdateLastMessageText = !isVerifiedChangeMessage;
|
|
const newLastMessageText = shouldUpdateLastMessageText ?
|
|
lastMessageNotificationText : currentLastMessageText;
|
|
|
|
return {
|
|
lastMessage: newLastMessageText,
|
|
timestamp: newTimestamp,
|
|
};
|
|
};
|