UNPKG

@uimkit/uikit-react

Version:

<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>

165 lines (160 loc) 7.18 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var tslib = require('tslib'); var React = require('react'); var constants = require('../../../constants.js'); require('../../../context/TranslationContext.js'); var UIKitContext = require('../../../context/UIKitContext.js'); require('../../../context/ComponentContext.js'); var ChatActionContext = require('../../../context/ChatActionContext.js'); require('../../../context/MessageInputContext.js'); require('../../../context/UIMessageContext.js'); require('../../../context/ChatStateContext.js'); var models = require('../../../types/models.js'); require('../../../types/events.js'); require('@emoji-mart/data'); require('emoji-mart'); require('../../../context/EmojiContext.js'); require('../../EmptyStateIndicator/EmptyStateIndicator.js'); require('../../Icon/type.js'); require('../../Icon/config.js'); require('./useHandleQuoteMessage.js'); require('@emoji-mart/data/i18n/zh.json'); require('@emoji-mart/data/i18n/en.json'); require('../../Plugins/index.js'); require('../../EmoticonItem/EmoticonItem.js'); require('../../UICommandItem/UICommandItem.js'); require('../../../node_modules/.pnpm/lodash.throttle@4.1.1/node_modules/lodash.throttle/index.js'); require('../../UIUserItem/UIUserItem.js'); require('../../../node_modules/.pnpm/react-popper@2.3.0_r6q5zrenym2zg7je7hgi674bti/node_modules/react-popper/lib/esm/Manager.js'); require('react-dom'); require('../../../node_modules/.pnpm/warning@4.0.3/node_modules/warning/warning.js'); require('../../../node_modules/.pnpm/react-dropzone@14.2.3_react@18.2.0/node_modules/react-dropzone/dist/es/index.js'); require('../../UIChatAutoComplete/UIChatAutoComplete.js'); var useMessageInputText = function (props, state, dispatch) { var focus = props.focus, sendUploadMessage = props.sendUploadMessage, additionalTextareaProps = props.additionalTextareaProps; var text = state.text; var textareaRef = React.useRef(); // Focus React.useEffect(function () { if (focus && textareaRef.current) { textareaRef.current.focus(); } }, [focus]); // Text + cursor position var newCursorPosition = React.useRef(); var insertText = React.useCallback(function (textToInsert) { var maxLength = (additionalTextareaProps || {}).maxLength; if (!textareaRef.current) { dispatch({ getNewText: function (text) { var updatedText = text + textToInsert; if (maxLength && updatedText.length > maxLength) { return updatedText.slice(0, maxLength); } return updatedText; }, type: constants.CONSTANT_DISPATCH_TYPE.SET_TEXT, }); return; } var _a = textareaRef.current, selectionEnd = _a.selectionEnd, selectionStart = _a.selectionStart; newCursorPosition.current = selectionStart + textToInsert.length; dispatch({ getNewText: function (prevText) { var updatedText = prevText.slice(0, selectionStart) + textToInsert + prevText.slice(selectionEnd); if (maxLength && updatedText.length > maxLength) { return updatedText.slice(0, maxLength); } return updatedText; }, type: constants.CONSTANT_DISPATCH_TYPE.SET_TEXT, }); }, [additionalTextareaProps, newCursorPosition, textareaRef]); React.useEffect(function () { var textareaElement = textareaRef.current; if (textareaElement && newCursorPosition.current !== undefined) { textareaElement.selectionStart = newCursorPosition.current; textareaElement.selectionEnd = newCursorPosition.current; newCursorPosition.current = undefined; } }, [text, newCursorPosition]); var client = UIKitContext.useUIKit().client; var _a = ChatActionContext.useChatActionContext('UIMessageInput'); _a.sendMessage; _a.createTextMessage; _a.operateMessage; var handleChange = React.useCallback(function (event) { event.preventDefault(); if (!event || !event.target) { return; } dispatch({ type: constants.CONSTANT_DISPATCH_TYPE.SET_TEXT, getNewText: function (text) { return event.target.value; }, }); }, [client]); /* const handleKeyDown = useCallback( (event?:React.KeyboardEvent<EventTarget>) => { if (!event?.ctrlKey && enterCodeList.indexOf(event?.code) > -1 && event.keyCode === 13) { event?.preventDefault(); handleSubmit(event); } if (event?.ctrlKey && enterCodeList.indexOf(event?.code) > -1 && event.keyCode === 13) { dispatch({ type: CONSTANT_DISPATCH_TYPE.SET_TEXT, getNewText: (text: string) => `${text}\n`, }); } }, [handleSubmit, dispatch], );*/ var handlePaste = React.useCallback(function (e) { return tslib.__awaiter(void 0, void 0, void 0, function () { var _a, types, items; return tslib.__generator(this, function (_b) { e.preventDefault(); if (!(e.clipboardData && e.clipboardData.items)) { return [2 /*return*/]; } _a = e.clipboardData, types = _a.types, items = _a.items; types.find(function (type, index) { var item = items[index]; switch (type) { case 'text/plain': item.getAsString(function (str) { dispatch({ type: constants.CONSTANT_DISPATCH_TYPE.SET_TEXT, getNewText: function (text) { return "".concat(text).concat(str); }, }); }); return true; case 'Files': { var file = item.getAsFile(); if (item && item.kind === 'file' && item.type.match(/^image\//i)) { sendUploadMessage({ file: file }, models.MessageType.Image); } return true; } default: return false; } }); return [2 /*return*/]; }); }); }, [textareaRef]); var setText = React.useCallback(function (textToInsert) { var _a; dispatch({ type: constants.CONSTANT_DISPATCH_TYPE.SET_TEXT, getNewText: function () { return "".concat(textToInsert); }, }); (_a = textareaRef === null || textareaRef === void 0 ? void 0 : textareaRef.current) === null || _a === void 0 ? void 0 : _a.focus(); }, [textareaRef]); return { textareaRef: textareaRef, handleChange: handleChange, handlePaste: handlePaste, insertText: insertText, setText: setText, }; }; exports.useMessageInputText = useMessageInputText; //# sourceMappingURL=useMessageInputText.js.map