index.tsx 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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. <div className='training-meta-wrap'>
  23. <TrainingMeta training={training} />
  24. </div>
  25. <TrainingProgram training={training} />
  26. </>
  27. ) : null}
  28. <TrainingArchive />
  29. <style jsx>
  30. {`
  31. .next-training {
  32. padding: 1.2em 0.3em;
  33. }
  34. .training-title {
  35. grid-area: title;
  36. margin: 0.3em 0;
  37. padding: 0;
  38. font-size: 3.4rem;
  39. font-weight: 300;
  40. text-transform: uppercase;
  41. color: ${theme.colors.offWhite};
  42. margin: 0.3em 0;
  43. position: relative;
  44. }
  45. .training-title::before {
  46. content: 'your next training:';
  47. text-transform: none;
  48. font-weight: 900;
  49. font-size: 1.1rem;
  50. display: block;
  51. position: absolute;
  52. top: -1rem;
  53. left: 1rem;
  54. color: ${theme.colors.darkerblue};
  55. }
  56. :global(.training-program) {
  57. grid-area: program;
  58. }
  59. :global(.training-archive) {
  60. grid-area: archive;
  61. }
  62. :global(.training-meta) {
  63. grid-area: info;
  64. }
  65. @media (min-width: 600px) {
  66. .next-training {
  67. display: grid;
  68. grid-template-columns: 1fr auto;
  69. grid-template-areas:
  70. 'title info'
  71. 'program program'
  72. 'archive archive';
  73. column-gap: 1em;
  74. }
  75. }
  76. @media (min-width: 1024px) {
  77. .next-training {
  78. padding: 3em 3em;
  79. display: grid;
  80. grid-template-columns: 2fr 1fr;
  81. grid-template-rows: auto 1fr auto;
  82. grid-template-areas:
  83. 'title program'
  84. 'info program'
  85. 'archive program';
  86. column-gap: 2em;
  87. background-image: linear-gradient(
  88. to bottom,
  89. #84cae7,
  90. #84cae7 400px,
  91. #c7c7c7 400px,
  92. #c7c7c7 401px,
  93. #ebebeb 401px
  94. );
  95. }
  96. .training-title {
  97. font-size: 5rem;
  98. margin: 0;
  99. }
  100. .training-title::before {
  101. font-size: 1.4rem;
  102. display: block;
  103. position: absolute;
  104. top: -0.7rem;
  105. left: 0.4rem;
  106. color: ${theme.colors.darkerblue};
  107. }
  108. .training-meta-wrap {
  109. filter: drop-shadow(0 0 12px rgba(0, 0, 0, 0.18));
  110. }
  111. .next-training :global(.training-meta) {
  112. grid-area: info;
  113. width: 700px;
  114. margin-left: auto;
  115. padding: 2em;
  116. padding-top: 11.5em;
  117. color: ${theme.colors.offWhite};
  118. height: 300px;
  119. background-color: #efefef;
  120. background-image: url('/media/man_working_out.jpg');
  121. background-size: auto 100%;
  122. background-repeat: no-repeat;
  123. background-position: right center;
  124. clip-path: polygon(0% 0%, 95% 0%, 100% 50%, 95% 100%, 0% 100%, 0% 0%);
  125. }
  126. .next-training :global(.training-program) {
  127. padding: 2em;
  128. background-color: #ebebeb;
  129. /* box-shadow: ${theme.bs}; */
  130. filter: drop-shadow(0 0 12px rgba(0,0,0,0.18));
  131. }
  132. }
  133. `}
  134. </style>
  135. </section>
  136. )
  137. }
  138. export default Home