This is just a technology testing project based on Create React App and TailwindCSS
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

107 行
4.2KB

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