index.tsx 3.6 KB

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