TrainingBlock.tsx 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import ExerciseComposition from './ExerciseComposition'
  2. import { calculateDuration, formatTime } from '../utils'
  3. import { TBlockInstance } from '../types'
  4. const TrainingBlock = ({
  5. blockInstance
  6. }: {
  7. blockInstance: TBlockInstance
  8. }) => {
  9. const duration = calculateDuration(blockInstance)
  10. const { title, blocks, exercises } = blockInstance.block
  11. return (
  12. <div>
  13. {title && (
  14. <h3>
  15. <span className='block-title'>{title}</span>{' '}
  16. <span className='block-time'>{formatTime(duration)}</span>
  17. </h3>
  18. )}
  19. {blocks &&
  20. blocks.map(block => (
  21. <TrainingBlock key={block.id} blockInstance={block} />
  22. ))}
  23. {exercises?.length ? (
  24. <ExerciseComposition exercises={exercises} duration={duration} />
  25. ) : null}
  26. <style jsx>
  27. {`
  28. section {
  29. display: grid;
  30. }
  31. .block-time {
  32. color: gray;
  33. font-size: 90%;
  34. }
  35. .block-time::before {
  36. content: '(';
  37. }
  38. .block-time::after {
  39. content: ')';
  40. }
  41. `}
  42. </style>
  43. </div>
  44. )
  45. }
  46. export default TrainingBlock