Training.tsx 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import theme from '../../styles/theme'
  2. import TrainingBlock from './TrainingBlock'
  3. import Link from 'next/link'
  4. import { TTraining } from '../types'
  5. import TrainingMeta from './TrainingMeta'
  6. import { formatTime, calculateDuration } from '../utils'
  7. import TrainingProgram from './TrainingProgram'
  8. const Training = ({ training }: { training: TTraining }) => {
  9. return (
  10. <article>
  11. <h2>
  12. <span className='program-title'>{training.title}</span>{' '}
  13. <span className='program-time'>{formatTime(calculateDuration(training.blocks))}</span>
  14. </h2>
  15. <TrainingMeta training={training} />
  16. <TrainingProgram training={training} />
  17. <style jsx>
  18. {`
  19. article {
  20. display: grid;
  21. grid-template-areas:
  22. 'title title'
  23. 'information placeholder'
  24. 'content content';
  25. grid-template-columns: 1fr 2fr;
  26. background-image: url('/media/man_working_out.jpg');
  27. background-size: auto 400px;
  28. background-repeat: no-repeat;
  29. background-position: center 0;
  30. margin: 2em 0;
  31. }
  32. article > * {
  33. padding: 0.2em 1em;
  34. margin: 0;
  35. }
  36. article > h2 {
  37. grid-area: title;
  38. font-weight: 900;
  39. font-size: 160%;
  40. background: ${theme.colors.darkerblue};
  41. color: ${theme.colors.offWhite};
  42. }
  43. section {
  44. grid-area: content;
  45. padding: 1em 2em;
  46. }
  47. span.caption {
  48. }
  49. button {
  50. border: none;
  51. background: ${theme.colors.darkblue};
  52. color: ${theme.colors.offWhite};
  53. font-weight: 900;
  54. padding: 0.5rem;
  55. cursor: pointer;
  56. }
  57. `}
  58. </style>
  59. </article>
  60. )
  61. }
  62. export default Training