UNPKG

@sendbird/uikit-react

Version:

Sendbird UIKit for React: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.

122 lines (119 loc) 7.14 kB
import { a as __awaiter, b as __generator } from './bundle-CzBQNSmE.js'; import { p as pxToNumber } from './bundle-QNC758GX.js'; var compressImage = function (_a) { var imageFile = _a.imageFile, compressionRate = _a.compressionRate, resizingWidth = _a.resizingWidth, resizingHeight = _a.resizingHeight, outputFormat = _a.outputFormat; var image = document.createElement('img'); return new Promise(function (resolve, reject) { image.src = URL.createObjectURL(imageFile); image.onerror = reject; image.onload = function () { URL.revokeObjectURL(image.src); var canvas = document.createElement('canvas'); var originWidth = image.width; var originHeight = image.height; var targetResizingWidth = (!resizingWidth || resizingWidth > originWidth) ? originWidth : resizingWidth; var targetResizingHeight = (!resizingHeight || resizingHeight > originHeight) ? originHeight : resizingHeight; var widthRatio = originWidth / targetResizingWidth; var heightRatio = originHeight / targetResizingHeight; /** * Set the target resizing values again with the calculated ratios * to use the impactful value, so the original images' ratio won't be broken. */ if (widthRatio > heightRatio) { targetResizingHeight = originHeight / (resizingWidth ? widthRatio : 1); } else if (heightRatio > widthRatio) { targetResizingWidth = originWidth / (resizingHeight ? heightRatio : 1); } canvas.width = targetResizingWidth; canvas.height = targetResizingHeight; var ctx = canvas.getContext('2d'); if (!ctx) { reject(new Error('Failed to get canvas 2d context')); return; } ctx.drawImage(image, 0, 0, targetResizingWidth, targetResizingHeight); // Change the file.name & file.type for converting file type var targetFileType = outputFormat === 'preserve' ? imageFile.type : "image/".concat(outputFormat); var targetSubtype = targetFileType.split('/').pop(); var dotIndex = imageFile.name.lastIndexOf('.'); // targetName = `fileName.targetSubtype` var targetName = "".concat(dotIndex === -1 ? imageFile.name : imageFile.name.substring(0, dotIndex), ".").concat(targetSubtype); ctx.canvas.toBlob(function (blob) { if (blob) { var file = new File([blob], targetName, { type: targetFileType }); resolve(file); } else { reject(new Error('Failed to compress image')); } }, targetFileType, compressionRate); }; }); }; var compressImages = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) { var compressionRate, _c, outputFormat, resizingWidth, resizingHeight, result; var files = _b.files, logger = _b.logger, imageCompression = _b.imageCompression; return __generator(this, function (_d) { switch (_d.label) { case 0: compressionRate = imageCompression.compressionRate, _c = imageCompression.outputFormat, outputFormat = _c === void 0 ? 'preserve' : _c; resizingWidth = imageCompression.resizingWidth ? pxToNumber(imageCompression.resizingWidth) : undefined; resizingHeight = imageCompression.resizingHeight ? pxToNumber(imageCompression.resizingHeight) : undefined; result = { failedIndexes: [], compressedFiles: [], }; if (!(Array.isArray(files) && files.length > 0)) { logger === null || logger === void 0 ? void 0 : logger.warning('utils - compressImages: There are no files.', files); return [2 /*return*/, result]; } if (!compressionRate || compressionRate < 0 || 1 < compressionRate) { logger === null || logger === void 0 ? void 0 : logger.warning('utils - compressImages: The compressionRate is not acceptable.', compressionRate); return [2 /*return*/, result]; } return [4 /*yield*/, Promise.all(files .map(function (file, index) { return __awaiter(void 0, void 0, void 0, function () { var compressedImage, err_1; return __generator(this, function (_a) { switch (_a.label) { case 0: if (!(file.type === 'image/jpg' || file.type === 'image/png' || file.type === 'image/jpeg')) { logger === null || logger === void 0 ? void 0 : logger.warning('utils - compressImages: The fileType is not compressible.', { file: file, index: index }); result.failedIndexes.push(index); result.compressedFiles.push(file); return [2 /*return*/]; } _a.label = 1; case 1: _a.trys.push([1, 3, , 4]); return [4 /*yield*/, compressImage({ imageFile: file, compressionRate: compressionRate, resizingWidth: resizingWidth, resizingHeight: resizingHeight, outputFormat: outputFormat, })]; case 2: compressedImage = _a.sent(); result.compressedFiles.push(compressedImage); return [3 /*break*/, 4]; case 3: err_1 = _a.sent(); result.compressedFiles.push(file); result.failedIndexes.push(index); logger === null || logger === void 0 ? void 0 : logger.warning('utils - compressImages: Failed to compress image file', { file: file, err: err_1 }); return [3 /*break*/, 4]; case 4: return [2 /*return*/]; } }); }); }))]; case 1: _d.sent(); logger === null || logger === void 0 ? void 0 : logger.info('utils - compressImages: Finished compressing images', result); return [2 /*return*/, result]; } }); }); }; export { compressImages as c }; //# sourceMappingURL=bundle-D1G8sq-4.js.map