import shortid from 'shortid'; import SimpleBar from 'simplebar-react'; import InfiniteScroll from 'react-infinite-scroll-component'; import React, { useEffect, useRef, useState } from 'react'; // import message import DashupUIChatMessage from './Message'; import { Box, Stack, Typography, CircularProgress } from '../'; // let context let Message = null; let DashupUIContext = null; // create dashup grid body const DashupUIChatThread = (props = {}) => { // messages const messages = props.messages || []; // use state const [id] = useState(shortid()); const [key, setKey] = useState(null); // scroll ref const scrollRef = useRef(null); // use effect useEffect(() => { // check key if (key === (messages[0]?.id || messages[0]?.temp)) return; // set key setKey(messages[0]?.id || messages[0]?.temp); // scroll down if (scrollRef.current?.getScrollElement()) scrollRef.current.getScrollElement().scrollTop = 0; }, [messages[0]?.id || messages[0]?.temp]); // return jsx return ( { !!scrollRef.current?.getScrollElement() && ( ) } endMessage={ ( { !(messages || []).length ? ( 'Nothing here yet, say hi!' ) : ( 'Yay! You have seen it all.' ) } ) } scrollableTarget={ id } > { messages.map((m, i) => { // return jsx return ( ); }) } ) } ); }; // wrapper const DashupUIChatWrapper = (props = {}) => { // return jsx return ( { (data) => { // return jsx return ( ) } } ); }; // export default page menu export default (ctx) => { // use context Message = DashupUIChatMessage(ctx); DashupUIContext = ctx; // return actual component return DashupUIChatWrapper; };