UNPKG

@sendbird/uikit-react

Version:

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

146 lines (140 loc) 7.88 kB
'use strict'; var _tslib = require('../../chunks/bundle-DdEJUQ3V.js'); var React = require('react'); var index = require('../../chunks/bundle-BUPw_lsA.js'); var hooks_useModal = require('../../hooks/useModal.js'); require('../../chunks/bundle-D66YmzI6.js'); var ui_Button = require('../../ui/Button.js'); var LocalizationContext = require('../../chunks/bundle-REYf6P50.js'); var ui_Modal = require('../../chunks/bundle-OV9QvRP8.js'); var compressImages = require('../../chunks/bundle-o7bJmsVG.js'); var consts = require('../../chunks/bundle-DWBI0JnU.js'); var useSendbird = require('../../chunks/bundle-D6mmpicY.js'); require('@sendbird/chat/groupChannel'); require('../../utils/message/getOutgoingMessageState.js'); require('../../chunks/bundle-DFNM8KjC.js'); require('../../chunks/bundle-CEY5QNl7.js'); require('../../chunks/bundle-BAy4Z2n_.js'); require('../../chunks/bundle-kfqOElgK.js'); require('react-dom'); require('../../chunks/bundle-BE-eUbjS.js'); require('../../chunks/bundle-C7WnFc5I.js'); require('../../chunks/bundle-BmtTyZzB.js'); require('../../ui/IconButton.js'); require('../../ui/Icon.js'); require('../../chunks/bundle-BeuUz2c0.js'); require('../../chunks/bundle-HERYYUXZ.js'); require('@sendbird/chat'); require('@sendbird/chat/openChannel'); require('../../chunks/bundle-CHvo3SHq.js'); function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefaultCompat(React); var useHandleUploadFiles = function (_a, _b) { var sendFileMessage = _a.sendFileMessage, sendMultipleFilesMessage = _a.sendMultipleFilesMessage, quoteMessage = _a.quoteMessage; var logger = _b.logger; var stringSet = LocalizationContext.useLocalization().stringSet; var config = useSendbird.useSendbird().state.config; var imageCompression = config.imageCompression; var uikitUploadSizeLimit = config === null || config === void 0 ? void 0 : config.uikitUploadSizeLimit; var uikitMultipleFilesMessageLimit = config === null || config === void 0 ? void 0 : config.uikitMultipleFilesMessageLimit; var openModal = hooks_useModal.useGlobalModalContext().openModal; var handleUploadFiles = React.useCallback(function (files) { return _tslib.__awaiter(void 0, void 0, void 0, function () { var compressedFiles, sendingFiles, file, imageFiles_1, otherFiles_1; return _tslib.__generator(this, function (_a) { switch (_a.label) { case 0: // Validate Parameters if (!sendFileMessage || !sendMultipleFilesMessage) { logger.warning('Channel|useHandleUploadFiles: required functions are undefined', { sendFileMessage: sendFileMessage, sendMultipleFilesMessage: sendMultipleFilesMessage }); return [2 /*return*/]; } if (files.length === 0) { logger.warning('Channel|useHandleUploadFiles: given file list is empty.', { files: files }); return [2 /*return*/]; } if (files.length > uikitMultipleFilesMessageLimit) { logger.info("Channel|useHandleUploadFiles: Cannot upload files more than ".concat(uikitMultipleFilesMessageLimit)); openModal({ modalProps: { titleText: stringSet.FILE_UPLOAD_NOTIFICATION__COUNT_LIMIT.replace('%d', "".concat(uikitMultipleFilesMessageLimit)), hideFooter: true, }, childElement: function (_a) { var closeModal = _a.closeModal; return (React__default.default.createElement(ui_Modal.ModalFooter, { type: ui_Button.ButtonTypes.PRIMARY, submitText: stringSet.BUTTON__OK, hideCancelButton: true, onCancel: closeModal, onSubmit: closeModal })); }, }); return [2 /*return*/]; } /** * Validate file sizes * The default value of uikitUploadSizeLimit is 25MiB */ if (files.some(function (file) { return file.size > uikitUploadSizeLimit; })) { logger.info("Channel|useHandleUploadFiles: Cannot upload file size exceeding ".concat(uikitUploadSizeLimit)); openModal({ modalProps: { titleText: stringSet.FILE_UPLOAD_NOTIFICATION__SIZE_LIMIT.replace('%d', "".concat(Math.floor(uikitUploadSizeLimit / consts.ONE_MiB))), hideFooter: true, }, childElement: function (_a) { var closeModal = _a.closeModal; return (React__default.default.createElement(ui_Modal.ModalFooter, { type: ui_Button.ButtonTypes.PRIMARY, submitText: stringSet.BUTTON__OK, hideCancelButton: true, onCancel: closeModal, onSubmit: closeModal })); }, }); return [2 /*return*/]; } return [4 /*yield*/, compressImages.compressImages({ files: files, imageCompression: imageCompression, logger: logger, })]; case 1: compressedFiles = (_a.sent()).compressedFiles; sendingFiles = compressedFiles; // Send File Message if (sendingFiles.length === 1) { logger.info('Channel|useHandleUploadFiles: sending one file.'); file = sendingFiles[0]; sendFileMessage(file, quoteMessage); } else if (sendingFiles.length > 1) { logger.info('Channel|useHandleUploadFiles: sending multiple files.'); imageFiles_1 = []; otherFiles_1 = []; sendingFiles.forEach(function (file) { if (index.isImage(file.type)) { imageFiles_1.push(file); } else { otherFiles_1.push(file); } }); return [2 /*return*/, otherFiles_1.reduce(function (previousPromise, item) { return previousPromise.then(function () { return sendFileMessage(item, quoteMessage); }); }, (function () { if (imageFiles_1.length === 0) { return Promise.resolve(); } else if (imageFiles_1.length === 1) { return sendFileMessage(imageFiles_1[0], quoteMessage); } else { return sendMultipleFilesMessage(imageFiles_1, quoteMessage); } })())]; } return [2 /*return*/]; } }); }); }, [ sendFileMessage, sendMultipleFilesMessage, quoteMessage, ]); return handleUploadFiles; }; exports.useHandleUploadFiles = useHandleUploadFiles; //# sourceMappingURL=useHandleUploadFiles.js.map