import React, { useEffect, useRef } from 'react'; import { __ } from '@wordpress/i18n'; import { isEmpty, isNil, head } from 'ramda'; import { klona } from 'klona'; import { useDebounce } from 'primereact/hooks'; import { useNavigate } from 'react-router-dom'; // store import { storeSet, useStore, storeGet } from '../../store'; // components import { Messages } from 'primereact/messages'; import FormField from '../../components/FormField'; import { Button } from 'primereact/button'; import { useForm } from 'react-hook-form'; import BlockingOverlay from '../../components/BlockingOverlay'; // api import CompanyService from '../../service/company-service'; // tools import { isPIVA, isEmail, isEmailPEC } from '../../helpers/validators'; import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; const AddCompany = () => { const navigate = useNavigate(); const isAsyncRequest = useStore().main.isAsyncRequest(); const infoMsgs = useRef(null); const [, debouncedPivaValue, setInputPiva] = useDebounce('', 1000); const { control, handleSubmit, formState: { errors }, setValue, watch } = useForm({ defaultValues: {}, mode: 'onChange' }); const isPiva = watch('vatNumber'); const setEmptyValues = () => { const formData = { cap: '', pec: '', email: '', city: '', codiceFiscale: '', address: '', companyName: '' } Object.keys(formData).map(k => setValue(k, formData[k])); } const onSubmit = (formData) => { infoMsgs.current.clear(); storeSet.main.setAsyncRequest(); CompanyService.createCompany(formData, updateCallback, updateError); }; const updateCallback = (data) => { if (data.status === 'SUCCESS') { const company = klona(data.data); const companies = storeGet.main.companies(); const existingCompany = head(companies.filter(o => o.id === company.id)); let newCompanies = []; if (existingCompany) { newCompanies = companies.map(o => o.id === company.id ? company : o) } else { newCompanies = [...companies, company]; storeSet.main.chosenCompanyId(company.id); } storeSet.main.companies(newCompanies); if (company.isLegalRepresentant) { navigate('/'); } else { navigate('/profilo-aziendale'); } } storeSet.main.unsetAsyncRequest(); } const updateError = (data) => { set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const checkVatNumber = (value) => { infoMsgs.current.clear(); const isValid = isPIVA(value); if (isValid) { storeSet.main.setAsyncRequest(); CompanyService.checkVat(checkVatCallback, errCheckVatCallback, [['vatNumber', value]]) } else { setEmptyValues(); } } const checkVatCallback = (data) => { if (data.status === 'SUCCESS') { const resp = data.data.data; if (!isEmpty(resp)) { const { cap, cf, denominazione, piva, indirizzo, comune, dettaglio: { pec } } = resp; const formData = { cap, pec, email: pec, city: comune, codiceFiscale: cf, address: indirizzo, vatNumber: piva, companyName: denominazione } Object.keys(formData).map(k => setValue(k, formData[k])); } //setData(getFormattedBandiData(data.data)); } else { setEmptyValues(); } storeSet.main.unsetAsyncRequest(); } const errCheckVatCallback = (data) => { setEmptyValues(); set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } useEffect(() => { setInputPiva(isPiva); }, [isPiva]); useEffect(() => { checkVatNumber(debouncedPivaValue); }, [debouncedPivaValue]) return (

{__('Profilo aziendale', 'gepafin')}

{__('Informazioni aziendali', 'gepafin')}

{__('Inserisci P.IVA e i dati aziendali verranno inseriti automaticamente per le aziende già esistenti', 'gepafin')}

{/**/}
{__('Azioni rapide', 'gepafin')}
) } export default AddCompany;