import React, { useEffect, useMemo, useRef, useState } from 'react'; import { __ } from '@wordpress/i18n'; import { isEmpty, isNil, pathOr, head } from 'ramda'; import { klona } from 'klona'; import { wrap } from 'object-path-immutable'; // 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'; import { InputText } from 'primereact/inputtext'; // api import CompanyService from '../../service/company-service'; // tools import { isPIVA, isCodiceFiscale, isEmail, isEmailPEC } from '../../helpers/validators'; import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; import FileuploadStandalone from '../../components/FileuploadStandalone'; const ProfileCompany = () => { const isAsyncRequest = useStore().main.isAsyncRequest(); const companies = useStore().main.companies(); const infoMsgs = useRef(null); const [formInitialData, setFormInitialData] = useState({}); const [delegaData, setDelegaData] = useState({}); const [delega, setDelega] = useState({}); const { delegaFirstName = '', delegaLastName = '', delegaCodiceFiscale = '' } = delegaData; const { control, handleSubmit, formState: { errors }, setValue, getValues, watch, register } = useForm({ defaultValues: useMemo(() => { return formInitialData; }, [formInitialData]), mode: 'onChange' }); const values = getValues(); const emptyValues = Object.values(values).filter(v => isEmpty(v) || isNil(v)).length; const isLegalRepresentant = watch('isLegalRepresentant') 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(); if (isNil(formData.id)) { CompanyService.createCompany(formData, updateCallback, updateError); } else { CompanyService.updateCompany(formData.id, 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); } storeSet.main.unsetAsyncRequest(); } const updateError = (data) => { set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const checkVatNumber = (e) => { infoMsgs.current.clear(); const isValid = isPIVA(e.target.value); if (isValid) { storeSet.main.setAsyncRequest(); CompanyService.checkVat(checkVatCallback, errCheckVatCallback, [['vatNumber', e.target.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(); } const setDelegaFieldValue = (value, name) => { const newDelegaData = wrap(delegaData).set([name], value).value(); setDelegaData(newDelegaData) } const setDelegaFile = (data) => { console.log('setDelegaFile', data) setDelega(data); } useEffect(() => { const newFormData = klona(formInitialData); Object.keys(newFormData).map(v => setValue(v, newFormData[v])); }, [formInitialData]); useEffect(() => { const chosenCompany = pathOr({}, [0], companies); setFormInitialData(chosenCompany); }, [companies]); return (

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

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

{/**/}
{/**/}
{!isLegalRepresentant ?
{__('Compilazione Delega', 'gepafin')}

{__('Per procedere come delegato, compila il form seguente, scarica il documento della delega, fallo firmare dal rappresentante legale e ricaricalo.', 'gepafin')}

setDelegaFieldValue(e.target.value, 'delegaFirstName')}/>
setDelegaFieldValue(e.target.value, 'delegaLastName')}/>
setDelegaFieldValue(e.target.value, 'delegaCodiceFiscale')}/>
:
}
{__('Azioni rapide', 'gepafin')}
) } export default ProfileCompany;