index.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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(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. if (isCheckedLC) {
  47. setIsChecked(isCheckedLC === 'true'?true:false)
  48. } else {
  49. localStorage.setItem('isChecked','true')
  50. }
  51. }, [])
  52. return (
  53. isReg?<Registration/>:
  54. isCode ? <SMSCode
  55. handleIsValidCode={handleIsValidCode}
  56. number={number}
  57. handleResetState={handleResetState}/> :
  58. isQR ? <QRCode handleIsQR={handleIsQR} /> :
  59. <Authorization handleIsQR={handleIsQR}
  60. handleSendCode={handleSendCode}
  61. handleIsCheck={handleIsCheck}
  62. setNumber={setNumber}
  63. number={number}
  64. setCountry={setCountry}
  65. isChecked={isChecked}
  66. isValidCredentials={isValidCredentials}/>
  67. )
  68. };
  69. export default AuthPage;