Advertisement
nein_yards

funny

Apr 24th, 2022
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.69 KB | None | 0 0
  1. import {
  2. Box,
  3. Flex,
  4. FormControl,
  5. FormLabel,
  6. Input,
  7. Radio,
  8. RadioGroup,
  9. Slider,
  10. SliderFilledTrack,
  11. SliderMark,
  12. SliderThumb,
  13. SliderTrack,
  14. Text,
  15. Button,
  16. useColorMode,
  17. } from '@chakra-ui/react'
  18. import Navbar from '../components/Navbar'
  19. import type { NextPage } from 'next'
  20. import dynamic from 'next/dynamic'
  21. import Head from 'next/head'
  22. import { useRouter } from 'next/router'
  23. import { useEffect, useState } from 'react'
  24. import { critz } from '../lib/percentileToZscore'
  25. import { SliderPicker } from 'react-color'
  26.  
  27. import {
  28. bgColor,
  29. inputColor,
  30. primaryBorderColor,
  31. primaryComponentColor,
  32. secondaryComponentColor,
  33. } from '../constants/colors'
  34. import Gloves from '../components/Gloves'
  35. import { IUser } from '../constants/interfaces'
  36. import axios from 'axios'
  37.  
  38. // const Gloves = dynamic(() => import('../components/Gloves'), {
  39. // ssr: false,
  40. // loading: () => <div>loading...</div>,
  41. // })
  42.  
  43. const Home = ({ sport: initialSport }) => {
  44. const [color, setColor] = useState(0x8a5f3b)
  45. const [count, setCount] = useState(0)
  46. const [hexCode, setHexCode] = useState(0xff0000)
  47. const [sport, setSport] = useState(initialSport)
  48. const [gender, setGender] = useState(null)
  49. const [size, setSize] = useState(50)
  50. const router = useRouter()
  51. const { colorMode } = useColorMode()
  52. const [user, setUser] = useState<IUser | null>(null)
  53.  
  54. useEffect(() => {
  55. document.body.style.backgroundColor = bgColor[colorMode]
  56. console.log(bgColor[colorMode])
  57. }, [colorMode])
  58.  
  59. // useEffect(() => {}, [hexCode])
  60.  
  61. const percentileToInches = percent => {
  62. const MEAN = gender == 'male' ? 19.48 : 18.15
  63. const SD = gender == 'male' ? 0.9213 : 0.9079
  64.  
  65. return MEAN + SD * critz(percent / 100)
  66. }
  67.  
  68. const handleChangeComplete = (color, event) => {
  69. // console.log(color.hex)
  70. setHexCode(color.hex)
  71. }
  72.  
  73. useEffect(() => {
  74. axios
  75. .get('http://localhost:3001/api/v1/auth/user', {
  76. withCredentials: true,
  77. })
  78. .then(response => {
  79. setUser(response.data.user)
  80. })
  81. .catch(err => {
  82. console.error(err)
  83. })
  84. }, [])
  85.  
  86. const logOut = async () => {
  87. try {
  88. await axios.delete('http://localhost:3001/api/v1/auth', {
  89. withCredentials: true,
  90. })
  91. router.reload()
  92. } catch (err) {
  93. console.error(err)
  94. }
  95. }
  96.  
  97. useEffect(() => {
  98. document.body.style.backgroundColor = bgColor[colorMode]
  99. console.log(bgColor[colorMode])
  100. }, [colorMode])
  101.  
  102. return (
  103. <Flex>
  104. <Head>
  105. <title>Design your glove!</title>
  106. </Head>
  107. <Navbar user={user} logOut={logOut} url={router.asPath} />
  108.  
  109. <Gloves hexCode={color} key={count} />
  110. <Box
  111. w='560px'
  112. h='600px'
  113. bgColor={primaryComponentColor[colorMode]}
  114. borderRadius='7px'
  115. p='26px'
  116. fontSize='17px'
  117. border={'1px solid ' + primaryBorderColor[colorMode]}
  118. m='70px 120px 0 auto'
  119. // position='absolute'
  120. // zIndex='2'
  121. // top='70px'
  122. // right='120px'
  123. >
  124. <Text fontSize='22px' fontWeight='bold' mb='20px'>
  125. Design your own glove
  126. </Text>
  127. <FormControl mb='20px'>
  128. <FormLabel>Sport</FormLabel>
  129. <Box
  130. border={'0.37px solid ' + inputColor[colorMode]}
  131. p='10px 20px 10px 10px'
  132. borderRadius='8px'
  133. >
  134. <RadioGroup onChange={setSport} value={sport}>
  135. <Radio value='skiing' m='0 10px'>
  136. Skiing
  137. </Radio>
  138. <Radio value='motorcycling' m='0 10px'>
  139. Motorcycling
  140. </Radio>
  141. <Radio value='baseball' m='0 10px'>
  142. Baseball
  143. </Radio>
  144. <Radio value='golf' m='0 10px'>
  145. Golf
  146. </Radio>
  147. </RadioGroup>
  148. </Box>
  149. </FormControl>
  150. <FormControl mb='20px'>
  151. <FormLabel>Gender</FormLabel>
  152. <Box
  153. border={'0.37px solid ' + inputColor[colorMode]}
  154. p='10px 20px 10px 10px'
  155. borderRadius='8px'
  156. >
  157. <RadioGroup onChange={setGender} value={gender}>
  158. <Radio value='male' m='0 10px'>
  159. Male
  160. </Radio>
  161. <Radio value='female' m='0 10px'>
  162. Female
  163. </Radio>
  164. </RadioGroup>
  165. </Box>
  166. </FormControl>
  167.  
  168. {gender && (
  169. <FormControl mb='20px'>
  170. <FormLabel>Size</FormLabel>
  171. <Box
  172. border={'0.37px solid ' + inputColor[colorMode]}
  173. p='10px 20px 10px 20px'
  174. borderRadius='8px'
  175. >
  176. <Slider aria-label='slider-ex-6' onChange={val => setSize(val)}>
  177. <SliderMark value={25} mt='1' ml='-2.5' fontSize='xs'>
  178. S
  179. </SliderMark>
  180. <SliderMark value={50} mt='1' ml='-2.5' fontSize='xs'>
  181. M
  182. </SliderMark>
  183. <SliderMark value={75} mt='1' ml='-2.5' fontSize='xs'>
  184. L
  185. </SliderMark>
  186. <SliderMark
  187. value={size}
  188. textAlign='center'
  189. bg='blue.500'
  190. color='white'
  191. mt='-10'
  192. ml='-5'
  193. w='12'
  194. >
  195. {percentileToInches(size).toFixed(1) + '"'}
  196. </SliderMark>
  197. <SliderTrack>
  198. <SliderFilledTrack />
  199. </SliderTrack>
  200. <SliderThumb />
  201. </Slider>
  202. </Box>
  203. </FormControl>
  204. )}
  205. <FormControl mb='20px'>
  206. <Box>
  207. <FormLabel display='inline-block'>Color</FormLabel>{' '}
  208. <Button
  209. display='inline-block'
  210. float='right'
  211. size='sm'
  212. mt='-5px'
  213. onClick={() => {
  214. setColor(hexCode)
  215. setCount(count + 1)
  216. }}
  217. >
  218. Set color
  219. </Button>
  220. </Box>
  221.  
  222. <Box
  223. border={'0.37px solid ' + inputColor[colorMode]}
  224. p='20px 20px 20px 20px'
  225. borderRadius='8px'
  226. >
  227. <SliderPicker
  228. color={hexCode}
  229. onChangeComplete={handleChangeComplete}
  230. />
  231. </Box>
  232. </FormControl>
  233. </Box>
  234. </Flex>
  235. )
  236. }
  237.  
  238. Home.getInitialProps = async ctx => {
  239. // const router = useRouter()
  240. return { sport: ctx.query.sport }
  241. }
  242.  
  243. export default Home
  244.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement