index.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import Link from 'next/link'
  2. import { Training } from '../src/training'
  3. import { useContext, useState, useEffect } from 'react'
  4. import { TrainingContext } from './_app'
  5. import TrainingArchive from '../src/training/components/TrainingArchive'
  6. import { useRouter } from 'next/router'
  7. const Home = () => {
  8. //const { data, error, loading } = useTrainingsQuery();
  9. const trainingList = useContext(TrainingContext)
  10. const [trainingIndex, setTrainingIndex] = useState(trainingList.length - 1)
  11. const router = useRouter()
  12. const queryId = router.query && router.query.id
  13. useEffect(() => {
  14. if (typeof queryId !== 'string') return
  15. const intId = parseInt(queryId)
  16. if (intId < 0 || intId + 1 > trainingList.length) return
  17. setTrainingIndex(intId)
  18. }, [router.query])
  19. const { trainings } = trainingList[trainingIndex]
  20. return (
  21. <>
  22. <section className='training-meta'>
  23. <h1>Stay in Shape with u-fit</h1>
  24. <p>u-fit is a high intensity interval training offered by u-blox.</p>
  25. <aside>
  26. <div className='info'>
  27. <span className='caption'>When</span>
  28. <span className='data'>Tuesdays, 11:45-12:30</span>
  29. </div>
  30. <div className='info'>
  31. <span className='caption'>Equipment</span>
  32. <span className='data'>Towel, water, optional: yoga mat</span>
  33. </div>
  34. </aside>
  35. </section>
  36. <section id='nextTraining'>
  37. <Training index={trainingIndex} training={trainings[0]} />
  38. </section>
  39. <TrainingArchive />
  40. <style jsx>
  41. {`
  42. .training-meta {
  43. padding: 0 1em;
  44. }
  45. .info .caption {
  46. display: inline-block;
  47. font-weight: 900;
  48. min-width: 6rem;
  49. }
  50. `}
  51. </style>
  52. </>
  53. )
  54. }
  55. export default Home