UNPKG

@sendbird/uikit-react

Version:

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

119 lines (113 loc) 5.74 kB
'use strict'; var React = require('react'); var LocalizationContext = require('../../chunks/bundle-ClT0IexP.js'); var ui_MessageInput = require('../../chunks/bundle-CzhNQgac.js'); var useDragAndDrop = require('../../chunks/bundle-gKWdBSmm.js'); var MediaQueryContext = require('../../chunks/bundle-DDUAkmTu.js'); var OpenChannel_context = require('../../chunks/bundle-BzJwE_My.js'); var hooks_useModal = require('../../hooks/useModal.js'); var useSendbird = require('../../chunks/bundle-on0zTbLT.js'); require('../../chunks/bundle-jAsAzWpU.js'); require('../../chunks/bundle-D-_6Kk3L.js'); require('../../chunks/bundle-BXuNw6bR.js'); require('../../chunks/bundle-BSEj3ItE.js'); require('../../chunks/bundle-CeCg868O.js'); require('../../ui/IconButton.js'); require('../../ui/Button.js'); require('../../chunks/bundle-DxZzcGya.js'); require('../../chunks/bundle-DHOzCMYH.js'); require('dompurify'); require('../../chunks/bundle-DEaaC1ah.js'); require('../../chunks/bundle-Dqt-Moft.js'); require('../../chunks/bundle-B4v0Agxd.js'); require('../../ui/Icon.js'); require('../../chunks/bundle-1F9guuKw.js'); require('../../chunks/bundle-CskFALvU.js'); require('@sendbird/chat/groupChannel'); require('../../utils/message/getOutgoingMessageState.js'); require('../../chunks/bundle-BVn2UMtk.js'); require('../../chunks/bundle-DvHjgbFi.js'); require('../../chunks/bundle-DS7dko_G.js'); require('../../chunks/bundle-DZN-28o5.js'); require('../../chunks/bundle-iwIElqGP.js'); require('../../chunks/bundle-BNgfU9I_.js'); require('../../chunks/bundle-Hqqb920S.js'); require('../../chunks/bundle-BFmC2V1o.js'); require('react-dom'); require('../../chunks/bundle-iF1pW7_s.js'); require('../../chunks/bundle-BSCZWP_l.js'); require('../../chunks/bundle-B14gP5iL.js'); require('@sendbird/chat'); require('@sendbird/chat/openChannel'); require('../../chunks/bundle-2FCFe95u.js'); require('../../chunks/bundle-CZmT_dIf.js'); require('../../chunks/bundle-Buar9ys-.js'); function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e : { default: e }; } var React__default = /*#__PURE__*/_interopDefaultCompat(React); var OpenChannelInput = React__default.default.forwardRef(function (props, ref) { var _a = OpenChannel_context.useOpenChannelContext(), currentOpenChannel = _a.currentOpenChannel, disabled = _a.disabled, handleSendMessage = _a.handleSendMessage, handleFileUpload = _a.handleFileUpload, amIMuted = _a.amIMuted; var channel = currentOpenChannel; var stringSet = React.useContext(LocalizationContext.LocalizationContext).stringSet; var openModal = hooks_useModal.useGlobalModalContext().openModal; var config = useSendbird.useSendbird().state.config; var uikitUploadSizeLimit = config.uikitUploadSizeLimit, logger = config.logger; var isMobile = MediaQueryContext.useMediaQueryContext().isMobile; var value = props.value; var _b = useDragAndDrop.usePendingFiles({ uikitUploadSizeLimit: uikitUploadSizeLimit, uikitMultipleFilesMessageLimit: 1, openModal: openModal, stringSet: stringSet, logger: logger, }), pendingFiles = _b.pendingFiles, addFiles = _b.addFiles, removeFile = _b.removeFile, clearPendingFiles = _b.clear; var isFileUploadEnabled = ui_MessageInput.checkIfFileUploadEnabled({ channel: currentOpenChannel !== null && currentOpenChannel !== void 0 ? currentOpenChannel : undefined, config: config }); useDragAndDrop.useDragAndDrop({ onAddFiles: addFiles, disabled: isMobile || disabled || !isFileUploadEnabled, }); React.useEffect(function () { clearPendingFiles(); }, [currentOpenChannel === null || currentOpenChannel === void 0 ? void 0 : currentOpenChannel.url]); // OpenChannel does not support MultipleFilesMessage. Files send sequentially // via FileMessage and the composer's text body is suppressed when files are // present (matches GroupChannel/Thread behavior). handleSendMessage reads the // textarea ref directly, so text-only sends still land on UserMessage as // before. var isSubmittingFilesRef = React.useRef(false); var handleSubmit = React.useCallback(function (_a) { var message = _a.message, files = _a.files; var trimmed = message.trim(); if (files.length === 0) { if (trimmed.length === 0) return; handleSendMessage(); return; } if (isSubmittingFilesRef.current) return; isSubmittingFilesRef.current = true; clearPendingFiles(); try { handleFileUpload(files.map(function (entry) { return entry.file; })); } finally { isSubmittingFilesRef.current = false; } }, [handleSendMessage, handleFileUpload, clearPendingFiles]); function getPlaceHolderString() { if (amIMuted) { return stringSet.MESSAGE_INPUT__PLACE_HOLDER__MUTED; } if (disabled) { return stringSet.MESSAGE_INPUT__PLACE_HOLDER__DISABLED; } return ''; } if (!channel) { return null; } return (React__default.default.createElement("div", { className: "sendbird-openchannel-footer" }, React__default.default.createElement(ui_MessageInput.MessageInput, { channel: currentOpenChannel, channelUrl: currentOpenChannel === null || currentOpenChannel === void 0 ? void 0 : currentOpenChannel.url, ref: ref, value: value, disabled: disabled, isVoiceMessageEnabled: false, pendingFiles: pendingFiles, onAddFiles: addFiles, onRemoveFile: removeFile, onSubmit: handleSubmit, placeholder: getPlaceHolderString() }))); }); module.exports = OpenChannelInput; //# sourceMappingURL=OpenChannelInput.js.map