import React, { useState, useEffect, useRef } from 'react'; import Button from '@mui/material/Button'; import Dialog from '@mui/material/Dialog'; import DialogActions from '@mui/material/DialogActions'; import DialogContent from '@mui/material/DialogContent'; import DialogContentText from '@mui/material/DialogContentText'; import DialogTitle from '@mui/material/DialogTitle'; import PropTypes from 'prop-types'; import Box from '@mui/material/Box'; import SelectField from "../../Report/SelectField"; import DatePicker from '../../Report/DatePicker' import TimerPickerSelect from '../TimerPickerSelect' import TextareaAutosize from '@mui/material/TextareaAutosize'; import { addHours } from "date-fns"; const Item = (props) => { const { sx, ...other } = props; return ( <Box sx={{ bgcolor: (theme) => (theme.palette.mode === 'dark' ? '#101010' : '#fff'), color: (theme) => (theme.palette.mode === 'dark' ? 'grey.300' : 'grey.800'), border: '1px solid', borderColor: (theme) => theme.palette.mode === 'dark' ? 'grey.800' : 'grey.300', p: 1, m: 1, borderRadius: 2, fontSize: '0.875rem', fontWeight: '700', ...sx, }} {...other} /> ); } Item.propTypes = { sx: PropTypes.oneOfType([ PropTypes.arrayOf( PropTypes.oneOfType([PropTypes.func, PropTypes.object, PropTypes.bool]), ), PropTypes.func, PropTypes.object, ]), }; const Modal = (props) => { const [open, setOpen] = useState(true); const [scroll, /*setScroll*/] = useState('body'); const [scheduleId, setScheduling] = useState(null) const [startDate, setDatePicker] = useState(new Date()) const [timerPicker, setTimerPicker] = useState(new Date()) const [textArea1, setTextArea1] = useState() const [data] = useState(props.schedules) const handleCancel = (event, reason) => { if (reason && reason === "backdropClick") return; setOpen(false); }; function greetMessageSchedule(scheduleDate){ return `podemos confirmar sua consulta agendada para hoje às ${scheduleDate}?` } function formatedTimeHour(timer){ return `${timer.getHours().toString().padStart(2, '0')}:${timer.getMinutes().toString().padStart(2, '0')}` } // Get from child 2 const datePickerValue = (data) => { console.log('datePickerValue: ',(data)); setDatePicker(data) } // Get from child 3 const timerPickerValue = (data) => { console.log('timerPickerValue: ',(data)); setTimerPicker(data) } const dateCurrentFormated = () => { let date = new Date() let day = date.getDate().toString().padStart(2, '0'); let month = (date.getMonth()+1).toString().padStart(2, '0'); let year = date.getFullYear(); return `${year}-${month}-${day}` } const handleChatEnd = (event, reason) => { if (reason && reason === "backdropClick") return; if (scheduleId === '1'){ } else if(textArea1.trim().length<10){ alert('Mensagem muito curta!\nMínimo 10 caracteres.') return } else if((new Date(timerPicker).getHours() > 16 && new Date(timerPicker).getMinutes() > 0) || (new Date(timerPicker).getHours() < 7)){ alert('Horário comercial inválido!\n Selecione um horário de lembrete válido entre às 07:00 e 17:00') return } else if(startDate === dateCurrentFormated()){ if(((new Date(timerPicker).getHours() === new Date().getHours()) && (new Date(timerPicker).getMinutes() <= new Date().getMinutes())) || (new Date(timerPicker).getHours() < new Date().getHours()) ){ alert('Para agendamentos do dia, é necessário que o horário do lembrete seja maior que o horário atual!') return } } props.func({ 'scheduleId': scheduleId, 'schedulingDate': `${startDate} ${timerPicker.getHours()}:${timerPicker.getMinutes()}:${timerPicker.getSeconds()}`, 'message': textArea1 }); setOpen(false); }; const descriptionElementRef = useRef(null); useEffect(() => { if (open) { const { current: descriptionElement } = descriptionElementRef; if (descriptionElement !== null) { descriptionElement.focus(); } } }, [open]); // Get from child 1 const textFieldSelect = (data) => { console.log('textFieldSelect: ',data); setScheduling(data) } // Get from child 4 // const textArea1Value = (data) => { // console.log('textArea1Value: ',(data)); // setTextArea1(data) // } useEffect(()=>{ if (parseInt(timerPicker.getHours()) > 12 && parseInt(timerPicker.getHours()) < 18){ setTextArea1('Boa tarde, '+greetMessageSchedule( formatedTimeHour(addHours(new Date(timerPicker), 1)))) } else if(parseInt(timerPicker.getHours()) < 12){ setTextArea1('Bom dia, '+greetMessageSchedule( formatedTimeHour(addHours(new Date(timerPicker), 1)))) } else if(parseInt(timerPicker.getHours()) > 18){ setTextArea1('Boa noite, '+greetMessageSchedule( formatedTimeHour(addHours(new Date(timerPicker), 1)))) } },[timerPicker]) const handleChange = (event) => { setTextArea1(event.target.value); }; return ( <Dialog open={open} onClose={handleCancel} // fullWidth={true} // maxWidth={true} disableEscapeKeyDown scroll={scroll} aria-labelledby="scroll-dialog-title" aria-describedby="scroll-dialog-description" > <DialogTitle id="scroll-dialog-title">{props.modal_header}</DialogTitle> <DialogContent dividers={scroll === 'body'}> <DialogContentText id="scroll-dialog-description" ref={descriptionElementRef} tabIndex={-1} > </DialogContentText> <Box sx={{ width: 500, height: '100%', // backgroundColor: 'primary.dark', // '&:hover': {backgroundColor: 'primary.main', opacity: [0.9, 0.8, 0.7],}, }}> <Box sx={{ display: 'grid', }}> <Item> <span>Selecione uma opção para encerrar o Atendimento</span> <Item> <SelectField func={textFieldSelect} emptyField={false} header={'Opções de encerramento do atendimento'} currencies={data.map((obj)=>{ return {'value': obj.id, 'label': obj.name} })}/> </Item> </Item> </Box> {scheduleId==='2' && <Item> <span>Lembrete de retorno</span> <Box sx={{ display: 'grid', gridTemplateColumns: 'repeat(2, 1fr)' }}> <Item><DatePicker func={datePickerValue} minDate = {true} title={'Data do retorno'}/></Item> <Item><TimerPickerSelect func={timerPickerValue} title={'Hora do lembrete'}/></Item> </Box> <Box sx={{display: 'flex', flexDirection: 'column' }}> {/* <Item><TextArea1 func={textArea1Value} greetRemember={greetRemember} hint={'Mensagem para cliente'}/></Item> */} <Item> <TextareaAutosize aria-label="minimum height" minRows={3} value={textArea1} placeholder={'Mensagem para lembrar cliente'} onChange={ handleChange} style={{ width: '100%' }} /> </Item> </Box> </Item> } </Box> </DialogContent> <DialogActions> <div style={{marginRight:'50px'}}> <Button onClick={handleCancel}>Cancelar</Button> </div> <Button onClick={handleChatEnd}>Ok</Button> </DialogActions> </Dialog> ); } export default Modal