// gomuks - A Matrix client written in Go.
// Copyright (C) 2024 Tulir Asokan
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see .
import { JSX, useEffect, useState } from "react"
import { RoomStateStore } from "@/api/statestore"
import MessageComposer from "../composer/MessageComposer.tsx"
import TypingNotifications from "../composer/TypingNotifications.tsx"
import RightPanel, { RightPanelProps } from "../rightpanel/RightPanel.tsx"
import TimelineView from "../timeline/TimelineView.tsx"
import RoomViewHeader from "./RoomViewHeader.tsx"
import { RoomContext, RoomContextData } from "./roomcontext.ts"
import "./RoomView.css"
interface RoomViewProps {
room: RoomStateStore
rightPanel: RightPanelProps | null
rightPanelResizeHandle: JSX.Element
}
const RoomView = ({ room, rightPanelResizeHandle, rightPanel }: RoomViewProps) => {
const [roomContextData] = useState(() => new RoomContextData(room))
useEffect(() => {
window.activeRoomContext = roomContextData
window.addEventListener("resize", roomContextData.scrollToBottom)
return () => {
window.removeEventListener("resize", roomContextData.scrollToBottom)
if (window.activeRoomContext === roomContextData) {
window.activeRoomContext = undefined
}
}
}, [roomContextData])
const onClick = (evt: React.MouseEvent) => {
if (roomContextData.focusedEventRowID) {
roomContextData.setFocusedEventRowID(null)
evt.stopPropagation()
}
}
return
{rightPanelResizeHandle}
{rightPanel && }
}
export default RoomView