This is just a technology testing project based on Create React App and TailwindCSS
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

130 lines
5.4KB

  1. import React, { useEffect } from 'react'
  2. import PropTypes from 'prop-types'
  3. import { Formik, Form } from 'formik'
  4. import { Persist } from 'formik-persist'
  5. import * as Yup from 'yup'
  6. import FormikControl from '../FormikControls'
  7. import ButtonPrimary from '../controls/ButtonPrimary'
  8. import ButtonSecondary from '../controls/ButtonSecondary'
  9. import { FormLogin } from './FormLogin'
  10. import ServicePolicy from '../../ServicePolicy'
  11. export const FormRegistration = (props) => {
  12. const { setPopupTitle, setPopupContent, setPopupOpened, setPopupBack, close } = props
  13. useEffect(() => {
  14. if (setPopupTitle) { setPopupTitle('New user registration') }
  15. })
  16. const initialValues = {
  17. email: '',
  18. password: '',
  19. password_confirm: '',
  20. userconsent: false,
  21. }
  22. const validationSchema = Yup.object({
  23. email: Yup.string()
  24. .required('Required')
  25. .email('Must be a valid email address'),
  26. password: Yup.string()
  27. .required('Required')
  28. .min(8, 'Minimum 8 symbols'),
  29. password_confirm: Yup.string()
  30. .required('Required')
  31. .oneOf([Yup.ref('password'), null], 'Not matching with password'),
  32. userconsent: Yup.boolean()
  33. .oneOf([true], 'Required'),
  34. })
  35. const onSubmit = async values => {
  36. console.log('Form data', values)
  37. }
  38. const goLogin = () => {
  39. setPopupOpened(false)
  40. setTimeout(() => {
  41. setPopupContent(<FormLogin setPopupTitle={setPopupTitle} setPopupContent={setPopupContent} setPopupOpened={setPopupOpened} setPopupBack={setPopupBack} close={close} />)
  42. setPopupOpened(true)
  43. }, 200);
  44. }
  45. const goServicePolicy = () => {
  46. setPopupBack(<FormRegistration setPopupTitle={setPopupTitle} setPopupContent={setPopupContent} setPopupOpened={setPopupOpened} setPopupBack={setPopupBack} close={close} />)
  47. setPopupOpened(false)
  48. setTimeout(() => {
  49. setPopupContent(<ServicePolicy setPopupTitle={setPopupTitle} setPopupContent={setPopupContent} setPopupOpened={setPopupOpened} setPopupBack={setPopupBack} close={close} />)
  50. setPopupOpened(true)
  51. }, 200);
  52. }
  53. return (
  54. <Formik
  55. initialValues={initialValues}
  56. validationSchema={validationSchema}
  57. onSubmit={onSubmit}
  58. >
  59. {formik => {
  60. return (
  61. <div className="overflow-y-auto max-h-screen-75">
  62. <Form>
  63. <div className="p-3">
  64. <FormikControl
  65. control='string'
  66. name='email'
  67. label='Email'
  68. placeholder='Enter valid email'
  69. required
  70. aria-required="true"
  71. aria-invalid={!!formik.errors.email}
  72. />
  73. <FormikControl
  74. control='password'
  75. name='password'
  76. label='Password'
  77. placeholder='Choose a strong password'
  78. required
  79. aria-required="true"
  80. aria-invalid={!!formik.errors.password}
  81. />
  82. <FormikControl
  83. control='password'
  84. name='password_confirm'
  85. label='Conform password'
  86. placeholder='Enter same password'
  87. required
  88. aria-required="true"
  89. aria-invalid={!!formik.errors.password_confirm}
  90. />
  91. <FormikControl
  92. control='userconsent'
  93. name='userconsent'
  94. label_template='Accept #Service Policy#'
  95. label_action={goServicePolicy}
  96. required
  97. aria-required="true"
  98. aria-invalid={!!formik.errors.userconsent}
  99. />
  100. </div>
  101. <div className="px-2 pt-4 pb-1 mb-0 bg-primary-200 border-t rounded-b-lg">
  102. <ButtonPrimary type="submit" text="Register" disabled={!formik.isValid || !formik.dirty} />
  103. <div className="my-3">
  104. <ButtonSecondary type="button" text="Have account? - Sign In" action={goLogin} />
  105. </div>
  106. </div>
  107. <Persist name="registration-form" isSessionStorage />
  108. </Form>
  109. </div>
  110. )
  111. }}
  112. </Formik>
  113. )
  114. }
  115. FormRegistration.propTypes = {
  116. setPopupTitle: PropTypes.func,
  117. setPopupContent: PropTypes.func,
  118. setPopupOpened: PropTypes.func,
  119. setPopupBack: PropTypes.func,
  120. close: PropTypes.func,
  121. }