import React, { useEffect } from 'react'; import { useAtomValue, useSetAtom } from 'jotai'; import { AnimatedOutlet } from '../../../components/AnimatedOutlet'; import { CachedRooms } from '../../../features/room/CachedRooms'; import { useSelectedRoom } from '../../../hooks/router/useSelectedRoom'; import { useMatrixClient } from '../../../hooks/useMatrixClient'; import { activeRoomIdAtom } from '../../../state/activeRoom'; import { roomViewCacheAtom } from '../../../state/roomViewCache'; import { useHomeRooms } from './useHomeRooms'; /** * Hosts home room keep-alive OUTSIDE the room route ``. */ export function HomeLayout() { const mx = useMatrixClient(); const selectedRoomId = useSelectedRoom(); const rooms = useHomeRooms(); const cache = useAtomValue(roomViewCacheAtom); const setActiveRoomId = useSetAtom(activeRoomIdAtom); const room = selectedRoomId ? mx.getRoom(selectedRoomId) : undefined; const showingRoom = !!(room && rooms.includes(room.roomId)); const keepHost = showingRoom || cache.length > 0; useEffect(() => { if (!showingRoom) setActiveRoomId(undefined); }, [showingRoom, setActiveRoomId]); return (
{keepHost && (
)}
); }