ChatPresenter.js 4.29 KB
import React from "react";
import styled from "styled-components";
import Header from "../../Components/Header";
import Input from "../../Components/Input";
import Button from "../../Components/Button";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faAddressBook } from "@fortawesome/free-solid-svg-icons";
import { Link } from "react-router-dom";
import Category from "../Category/CategoryContainer";
import IncomingMsg from "../../Components/IncomingMsg";
import OutcomingMsg from "../../Components/OutcomingMsg";

const Wrapper = styled.div`
  display: grid;
  width: 100%;
  height: 100%;
  grid-template-rows: 80px auto min-content;
  grid-template-areas:
    "Header"
    "Workspace";
  .Header {
    box-shadow: none;
  }
`;

const ChatWrapper = styled.div`
  display: flex;
  flex-direction: row;
  width: 100%;
  height: 100%;
  grid-template-columns: 200px auto;
  grid-area: "Workspace";
`;

const ChatMenuContainer = styled.div`
  display: grid;
  width: 200px;
  height: 100%;
  background-color: #667aff;
  color: white;
  grid-template-rows: 80px 80px 1fr;
`;

const TitleContainer = styled.div`
  display: flex;
  justify-content: center;
  align-items: center;
  font-size: 20px;
  border-top: 1px solid rgba(255, 255, 255, 0.5);
`;

const Title = styled.span`
  font-family: "Chelsea Market", cursive;
`;

const ItemText = styled.span`
  font-family: "Ubuntu", sans-serif;
`;

const PeopleContainer = styled.div`
  display: flex;
  justify-content: center;
  align-items: center;
  svg {
    font-size: 20px;
  }
  span {
    margin-left: 10px;
    font-size: 20px;
  }
  border-top: 1px solid rgba(255, 255, 255, 0.5);
`;

const ChatScreenContainer = styled.div`
  display: grid;
  width: 100%;
  height: 100%;
  grid-template-rows: 70px 1fr;
`;

const ChatScreenHeader = styled.div`
  display: flex;
  flex-direction: row;
  align-items: center;
  padding: 10px;
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
`;

const ChatScreenBox = styled.div`
  display: flex;
  flex-direction: column;
  width: 100%;
  height: 100%;
`;

const InputWrapper = styled.div`
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  padding: 10px;
  margin-bottom: 10px;
  width: 100%;
`;

const InputContainer = styled.div`
  position: fixed;
  bottom: 0;
  padding: 10px;
  margin-bottom: 20px;
  display: flex;
  flex-direction: row;
  width: 70%;
  form {
    width: 100%;
    button {
      background-color: #27ae60;
      width: 10%;
      color: white;
      border-radius: 10px;
    }
    input {
      width: 70%;
    }
  }
  border: 1px solid rgba(0, 0, 0, 0.7);
  border-radius: 10px;
`;

const StyledLink = styled(Link)`
  width: 100%;
  display: flex;
  flex-direction: row;
  justify-content: center;
  align-items: center;
  text-decoration: none;
  color: white;
  cursor: pointer;
  &:hover {
    background-color: white;
    color: #667aff;
  }
`;

export default ({ location, message, onSubmit, outcomingMsg, incomingMsg }) => {
  const { pathname } = location;
  const roomName = pathname.slice(1, pathname.length);
  return (
    <Wrapper>
      <Header text={"KhuChat"} />
      <ChatWrapper className="ChatWrapper">
        <ChatMenuContainer>
          <TitleContainer>
            <Title>{roomName} Room</Title>
          </TitleContainer>
          <PeopleContainer>
            <StyledLink to="People">
              <FontAwesomeIcon icon={faAddressBook} />
              <ItemText>People</ItemText>
            </StyledLink>
          </PeopleContainer>
          <Category />
        </ChatMenuContainer>
        <ChatScreenContainer>
          <ChatScreenHeader>
            <Title>Selected Menu Title</Title>
          </ChatScreenHeader>
          <ChatScreenBox>
            {incomingMsg && <IncomingMsg text={incomingMsg} />}
            {outcomingMsg && <OutcomingMsg text={outcomingMsg} />}
            <InputWrapper>
              <InputContainer>
                <form onSubmit={onSubmit}>
                  <Input
                    placeholder={"Enter any words"}
                    type="text"
                    {...message}
                  />
                  <Button text={"Submit"} />
                </form>
              </InputContainer>
            </InputWrapper>
          </ChatScreenBox>
        </ChatScreenContainer>
      </ChatWrapper>
    </Wrapper>
  );
};