index.tsx 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. import React, { useState, useRef, useEffect } from 'react';
  2. import { createPortal } from 'react-dom';
  3. import Grid from '@mui/material/Grid'
  4. import SmallMenuBar from './SmallMenuBar'
  5. import SearchLists from './SearchLists';
  6. import SearchBar from './SearchBar'
  7. import ChatsList from './ChatsList'
  8. import MenuBar from './MenuBar'
  9. import ContactsList from './ContactsList'
  10. import AddContact from './AddContact'
  11. import NotDone from '../../reusableComponents/NotDone'
  12. const LeftBar = () => {
  13. const [isOpen, setIsOpen] = useState<boolean>(false)
  14. const [isMenu, setIsMenu] = useState<boolean>(false)
  15. const [isMenuSm, setIsMenuSm] = useState<boolean>(false);
  16. const [iMenu, setIMenu] = useState<number | null>(null)
  17. const [value, setValue] = useState<string>('')
  18. const modalRoot = useRef<HTMLDivElement|null>(null);
  19. const handleFocus = (): void => setIsOpen(true)
  20. const handleClick = (): void => {
  21. setValue('')
  22. if (iMenu) setIMenu(null)
  23. if(!isOpen) return setIsMenu(!isMenu)
  24. setIsOpen(false)
  25. }
  26. const handleSearch = (e: React.ChangeEvent<HTMLInputElement>):void => setValue(e.target.value)
  27. const handleEnterOpenMenuSm = (): void => {
  28. if(!isMenuSm) setIsMenuSm(true)
  29. }
  30. const handleLeaveCloseMenuSm = (e: any): void => {
  31. if(isMenuSm&&e.pageX > 480) setIsMenuSm(false)
  32. }
  33. const handleSelectedMenu = (i: number) => {
  34. setIsOpen(true)
  35. setIsMenu(false)
  36. setIsMenuSm(false)
  37. setValue('')
  38. setIMenu(i)
  39. }
  40. useEffect(() => {
  41. const handleCloseModal = (e:any) => {
  42. if (e.target.id === 'overlay') {
  43. setIsMenu(false)
  44. setIsMenuSm(false)
  45. }
  46. }
  47. if (!modalRoot.current) {
  48. const modal = document.getElementById('modal-root') as HTMLDivElement | null
  49. if (modal) {
  50. modal.addEventListener('click',handleCloseModal)
  51. modalRoot.current = modal
  52. }
  53. }
  54. return () => {
  55. if (modalRoot.current) {
  56. modalRoot.current.removeEventListener('click',handleCloseModal)
  57. modalRoot.current = null
  58. }
  59. }
  60. }, [])
  61. return (
  62. <Grid item lg={3} onMouseEnter={handleEnterOpenMenuSm} onMouseLeave={handleLeaveCloseMenuSm}>
  63. <SearchBar handleClick={handleClick} handleFocus={handleFocus}
  64. handleSearch={handleSearch} isOpen={isOpen} iMenu={iMenu} value={value}/>
  65. {!iMenu&&isOpen && <SearchLists />}
  66. {!iMenu&&!isOpen &&<ChatsList/>}
  67. {!iMenu && isMenuSm && !isOpen && <SmallMenuBar handleSelectedMenu={handleSelectedMenu}
  68. setIsMenuSm={setIsMenuSm} />}
  69. {isMenu && modalRoot.current &&
  70. createPortal(<MenuBar handleSelectedMenu={handleSelectedMenu} />, modalRoot.current)}
  71. {iMenu === 0 && <NotDone name='Saved Messages' />}
  72. {iMenu === 1 && <NotDone name='Archive Chats' />}
  73. {iMenu === 2 && <ContactsList value={value}/>}
  74. {iMenu === 3 && <NotDone name='Settings' />}
  75. {iMenu === 4 && <NotDone name='Night Mode' />}
  76. {iMenu === 5 && <NotDone name='Animations' />}
  77. {iMenu === 6 && <NotDone name='Telegram Feature' />}
  78. {iMenu === 7 && <NotDone name='Report Bag' />}
  79. {iMenu === 8 && <NotDone name='Switch to K Version' />}
  80. {iMenu === 9 && <NotDone name='Switch to Old Version' />}
  81. {iMenu === 10 && <NotDone name='Telegram WebZ 1.33.4' />}
  82. {iMenu === 11 && <ChatsList />}
  83. {iMenu === 12 && <AddContact setIMenu={setIMenu}/>}
  84. </Grid>
  85. )
  86. }
  87. export default LeftBar