index.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  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. margin: 0.3em 0;
  36. padding: 0;
  37. font-size: 3.4rem;
  38. font-weight: 300;
  39. text-transform: uppercase;
  40. color: ${theme.colors.presentationBackground};
  41. margin: 0.3em 0;
  42. position: relative;
  43. }
  44. .training-title::before {
  45. content: 'your next training';
  46. text-transform: none;
  47. font-weight: 300;
  48. font-size: 1.1rem;
  49. display: block;
  50. position: absolute;
  51. top: -1rem;
  52. left: 1rem;
  53. color: ${theme.colors.highlight};
  54. }
  55. @media (min-width: ${theme.midsize}) {
  56. .next-training {
  57. display: grid;
  58. grid-template-areas:
  59. 'title info '
  60. 'program program'
  61. 'archive archive';
  62. grid-template-columns: 1fr auto;
  63. column-gap: 1em;
  64. }
  65. .training-title {
  66. grid-area: title;
  67. }
  68. :global(.training-meta-wrap) {
  69. grid-area: info;
  70. }
  71. :global(.training-program) {
  72. grid-area: program;
  73. }
  74. :global(.training-archive) {
  75. grid-area: archive;
  76. }
  77. }
  78. @media (min-width: ${theme.fullsize}) {
  79. .next-training {
  80. padding: 3em 3em;
  81. grid-template-areas:
  82. 'free1 title program free2'
  83. 'free1 info program free2'
  84. 'free1 archive archive free2';
  85. grid-template-columns: minmax(0, 1fr) minmax(550px, 4fr) minmax(300px, 2fr) minmax(0, 1fr);
  86. column-gap: 2em;
  87. background-image: linear-gradient(
  88. to bottom,
  89. ${theme.colors.presentationBackground},
  90. ${theme.colors.presentationBackground} 400px,
  91. ${theme.colors.black}44 400px,
  92. ${theme.colors.background} 406px
  93. );
  94. }
  95. .training-title {
  96. font-size: 5rem;
  97. margin: 0;
  98. color: ${theme.colors.presentation}
  99. }
  100. .training-title::before {
  101. font-size: 1.4rem;
  102. display: block;
  103. position: absolute;
  104. top: -0.7rem;
  105. left: 0.8rem;
  106. color: ${theme.colors.presentation};
  107. }
  108. .training-meta-wrap {
  109. filter: drop-shadow(0 0 10px rgba(0, 0, 0, 0.5));
  110. }
  111. .next-training :global(.training-meta) {
  112. padding-top: 6em;
  113. color: ${theme.colors.white};
  114. height: 300px;
  115. background-image: url('/media/man_working_out.jpg');
  116. background-size: auto 100%;
  117. background-repeat: no-repeat;
  118. background-position: right center;
  119. clip-path: polygon(0% 0%, 95% 0%, 100% 50%, 95% 100%, 0% 100%, 0% 0%);
  120. }
  121. .next-training :global(.training-program) {
  122. padding: 2em;
  123. background-color: #ebebeb;
  124. /* box-shadow: ${theme.bs}; */
  125. filter: drop-shadow(0 0 10px rgba(0,0,0,0.18));
  126. }
  127. }
  128. `}
  129. </style>
  130. </section>
  131. )
  132. }
  133. export default Home