import React, { useEffect, useRef } from 'react'; import PropTypes from 'prop-types'; import './RoomView.scss'; import { Text, config } from 'folds'; import { EventType } from 'matrix-js-sdk'; import cons from '../../../client/state/cons'; import navigation from '../../../client/state/navigation'; import RoomViewHeader from './RoomViewHeader'; import { RoomInput } from './RoomInput'; import { useStateEvent } from '../../hooks/useStateEvent'; import { StateEvent } from '../../../types/matrix/room'; import { RoomTombstone } from './RoomTombstone'; import { usePowerLevelsAPI } from '../../hooks/usePowerLevels'; import { useMatrixClient } from '../../hooks/useMatrixClient'; import { RoomInputPlaceholder } from './RoomInputPlaceholder'; import { RoomTimeline } from './RoomTimeline'; import { RoomViewTyping } from './RoomViewTyping'; import { RoomViewFollowing } from './RoomViewFollowing'; import { useEditor } from '../../components/editor'; function RoomView({ room, eventId }) { const roomInputRef = useRef(null); const roomViewRef = useRef(null); // eslint-disable-next-line react/prop-types const { roomId } = room; const editor = useEditor(); const mx = useMatrixClient(); const tombstoneEvent = useStateEvent(room, StateEvent.RoomTombstone); const { getPowerLevel, canSendEvent } = usePowerLevelsAPI(); const myUserId = mx.getUserId(); const canMessage = myUserId ? canSendEvent(EventType.RoomMessage, getPowerLevel(myUserId)) : false; useEffect(() => { const settingsToggle = (isVisible) => { const roomView = roomViewRef.current; roomView.classList.toggle('room-view--dropped'); const roomViewContent = roomView.children[1]; if (isVisible) { setTimeout(() => { if (!navigation.isRoomSettings) return; roomViewContent.style.visibility = 'hidden'; }, 200); } else roomViewContent.style.visibility = 'visible'; }; navigation.on(cons.events.navigation.ROOM_SETTINGS_TOGGLED, settingsToggle); return () => { navigation.removeListener(cons.events.navigation.ROOM_SETTINGS_TOGGLED, settingsToggle); }; }, []); return (