|
|
@ -1,14 +1,19 @@ |
|
|
import { FC, useEffect } from "react"; |
|
|
|
|
|
|
|
|
import { FC, useEffect, useState } from "react"; |
|
|
import { useDispatch } from "react-redux"; |
|
|
import { useDispatch } from "react-redux"; |
|
|
|
|
|
|
|
|
import { Room, RoomMembership, roomSetMembership } from "modules/room/slice"; |
|
|
|
|
|
|
|
|
import { |
|
|
|
|
|
RoomState, |
|
|
|
|
|
RoomMembership, |
|
|
|
|
|
roomSetMembership, |
|
|
|
|
|
} from "modules/room/slice"; |
|
|
import RoomChatForm from "modules/room/RoomChatForm"; |
|
|
import RoomChatForm from "modules/room/RoomChatForm"; |
|
|
import RoomChatHeader from "modules/room/RoomChatHeader"; |
|
|
import RoomChatHeader from "modules/room/RoomChatHeader"; |
|
|
import RoomChatMessageList from "modules/room/RoomChatMessageList"; |
|
|
import RoomChatMessageList from "modules/room/RoomChatMessageList"; |
|
|
|
|
|
import RoomDetails from "modules/room/RoomDetails"; |
|
|
|
|
|
|
|
|
interface Props { |
|
|
interface Props { |
|
|
loginUserName: string; |
|
|
loginUserName: string; |
|
|
room?: Room; |
|
|
|
|
|
|
|
|
room?: RoomState; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const RoomChat: FC<Props> = ({ loginUserName, room }) => { |
|
|
const RoomChat: FC<Props> = ({ loginUserName, room }) => { |
|
|
@ -20,26 +25,39 @@ const RoomChat: FC<Props> = ({ loginUserName, room }) => { |
|
|
} |
|
|
} |
|
|
}); |
|
|
}); |
|
|
|
|
|
|
|
|
const header = <RoomChatHeader room={room} />; |
|
|
|
|
|
|
|
|
const [showDetails, setShowDetails] = useState<boolean>(false); |
|
|
|
|
|
const toggleDetails = () => { |
|
|
|
|
|
setShowDetails(!showDetails); |
|
|
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
const header = <RoomChatHeader room={room} toggleDetails={toggleDetails} />; |
|
|
if (room === undefined || room.membership !== RoomMembership.Joined) { |
|
|
if (room === undefined || room.membership !== RoomMembership.Joined) { |
|
|
return ( |
|
|
return ( |
|
|
<div className="flex h-full justify-center items-center">{header}</div> |
|
|
<div className="flex h-full justify-center items-center">{header}</div> |
|
|
); |
|
|
); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
let details; |
|
|
|
|
|
if (showDetails) { |
|
|
|
|
|
details = <RoomDetails room={room} />; |
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
const { name, messages } = room; |
|
|
const { name, messages } = room; |
|
|
return ( |
|
|
return ( |
|
|
<div className="flex flex-col h-full p-3"> |
|
|
|
|
|
{header} |
|
|
|
|
|
<div className="flex-1"> |
|
|
|
|
|
<RoomChatMessageList |
|
|
|
|
|
loginUserName={loginUserName} |
|
|
|
|
|
messages={messages} |
|
|
|
|
|
/> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div> |
|
|
|
|
|
<RoomChatForm loginUserName={loginUserName} roomName={name} /> |
|
|
|
|
|
|
|
|
<div className="flex h-full w-full"> |
|
|
|
|
|
<div className="flex-grow flex flex-col h-full p-3"> |
|
|
|
|
|
{header} |
|
|
|
|
|
<div className="flex-1"> |
|
|
|
|
|
<RoomChatMessageList |
|
|
|
|
|
loginUserName={loginUserName} |
|
|
|
|
|
messages={messages} |
|
|
|
|
|
/> |
|
|
|
|
|
</div> |
|
|
|
|
|
<div> |
|
|
|
|
|
<RoomChatForm loginUserName={loginUserName} roomName={name} /> |
|
|
|
|
|
</div> |
|
|
</div> |
|
|
</div> |
|
|
|
|
|
{details} |
|
|
</div> |
|
|
</div> |
|
|
); |
|
|
); |
|
|
}; |
|
|
}; |
|
|
|