UNPKG

stream-chat

Version:

JS SDK for the Stream Chat API

211 lines 11.3 kB
import { Channel } from './channel'; import { ChannelMemberResponse, DefaultGenerics, Event, ExtendableGenerics, FormatMessageResponse, MessageResponse, MessageSet, MessageSetType, PendingMessageResponse, ReactionResponse, UserResponse } from './types'; declare type ChannelReadStatus<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> = Record<string, { last_read: Date; unread_messages: number; user: UserResponse<StreamChatGenerics>; first_unread_message_id?: string; last_read_message_id?: string; }>; /** * ChannelState - A container class for the channel state. */ export declare class ChannelState<StreamChatGenerics extends ExtendableGenerics = DefaultGenerics> { _channel: Channel<StreamChatGenerics>; watcher_count: number; typing: Record<string, Event<StreamChatGenerics>>; read: ChannelReadStatus<StreamChatGenerics>; pinnedMessages: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>; pending_messages: Array<PendingMessageResponse<StreamChatGenerics>>; threads: Record<string, Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>>; mutedUsers: Array<UserResponse<StreamChatGenerics>>; watchers: Record<string, UserResponse<StreamChatGenerics>>; members: Record<string, ChannelMemberResponse<StreamChatGenerics>>; unreadCount: number; membership: ChannelMemberResponse<StreamChatGenerics>; last_message_at: Date | null; /** * Flag which indicates if channel state contain latest/recent messages or no. * This flag should be managed by UI sdks using a setter - setIsUpToDate. * When false, any new message (received by websocket event - message.new) will not * be pushed on to message list. */ isUpToDate: boolean; /** * Disjoint lists of messages * Users can jump in the message list (with searching) and this can result in disjoint lists of messages * The state manages these lists and merges them when lists overlap * The messages array contains the currently active set */ messageSets: MessageSet[]; constructor(channel: Channel<StreamChatGenerics>); get messages(): Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>; set messages(messages: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>); /** * The list of latest messages * The messages array not always contains the latest messages (for example if a user searched for an earlier message, that is in a different message set) */ get latestMessages(): Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>; set latestMessages(messages: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>); get messagePagination(): { hasNext: boolean; hasPrev: boolean; }; /** * addMessageSorted - Add a message to the state * * @param {MessageResponse<StreamChatGenerics>} newMessage A new message * @param {boolean} timestampChanged Whether updating a message with changed created_at value. * @param {boolean} addIfDoesNotExist Add message if it is not in the list, used to prevent out of order updated messages from being added. * @param {MessageSetType} messageSetToAddToIfDoesNotExist Which message set to add to if message is not in the list (only used if addIfDoesNotExist is true) */ addMessageSorted(newMessage: MessageResponse<StreamChatGenerics>, timestampChanged?: boolean, addIfDoesNotExist?: boolean, messageSetToAddToIfDoesNotExist?: MessageSetType): { messageSet: MessageSet<DefaultGenerics>; }; /** * Takes the message object, parses the dates, sets `__html` * and sets the status to `received` if missing; returns a new message object. * * @param {MessageResponse<StreamChatGenerics>} message `MessageResponse` object */ formatMessage: (message: MessageResponse<StreamChatGenerics>) => FormatMessageResponse<StreamChatGenerics>; /** * addMessagesSorted - Add the list of messages to state and resorts the messages * * @param {Array<MessageResponse<StreamChatGenerics>>} newMessages A list of messages * @param {boolean} timestampChanged Whether updating messages with changed created_at value. * @param {boolean} initializing Whether channel is being initialized. * @param {boolean} addIfDoesNotExist Add message if it is not in the list, used to prevent out of order updated messages from being added. * @param {MessageSetType} messageSetToAddToIfDoesNotExist Which message set to add to if messages are not in the list (only used if addIfDoesNotExist is true) * */ addMessagesSorted(newMessages: MessageResponse<StreamChatGenerics>[], timestampChanged?: boolean, initializing?: boolean, addIfDoesNotExist?: boolean, messageSetToAddToIfDoesNotExist?: MessageSetType): { messageSet: MessageSet<DefaultGenerics>; }; /** * addPinnedMessages - adds messages in pinnedMessages property * * @param {Array<MessageResponse<StreamChatGenerics>>} pinnedMessages A list of pinned messages * */ addPinnedMessages(pinnedMessages: MessageResponse<StreamChatGenerics>[]): void; /** * addPinnedMessage - adds message in pinnedMessages * * @param {MessageResponse<StreamChatGenerics>} pinnedMessage message to update * */ addPinnedMessage(pinnedMessage: MessageResponse<StreamChatGenerics>): void; /** * removePinnedMessage - removes pinned message from pinnedMessages * * @param {MessageResponse<StreamChatGenerics>} message message to remove * */ removePinnedMessage(message: MessageResponse<StreamChatGenerics>): void; addReaction(reaction: ReactionResponse<StreamChatGenerics>, message?: MessageResponse<StreamChatGenerics>, enforce_unique?: boolean): MessageResponse<StreamChatGenerics> | undefined; _addOwnReactionToMessage(ownReactions: ReactionResponse<StreamChatGenerics>[] | null | undefined, reaction: ReactionResponse<StreamChatGenerics>, enforce_unique?: boolean): ReactionResponse<StreamChatGenerics>[]; _removeOwnReactionFromMessage(ownReactions: ReactionResponse<StreamChatGenerics>[] | null | undefined, reaction: ReactionResponse<StreamChatGenerics>): ReactionResponse<StreamChatGenerics>[] | null | undefined; removeReaction(reaction: ReactionResponse<StreamChatGenerics>, message?: MessageResponse<StreamChatGenerics>): MessageResponse<StreamChatGenerics> | undefined; _updateQuotedMessageReferences({ message, remove, }: { message: MessageResponse<StreamChatGenerics>; remove?: boolean; }): void; removeQuotedMessageReferences(message: MessageResponse<StreamChatGenerics>): void; /** * Updates all instances of given message in channel state * @param message * @param updateFunc */ _updateMessage(message: { id?: string; parent_id?: string; pinned?: boolean; show_in_channel?: boolean; }, updateFunc: (msg: ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>) => ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>): void; /** * Setter for isUpToDate. * * @param isUpToDate Flag which indicates if channel state contain latest/recent messages or no. * This flag should be managed by UI sdks using a setter - setIsUpToDate. * When false, any new message (received by websocket event - message.new) will not * be pushed on to message list. */ setIsUpToDate: (isUpToDate: boolean) => void; /** * _addToMessageList - Adds a message to a list of messages, tries to update first, appends if message isn't found * * @param {Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>} messages A list of messages * @param message * @param {boolean} timestampChanged Whether updating a message with changed created_at value. * @param {string} sortBy field name to use to sort the messages by * @param {boolean} addIfDoesNotExist Add message if it is not in the list, used to prevent out of order updated messages from being added. */ _addToMessageList(messages: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>, message: ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>, timestampChanged?: boolean, sortBy?: 'pinned_at' | 'created_at', addIfDoesNotExist?: boolean): FormatMessageResponse<StreamChatGenerics>[]; /** * removeMessage - Description * * @param {{ id: string; parent_id?: string }} messageToRemove Object of the message to remove. Needs to have at id specified. * * @return {boolean} Returns if the message was removed */ removeMessage(messageToRemove: { id: string; messageSetIndex?: number; parent_id?: string; }): boolean; removeMessageFromArray: (msgArray: Array<ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>>, msg: { id: string; parent_id?: string; }) => { removed: boolean; result: FormatMessageResponse<StreamChatGenerics>[]; }; /** * Updates the message.user property with updated user object, for messages. * * @param {UserResponse<StreamChatGenerics>} user */ updateUserMessages: (user: UserResponse<StreamChatGenerics>) => void; /** * Marks the messages as deleted, from deleted user. * * @param {UserResponse<StreamChatGenerics>} user * @param {boolean} hardDelete */ deleteUserMessages: (user: UserResponse<StreamChatGenerics>, hardDelete?: boolean) => void; /** * filterErrorMessages - Removes error messages from the channel state. * */ filterErrorMessages(): void; /** * clean - Remove stale data such as users that stayed in typing state for more than 5 seconds */ clean(): void; clearMessages(): void; initMessages(): void; /** * loadMessageIntoState - Loads a given message (and messages around it) into the state * * @param {string} messageId The id of the message, or 'latest' to indicate switching to the latest messages * @param {string} parentMessageId The id of the parent message, if we want load a thread reply * @param {number} limit The page size if the message has to be queried from the server */ loadMessageIntoState(messageId: string | 'latest', parentMessageId?: string, limit?: number): Promise<void>; /** * findMessage - Finds a message inside the state * * @param {string} messageId The id of the message * @param {string} parentMessageId The id of the parent message, if we want load a thread reply * * @return {ReturnType<ChannelState<StreamChatGenerics>['formatMessage']>} Returns the message, or undefined if the message wasn't found */ findMessage(messageId: string, parentMessageId?: string): FormatMessageResponse<DefaultGenerics> | undefined; private switchToMessageSet; private areMessageSetsOverlap; private findMessageSetIndex; private findTargetMessageSet; } export {}; //# sourceMappingURL=channel_state.d.ts.map