@uimkit/uikit-react
Version:
<img style="width:64px" src="https://mgmt.uimkit.chat/media/img/avatar.png"/>
165 lines (160 loc) • 7.18 kB
JavaScript
;
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