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.

103 lines
3.9KB

  1. import React, { useEffect } from 'react'
  2. import PropTypes from 'prop-types'
  3. import { Formik, Form } from 'formik'
  4. import * as Yup from 'yup'
  5. import FormikControl from '../FormikControls'
  6. import ButtonPrimary from '../controls/ButtonPrimary'
  7. import ButtonSecondary from '../controls/ButtonSecondary'
  8. import Link from '../controls/Link'
  9. import { FormRegistration } from './FormRegistration'
  10. export const FormLogin = (props) => {
  11. const { setPopupTitle, setPopupContent, setPopupOpened } = props
  12. useEffect(() => {
  13. if (setPopupTitle) { setPopupTitle('Enter into restricted area') }
  14. })
  15. const initialValues = {
  16. login: '',
  17. password: '',
  18. remember_me: false,
  19. }
  20. const validationSchema = Yup.object({
  21. email: Yup.string()
  22. .required('Required'),
  23. password: Yup.string()
  24. .required('Required'),
  25. })
  26. const onSubmit = async values => {
  27. console.log('Form data', values)
  28. }
  29. const goRegistration = () => {
  30. setPopupOpened(false)
  31. setTimeout(() => {
  32. setPopupContent(<FormRegistration setPopupTitle={setPopupTitle} setPopupContent={setPopupContent} setPopupOpened={setPopupOpened} />)
  33. setPopupOpened(true)
  34. }, 200);
  35. }
  36. const goRestorePassword = () => {
  37. setPopupOpened(false)
  38. setTimeout(() => {
  39. setPopupContent(<FormRegistration setPopupTitle={setPopupTitle} setPopupContent={setPopupContent} setPopupOpened={setPopupOpened} />)
  40. setPopupOpened(true)
  41. }, 200);
  42. }
  43. return (
  44. <Formik
  45. initialValues={initialValues}
  46. validationSchema={validationSchema}
  47. onSubmit={onSubmit}
  48. >
  49. {formik => {
  50. return (
  51. <div className="overflow-y-auto max-h-screen-75">
  52. <Form>
  53. <div className="p-3">
  54. <FormikControl
  55. control='string'
  56. name='email'
  57. label='E-mail'
  58. placeholder='Enter e-mail'
  59. />
  60. <FormikControl
  61. control='password'
  62. name='password'
  63. label='Password'
  64. placeholder='Enter password'
  65. />
  66. <div className="flex xs:flex-row justify-between items-center xs:items-center">
  67. <div>
  68. <FormikControl
  69. control='checkbox'
  70. name='remember_me'
  71. label='Remember me'
  72. />
  73. </div>
  74. <Link action={goRestorePassword} className="block px-2 mt-6 mb-4 leading-8 text-lg">Forgot password?</Link>
  75. </div>
  76. </div>
  77. <div className="px-2 pt-4 pb-1 mb-0 bg-primary-200 border-t sm:rounded-b-lg">
  78. <ButtonPrimary type="submit" text="Enter" disabled={!formik.isValid || !formik.dirty} />
  79. <div className="my-3">
  80. <ButtonSecondary type="button" text="Have no account? - Create" action={goRegistration} />
  81. </div>
  82. </div>
  83. </Form>
  84. </div>
  85. )
  86. }}
  87. </Formik>
  88. )
  89. }
  90. FormLogin.propTypes = {
  91. setPopupTitle: PropTypes.func,
  92. setPopupContent: PropTypes.func,
  93. setPopupOpened: PropTypes.func,
  94. }