candidato.jsx 4.4 KB

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