Skip to content

Commit c4cac73

Browse files
committed
Add hamburger menu for chat window
1 parent bd62a2f commit c4cac73

File tree

2 files changed

+117
-3
lines changed

2 files changed

+117
-3
lines changed

streams-react/src/components/NavBar/NavBar.js

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,38 @@
1+
import { useContext } from "react";
12
import {Link} from "react-router-dom";
3+
import { ChatContext } from "../../context/ChatContext";
4+
import { SocketContext } from "../../context/SocketContext";
25
import styles from "./NavBar.module.css";
36

47
const NavBar = () => {
8+
const {isChatOpen, setIsChatOpen} = useContext(ChatContext);
9+
const {socket} = useContext(SocketContext);
10+
11+
const handleClick = () => {
12+
setIsChatOpen(c => !c);
13+
};
14+
15+
const handleKeyDown = (e) => {
16+
if(e.keyCode === 32 || e.keyCode === 13) {
17+
handleClick();
18+
}
19+
};
20+
521
return(
622
<nav className={styles.nav}>
723
<div className={styles.container}>
8-
<Link to="/" className={styles.logo}>P2P React</Link>
9-
<div className={styles.underline}></div>
24+
<div className={styles.logo__container}>
25+
<Link to="/" className={styles.logo}>P2P React</Link>
26+
<div className={styles.underline}></div>
27+
</div>
28+
<div className={`${socket ? styles.hamburger : styles.hidden}`} onClick={handleClick} onKeyDown={handleKeyDown} tabIndex="0">
29+
<div className={`${styles.line} ${styles.line__one} ${isChatOpen ? styles.hidden : styles["line__one--closed"]}`}></div>
30+
<div className={`${styles.line} ${styles.line__two} ${isChatOpen ? styles.hidden : styles["line__two--closed"]}`}></div>
31+
<div className={`${styles.line} ${styles.line__three} ${isChatOpen ? styles.hidden : styles["line__three--closed"]}`}></div>
32+
<div className={`${styles.line} ${styles.line__one} ${isChatOpen ? styles["line__one--open"] : styles.hidden}`}></div>
33+
<div className={`${styles.line} ${styles.line__two} ${isChatOpen ? styles["line__two--open"] : styles.hidden}`}></div>
34+
<div className={`${styles.line} ${styles.line__three} ${isChatOpen ? styles["line__three--open"] : styles.hidden}`}></div>
35+
</div>
1036
</div>
1137
</nav>
1238
);

streams-react/src/components/NavBar/NavBar.module.css

Lines changed: 89 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@
1212
.container {
1313
position: relative;
1414
margin-left: 15px;
15+
width: 100%;
16+
display: flex;
17+
align-items: center;
18+
}
19+
.logo__container {
20+
position: relative;
1521
}
1622
.logo {
1723
position: relative;
@@ -30,7 +36,89 @@
3036
transition: all 0.25s;
3137
background-color: #40476D;
3238
}
33-
.container:hover .underline {
39+
.logo__container:hover .underline {
3440
background-color: #FCFFFC;
3541
transform: scaleX(1);
42+
}
43+
.hamburger {
44+
margin-left: auto;
45+
margin-right: 15px;
46+
border: 3px solid #EEEEEE;
47+
border-radius: 5px;
48+
cursor: pointer;
49+
position: relative;
50+
}
51+
.line {
52+
width: 25px;
53+
height: 4px;
54+
margin: 7px;
55+
border-radius: 15px;
56+
background-color: #EEEEEE;
57+
}
58+
.hamburger:hover, .hamburger:focus {
59+
border: 3px solid white;
60+
}
61+
.hamburger:hover .line, .hamburger:focus .line {
62+
background-color: white;
63+
}
64+
.line__one {
65+
66+
}
67+
.line__two {
68+
69+
}
70+
.line__three {
71+
72+
}
73+
.line__one--open {
74+
animation: lineOneOpen 0.35s forwards ease-in;
75+
}
76+
.line__two--open {
77+
animation: lineTwoOpen 0.35s forwards ease-in;
78+
}
79+
.line__three--open {
80+
animation: lineThreeOpen 0.35s forwards ease-in;
81+
}
82+
83+
.line__one--closed {
84+
animation: lineOneOpen 0.35s reverse ease-in;
85+
}
86+
.line__two--closed {
87+
animation: lineTwoOpen 0.35s reverse ease-in;
88+
}
89+
.line__three--closed {
90+
animation: lineThreeOpen 0.35s reverse ease-in;
91+
}
92+
.hidden {
93+
display: none;
94+
}
95+
@keyframes lineOneOpen {
96+
0% {
97+
transform: translateY(0deg);
98+
}
99+
50% {
100+
transform: translateY(calc(100% + 7px));
101+
}
102+
100% {
103+
transform: translateY(calc(100% + 7px)) rotate(45deg);
104+
}
105+
}
106+
@keyframes lineTwoOpen {
107+
0% {
108+
transform: scaleX(1);
109+
}
110+
100% {
111+
transform: scaleX(0);
112+
}
113+
}
114+
@keyframes lineThreeOpen {
115+
0% {
116+
transform: translateY(0deg);
117+
}
118+
50% {
119+
transform: translateY(calc(-100% - 7px));
120+
}
121+
100% {
122+
transform: translateY(calc(-100% - 7px)) rotate(-45deg);
123+
}
36124
}

0 commit comments

Comments
 (0)