diff --git a/src/app/organisms/room/Room.jsx b/src/app/organisms/room/Room.jsx index b8972d61..015fb689 100644 --- a/src/app/organisms/room/Room.jsx +++ b/src/app/organisms/room/Room.jsx @@ -13,33 +13,46 @@ import RoomSettings from './RoomSettings'; import PeopleDrawer from './PeopleDrawer'; function Room() { - const [roomTimeline, setRoomTimeline] = useState(null); - const [eventId, setEventId] = useState(null); + const [roomInfo, setRoomInfo] = useState({ + roomTimeline: null, + eventId: null, + }); const [isDrawer, setIsDrawer] = useState(settings.isPeopleDrawer); const mx = initMatrix.matrixClient; - const handleRoomSelected = (rId, pRoomId, eId) => { - if (mx.getRoom(rId)) { - setRoomTimeline(new RoomTimeline(rId, initMatrix.notifications)); - setEventId(eId); - } else { - // TODO: add ability to join room if roomId is invalid - setRoomTimeline(null); - setEventId(null); - } - }; - const handleDrawerToggling = (visiblity) => setIsDrawer(visiblity); useEffect(() => { + const handleRoomSelected = (rId, pRoomId, eId) => { + roomInfo.roomTimeline?.removeInternalListeners(); + if (mx.getRoom(rId)) { + setRoomInfo({ + roomTimeline: new RoomTimeline(rId, initMatrix.notifications), + eventId: eId ?? null, + }); + } else { + // TODO: add ability to join room if roomId is invalid + setRoomInfo({ + roomTimeline: null, + eventId: null, + }); + } + }; + navigation.on(cons.events.navigation.ROOM_SELECTED, handleRoomSelected); - settings.on(cons.events.settings.PEOPLE_DRAWER_TOGGLED, handleDrawerToggling); return () => { navigation.removeListener(cons.events.navigation.ROOM_SELECTED, handleRoomSelected); + }; + }, [roomInfo]); + + useEffect(() => { + const handleDrawerToggling = (visiblity) => setIsDrawer(visiblity); + settings.on(cons.events.settings.PEOPLE_DRAWER_TOGGLED, handleDrawerToggling); + return () => { settings.removeListener(cons.events.settings.PEOPLE_DRAWER_TOGGLED, handleDrawerToggling); - roomTimeline?.removeInternalListeners(); }; }, []); + const { roomTimeline, eventId } = roomInfo; if (roomTimeline === null) return ; return ( diff --git a/src/app/organisms/room/RoomViewContent.jsx b/src/app/organisms/room/RoomViewContent.jsx index 751e8354..808d2375 100644 --- a/src/app/organisms/room/RoomViewContent.jsx +++ b/src/app/organisms/room/RoomViewContent.jsx @@ -167,7 +167,6 @@ function useTimeline(roomTimeline, eventId, readUptoEvtStore, eventLimitRef) { setEventTimeline(eventId); return () => { roomTimeline.removeListener(cons.events.roomTimeline.READY, initTimeline); - roomTimeline.removeInternalListeners(); limit.setFrom(0); }; }, [roomTimeline, eventId]);