emo-online-api / emo /frontend /src /lib /imageAttachments.js
Emo Online
Deploy Emo API
dd87944
Raw
History Blame Contribute Delete
1.46 kB
const MAX_IMAGES = 4;
const MAX_BYTES = 4 * 1024 * 1024;
function readFileAsBase64(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = () => {
const dataUrl = reader.result;
if (typeof dataUrl !== "string") {
reject(new Error("Lecture image échouée"));
return;
}
const [header, b64] = dataUrl.split(",");
resolve({
preview: dataUrl,
base64: b64,
mediaType: header.match(/data:([^;]+)/)?.[1] || "image/jpeg",
name: file.name,
});
};
reader.onerror = () => reject(reader.error || new Error("Lecture image échouée"));
reader.readAsDataURL(file);
});
}
export async function filesToAttachments(files) {
const list = Array.from(files || []).filter((f) => f.type.startsWith("image/"));
const out = [];
for (const file of list) {
if (file.size > MAX_BYTES) continue;
try {
out.push(await readFileAsBase64(file));
} catch {
/* skip */
}
if (out.length >= MAX_IMAGES) break;
}
return out;
}
export function mergeAttachments(existing, incoming, max = MAX_IMAGES) {
const seen = new Set(existing.map((a) => a.preview));
const merged = [...existing];
for (const item of incoming) {
if (merged.length >= max) break;
if (seen.has(item.preview)) continue;
seen.add(item.preview);
merged.push(item);
}
return merged;
}
export { MAX_IMAGES };