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 ( handleOpen(false)} aria-labelledby="alert-dialog-title" aria-describedby="alert-dialog-description" > ) } 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 (
props.onChange(e.target.checked)} /> } /> } /> } /> } > } /> } >
) }