import { Settings } from "@mui/icons-material"; import { Alert, IconButton, Menu, MenuItem, Snackbar } from "@mui/material"; import { useState } from "react"; import UserLite from "../../api-bodies/UserLite"; import UserStatus from "../../api-bodies/UserStatus"; import { useAppDispatch, useAppSelector } from "../../redux/hooks"; import { selectFavorites, addFavorite, removeFavorite, } from "../../redux/slices/favoritesSlice"; import { open as openMeetingDetails } from "../../redux/slices/meetingDetailsOpenSlice"; import { selectMeeting } from "../../redux/slices/meetingsAndUserStatusSlice"; import { useNavigate } from "react-router-dom"; import { selectMe } from "../../redux/slices/usersSlice"; import NewMeeting from "../../api-bodies/NewMeeting"; import axios from "../../api/axios"; import { open as openMeetingUrl } from "../../redux/slices/meetingUrlSlice"; interface Props { user: UserLite; status: UserStatus; } const SettingsButton: React.FC = ({ user, status }: Props) => { const navigate = useNavigate(); const [anchorEl, setAnchorEl] = useState(null); const [snackbarOpen, setSnackbarOpen] = useState(false); const me = useAppSelector(selectMe); const favoritesUuids = useAppSelector(selectFavorites); const meeting = useAppSelector((state) => selectMeeting(state, status.meetingId) ); const dispatch = useAppDispatch(); const open = Boolean(anchorEl); const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; const handleSnackbarClose = ( event?: React.SyntheticEvent | Event, reason?: string ) => { if (reason === "clickaway") { return; } setSnackbarOpen(false); }; const startCall = async () => { const start = new Date().toISOString(); let newStart = start.split(".")[0]; newStart += start.includes("Z") ? "Z" : ""; const newMeeting: NewMeeting = { startTime: newStart, duration: 30, topic: `Meeting with ${user.name}`, registrantIds: [user.uuid, me], }; try { const response = await axios.post( `/users/${me}/meetings`, JSON.stringify(newMeeting) ); dispatch(openMeetingUrl(response.data.joinUrl)); } catch (e) { console.log(e); } }; return (
{favoritesUuids.includes(user.uuid) ? ( { handleClose(); dispatch(removeFavorite({ userId: me, toBeRemoved: user.uuid })); }} > Remove from Favorites ) : ( { setSnackbarOpen(true); handleClose(); dispatch(addFavorite({ userId: me, toBeAdded: user.uuid })); }} > Add to Favorites )} {status.inMeeting ? ( { handleClose(); dispatch(openMeetingDetails(meeting)); }} > View current meeting ) : null} { handleClose(); navigate(`../contacts/${user.uuid}`); }} > View upcoming meetings { handleClose(); startCall(); }} > Create meeting User successfully added to favourites list!
); }; export default SettingsButton;