- fixed issue with undefined initial value for text input;

- completed company profile;
- updated logic of creating the application;
This commit is contained in:
Vitalii Kiiko
2024-10-01 14:12:08 +02:00
parent 676d7621e7
commit 340b805643
4 changed files with 49 additions and 14 deletions

View File

@@ -16,7 +16,8 @@ const TextInput = ({
placeholder = '', placeholder = '',
inputtype = 'text', inputtype = 'text',
disabled = false, disabled = false,
onBlurFn = () => {} onBlurFn = () => {
}
}) => { }) => {
const input = <Controller const input = <Controller
name={fieldName} name={fieldName}
@@ -27,6 +28,7 @@ const TextInput = ({
<InputText id={field.name} <InputText id={field.name}
disabled={disabled} disabled={disabled}
{...field} {...field}
value={field.value ? field.value : ''}
onBlur={onBlurFn} onBlur={onBlurFn}
type={inputtype} type={inputtype}
placeholder={placeholder} placeholder={placeholder}

View File

@@ -35,7 +35,7 @@ const BandoViewBeneficiario = () => {
const [newQuestion, setNewQuestion] = useState(''); const [newQuestion, setNewQuestion] = useState('');
const [applicationObj, setApplicationObj] = useState(true); const [applicationObj, setApplicationObj] = useState(true);
const bandoMsgs = useRef(null); const bandoMsgs = useRef(null);
const chosenCompanyId = pathOr(0, [0], companies); const chosenCompanyId = pathOr(0, [0, 'id'], companies);
const scaricaBando = () => { const scaricaBando = () => {
@@ -55,7 +55,7 @@ const BandoViewBeneficiario = () => {
navigate(`/imieibandi/${applicationObj.id}`); navigate(`/imieibandi/${applicationObj.id}`);
} else { } else {
const bandoId = getBandoId(); const bandoId = getBandoId();
ApplicationService.createApplication(bandoId, {}, createApplCallback, errCreateApplCallback) ApplicationService.createApplication(bandoId, {}, createApplCallback, errCreateApplCallback, [['companyId', chosenCompanyId]])
} }
} }

View File

@@ -1,40 +1,58 @@
import React, { useMemo, useRef } from 'react'; import React, { useEffect, useMemo, useRef, useState } from 'react';
import { __ } from '@wordpress/i18n'; import { __ } from '@wordpress/i18n';
import { isEmpty, isNil } from 'ramda'; import { isEmpty, isNil, pathOr } from 'ramda';
// store // store
import { storeSet, useStore } from '../../store'; import { storeSet, useStore } from '../../store';
// components // components
import { Messages } from 'primereact/messages'; import { Messages } from 'primereact/messages';
import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
import FormField from '../../components/FormField'; import FormField from '../../components/FormField';
import { Button } from 'primereact/button'; import { Button } from 'primereact/button';
import { useForm } from 'react-hook-form'; import { useForm } from 'react-hook-form';
import BlockingOverlay from '../../components/BlockingOverlay';
// api // api
import CompanyService from '../../service/company-service'; import CompanyService from '../../service/company-service';
// tools // tools
import { isPIVA } from '../../helpers/validators'; import { isPIVA } from '../../helpers/validators';
import BlockingOverlay from '../../components/BlockingOverlay'; import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
import { klona } from 'klona';
const ProfileCompany = () => { const ProfileCompany = () => {
const isAsyncRequest = useStore().main.isAsyncRequest(); const isAsyncRequest = useStore().main.isAsyncRequest();
const companies = useStore().main.companies(); const companies = useStore().main.companies();
const infoMsgs = useRef(null); const infoMsgs = useRef(null);
const [formInitialData, setFormInitialData] = useState({});
const { const {
control, control,
handleSubmit, handleSubmit,
formState: { errors }, formState: { errors },
setValue setValue,
getValues
} = useForm({ } = useForm({
defaultValues: useMemo(() => { defaultValues: useMemo(() => {
return companies[0]; return formInitialData;
}, [companies]), }, [formInitialData]),
mode: 'onChange' mode: 'onChange'
}); });
const values = getValues();
const emptyValues = Object.values(values).filter(v => isEmpty(v) || isNil(v)).length;
const setEmptyValues = () => {
const formData = {
cap: '',
pec: '',
email: '',
city: '',
codiceFiscale: '',
address: '',
companyName: ''
}
Object.keys(formData).map(k => setValue(k, formData[k]));
}
const onSubmit = (formData) => { const onSubmit = (formData) => {
infoMsgs.current.clear(); infoMsgs.current.clear();
@@ -66,6 +84,8 @@ const ProfileCompany = () => {
if (isValid) { if (isValid) {
storeSet.main.setAsyncRequest(); storeSet.main.setAsyncRequest();
CompanyService.checkVat(checkVatCallback, errCheckVatCallback, [['vatNumber', e.target.value]]) CompanyService.checkVat(checkVatCallback, errCheckVatCallback, [['vatNumber', e.target.value]])
} else {
setEmptyValues();
} }
} }
@@ -87,19 +107,32 @@ const ProfileCompany = () => {
vatNumber: piva, vatNumber: piva,
companyName: denominazione companyName: denominazione
} }
console.log('formData', formData);
Object.keys(formData).map(k => setValue(k, formData[k])); Object.keys(formData).map(k => setValue(k, formData[k]));
} }
//setData(getFormattedBandiData(data.data)); //setData(getFormattedBandiData(data.data));
} else {
setEmptyValues();
} }
storeSet.main.unsetAsyncRequest(); storeSet.main.unsetAsyncRequest();
} }
const errCheckVatCallback = (data) => { const errCheckVatCallback = (data) => {
setEmptyValues();
set404FromErrorResponse(data); set404FromErrorResponse(data);
storeSet.main.unsetAsyncRequest(); storeSet.main.unsetAsyncRequest();
} }
useEffect(() => {
const newFormData = klona(formInitialData);
Object.keys(newFormData).map(v => setValue(v, newFormData[v]));
}, [formInitialData]);
useEffect(() => {
const chosenCompany = pathOr({}, [0], companies);
console.log('chosenCompany', chosenCompany, companies)
setFormInitialData(chosenCompany);
}, [companies]);
return ( return (
<div className="appPage"> <div className="appPage">
<div className="appPage__pageHeader"> <div className="appPage__pageHeader">
@@ -221,7 +254,7 @@ const ProfileCompany = () => {
<div className="appPageSection"> <div className="appPageSection">
<div className="appPageSection__actions"> <div className="appPageSection__actions">
<Button <Button
disabled={isAsyncRequest} disabled={isAsyncRequest || emptyValues || values.id}
label={__('Salva modifiche', 'gepafin')} label={__('Salva modifiche', 'gepafin')}
icon="pi pi-check" iconPos="right"/> icon="pi pi-check" iconPos="right"/>
</div> </div>

View File

@@ -16,8 +16,8 @@ export default class ApplicationService {
NetworkService.get(`${API_BASE_URL}/application/${id}/form/next-previous`, callback, errCallback, queryParams); NetworkService.get(`${API_BASE_URL}/application/${id}/form/next-previous`, callback, errCallback, queryParams);
}; };
static createApplication = (id, body, callback, errCallback) => { static createApplication = (id, body, callback, errCallback, queryParams) => {
NetworkService.post(`${API_BASE_URL}/application/call/${id}`, body, callback, errCallback); NetworkService.post(`${API_BASE_URL}/application/call/${id}`, body, callback, errCallback, queryParams);
}; };
static saveDraft = (id, body, callback, errCallback, queryParams) => { static saveDraft = (id, body, callback, errCallback, queryParams) => {