import { IPhotoItem } from './reportTypes'; import { REPORT_TEXTS } from './texts'; function readFile(file: File, read: (reader: FileReader) => void): Promise { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result as T); reader.onerror = () => reject(new Error(REPORT_TEXTS.photos.readError(file.name))); read(reader); }); } /** Выбранные фото: содержимое для загрузки и data: URL для превью. Файлы читаются по очереди. */ export async function readPhotoFiles(files: File[]): Promise { const photos: IPhotoItem[] = []; for (const file of files) { const buffer = await readFile(file, (reader) => reader.readAsArrayBuffer(file)); const preview = await readFile(file, (reader) => reader.readAsDataURL(file)); photos.push({ name: file.name, preview, buffer }); } return photos; }