Reac front end for psicometric app

candidato.jsx 5.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import React from 'react'
  2. import * as Yup from 'yup';
  3. import { useFormik, Form, FormikProvider } from 'formik';
  4. import {
  5. Box, Button, FormControlLabel, Checkbox,
  6. Stack, TextField, FormGroup,
  7. } from '@mui/material';
  8. export function Candidato(props) {
  9. const CandidatoSchema = Yup.object().shape({
  10. nombres:
  11. Yup.string()
  12. .min(2, 'Demasiado corto!')
  13. .max(50, 'Demasiado largo!')
  14. .required("Ingresa un nombre válido"),
  15. apellidos:
  16. Yup.string()
  17. .required("Ingresa un apellido válido")
  18. .min(2, 'Demasiado corto!').max(50, 'Demasiado Largo!'),
  19. mail:
  20. Yup.string()
  21. .email("Correo no valido")
  22. .required("Ingrea un puesto válido"),
  23. sendmail:
  24. Yup.bool()
  25. .required('Ingresa un nivel educativo válido'),
  26. nombrepuesto:
  27. Yup.string('Ingresa un valor válido')
  28. .required('Ingresa un nombre válido'),
  29. nombreEmpresa:
  30. Yup.string('Ingresa un valor válido')
  31. .required('Ingresa un nombre válido'),
  32. });
  33. let { handleNext, handleBack, password, setPassword } = props
  34. const formik = useFormik({
  35. initialValues: {
  36. nombres: password.nombres,
  37. apellidos: password.apellidos,
  38. sendmail: password.sendmail,
  39. mail : password.mail,
  40. nombrepuesto: password.nombrepuesto,
  41. nombreEmpresa: password.nombreEmpresa,
  42. },
  43. onSubmit: (fields) => {
  44. setPassword({ ...password, ...fields })
  45. handleNext()
  46. },
  47. validationSchema: CandidatoSchema,
  48. });
  49. const { errors, touched, handleSubmit, getFieldProps } = formik;
  50. return (
  51. <FormikProvider style={{ padding: 25 }} value={formik}>
  52. <Form autoComplete="off" noValidate onSubmit={handleSubmit}>
  53. <Stack spacing={3}>
  54. <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>
  55. <TextField
  56. label="Nombre"
  57. fullWidth
  58. {...getFieldProps('nombres')}
  59. error={Boolean(touched.nombres && errors.nombres)}
  60. helperText={touched.nombres && errors.nombres}
  61. />
  62. <TextField
  63. label="Apellidos"
  64. fullWidth
  65. {...getFieldProps('apellidos')}
  66. error={Boolean(touched.apellidos && errors.apellidos)}
  67. helperText={touched.apellidos && errors.apellidos}
  68. />
  69. </Stack>
  70. <Stack direction={{ xs: 'column', sm: 'row' }} spacing={2}>
  71. <TextField
  72. fullWidth
  73. type="email"
  74. label="Correo Electronico"
  75. {...getFieldProps('mail')}
  76. error={Boolean(touched.mail && errors.mail)}
  77. helperText={touched.mail && errors.mail}
  78. />
  79. <FormGroup>
  80. <FormControlLabel
  81. control={
  82. <Checkbox
  83. {...getFieldProps('sendmail')}
  84. defaultChecked
  85. color="default"
  86. />
  87. }
  88. label="Enviar Correo"
  89. />
  90. </FormGroup>
  91. </Stack>
  92. <Stack direction={{ xs: 'column', sm: 'row' }} spacing={4}>
  93. <TextField
  94. fullWidth
  95. type="text"
  96. label="Puesto"
  97. {...getFieldProps('nombrepuesto')}
  98. error={Boolean(touched.nombrepuesto && errors.nombrepuesto)}
  99. helperText={touched.nombrepuesto && errors.nombrepuesto}
  100. />
  101. <TextField
  102. fullWidth
  103. type="text"
  104. label="Empresa"
  105. {...getFieldProps('nombreEmpresa')}
  106. error={Boolean(touched.nombreEmpresa && errors.nombreEmpresa)}
  107. helperText={touched.nombreEmpresa && errors.nombreEmpresa}
  108. />
  109. </Stack>
  110. <Box sx={{ mb: 2 }}>
  111. <div style={{ paddingTop: 15 }}>
  112. <Button
  113. type="submit"
  114. className="registerBtn"
  115. variant="contained"
  116. sx={{ mt: 1, mr: 1 }}
  117. >
  118. {'Siguiente'}
  119. </Button>
  120. <Button
  121. disabled={false}
  122. onClick={handleBack}
  123. sx={{ mt: 1, mr: 1 }}
  124. >
  125. Regresar
  126. </Button>
  127. </div>
  128. </Box>
  129. </Stack>
  130. </Form>
  131. </FormikProvider>
  132. );
  133. }