import React, { useRef, useState, useEffect } from 'react'; import { __, sprintf } from '@wordpress/i18n'; import { useForm } from 'react-hook-form'; import { classNames } from 'primereact/utils'; import { isEmpty } from 'ramda'; import { useSearchParams } from 'react-router-dom'; // api import AuthenticationService from '../../service/authentication-service'; // tools import { isEmail } from '../../helpers/validators'; // store import { storeSet, useStore } from '../../store'; // components import FormField from '../../components/FormField'; import LogoIcon from '../../icons/LogoIcon'; import { Button } from 'primereact/button'; import { Messages } from 'primereact/messages'; import { Panel } from 'primereact/panel'; import { Dialog } from 'primereact/dialog'; import getDateFromISOstring from '../../helpers/getDateFromISOstring'; const APP_HUB_ID = process.env.REACT_APP_HUB_ID; const Registration = () => { const token = useStore().main.token(); const [loading, setLoading] = useState(false); const [originalDateOfBirth, setOriginalDateOfBirth] = useState('') const [visibleTerms, setVisibleTerms] = useState(false); const errorMsgs = useRef(null); let [searchParams] = useSearchParams(); const { control, handleSubmit, formState: { errors }, setValue, getValues } = useForm({ mode: 'onChange' }); const values = getValues(); const { origin } = window.location; const urlTermsPdf = `${origin}/loaded-files/termini-e-condizioni.pdf`; const onSubmit = (formData) => { errorMsgs.current.clear(); const temp_token = searchParams.get('temp_token'); setLoading(true); const newFormData = { ...formData, dateOfBirth: originalDateOfBirth, hubUuid: APP_HUB_ID } AuthenticationService.registerUser(newFormData, regCallback, regError, [ ['tempToken', temp_token] ]); }; const regCallback = (data) => { if (data.status === 'SUCCESS') { storeSet.main.setAuthData({ token: data.data.token, userData: data.data.user }); } else { errorMsgs.current.show([ { sticky: true, severity: 'error', summary: '', detail: data.data.message, closable: true } ]); } setLoading(false); } const regError = (err) => { errorMsgs.current.show([ { sticky: true, severity: 'error', summary: '', detail: sprintf(__('%s', 'gepafin'), err.message), closable: true } ]); setLoading(false); } const validateCallback = (data) => { if (data.status === 'SUCCESS') { const { codiceFiscale, firstName, lastName, dateOfBirth } = data.data; setOriginalDateOfBirth(dateOfBirth); setValue('codiceFiscale', codiceFiscale); setValue('firstName', firstName); setValue('lastName', lastName); setValue('dateOfBirth', getDateFromISOstring(dateOfBirth)); } else { errorMsgs.current.show([ { sticky: true, severity: 'error', summary: '', detail: data.message, closable: true } ]); } setLoading(false); } const validateError = (err) => { errorMsgs.current.show([ { sticky: true, severity: 'error', summary: '', detail: sprintf(__('%s', 'gepafin'), err.message), closable: true } ]); setLoading(false); } const disableAllChecks = () => { setValue('marketing', false); setValue('offers', false); setValue('thirdParty', false); } const enableAllChecks = () => { setValue('marketing', true); setValue('offers', true); setValue('thirdParty', true); } const openTermsDoc = (e) => { e.preventDefault(); setVisibleTerms(true); } const hideTerms = () => { setVisibleTerms(false); } useEffect(() => { if (!isEmpty(token)) { setLoading(true); window.location.replace('/') } }, [token]); useEffect(() => { const temp_token = searchParams.get('temp_token'); if (temp_token && !isEmpty(temp_token)) { AuthenticationService.validateNewUser(temp_token, validateCallback, validateError); } }, [searchParams]); return (