import * as React from 'react';
import {
Button, Dialog, DialogActions, DialogContent,
FormControlLabel, Checkbox, Stack,
TextField, CircularProgress, Divider, Typography
} from '@mui/material'
import { AddCircle } from '@mui/icons-material/';
import { MailTable } from './Steps/MailTable';
import { Col, Row } from 'react-bootstrap'
import toast, { Toaster } from 'react-hot-toast';
import * as Yup from 'yup';
import { yupResolver } from '@hookform/resolvers/yup';
import { useQueryClient } from 'react-query'
import { useForm, Controller } from "react-hook-form";
import { Service } from '../../Utils/HTTP.js'
import { useSelector } from 'react-redux'
import { useFormik, Form, FormikProvider } from 'formik';
import { AdapterDateFns as DateFnsUtils } from '@mui/x-date-pickers/AdapterDateFns';
import { DesktopDatePicker } from '@mui/x-date-pickers/DesktopDatePicker';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
function Candidatos(props) {
const CandidatoSchema = Yup.object().shape({
nombres:
Yup.string()
.min(2, 'Demasiado corto!')
.max(50, 'Demasiado largo!')
.required('Ingresa un nombre válido'),
apellidos:
Yup.string()
.min(2, 'Demasiado corto!')
.max(50, 'Demasiado Largo!')
.required('Ingresa un apellido válido'),
mail:
Yup.string()
.required('Ingresa un email válido')
.email("Correo no valido")
});
let { candidatos, add, remove } = props
const formik = useFormik({
initialValues: {
nombres: "",
apellidos: "",
mail: "",
},
onSubmit: () => {
if (!values.nombres || !values.apellidos || !values.mail) {
return toast.error("Completa la informacion del candidato")
}
if (!isValid) {
return toast.error("Completa la informacion del candidato")
}
let user = {
'id': -1,
'nombres': values.nombres,
'apellidos': values.apellidos,
'mail': values.mail,
}
add(user)
resetForm();
},
validationSchema: CandidatoSchema,
});
var { errors, touched, handleSubmit, getFieldProps, values, resetForm, isValid } = formik;
return (
Ingresa la informacion del candidato
);
}
export function ModalEdit(props) {
const auth = useSelector((state) => state.token)
let { password, open, handleOpen } = props
let { pwd, plz } = password
return (
)
}
export function Loading() {
return (
)
}
function ModalForm(props) {
let { pwdinfo, closeModal } = props
const auth = useSelector((state) => state.token)
let [candidatos, setCandidatos] = React.useState([]);
let [password, setPassword] = React.useState();
const queryClient = useQueryClient()
const pwdSchema = Yup.object().shape({
pwd: Yup.string(),
deadpwd: Yup.date('Escoge una fecha valida').required("Escoge una fecha valida"),
state: Yup.boolean(),
dateToActived: Yup.date('Escoge una fecha valida').required("Escoge una fecha valida"),
})
const { reset, control, register, handleSubmit, formState: { errors } } = useForm({
resolver: yupResolver(pwdSchema),
defaultValues: {
pwd: 0,
deadpwd: 0,
state: false,
dateToActived: 0,
}
});
React.useEffect(() => {
let { pwd, plz } = pwdinfo;
let rest = new Service(`/contrasenia/${btoa(pwd)}/${plz}`)
rest.getQuery(auth.token)
.then(resp => {
let json_data = resp;
let mapCandi = resp.data.candidatospwds.map(pwd => {
let { apellidos, nombre, mail,id } = pwd.candi
return { nombres: nombre, apellidos, mail, id }
})
json_data.data['candidatospwds'] = mapCandi;
let password = json_data.data
setPassword(password)
setCandidatos(password.candidatospwds)
reset({
pwd: password.pwd,
deadpwd: password.deadpwd,
state: parseInt(password.state) === 1,
dateToActived: password.dateToActived,
})
})
.catch(error => console.log(error))
}, [auth.token, pwdinfo, reset])
const saveCandidato = async (body) => {
let rest = new Service('/passwordcandidato/candidato')
return await rest.postQuery(body, auth.token)
}
function onSubmit(fields) {
let candi_body = candidatos.map( c => {
return {...c,
'nombrepuesto': 'test',
'nombreEmpresa' : 'dit',
"idContrasenia" : password.id,
"sendmail": 1,
}
})
let rest = new Service('/contrasenia/create');
let { deadpwd, dateToActived, pwd, state } = fields
fields['pwd'] = pwd;
fields['deadpwd'] = new Date(deadpwd).toISOString();
fields['dateToActived'] = new Date(dateToActived).toISOString();
fields['link'] = 'www.psicoadmin.ditaca.org'
fields['state'] = state ? 1 : 0
delete password['candidato_id'];
delete password['tokensecurity'];
delete password['candidatospwds'];
let body_req = {
...password, ...fields
}
rest.putQuery(body_req, auth.token)
.then( async result => {
queryClient.invalidateQueries('passwords')
//TODO: insert into passwordcanidato/candidato
await saveCandidato(candi_body)
setTimeout(() => {
closeModal(false)
}, 1000)
toast.success("Contraseña Actualizada")
})
.catch(bad => {
console.log('ERROR', bad)
toast.error("Ocurrio un error")
})
}
function removeCandidato(umail) {
let without = candidatos.filter(user => user.mail !== umail)
setCandidatos(without)
}
function addCandidato(candidato) {
let temp = [...candidatos, candidato]
setCandidatos(temp)
}
return (
)
}