import React, { useState, useEffect, useRef } from 'react'; import './Drawer.scss'; import initMatrix from '../../../client/initMatrix'; import cons from '../../../client/state/cons'; import navigation from '../../../client/state/navigation'; import Text from '../../atoms/text/Text'; import ScrollView from '../../atoms/scroll/ScrollView'; import DrawerHeader from './DrawerHeader'; import DrawerBreadcrumb from './DrawerBreadcrumb'; import Home from './Home'; import Directs from './Directs'; import { useForceUpdate } from '../../hooks/useForceUpdate'; import { useSelectedTab } from '../../hooks/useSelectedTab'; import { useSelectedSpace } from '../../hooks/useSelectedSpace'; function useSystemState() { const [systemState, setSystemState] = useState(null); useEffect(() => { const handleSystemState = (state) => { if (state === 'ERROR' || state === 'RECONNECTING' || state === 'STOPPED') { setSystemState({ status: 'Connection lost!' }); } if (systemState !== null) setSystemState(null); }; initMatrix.matrixClient.on('sync', handleSystemState); return () => { initMatrix.matrixClient.removeListener('sync', handleSystemState); }; }, [systemState]); return [systemState]; } function Drawer() { const [systemState] = useSystemState(); const [selectedTab] = useSelectedTab(); const [spaceId] = useSelectedSpace(); const [, forceUpdate] = useForceUpdate(); const scrollRef = useRef(null); const { roomList } = initMatrix; useEffect(() => { const handleUpdate = () => { forceUpdate(); }; roomList.on(cons.events.roomList.ROOMLIST_UPDATED, handleUpdate); return () => { roomList.removeListener(cons.events.roomList.ROOMLIST_UPDATED, handleUpdate); }; }, []); useEffect(() => { requestAnimationFrame(() => { scrollRef.current.scrollTop = 0; }); }, [selectedTab]); return (
{navigation.selectedSpacePath.length > 1 && selectedTab !== cons.tabs.DIRECTS && ( )}
{ selectedTab !== cons.tabs.DIRECTS ? : }
{ systemState !== null && (
{systemState.status}
)}
); } export default Drawer;