From f470636a70943a8ecad8bddc791a1c2dddd28e1e Mon Sep 17 00:00:00 2001 From: Vitaly Takmazov Date: Sat, 4 May 2019 21:13:12 +0300 Subject: Components -> UI --- vnext/src/ui/Chat.js | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 vnext/src/ui/Chat.js (limited to 'vnext/src/ui/Chat.js') diff --git a/vnext/src/ui/Chat.js b/vnext/src/ui/Chat.js new file mode 100644 index 00000000..a1254a10 --- /dev/null +++ b/vnext/src/ui/Chat.js @@ -0,0 +1,85 @@ +import React, { useEffect, useState, useCallback } from 'react'; +import PropTypes from 'prop-types'; +import ReactRouterPropTypes from 'react-router-prop-types'; +import { UserType } from './Types'; +import moment from 'moment'; + +import PM from './PM'; +import MessageInput from './MessageInput'; +import UserInfo from './UserInfo'; + +import { getChat, pm } from '../api'; + +import './Chat.css'; + +export default function Chat(props) { + const [chats, setChats] = useState([]); + useEffect(() => { + if (props.connection.addEventListener) { + props.connection.addEventListener('msg', onMessage); + } + loadChat(props.match.params.user); + console.log(props.connection); + return () => { + if (props.connection.removeEventListener) { + props.connection.removeEventListener('msg', onMessage); + } + }; + }, [props.connection, onMessage, loadChat, props.match.params.user]); + + let loadChat = useCallback((uname) => { + const { hash } = props.visitor; + setChats([]); + if (hash && uname) { + getChat(uname) + .then(response => { + setChats(response.data); + }); + } + }, [props.visitor]); + + let onMessage = useCallback((json) => { + const msg = JSON.parse(json.data); + if (msg.user.uname === props.match.params.user) { + setChats((oldChat) => { + return [msg, ...oldChat]; + }); + } + }, [props.match.params.user]); + + let onSend = (template) => { + pm(template.to.uname, template.body) + .then(res => { + loadChat(props.match.params.user); + }).catch(console.log); + }; + const uname = props.match.params.user; + return ( +
+ + {uname ? ( +
+
    + { + chats.map((chat) => + + ) + } +
+ + Reply... + +
+ ) : ( +

No chat selected

+ ) + } +
+ ); +} + +Chat.propTypes = { + visitor: UserType.isRequired, + match: ReactRouterPropTypes.match.isRequired, + connection: PropTypes.object.isRequired +}; -- cgit v1.2.3