From 1af69071c2cc8d9a2ee465a349b107eeb19d1284 Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Fri, 20 Aug 2021 13:45:13 +0200 Subject: [PATCH] Add room details pane. --- src/modules/room/RoomChat.tsx | 46 ++++++++++++++++++++--------- src/modules/room/RoomChatHeader.tsx | 27 ++++++++--------- src/modules/room/RoomDetails.tsx | 25 ++++++++++++++++ 3 files changed, 69 insertions(+), 29 deletions(-) create mode 100644 src/modules/room/RoomDetails.tsx diff --git a/src/modules/room/RoomChat.tsx b/src/modules/room/RoomChat.tsx index dd1ff20..afe3479 100644 --- a/src/modules/room/RoomChat.tsx +++ b/src/modules/room/RoomChat.tsx @@ -1,14 +1,19 @@ -import { FC, useEffect } from "react"; +import { FC, useEffect, useState } from "react"; 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 RoomChatHeader from "modules/room/RoomChatHeader"; import RoomChatMessageList from "modules/room/RoomChatMessageList"; +import RoomDetails from "modules/room/RoomDetails"; interface Props { loginUserName: string; - room?: Room; + room?: RoomState; } const RoomChat: FC = ({ loginUserName, room }) => { @@ -20,26 +25,39 @@ const RoomChat: FC = ({ loginUserName, room }) => { } }); - const header = ; + const [showDetails, setShowDetails] = useState(false); + const toggleDetails = () => { + setShowDetails(!showDetails); + }; + + const header = ; if (room === undefined || room.membership !== RoomMembership.Joined) { return (
{header}
); } + let details; + if (showDetails) { + details = ; + } + const { name, messages } = room; return ( -
- {header} -
- -
-
- +
+
+ {header} +
+ +
+
+ +
+ {details}
); }; diff --git a/src/modules/room/RoomChatHeader.tsx b/src/modules/room/RoomChatHeader.tsx index 958eaf6..b469d7e 100644 --- a/src/modules/room/RoomChatHeader.tsx +++ b/src/modules/room/RoomChatHeader.tsx @@ -2,7 +2,11 @@ import { FC, ReactEventHandler } from "react"; import { useDispatch } from "react-redux"; import { useHistory } from "react-router"; -import { Room, RoomMembership, roomSetMembership } from "modules/room/slice"; +import { + RoomState, + RoomMembership, + roomSetMembership, +} from "modules/room/slice"; interface InnerProps { title: string; @@ -11,15 +15,16 @@ interface InnerProps { const InnerHeader: FC = ({ title, children }) => (

{title}

- {children} +
{children}
); interface Props { - room?: Room; + room?: RoomState; + toggleDetails: () => void; } -const RoomChatHeader: FC = ({ room }) => { +const RoomChatHeader: FC = ({ room, toggleDetails }) => { const history = useHistory(); const dispatch = useDispatch(); @@ -34,22 +39,14 @@ const RoomChatHeader: FC = ({ room }) => { dispatch(roomSetMembership([room.name, RoomMembership.Leaving])); }; - /* - let toggleUsersButton; - if (room.showUsers) { - const onClick = (event) => roomActions.hideUsers(room.name); - toggleUsersButton = ; - } else { - const onClick = (event) => roomActions.showUsers(room.name); - toggleUsersButton = ; - } - */ - return ( + ); } diff --git a/src/modules/room/RoomDetails.tsx b/src/modules/room/RoomDetails.tsx new file mode 100644 index 0000000..d8dcf8b --- /dev/null +++ b/src/modules/room/RoomDetails.tsx @@ -0,0 +1,25 @@ +import { FC } from "react"; + +import { RoomState, RoomMembership } from "modules/room/slice"; + +const Members: FC = ({ room }) => { + const children = []; + for (const member of room.members) { + children.push(
  • {member}
  • ); + } + + return
      {children}
    ; +}; + +interface Props { + room: RoomState; +} + +const RoomDetails: FC = ({ room }) => ( +
    +

    Members ({room.userCount})

    + +
    +); + +export default RoomDetails;