Rev 3385 | Rev 3390 | Ir a la última revisión | Autoría | Comparar con el anterior | Ultima modificación | Ver Log |
import React, { useState } from 'react'import { useForm } from 'react-hook-form'import { Button, Tab, Tabs } from '@mui/material'import Widget from '@components/UI/Widget'import Form from '@components/common/form'import Input from '@components/UI/inputs/Input'import Select from '@components/UI/inputs/Select'import TabPanel from '@components/common/tab-panel'import Ckeditor from '@components/common/ckeditor/Ckeditor'import DatetimePicker from '@components/common/inputs/datetime-picker'import LoadingWrapper from '@components/common/loading-wrapper'const FormTabPanel = styled(TabPanel)(({ theme }) => ({display: 'flex',flexDirection: 'column',width: '100%',gap: theme.spacing(0.5)}))export default function GoalForm({onSubmit = () => {},habits = [],defaultValues = {},values = {}}) {const [currentTab, setCurrentTab] = useState(0)const {control,handleSubmit,formState: { errors, isSubmitting },trigger} = useForm({defaultValues,values})const handleChange = async (event, newValue) => {const valid = await trigger()if (valid) setCurrentTab(newValue)}const nextStep = async () => {const valid = await trigger()if (valid) setCurrentTab(currentTab + 1)}return (<Widget styles={{ overflow: 'visible' }}><Tabs value={currentTab} onChange={handleChange}><Tab label='Detalles' /><Tab label='Frecuencia' /><Tab label='Valor' /></Tabs><Widget.Body><Form onSubmit={handleSubmit(onSubmit)}><LoadingWrapper loading={isSubmitting} displayChildren><FormTabPanel value={0} index={currentTab}><Inputname='name'label='Nombre'placeholder='Escribe el nombre de la meta'control={control}rules={{ required: 'El nombre es requerido' }}error={errors.name?.message}/><Ckeditorlabel='Descripción'name='description'control={control}rules={{ required: 'La descripción es requerida' }}error={errors.description?.message}/><Button color='primary' onClick={nextStep}>Continuar</Button></FormTabPanel><FormTabPanel value={1} index={currentTab}><Inputtype='number'name='value'label='Valor cuantitativo de la Meta a lograr'placeholder='Escribe el valor'control={control}rules={{required: { value: true, message: 'El valor es requerido' },validate: {positive: (value) =>Number(value) > 0 || 'El valor mayor a cero'}}}error={errors.value?.message}/><Selectlabel='Hábitos y competencias para lograr la Meta'name='skill_id'control={control}options={habits}defaultValue={[]}rules={{ required: 'Por favor selecciona un hábito' }}error={errors.skill_id?.message}multiple/><Button color='primary' onClick={nextStep}>Continuar</Button></FormTabPanel><FormTabPanel value={2} index={currentTab}><DatetimePickerlabel='Fecha de inicio'name='start_date'control={control}rules={{required: { value: true, message: 'La fecha es requerida' },validate: {beEqualOrGreaterThanToday: (date) => {const selectedDate = new Date(date + 'T00:00:00')const selectedDateMs = selectedDate.getTime()const todayMs = new Date().setHours(0, 0, 0, 0)return (selectedDateMs >= todayMs ||'La fecha debe ser mayor o igual a hoy')}}}}/><DatetimePickerlabel='Fecha de finalización'name='end_date'control={control}rules={{required: { value: true, message: 'La fecha es requerida' },validate: (value, { start_date }) => {const startDate = new Date(start_date + 'T00:00:00')const endDate = new Date(value + 'T00:00:00')const startDateMs = startDate.getTime()const endDateMs = endDate.getTime()return (endDateMs > startDateMs ||'La fecha debe ser mayor a la fecha de inicio')}}}/><Button type='submit' color='primary'>Enviar</Button></FormTabPanel></LoadingWrapper></Form></Widget.Body></Widget>)}