import type { Channel, StreamChat } from 'stream-chat'; import type { DefaultAttachmentType, DefaultChannelType, DefaultCommandType, DefaultEventType, DefaultMessageType, DefaultReactionType, DefaultUserType, UnknownType, } from '../../types/types'; type MoveParameters< At extends UnknownType = DefaultAttachmentType, Ch extends UnknownType = DefaultChannelType, Co extends string = DefaultCommandType, Ev extends UnknownType = DefaultEventType, Me extends UnknownType = DefaultMessageType, Re extends UnknownType = DefaultReactionType, Us extends UnknownType = DefaultUserType, > = { channels: Channel[]; cid: string; }; export const moveChannelUp = < At extends UnknownType = DefaultAttachmentType, Ch extends UnknownType = DefaultChannelType, Co extends string = DefaultCommandType, Ev extends UnknownType = DefaultEventType, Me extends UnknownType = DefaultMessageType, Re extends UnknownType = DefaultReactionType, Us extends UnknownType = DefaultUserType, >({ cid, channels = [], }: MoveParameters) => { // get channel from channels const index = channels.findIndex((c) => c.cid === cid); if (index <= 0) return channels; const channel = channels[index]; // remove channel from current position and add to start channels.splice(index, 1); channels.unshift(channel); return [...channels]; }; type GetParameters< At extends UnknownType = DefaultAttachmentType, Ch extends UnknownType = DefaultChannelType, Co extends string = DefaultCommandType, Ev extends UnknownType = DefaultEventType, Me extends UnknownType = DefaultMessageType, Re extends UnknownType = DefaultReactionType, Us extends UnknownType = DefaultUserType, > = { client: StreamChat; id: string; type: string; }; export const getChannel = async < At extends UnknownType = DefaultAttachmentType, Ch extends UnknownType = DefaultChannelType, Co extends string = DefaultCommandType, Ev extends UnknownType = DefaultEventType, Me extends UnknownType = DefaultMessageType, Re extends UnknownType = DefaultReactionType, Us extends UnknownType = DefaultUserType, >({ client, id, type, }: GetParameters) => { const channel = client.channel(type, id); await channel.watch(); return channel; }; export const DEFAULT_QUERY_CHANNELS_LIMIT = 10; export const MAX_QUERY_CHANNELS_LIMIT = 30;