import React, { useState } from 'react'; import { makeStyles } from '@material-ui/core/styles'; import { Card, CardHeader, CardContent, CardActions, Collapse, IconButton, Button, } from '@material-ui/core'; import { FiberManualRecord as RunningIcon, Close as FailedIcon, Done as CompleteIcon, Timer as NotStartedIcon, ExpandMore as ExpandIcon } from '@material-ui/icons'; import Logs from './Logs'; import { Event } from '../../types'; import requests from '../../requests'; import { useAuth } from '../../hooks/useAuth'; interface PropTypes { event: Event; mutate: () => void; } const useStyles = makeStyles(theme => ({ actions: { display: 'flex', justifyContent: 'space-between' }, title: { display: 'flex', alignItems: 'center', justifyContent: 'flex-start', '& svg': { marginLeft: theme.spacing(1) } }, running: { color: theme.palette.warning.main }, complete: { color: theme.palette.success.main }, logs: { maxHeight: theme.spacing(40), overflowY: 'scroll' } })); const EventCard: React.FC = ({ event, mutate }) => { const [expanded, setExpanded] = useState(false); const classes = useStyles(); const { user } = useAuth(); const { name, schedule, status, nextRunAt, lastRunAt, context: { participants, conferenceId, attendanceId } } = event; const joined = participants.findIndex(x => x === user?.username) >= 0; const handleJoin = () => { if (user) { const { context } = event; context.participants.push(user.username); return requests .patch(`/events/${event._id}`, { context }) .then(() => mutate()); } }; const handleRemove = () => { return requests .delete(`/events/${event._id}`) .then(() => mutate()); }; const toggleExpand = () => setExpanded(v => !v); const title = (
{name} {status === 'running' && } {status === 'complete' && } {status === 'failed' && } {status === 'notStarted' && }
); return ( {nextRunAt &&
Next run at: {new Date(nextRunAt).toLocaleTimeString()}
} {lastRunAt &&
Last run at: {new Date(lastRunAt).toLocaleTimeString()}
} {conferenceId &&
ConferenceID: {conferenceId}
} {attendanceId &&
AttendanceID: {attendanceId}
}
Participants ({participants?.length || 0} / 3)
    {participants?.map(username => (
  • {username} {username === user?.username && (you)}
  • ))}
{!joined && (participants?.length || 0) < 3 && ( )}
); }; export default EventCard;