import { atom } from 'jotai'; import { atomFamily } from 'jotai/utils'; import { Descendant } from 'slate'; import { EncryptedAttachmentInfo } from 'browser-encrypt-attachment'; import { IEventRelation } from 'matrix-js-sdk'; import { createUploadAtomFamily } from '../upload'; import { TUploadContent } from '../../utils/matrix'; import { createListAtom } from '../list'; export type TUploadMetadata = { markedAsSpoiler: boolean; }; export type TUploadItem = { file: TUploadContent; originalFile: TUploadContent; metadata: TUploadMetadata; encInfo: EncryptedAttachmentInfo | undefined; }; export type TUploadListAtom = ReturnType>; export const roomIdToUploadItemsAtomFamily = atomFamily( createListAtom ); export const roomUploadAtomFamily = createUploadAtomFamily(); export type RoomIdToMsgAction = | { type: 'PUT'; roomId: string; msg: Descendant[]; } | { type: 'DELETE'; roomId: string; }; const createMsgDraftAtom = () => atom([]); export type TMsgDraftAtom = ReturnType; export const roomIdToMsgDraftAtomFamily = atomFamily(() => createMsgDraftAtom() ); export type IReplyDraft = { userId: string; eventId: string; body: string; formattedBody?: string | undefined; relation?: IEventRelation | undefined; }; const createReplyDraftAtom = () => atom(undefined); export type TReplyDraftAtom = ReturnType; export const roomIdToReplyDraftAtomFamily = atomFamily(() => createReplyDraftAtom() );