|
@@ -13,57 +13,52 @@ import AddContact from './AddContact'
|
|
|
import SettingsBar from './SettingsBar';
|
|
|
import EditBar from './EditBar';
|
|
|
import { getAuthorizationState } from '../../../redux/authorization/selector';
|
|
|
+import { getLeftIsOpen } from '../../../redux/control/selector';
|
|
|
import { actionLeftIsOpen } from '../../../redux/control/action';
|
|
|
|
|
|
const LeftBar = () => {
|
|
|
const dispatch = useDispatch()
|
|
|
- const { sort,nightMode } = useSelector(getAuthorizationState)
|
|
|
- const [isSearch, setIsSearch] = useState<boolean>(false)
|
|
|
- const [isMenu, setIsMenu] = useState<boolean>(false)
|
|
|
- const [isMenuSm, setIsMenuSm] = useState<boolean>(false);
|
|
|
- const [selectedIndex, setSelectedIndex] = useState<number | null>(null)
|
|
|
+ const { sort, nightMode } = useSelector(getAuthorizationState)
|
|
|
+ const leftIsOpen = useSelector(getLeftIsOpen)
|
|
|
+ const [modal, setModal] = useState<boolean>(false)
|
|
|
+ const [popup, setPopup] = useState<boolean>(false);
|
|
|
const [disabled, setDisabled] = useState<boolean>(false)
|
|
|
const [value, setValue] = useState<string>('')
|
|
|
const [date, setDate] = useState<any>('');
|
|
|
- const modalRoot = useRef<HTMLDivElement|null>(null);
|
|
|
- const handleOpenIsSearch = () => !isSearch&&setIsSearch(true)
|
|
|
- const handleClick = (): void => {
|
|
|
+ const modalRoot = useRef<HTMLDivElement | null>(null);
|
|
|
+
|
|
|
+ const handleOpenIsSearch = () => leftIsOpen===''&&dispatch(actionLeftIsOpen('searchChats'))
|
|
|
+
|
|
|
+ const handleClick = () => {
|
|
|
dispatch(actionLeftIsOpen(''))
|
|
|
- setValue('')
|
|
|
- setDate('')
|
|
|
- setDisabled(false)
|
|
|
- if (selectedIndex) setSelectedIndex(null)
|
|
|
- if(!isSearch) return setIsMenu(!isMenu)
|
|
|
- setIsSearch(false)
|
|
|
+ setModal(true)
|
|
|
}
|
|
|
+
|
|
|
const handleSearch = (e: React.ChangeEvent<HTMLInputElement>):void => setValue(e.target.value)
|
|
|
- const handleEnterOpenMenuSm = (): void => {
|
|
|
- if(!isMenuSm) setIsMenuSm(true)
|
|
|
- }
|
|
|
- const handleLeaveCloseMenuSm = (): void => {
|
|
|
- if(isMenuSm) setIsMenuSm(false)
|
|
|
- }
|
|
|
- const handleSelectedMenu = (i: number) => {
|
|
|
- setIsSearch(true)
|
|
|
- setIsMenu(false)
|
|
|
- setIsMenuSm(false)
|
|
|
+ const handleEnterOpenMenuSm = () => !popup&&setPopup(true)
|
|
|
+
|
|
|
+ const handleLeaveCloseMenuSm = () => popup&&setPopup(false)
|
|
|
+
|
|
|
+
|
|
|
+ useEffect(() => {
|
|
|
setValue('')
|
|
|
- setDate('')
|
|
|
- setSelectedIndex(i)
|
|
|
- }
|
|
|
+ setDate('')
|
|
|
+ setModal(false)
|
|
|
+ setPopup(false)
|
|
|
+ },[leftIsOpen])
|
|
|
|
|
|
useEffect(() => {
|
|
|
const handleCloseModal = (e:any) => {
|
|
|
if (e.target.id === 'overlay') {
|
|
|
- setIsMenu(false)
|
|
|
- setIsMenuSm(false)
|
|
|
+ setModal(false)
|
|
|
+ setPopup(false)
|
|
|
}
|
|
|
}
|
|
|
if (!modalRoot.current) {
|
|
|
- const modal = document.getElementById('modal-root') as HTMLDivElement | null
|
|
|
- if (modal) {
|
|
|
- modal.addEventListener('click',handleCloseModal)
|
|
|
- modalRoot.current = modal
|
|
|
+ const modalHtml = document.getElementById('modal-root') as HTMLDivElement | null
|
|
|
+ if (modalHtml) {
|
|
|
+ modalHtml.addEventListener('click',handleCloseModal)
|
|
|
+ modalRoot.current = modalHtml
|
|
|
}
|
|
|
}
|
|
|
return () => {
|
|
@@ -77,22 +72,22 @@ const LeftBar = () => {
|
|
|
return (
|
|
|
<Grid item lg={3} style={{ position: 'relative', backgroundColor:'#ffffff'}}
|
|
|
onMouseEnter={handleEnterOpenMenuSm} onMouseLeave={handleLeaveCloseMenuSm}>
|
|
|
- {selectedIndex !== 2 && selectedIndex !== 3 && selectedIndex !== 4 &&
|
|
|
- <SearchBar handleClick={handleClick} handleOpenIsSearch={handleOpenIsSearch} sort={sort}
|
|
|
- handleSearch={handleSearch} isSearch={isSearch} value={value} setDate={setDate}
|
|
|
- date={date} disabled={disabled} />}
|
|
|
- {!selectedIndex && isSearch && <SearchLists value={value} setValue={setValue}
|
|
|
- sort={sort} date={date} setDate={setDate} setDisabled={setDisabled}/>}
|
|
|
- {!selectedIndex&&!isSearch &&<ChatsList sort={sort}/>}
|
|
|
- {!selectedIndex && isMenuSm && !isSearch && <SmallMenuBar
|
|
|
- handleSelectedMenu={handleSelectedMenu} setIsMenuSm={setIsMenuSm} />}
|
|
|
- {isMenu && modalRoot.current &&
|
|
|
- createPortal(<MenuBar handleSelectedMenu={handleSelectedMenu} nightMode={nightMode} />, modalRoot.current)}
|
|
|
- {selectedIndex === 1 && <ContactsList handleClick={handleClick} value={value}
|
|
|
+ {leftIsOpen === '' || leftIsOpen === 'contacts'
|
|
|
+ || leftIsOpen === 'searchChats' || leftIsOpen === 'searchAllMessages' ?
|
|
|
+ <SearchBar handleClick={handleClick} handleOpenIsSearch={handleOpenIsSearch} sort={sort}
|
|
|
+ handleSearch={handleSearch} leftIsOpen={leftIsOpen} value={value} setDate={setDate}
|
|
|
+ date={date} disabled={disabled}/>:null}
|
|
|
+ {leftIsOpen === 'searchChats' || leftIsOpen === 'searchAllMessages' ?<SearchLists value={value} setValue={setValue}
|
|
|
+ sort={sort} date={date} setDate={setDate} setDisabled={setDisabled}/>:null}
|
|
|
+ {leftIsOpen === ''&&<ChatsList sort={sort}/>}
|
|
|
+ {leftIsOpen === '' && popup && <SmallMenuBar setPopup={setPopup} />}
|
|
|
+ {modal && modalRoot.current &&
|
|
|
+ createPortal(<MenuBar nightMode={nightMode} />, modalRoot.current)}
|
|
|
+ {leftIsOpen === 'contacts' && <ContactsList handleClick={handleClick} value={value}
|
|
|
sort={sort} date={date} setDisabled={setDisabled} />}
|
|
|
- {selectedIndex === 2 && <SettingsBar setSelectedIndex={setSelectedIndex} handleClick={handleClick}/>}
|
|
|
- {selectedIndex === 3 && <AddContact setSelectedIndex={setSelectedIndex} handleClick={handleClick}/>}
|
|
|
- {selectedIndex === 4 && <EditBar setSelectedIndex={setSelectedIndex}/>}
|
|
|
+ {leftIsOpen === 'contact' && <AddContact handleClick={handleClick}/>}
|
|
|
+ {leftIsOpen === 'settings' && <SettingsBar handleClick={handleClick}/>}
|
|
|
+ {leftIsOpen === 'edit' && <EditBar/>}
|
|
|
</Grid>
|
|
|
)
|
|
|
}
|