37 lines
1.2 KiB
TypeScript
37 lines
1.2 KiB
TypeScript
const MAX_FILE_SIZE = 10485760;
|
||
const MAX_PHOTO_SIZE = 5242880;
|
||
const MAX_VIDEO_SIZE = 52428800;
|
||
|
||
export const ACCEPT_SEND_MEDIA_TYPES_MAP = {
|
||
picture: ["jpg", "png"],
|
||
video: ["mp4"],
|
||
document: ["doc", "docx", "pdf", "txt", "xlsx", "csv"],
|
||
} as const;
|
||
|
||
const TOO_LARGE_TEXT = "Файл слишком большой";
|
||
|
||
export const checkAcceptableMediaType = (file: File) => {
|
||
if (file === null) return "";
|
||
|
||
const segments = file?.name.split(".");
|
||
const extension = segments[segments.length - 1];
|
||
const type = extension.toLowerCase();
|
||
|
||
switch (type) {
|
||
case ACCEPT_SEND_MEDIA_TYPES_MAP.document.find((name) => name === type):
|
||
if (file.size > MAX_FILE_SIZE) return TOO_LARGE_TEXT;
|
||
return "";
|
||
|
||
case ACCEPT_SEND_MEDIA_TYPES_MAP.picture.find((name) => name === type):
|
||
if (file.size > MAX_PHOTO_SIZE) return TOO_LARGE_TEXT;
|
||
return "";
|
||
|
||
case ACCEPT_SEND_MEDIA_TYPES_MAP.video.find((name) => name === type):
|
||
if (file.size > MAX_VIDEO_SIZE) return TOO_LARGE_TEXT;
|
||
return "";
|
||
ACCEPT_SEND_MEDIA_TYPES_MAP;
|
||
default:
|
||
return "Не удалось отправить файл. Недопустимый тип";
|
||
}
|
||
};
|