32 lines
948 B
TypeScript
32 lines
948 B
TypeScript
import { DELETED_MESSAGE_CONTENT, type Message } from '../../../shared-kernel';
|
|
|
|
/** Extracts the effective timestamp from a message (editedAt takes priority). */
|
|
export function getMessageTimestamp(msg: Message): number {
|
|
return msg.editedAt || msg.timestamp || 0;
|
|
}
|
|
|
|
/** Computes the most recent timestamp across a batch of messages. */
|
|
export function getLatestTimestamp(messages: Message[]): number {
|
|
return messages.reduce(
|
|
(max, msg) => Math.max(max, getMessageTimestamp(msg)),
|
|
0
|
|
);
|
|
}
|
|
|
|
/** Strips sensitive content from a deleted message. */
|
|
export function normaliseDeletedMessage(message: Message): Message {
|
|
if (!message.isDeleted)
|
|
return message;
|
|
|
|
return {
|
|
...message,
|
|
content: DELETED_MESSAGE_CONTENT,
|
|
reactions: []
|
|
};
|
|
}
|
|
|
|
/** Whether the given user is allowed to edit this message. */
|
|
export function canEditMessage(message: Message, userId: string): boolean {
|
|
return message.senderId === userId;
|
|
}
|