Files
pixelstreamingv2/src/components/sidebar/sidebar.tsx
T
DmitriyB 9f0de105d6 update
2023-02-06 11:22:23 +05:00

118 lines
2.9 KiB
TypeScript

import "./toolbar.css";
import React, { useState, useEffect } from "react";
import { UserList } from "../UserList/UserList";
import { FullscreenButton } from "../ui/FullscreenButton/FullscreenButton";
import { PopupShare } from "../PopupShare/PopupShare";
import { ExitPopup } from "../ExitPopup/ExitPopup";
import { ControlPanel } from "../ControlPanel/ControlPanel";
import { AnimatePresence, motion } from "framer-motion";
import { sidebarVariants, popupAnimation } from "../../utils/animationProps";
export const Sidebar: React.FC<any> = ({ closeStream }) => {
const [open, setOpen] = useState(true);
const [popup, setPopup] = useState({
popup1: false,
popup2: false,
});
const [selected, setSelected] = useState(false);
const [isMuted, setMuted] = useState(true);
const handleMuteClick = () => {
setMuted((prev) => !prev);
};
function handleClosePopups() {
setPopup({
popup1: false,
popup2: false,
});
}
function handleOpenSharePopup() {
setPopup({
popup1: true,
popup2: false,
});
}
function handleOpenExitPopup() {
setPopup({
popup1: false,
popup2: true,
});
}
function closeSideBar() {
setOpen((prev) => !prev);
setSelected(false);
}
useEffect(() => () => unmountComponent(), []);
function unmountComponent() {
setOpen(false);
setPopup({
popup1: false,
popup2: false,
});
}
return (
<div>
<motion.div
animate={open ? "open" : "closed"}
variants={sidebarVariants}
className="toolbar-container"
>
<div className="toolbar-field">
<div className="toolbar-field-part">
<FullscreenButton></FullscreenButton>
<UserList selected={selected} setSelected={setSelected}></UserList>
</div>
<ControlPanel
isMuted={isMuted}
handleMuteClick={handleMuteClick}
handleOpenSharePopup={handleOpenSharePopup}
handleOpenExitPopup={handleOpenExitPopup}
></ControlPanel>
</div>
<div onClick={closeSideBar} className="toolbar-open-button">
<span className="toolbar-open-button-icon"></span>
</div>
</motion.div>
<AnimatePresence>
{popup.popup1 && (
<motion.div
key={1}
variants={popupAnimation}
initial={"hidden"}
animate={"show"}
exit={"hidden"}
>
<PopupShare setClose={handleClosePopups}></PopupShare>
</motion.div>
)}
{popup.popup2 && (
<motion.div
key={2}
variants={popupAnimation}
initial={"hidden"}
animate={"show"}
exit={"hidden"}
>
<ExitPopup
onExit={closeStream}
setClose={handleClosePopups}
></ExitPopup>
</motion.div>
)}
</AnimatePresence>
</div>
);
};