stream-chat-react
Version:
React components to create chat conversations or livestream style chat
41 lines (40 loc) • 2.28 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import React, { useMemo } from 'react';
import { DefaultTriggerProvider } from './DefaultTriggerProvider';
import { MessageInputFlat } from './MessageInputFlat';
import { useCooldownTimer } from './hooks/useCooldownTimer';
import { useCreateMessageInputContext } from './hooks/useCreateMessageInputContext';
import { useMessageInputState } from './hooks/useMessageInputState';
import { useChannelStateContext } from '../../context/ChannelStateContext';
import { useComponentContext } from '../../context/ComponentContext';
import { MessageInputContextProvider } from '../../context/MessageInputContext';
var MessageInputProvider = function (props) {
var cooldownTimerState = useCooldownTimer();
var messageInputState = useMessageInputState(props);
var messageInputContextValue = useCreateMessageInputContext(__assign(__assign(__assign({}, cooldownTimerState), messageInputState), props));
return (React.createElement(MessageInputContextProvider, { value: messageInputContextValue }, props.children));
};
var UnMemoizedMessageInput = function (props) {
var PropInput = props.Input;
var dragAndDropWindow = useChannelStateContext().dragAndDropWindow;
var _a = useComponentContext('MessageInput'), ContextInput = _a.Input, _b = _a.TriggerProvider, TriggerProvider = _b === void 0 ? DefaultTriggerProvider : _b;
var Input = PropInput || ContextInput || MessageInputFlat;
var OptionalMessageInputProvider = useMemo(function () { return (dragAndDropWindow ? React.Fragment : MessageInputProvider); }, [dragAndDropWindow]);
return (React.createElement(OptionalMessageInputProvider, __assign({}, props),
React.createElement(TriggerProvider, null,
React.createElement(Input, null))));
};
/**
* A high level component that has provides all functionality to the Input it renders.
*/
export var MessageInput = React.memo(UnMemoizedMessageInput);