The communications platform that puts data protection first.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Rocket.Chat/apps/meteor/client/lib/chats/flows/uploadFiles.ts

56 lines
1.5 KiB

import { isRoomFederated } from '@rocket.chat/core-typings';
import { fileUploadIsValidContentType } from '../../../../app/utils/client';
import FileUploadModal from '../../../views/room/modals/FileUploadModal';
import { imperativeModal } from '../../imperativeModal';
import { prependReplies } from '../../utils/prependReplies';
import type { ChatAPI } from '../ChatAPI';
export const uploadFiles = async (chat: ChatAPI, files: readonly File[]): Promise<void> => {
const replies = chat.composer?.quotedMessages.get() ?? [];
const msg = await prependReplies('', replies);
const room = await chat.data.getRoom();
const queue = [...files];
const uploadNextFile = (): void => {
const file = queue.pop();
if (!file) {
chat.composer?.dismissAllQuotedMessages();
return;
}
imperativeModal.open({
component: FileUploadModal,
props: {
file,
fileName: file.name,
fileDescription: chat.composer?.text ?? '',
showDescription: room && !isRoomFederated(room),
onClose: (): void => {
imperativeModal.close();
uploadNextFile();
},
onSubmit: (fileName: string, description?: string): void => {
Object.defineProperty(file, 'name', {
writable: true,
value: fileName,
});
chat.uploads.send(file, {
description,
msg,
});
chat.composer?.clear();
imperativeModal.close();
uploadNextFile();
},
invalidContentType: Boolean(file.type && !fileUploadIsValidContentType(file.type)),
},
});
};
uploadNextFile();
};