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