import { useCallback, useEffect, useRef, useState } from 'react'; import TimeAgo from 'react-timeago'; import { v4 } from 'uuid'; import { registerRouter, router, send, unregisterRouter } from '../lib/api'; const firstLineIndent = '10px'; const multiLineIndent = '16px'; const rightMessagePagging = '16px'; interface Message { text: string; from: string; timestamp: number; // nid: number; uid: string; } function createMessage(from: string, text: string, t = 0): Message { return { text, from, timestamp: Date.now() - t * 1000, uid: v4(), }; } const mockMessages: Message[] = [ // createMessage('Bob', 'Hey', 55), // createMessage('Alice', 'Hello', 50), // createMessage('Bob', 'What up', 45), // createMessage('Alice', 'nm UUU', 40), // createMessage('Bob', 'Hey', 35), // createMessage('Alice', 'Hello', 30), // createMessage('Bob', 'What up', 25), // createMessage('Alice', 'nm UUU', 20), // createMessage('Bob', 'Hey', 15), // createMessage('Alice', 'Hello', 10), // createMessage('Bob', 'What up', 5), // createMessage('Alice', 'This is what a really long message could possibly look like, if a person decided to write a really long essay. This is what a really long message could possibly look like, if a person decided to write a really long essay. This is what a really long message could possibly look like, if a person decided to write a really long essay. This is what a really long message could possibly look like, if a person decided to write a really long essay.'), ]; export default () => { const [messages, setMessages] = useState(mockMessages); const [hist, setHist] = useState(false); const textBoxRef = useRef(null); useEffect(() => { const actions = router({ message(data: Message) { setMessages([...messages, data]); }, recent(data: { messages: Message[] }) { setMessages([...data.messages, ...messages]); }, }); registerRouter(actions); return () => { unregisterRouter(actions); }; }, [messages]); useEffect(() => { if(!hist) { console.log('sending recents request'); send('recent'); setHist(true); } }, [hist]); const sendMessage = useCallback(() => { if(textBoxRef.current === null) return; send('message', createMessage('Val', textBoxRef.current.innerText)); textBoxRef.current.innerText = ''; }, []); const keyDown = useCallback((evt: any) => { console.log(evt); if(evt.key === 'Enter') { sendMessage(); } }, [sendMessage]); return ( <>
{messages.map(message => (
u === 'second' ? 'Just Now' : ('' + t + u[0])} >
{message.from}
{message.text}
))}
{ textBoxRef.current?.focus(); }}style={{ margin: '8px', marginRight: '3px', borderRadius: '8px', background: '#343746', gridArea: 'message', display: 'grid', placeItems: 'center center', padding: '0px 16px', cursor: 'text', overflow: 'auto', }}>
); };