import React, { forwardRef, useEffect, useImperativeHandle, useMemo, useState } from 'react'; import { __ } from '@wordpress/i18n'; import { useNavigate } from 'react-router-dom'; import { useForm } from 'react-hook-form'; import { is, isEmpty, isNil } from 'ramda'; import { klona } from 'klona'; // components import FormField from '../../../../components/FormField'; import FormFieldRepeater from '../../../../components/FormFieldRepeater'; import FormFieldRepeaterCriteria from '../../../../components/FormFieldRepeaterCriteria'; import BandoEditFormActions from '../BandoEditFormActions'; import UnsavedChangesDetector from '../../../../components/UnsavedChangesDetector'; import BandoService from '../../../../service/bando-service'; import LookupdataService from '../../../../service/lookupdata-service'; const BandoEditFormStep2 = forwardRef(function ({ initialData, getFormErrors }, ref) { const navigate = useNavigate(); const [criteriaOptions, setCriteriaOptions] = useState([]); const [checklistOptions, setChecklistOptions] = useState([]); const [formInitialData, setFormInitialData] = useState(initialData); const { control, handleSubmit, formState: { errors, isValid }, setValue, register, trigger, getValues, clearErrors, reset } = useForm({ defaultValues: useMemo(() => { return formInitialData; }, [formInitialData]), mode: 'onChange' }); const values = getValues(); const step2Props = ['threshold', 'criteria', 'checkList', 'docs', 'images']; const onSubmit = (formData) => { if (!isNil(formData.dates) && formData.dates.length) { formData.dates = formData.dates.map(v => is(String, v) ? v : v.toISOString()); } const forSubmit = Object.keys(formData).reduce((acc, cur) => { if (step2Props.includes(cur)) { acc[cur] = formData[cur]; } return acc; }, {}); BandoService.updateBandoStep2(formData.id, forSubmit, createCallback, errCreateCallback); }; const createCallback = (data) => { if (data.status === 'SUCCESS') { setFormInitialData(data.data); reset(); } } const errCreateCallback = (data) => { console.log('errCreateCallback', data); } const lookupdataCallback = (data) => { if (data.status === 'SUCCESS') { const criteria = data.data .filter(o => o.type === 'EVALUATION_CRITERIA') .map(o => { delete o.type; return { ...o, score: 0, lookUpDataId: o.id }; }); setCriteriaOptions(criteria); const checklist = data.data .filter(o => o.type === 'CHECKLIST') .map(o => { delete o.type; return { ...o, lookUpDataId: o.id }; }); setChecklistOptions(checklist); } } const errLookupdataCallback = (data) => { console.log('errLookupdataCallback', data) } const openPreview = () => { navigate('/bandi/preview/11'); } const openPreviewEvaluation = () => { navigate('/bandi/preview-evaluation/11'); } useImperativeHandle( ref, () => { return { isFormValid: () => { return isValid; }, getErrors: () => { return errors; }, getValues: () => { return getValues(); } } }, [errors, isValid]); useEffect(() => { setFormInitialData(initialData); }, [initialData]); useEffect(() => { const newFormData = klona(formInitialData); if (!isNil(formInitialData.dates) && formInitialData.dates.length) { newFormData.dates = formInitialData.dates.map(v => is(String, v) ? new Date(v) : (v ? v : '')); } reset(newFormData); }, [formInitialData]); useEffect(() => { trigger().then(() => clearErrors()); LookupdataService.getItems(lookupdataCallback, errLookupdataCallback, [['type', ['CHECKLIST', 'EVALUATION_CRITERIA']]]) }, []); return (
{__('Criteri di valutazione', 'gepafin')}* {__('(almeno 1 criterio di valutazione)', 'gepafin')}} config={{ validate: { minOneItem: v => !isEmpty(v) || __('Almeno 1 criterio di valutazione', 'gepafin'), noEmptyValue: v => v .filter(o => isEmpty(o.value) || isEmpty(o.score)).length === 0 || __('Non lasciare il valore vuoto', 'gepafin') } }}/> {__('Checklist valutazione Pre-Istruttoria', 'gepafin')}* {__('(almeno 1 elemento)', 'gepafin')}} config={{ validate: { minOneItem: v => !isEmpty(v) || __('Almeno 1 elemento', 'gepafin'), noEmptyValue: v => v .filter(o => isEmpty(o.value)).length === 0 || __('Non lasciare il valore vuoto', 'gepafin') } }} />
{__('Azioni', 'gepafin')}
) }) export default BandoEditFormStep2;