import React, { memo } from 'react'; import PropTypes from 'prop-types'; import { defineMessages, injectIntl } from 'react-intl'; import injectWbResizeEvent from '/imports/ui/components/presentation/resize-wrapper/component'; import Button from '/imports/ui/components/button/component'; import { Session } from 'meteor/session'; import withShortcutHelper from '/imports/ui/components/shortcut-help/service'; import { styles } from './styles.scss'; import MessageForm from './message-form/component'; import MessageList from './message-list/component'; import ChatDropdown from './chat-dropdown/component'; const ELEMENT_ID = 'chat-messages'; const intlMessages = defineMessages({ closeChatLabel: { id: 'app.chat.closeChatLabel', description: 'aria-label for closing chat button', }, hideChatLabel: { id: 'app.chat.hideChatLabel', description: 'aria-label for hiding chat button', }, }); const Chat = (props) => { const { chatID, chatName, title, messages, scrollPosition, hasUnreadMessages, lastReadMessageTime, partnerIsLoggedOut, isChatLocked, minMessageLength, maxMessageLength, actions, intl, shortcuts, UnsentMessagesCollection, } = props; const HIDE_CHAT_AK = shortcuts.hidePrivateChat; const CLOSE_CHAT_AK = shortcuts.closePrivateChat; return (
{ chatID !== 'public' ? (
); }; export default withShortcutHelper(injectWbResizeEvent(injectIntl(memo(Chat))), ['hidePrivateChat', 'closePrivateChat']); const propTypes = { chatID: PropTypes.string.isRequired, chatName: PropTypes.string.isRequired, title: PropTypes.string.isRequired, messages: PropTypes.arrayOf(PropTypes.objectOf(PropTypes.oneOfType([ PropTypes.array, PropTypes.string, PropTypes.number, PropTypes.object, ])).isRequired).isRequired, scrollPosition: PropTypes.number, shortcuts: PropTypes.objectOf(PropTypes.string), hasUnreadMessages: PropTypes.bool.isRequired, lastReadMessageTime: PropTypes.number.isRequired, partnerIsLoggedOut: PropTypes.bool.isRequired, isChatLocked: PropTypes.bool.isRequired, minMessageLength: PropTypes.number.isRequired, maxMessageLength: PropTypes.number.isRequired, actions: PropTypes.shape({ handleClosePrivateChat: PropTypes.func.isRequired, handleReadMessage: PropTypes.func.isRequired, handleScrollUpdate: PropTypes.func.isRequired, handleSendMessage: PropTypes.func.isRequired, }).isRequired, intl: PropTypes.shape({ formatMessage: PropTypes.func.isRequired, }).isRequired, }; const defaultProps = { scrollPosition: 0, }; Chat.propTypes = propTypes; Chat.defaultProps = defaultProps;