Skip to content
Snippets Groups Projects
TeamViewPage.tsx 2.35 KiB
Newer Older
  • Learn to ignore specific revisions
  • import { Snackbar, Typography } from '@material-ui/core'
    
    Albin Henriksson's avatar
    Albin Henriksson committed
    import { Alert } from '@material-ui/lab'
    import React, { useEffect, useState } from 'react'
    
    import { useAppSelector } from '../../hooks'
    
    import { socketConnect, socketJoinPresentation } from '../../sockets'
    
    import SlideDisplay from '../presentationEditor/components/SlideDisplay'
    
    import Timer from '../views/components/Timer'
    import {
      OperatorContainer,
      OperatorHeader,
      PresentationBackground,
      PresentationContainer,
      SlideCounter,
    } from './styled'
    
    Max Rüdiger's avatar
    Max Rüdiger committed
    const TeamViewPage: React.FC = () => {
    
      const code = useAppSelector((state) => state.presentation.code)
    
      const viewTypes = useAppSelector((state) => state.types.viewTypes)
    
    Max Rüdiger's avatar
    Max Rüdiger committed
      const activeViewTypeId = viewTypes.find((viewType) => viewType.name === 'Team')?.id
    
    Albin Henriksson's avatar
    Albin Henriksson committed
      const [successMessageOpen, setSuccessMessageOpen] = useState(true)
      const competitionName = useAppSelector((state) => state.presentation.competition.name)
    
      const presentation = useAppSelector((state) => state.presentation)
      const activeSlideOrder = useAppSelector(
        (state) =>
          state.presentation.competition.slides.find((slide) => slide.id === state.presentation.activeSlideId)?.order
      )
    
    Albin Henriksson's avatar
    Albin Henriksson committed
      const teamName = useAppSelector(
        (state) =>
          state.presentation.competition.teams.find((team) => team.id === state.competitionLogin.data?.team_id)?.name
      )
    
      useEffect(() => {
    
        if (code && code !== '') {
    
    Albin Henriksson's avatar
    Albin Henriksson committed
          socketConnect('Team')
    
          socketJoinPresentation()
        }
    
        <OperatorContainer>
          <OperatorHeader>
            <Typography variant="h1">
              <Timer></Timer>
            </Typography>
            <SlideCounter>
              <Typography variant="h3">
                {activeSlideOrder !== undefined && activeSlideOrder + 1} / {presentation.competition.slides.length}
              </Typography>
            </SlideCounter>
          </OperatorHeader>
          <PresentationBackground>
            <PresentationContainer>
              {activeViewTypeId && <SlideDisplay variant="presentation" activeViewTypeId={activeViewTypeId} />}
            </PresentationContainer>
            <Snackbar open={successMessageOpen} autoHideDuration={4000} onClose={() => setSuccessMessageOpen(false)}>
              <Alert severity="success">{`Du har gått med i tävlingen "${competitionName}" som lag ${teamName}`}</Alert>
            </Snackbar>
          </PresentationBackground>
        </OperatorContainer>
    
    Max Rüdiger's avatar
    Max Rüdiger committed
    export default TeamViewPage