index.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import { useTrainingQuery } from '../src/gql'
  2. import { TrainingArchive } from '../src/training'
  3. import { useState, useEffect } from 'react'
  4. import { TTraining } from '../src/training/types'
  5. import TrainingProgram from '../src/training/components/TrainingProgram'
  6. import TrainingMeta from '../src/training/components/TrainingMeta'
  7. import theme from '../src/styles/theme'
  8. const Home = () => {
  9. const { data, error, loading } = useTrainingQuery()
  10. const [training, setTraining] = useState<undefined | TTraining>()
  11. console.log(data)
  12. useEffect(() => {
  13. if (data?.training) {
  14. setTraining(data.training)
  15. }
  16. }, [data])
  17. return (
  18. <section className='next-training'>
  19. {training ? (
  20. <>
  21. <h1 className='training-title'>{training.title}</h1>
  22. <TrainingMeta training={training} />
  23. <TrainingProgram training={training} />
  24. </>
  25. ) : null}
  26. <TrainingArchive />
  27. <style jsx>
  28. {`
  29. .training-title {
  30. grid-area: title;
  31. margin: 0.3em 0;
  32. padding: 0;
  33. font-size: 3.4rem;
  34. font-weight: 300;
  35. text-transform: uppercase;
  36. color: ${theme.colors.blue};
  37. padding: 0;
  38. margin: 0.3em 0;
  39. position: relative;
  40. }
  41. .training-title::before {
  42. content: 'your next training:';
  43. text-transform: none;
  44. font-weight: 900;
  45. font-size: 1.1rem;
  46. display: block;
  47. position: absolute;
  48. top: -1rem;
  49. left: 01rem;
  50. color: ${theme.colors.darkerblue};
  51. }
  52. :global(.training-program) {
  53. grid-area: program;
  54. }
  55. :global(.training-archive) {
  56. grid-area: archive;
  57. }
  58. :global(.training-meta) {
  59. grid-area: info;
  60. }
  61. @media (min-width: 600px) {
  62. .next-training {
  63. display: grid;
  64. grid-template-columns: 1fr auto;
  65. grid-template-areas:
  66. 'title info'
  67. 'program program'
  68. 'archive archive';
  69. column-gap: 1em;
  70. }
  71. }
  72. @media (min-width: 1024px) {
  73. .next-training {
  74. display: grid;
  75. grid-template-columns: 2fr 1fr;
  76. grid-template-rows: auto 1fr auto;
  77. grid-template-areas:
  78. 'title program'
  79. 'info program'
  80. 'archive program';
  81. column-gap: 2em;
  82. }
  83. .training-title {
  84. font-size: 8rem;
  85. margin: 0;
  86. }
  87. .training-title::before {
  88. font-size: 1.4rem;
  89. display: block;
  90. position: absolute;
  91. top: -0.4rem;
  92. left: 2.4rem;
  93. color: ${theme.colors.darkerblue};
  94. }
  95. :global(.training-meta) {
  96. grid-area: info;
  97. height: 350px;
  98. background-image: url('/media/man_working_out.jpg');
  99. background-size: auto 100%;
  100. background-repeat: no-repeat;
  101. background-position: right center;
  102. clip-path: polygon(0% 0%, 95% 0%, 100% 50%, 95% 100%, 0% 100%, 0% 0%);
  103. }
  104. }
  105. `}
  106. </style>
  107. </section>
  108. )
  109. }
  110. export default Home