@churchapps/helpers
Version:
Library of helper functions not specific to any one ChurchApps project or framework.
57 lines • 2.33 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FileHelper = void 0;
class FileHelper {
static postPresignedFile = (presigned, uploadedFile, progressCallback) => {
const formData = new FormData();
formData.append("key", presigned.key);
formData.append("acl", "public-read");
formData.append("Content-Type", uploadedFile.type);
for (const property in presigned.fields)
formData.append(property, presigned.fields[property]);
formData.append("file", uploadedFile);
// Use XMLHttpRequest for upload progress tracking since fetch doesn't support it natively
return new Promise((resolve, reject) => {
const xhr = new XMLHttpRequest();
xhr.upload.addEventListener('progress', (event) => {
if (event.lengthComputable) {
const percent = Math.round((event.loaded / event.total) * 100);
progressCallback(percent);
}
});
xhr.addEventListener('load', () => {
if (xhr.status >= 200 && xhr.status < 300) {
resolve({
status: xhr.status,
statusText: xhr.statusText,
data: xhr.responseText
});
}
else {
reject(new Error(`HTTP Error: ${xhr.status} ${xhr.statusText}`));
}
});
xhr.addEventListener('error', () => {
reject(new Error('Network error occurred'));
});
xhr.open('POST', presigned.url);
xhr.send(formData);
});
};
static dataURLtoBlob(dataurl) {
let arr = dataurl.split(",");
if (arr.length < 2)
throw new Error("Invalid data URL format");
let mimeMatch = arr[0].match(/:(.*?);/);
if (!mimeMatch)
throw new Error("Invalid MIME type in data URL");
let mime = mimeMatch[1];
let bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], { type: mime });
}
}
exports.FileHelper = FileHelper;
//# sourceMappingURL=FileHelper.js.map