import Model from '@nozbe/watermelondb/Model'; import { MarkdownAST } from '@rocket.chat/message-parser'; import { MessageTypeLoad } from '../lib/constants'; import { IAttachment } from './IAttachment'; import { IReaction } from './IReaction'; import { TThreadMessageModel } from './IThreadMessage'; import { TThreadModel } from './IThread'; import { IUrl, IUrlFromServer } from './IUrl'; export type MessageType = 'jitsi_call_started' | 'discussion-created' | 'e2e' | 'load_more' | 'rm' | 'uj' | MessageTypeLoad; export interface IUserMessage { _id: string; username?: string; name?: string; } export interface IUserMention extends IUserMessage { type: string; } export interface IUserChannel { [index: number]: string | number; name: string; _id: string; } export interface IEditedBy { _id: string; username: string; } export type TOnLinkPress = (link: string) => void; export interface ITranslations { _id: string; language: string; value: string; } export type E2EType = 'pending' | 'done'; export interface ILastMessage { _id?: string; rid?: string; tshow?: boolean; t?: MessageType; tmid?: string; msg?: string; e2e?: E2EType; ts?: string | Date; u: IUserMessage; _updatedAt?: string | Date; urls?: IUrlFromServer[]; mentions?: IUserMention[]; channels?: IUserChannel[]; md?: MarkdownAST; attachments?: IAttachment[]; reactions?: IReaction[]; unread?: boolean; pinned?: boolean; status?: number; token?: string; } interface IMessageFile { _id: string; name: string; type: string; } export interface IMessageFromServer { _id: string; rid: string; msg?: string; ts: string | Date; // wm date issue u: IUserMessage; _updatedAt: string | Date; urls?: IUrl[]; mentions?: IUserMention[]; channels?: IUserChannel[]; md?: MarkdownAST; file?: IMessageFile; files?: IMessageFile[]; groupable?: boolean; attachments?: IAttachment[]; t?: MessageType; drid?: string; dcount?: number; dml: string | Date; starred?: | { _id: string; } | boolean; pinned?: boolean; pinnedAt?: string | Date; pinnedBy?: { _id: string; username: string; }; score?: number; } export interface ILoadMoreMessage { _id: string; rid: string; ts: string; t: string; msg: string; } export interface IMessage extends IMessageFromServer { id: string; t: MessageType; alias?: string; parseUrls?: boolean; avatar?: string; emoji?: string; status?: number; pinned?: boolean; starred?: | { _id: string; } | boolean; editedBy?: IEditedBy; reactions?: IReaction[]; role?: string; drid?: string; dcount?: number; dlm?: string | Date; tmid?: string; tcount?: number | null; tlm?: string | Date | null; replies?: string[]; unread?: boolean; autoTranslate?: boolean; translations?: ITranslations[]; tmsg?: string; blocks?: any; e2e?: E2EType; tshow?: boolean; comment?: string; subscription?: { id: string }; } export type TMessageModel = IMessage & Model; export type TAnyMessageModel = TMessageModel | TThreadModel | TThreadMessageModel; export type TTypeMessages = IMessageFromServer | ILoadMoreMessage | IMessage; // Read receipts to ReadReceiptView and chat.getMessageReadReceipts export interface IReadReceipts { _id: string; roomId: string; userId: string; messageId: string; ts: string; user?: IUserMessage; }