import React, { FunctionComponent, useEffect } from 'react'; import { Config } from '../../config'; import { useUserProfile } from '../../gql/queries/profile'; import { useConference } from '../../hooks/useConference'; import { Page } from '../Page'; import { Gravatar } from './Gravatar'; export interface ConferencePageProps { } const StatusHandRaised = 'hand-raised'; const StatusThumbsUp = 'thumbs-up'; const StatusThumbsDown = 'thumbs-down'; const StatusNoVote = 'no-vote'; export const ConferencePage:FunctionComponent = () => { const { user } = useUserProfile(); const { uuid, data, setNickname, setEmail, ping, setStatus, forget } = useConference(); const currentStatus = data.statuses[uuid]; useEffect(() => { if (!user.name && !user.email) return; setNickname(user.name || user.email.split('@')[0]); setEmail(user.email); }, [user.name, user.email]); useEffect(() => { ping(); const intervalId = setInterval(() => ping(), Config.conferenceHeartbeatInterval + (Math.random() * Config.conferenceHeartbeatInterval/2)); return () => clearInterval(intervalId); }, []); const onStatusChange = (status: string) => { setStatus(currentStatus === status ? '' : status); }; return (

Mes actions

Assemblée

{ Object.keys(data.peers).map(p => { const now = new Date(); const lastHeartBeat = new Date(data.peers[p]); if (p === uuid) return null; if (now.getTime() > lastHeartBeat.getTime() + Config.conferenceHeartbeatInterval*2) { forget(p); return null; } const nickname = data.nicknames[p] || '???'; const email = data.emails[p] || ''; return ( ) }) }
); } export interface UserCardProps { nickname: string email: string className?: string status: string }; export const UserCard:FunctionComponent = ({ nickname, email, className, status }) => { return (
{ !status ? : null } { status === StatusHandRaised ? : null } { status === StatusThumbsUp ? : null } { status === StatusNoVote ? : null } { status === StatusThumbsDown ? : null }

{nickname}

); };