Aside.jsx 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. import { useEffect, useState } from "react";
  2. import { connect } from "react-redux";
  3. import {ChatList} from "../ChatList/ChatList";
  4. import UserMenu from "../Drawer/UserMenu";
  5. import IconButton from '@mui/material/IconButton';
  6. import MenuIcon from '@mui/icons-material/Menu';
  7. import { AsideWrap, SearchAppBarWrapper, SearchInput } from "./Aside.style";
  8. export const Aside = ({chats}) => {
  9. const [isOpen, setOpen] = useState(false);
  10. const [filteredChats, setFilteredChats] = useState([]);
  11. const [value, setValue] = useState('');
  12. useEffect(() => {
  13. setFilteredChats(Object.values(chats).filter((chat) => chat?.title?.toLowerCase().includes(value)));
  14. }, [value, chats]);
  15. return (
  16. <AsideWrap>
  17. <SearchAppBarWrapper>
  18. <IconButton
  19. onClick={() => setOpen(true)}
  20. size="medium"
  21. edge="start"
  22. aria-label="open drawer"
  23. sx={{ m: '0 7px' }}
  24. >
  25. <MenuIcon style={{color: '#b4b4b4'}}/>
  26. </IconButton>
  27. <SearchInput placeholder='Search' value={value} onChange={e => setValue(e.target.value)}></SearchInput>
  28. </SearchAppBarWrapper>
  29. <ChatList chats={filteredChats} clearInput={() => setValue('')}/>
  30. <UserMenu open={isOpen} closeUserMenu={() => setOpen(false)}/>
  31. </AsideWrap>
  32. )
  33. }
  34. export default connect(state => ({chats: state?.chats || {} }))(Aside);