UNPKG

@uimkit/uikit-react

Version:

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

79 lines (76 loc) 3.94 kB
import { __assign } from 'tslib'; import { useReducer, useCallback } from 'react'; import { CONSTANT_DISPATCH_TYPE } from '../../../constants.js'; import { useEmojiPicker } from './useEmojiPicker.js'; import { useMessageInputText } from './useMessageInputText.js'; import { useUploadPicker } from './useUploadPicker.js'; import { useEmojiIndex } from './useEmojiIndex.js'; import '../../../types/models.js'; import '../../../types/events.js'; import '../../../context/TranslationContext.js'; import '../../../context/UIKitContext.js'; import '../../../context/ComponentContext.js'; import '../../../context/ChatActionContext.js'; import '../../../context/MessageInputContext.js'; import '../../../context/UIMessageContext.js'; import '../../../context/ChatStateContext.js'; import { useSubmitHandler } from './useSubmitHandler.js'; var makeEmptyMessageInputState = function () { return ({ mentioned_users: [], setText: function () { return null; }, text: '', }); }; /** * Initializes the state. Empty if the message prop is falsy. */ var initState = function (state) { var _a, _b; if (!state) { return makeEmptyMessageInputState(); } return { mentioned_users: (_a = state.mentioned_users) !== null && _a !== void 0 ? _a : [], text: (_b = state.text) !== null && _b !== void 0 ? _b : '', setText: function () { return null; }, }; }; var messageInputReducer = function (state, action) { switch (action.type) { case CONSTANT_DISPATCH_TYPE.SET_TEXT: return __assign(__assign({}, state), { text: action === null || action === void 0 ? void 0 : action.getNewText(state.text) }); case CONSTANT_DISPATCH_TYPE.CLEAR: return makeEmptyMessageInputState(); case CONSTANT_DISPATCH_TYPE.ADD_MENTIONED_USER: return __assign(__assign({}, state), { mentioned_users: state.mentioned_users.concat(action.user) }); default: return state; } }; var useMessageInputState = function (props) { var focus = props.focus, additionalTextareaProps = props.additionalTextareaProps, message = props.message; var defaultValue = additionalTextareaProps === null || additionalTextareaProps === void 0 ? void 0 : additionalTextareaProps.defaultValue; var initialStateValue = message ? { text: message.text, mentioned_users: message.mentioned_users, } : ((Array.isArray(defaultValue) ? { text: defaultValue.join('') } : { text: defaultValue === null || defaultValue === void 0 ? void 0 : defaultValue.toString() })); var _a = useReducer(messageInputReducer, initialStateValue, initState), state = _a[0], dispatch = _a[1]; var sendUploadMessage = useUploadPicker().sendUploadMessage; var _b = useMessageInputText(__assign(__assign({}, props), { sendUploadMessage: sendUploadMessage }), state, dispatch), textareaRef = _b.textareaRef, handleChange = _b.handleChange, handlePaste = _b.handlePaste, insertText = _b.insertText, setText = _b.setText; var _c = useEmojiPicker({ state: state, dispatch: dispatch, textareaRef: textareaRef, insertText: insertText, }), onSelectEmoji = _c.onSelectEmoji, sendFaceMessage = _c.sendFaceMessage; useEmojiIndex(); var handleSubmit = useSubmitHandler(props, state, dispatch).handleSubmit; var onSelectUser = useCallback(function (item) { dispatch({ type: CONSTANT_DISPATCH_TYPE.ADD_MENTIONED_USER, user: item }); }, []); return __assign(__assign({}, state), { handleChange: handleChange, handleSubmit: handleSubmit, onSelectUser: onSelectUser, onPaste: handlePaste, onSelectEmoji: onSelectEmoji, sendFaceMessage: sendFaceMessage, sendUploadMessage: sendUploadMessage, textareaRef: textareaRef, insertText: insertText, setText: setText, focus: focus }); }; export { useMessageInputState }; //# sourceMappingURL=useMessageInputState.js.map