index.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import { useState, useEffect } from 'react';
  2. import { useDispatch } from 'react-redux';
  3. import QRCode from './QRCode'
  4. import Authorization from './Authorization'
  5. import SMSCode from './SMSCode'
  6. import Registration from './Registration'
  7. import { authorizeUser } from '../../api-data'
  8. import { asyncLogin } from '../../redux/authorization/operations'
  9. import { format } from '../../helpers'
  10. const AuthPage = () => {
  11. const [isQR, setIsQR] = useState<boolean>(false)
  12. const [isCode, setIsCode] = useState<string>('')
  13. const [isChecked, setIsChecked] = useState<boolean>(true);
  14. const [isReg, setIsReg] = useState<boolean>(false);
  15. const [country, setCountry] = useState<string>('Country')
  16. const [number, setNumber] = useState<string>('')
  17. const dispatch = useDispatch()
  18. const handleIsQR = (): void => setIsQR(!isQR)
  19. const isValidCredentials = () => {
  20. const numberLength = number.split(' ').join('').trim().length
  21. if (numberLength < 13 || numberLength > 13) return false
  22. if (!country || country === 'Country') return false
  23. if(number.slice(0,1) === '+') return true
  24. return true
  25. }
  26. const handleIsValidCode = async (e: React.ChangeEvent<HTMLInputElement>):Promise<void> => {
  27. if (isCode && format(e.target.value) === isCode)
  28. dispatch(await asyncLogin(number, isCode, () => setIsReg(!isReg)))
  29. }
  30. const handleSendCode = async () => {
  31. const res = await authorizeUser(format(number), country)
  32. res && setIsCode(res)
  33. }
  34. const handleIsCheck = (e: React.ChangeEvent<HTMLInputElement>): void => {
  35. const flag = e.target.checked
  36. setIsChecked(flag);
  37. localStorage.isChecked = flag
  38. }
  39. const handleResetState = ():void => {
  40. setIsCode('')
  41. setCountry('Country')
  42. setNumber('')
  43. }
  44. useEffect(() => {
  45. const isCheckedLC = localStorage.isChecked
  46. isCheckedLC && setIsChecked(isCheckedLC === 'true'?true:false)
  47. }, [])
  48. return (
  49. isReg?<Registration/>:
  50. isCode ? <SMSCode
  51. handleIsValidCode={handleIsValidCode}
  52. number={number}
  53. handleResetState={handleResetState}/> :
  54. isQR ? <QRCode handleIsQR={handleIsQR} /> :
  55. <Authorization handleIsQR={handleIsQR}
  56. handleSendCode={handleSendCode}
  57. handleIsCheck={handleIsCheck}
  58. setNumber={setNumber}
  59. number={number}
  60. country={country}
  61. setCountry={setCountry}
  62. isChecked={isChecked}
  63. isValidCredentials={isValidCredentials}/>
  64. )
  65. };
  66. export default AuthPage;