UNPKG

@brizy/cloud-media-upload

Version:
75 lines (74 loc) 2.81 kB
import { ApiFileTypes } from "@brizy/media-gallery/lib/pages/mediaLibrary/types/types"; import mimes from "./mimes.json"; //#region exact like in builder var TypesOfExtensions; (function (TypesOfExtensions) { TypesOfExtensions["Image"] = "image"; TypesOfExtensions["Video"] = "video"; TypesOfExtensions["Audio"] = "audio"; })(TypesOfExtensions || (TypesOfExtensions = {})); const isTypeOfExtension = (type) => Object.values(TypesOfExtensions).includes(type); const getAllMimesOfType = (type) => Object.values(mimes).reduce((acc, value) => { const result = value.filter((i) => i.includes(type)); return result.length ? [...acc, ...result] : acc; }, []); const getAllMimes = () => Object.values(mimes).flat(); function isT(v) { return typeof v !== "undefined" && v !== null; } const fromExtensionsToMimeTypes = (extensions) => extensions.length ? extensions .reduce((acc, i) => { if (i.includes("*")) { const type = i.split("/")[0]; return isTypeOfExtension(type) ? [...acc, ...getAllMimesOfType(type)] : acc; } else { const key = i.replace(/\./g, ""); return [...acc, ...mimes[key]]; } }, []) .filter(isT) : getAllMimes(); //#endregion export const getAcceptableTypes = (acceptedExtensions) => fromExtensionsToMimeTypes(acceptedExtensions).filter(isT); export const fromItemToImage = ({ name, fileName, extension, altTitle }) => ({ uid: name, fileName: `${fileName}.${extension}`, altTitle, }); export const onInsertFiles = (res, rej, handleClose) => (payload) => { if (Array.isArray(payload)) { rej(new Error("Failed to upload file. Please upload a valid file.")); } else { res(fromItemToImage(payload)); handleClose(); } }; export const fromValToMediaGalleryParam = (key, value) => (key && value ? { [key]: value } : {}); export const getBase64 = async (file) => { return await new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = (e) => { typeof e.target?.result === "string" ? resolve(e.target?.result) : reject("Error read file."); }; reader.onerror = () => { reject("Error read file."); }; reader.onabort = () => { reject("Abort read file."); }; reader.readAsDataURL(file); }); }; export const getTypeOrDocument = (type) => ApiFileTypes.VIDEO === type || ApiFileTypes.AUDIO === type || ApiFileTypes.IMAGE === type ? type : ApiFileTypes.DOCUMENT; export const makeUrl = (baseUrl, params = {}) => { const url = new URL(baseUrl); Object.entries(params).forEach(([key, value]) => { url.searchParams.append(key, value); }); return url.toString(); };