Merge pull request #19 from Kitzanos/quickfix/issue-in-safari
Quickfix/issue in safari
This commit is contained in:
1
.env
1
.env
@@ -5,3 +5,4 @@ REACT_APP_LOGO_FILENAME=gepafin-logo.svg
|
|||||||
REACT_APP_FAVICON_FILENAME=gepafin-favicon.ico
|
REACT_APP_FAVICON_FILENAME=gepafin-favicon.ico
|
||||||
REACT_APP_HUB_ID=p4lk3bcx1RStqTaIVVbXs
|
REACT_APP_HUB_ID=p4lk3bcx1RStqTaIVVbXs
|
||||||
REACT_APP_EVALUATION_FLOW_ID=1
|
REACT_APP_EVALUATION_FLOW_ID=1
|
||||||
|
REACT_APP_LOCAL_DEVELOPMENT=1
|
||||||
@@ -8,7 +8,8 @@
|
|||||||
"@date-fns/tz": "1.1.2",
|
"@date-fns/tz": "1.1.2",
|
||||||
"@emailjs/browser": "^4.4.1",
|
"@emailjs/browser": "^4.4.1",
|
||||||
"@emotion/styled": "11.13.0",
|
"@emotion/styled": "11.13.0",
|
||||||
"@number-flow/react": "0.2.0",
|
"@number-flow/react": "0.4.2",
|
||||||
|
"@sentry/browser": "^8.42.0",
|
||||||
"@tanstack/react-table": "^8.20.5",
|
"@tanstack/react-table": "^8.20.5",
|
||||||
"@wordpress/i18n": "5.8.0",
|
"@wordpress/i18n": "5.8.0",
|
||||||
"@wordpress/react-i18n": "4.8.0",
|
"@wordpress/react-i18n": "4.8.0",
|
||||||
|
|||||||
41
src/components/ErrorBoundary/index.js
Normal file
41
src/components/ErrorBoundary/index.js
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import React, { Component } from 'react';
|
||||||
|
import * as Sentry from '@sentry/browser';
|
||||||
|
|
||||||
|
const LOCAL_DEVELOPMENT = process.env.REACT_APP_LOCAL_DEVELOPMENT;
|
||||||
|
|
||||||
|
class ErrorBoundary extends Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
builderError: false
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
static getDerivedStateFromError(error) {
|
||||||
|
try {
|
||||||
|
if (LOCAL_DEVELOPMENT !== '1') {
|
||||||
|
Sentry.init({
|
||||||
|
dsn: "https://e7b2134f7d816f663bb83e51b106a694@o4508381921738752.ingest.de.sentry.io/4508381935501392",
|
||||||
|
environment: process.env.NODE_ENV || "development"
|
||||||
|
});
|
||||||
|
|
||||||
|
Sentry.captureException(error);
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log('err')
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
return { builderError: true };
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
if (this.state.builderError) {
|
||||||
|
return <div>Error</div>;
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.props.children;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default ErrorBoundary;
|
||||||
@@ -3,6 +3,7 @@ import { Navigate, Outlet } from 'react-router-dom';
|
|||||||
|
|
||||||
// tools
|
// tools
|
||||||
import AuthenticationService from '../../service/authentication-service';
|
import AuthenticationService from '../../service/authentication-service';
|
||||||
|
import ErrorBoundary from '../ErrorBoundary';
|
||||||
|
|
||||||
const ProtectedRoute = () => {
|
const ProtectedRoute = () => {
|
||||||
|
|
||||||
@@ -22,7 +23,7 @@ const ProtectedRoute = () => {
|
|||||||
return (<Navigate to={'/'} replace/>);
|
return (<Navigate to={'/'} replace/>);
|
||||||
}*/
|
}*/
|
||||||
|
|
||||||
return <Outlet/>;
|
return <ErrorBoundary><Outlet/></ErrorBoundary>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default ProtectedRoute;
|
export default ProtectedRoute;
|
||||||
@@ -4,7 +4,6 @@
|
|||||||
* @return {string}
|
* @return {string}
|
||||||
*/
|
*/
|
||||||
const formatDateString = (date) => {
|
const formatDateString = (date) => {
|
||||||
console.log('date', date);
|
|
||||||
const year = date.getFullYear();
|
const year = date.getFullYear();
|
||||||
const month = String(date.getMonth() + 1).padStart(2, '0');
|
const month = String(date.getMonth() + 1).padStart(2, '0');
|
||||||
const day = String(date.getDate()).padStart(2, '0');
|
const day = String(date.getDate()).padStart(2, '0');
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ import CompanyService from '../../service/company-service';
|
|||||||
import { isPIVA, isEmail, isEmailPEC } from '../../helpers/validators';
|
import { isPIVA, isEmail, isEmailPEC } from '../../helpers/validators';
|
||||||
import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
|
import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
|
||||||
|
|
||||||
|
const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID;
|
||||||
|
|
||||||
const AddCompany = () => {
|
const AddCompany = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
const isAsyncRequest = useStore().main.isAsyncRequest();
|
const isAsyncRequest = useStore().main.isAsyncRequest();
|
||||||
@@ -33,12 +35,14 @@ const AddCompany = () => {
|
|||||||
handleSubmit,
|
handleSubmit,
|
||||||
formState: { errors },
|
formState: { errors },
|
||||||
setValue,
|
setValue,
|
||||||
watch
|
watch,
|
||||||
|
getValues
|
||||||
} = useForm({
|
} = useForm({
|
||||||
defaultValues: {},
|
defaultValues: {},
|
||||||
mode: 'onChange'
|
mode: 'onChange'
|
||||||
});
|
});
|
||||||
const isPiva = watch('vatNumber');
|
const isPiva = watch('vatNumber');
|
||||||
|
//const isPiva = watch('vatNumber');
|
||||||
|
|
||||||
const setEmptyValues = () => {
|
const setEmptyValues = () => {
|
||||||
const formData = {
|
const formData = {
|
||||||
@@ -136,6 +140,11 @@ const AddCompany = () => {
|
|||||||
storeSet.main.unsetAsyncRequest();
|
storeSet.main.unsetAsyncRequest();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const shouldDisableFiscalCode = () => {
|
||||||
|
const formData = getValues();
|
||||||
|
return !formData.type || formData.type && formData.type === 'giuridica';
|
||||||
|
}
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
setInputPiva(isPiva);
|
setInputPiva(isPiva);
|
||||||
}, [isPiva]);
|
}, [isPiva]);
|
||||||
@@ -143,7 +152,7 @@ const AddCompany = () => {
|
|||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
checkVatNumber(debouncedPivaValue);
|
checkVatNumber(debouncedPivaValue);
|
||||||
}, [debouncedPivaValue])
|
}, [debouncedPivaValue])
|
||||||
|
console.log('APP_EVALUATION_FLOW_ID', APP_EVALUATION_FLOW_ID)
|
||||||
return (
|
return (
|
||||||
<div className="appPage">
|
<div className="appPage">
|
||||||
<div className="appPage__pageHeader">
|
<div className="appPage__pageHeader">
|
||||||
@@ -174,6 +183,23 @@ const AddCompany = () => {
|
|||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
{APP_EVALUATION_FLOW_ID === '2'
|
||||||
|
? <div className="appForm__cols">
|
||||||
|
<FormField
|
||||||
|
type="radio"
|
||||||
|
fieldName="type"
|
||||||
|
label={__('Type', 'gepafin')}
|
||||||
|
control={control}
|
||||||
|
errors={errors}
|
||||||
|
config={{ required: __('È obbligatorio', 'gepafin') }}
|
||||||
|
defaultValue="giuridica"
|
||||||
|
options={[
|
||||||
|
{ name: 'giuridica', label: 'Giuridica' },
|
||||||
|
{ name: 'fisica', label: 'Fisica' },
|
||||||
|
]}
|
||||||
|
/>
|
||||||
|
</div> : null}
|
||||||
|
|
||||||
<div className="appForm__cols">
|
<div className="appForm__cols">
|
||||||
<FormField
|
<FormField
|
||||||
type="textinput"
|
type="textinput"
|
||||||
@@ -184,15 +210,25 @@ const AddCompany = () => {
|
|||||||
config={{ required: __('È obbligatorio', 'gepafin') }}
|
config={{ required: __('È obbligatorio', 'gepafin') }}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<FormField
|
{APP_EVALUATION_FLOW_ID === '1'
|
||||||
type="textinput"
|
? <FormField
|
||||||
disabled={true}
|
type="textinput"
|
||||||
fieldName="codiceFiscale"
|
disabled
|
||||||
label={__('Codice fiscale', 'gepafin')}
|
fieldName="codiceFiscale"
|
||||||
control={control}
|
label={__('Codice fiscale', 'gepafin')}
|
||||||
errors={errors}
|
control={control}
|
||||||
config={{ required: __('È obbligatorio', 'gepafin') }}
|
errors={errors}
|
||||||
/>
|
config={{ required: __('È obbligatorio', 'gepafin') }}
|
||||||
|
/>
|
||||||
|
: <FormField
|
||||||
|
type="textinput"
|
||||||
|
disabled={shouldDisableFiscalCode()}
|
||||||
|
fieldName="codiceFiscale"
|
||||||
|
label={__('Codice fiscale', 'gepafin')}
|
||||||
|
control={control}
|
||||||
|
errors={errors}
|
||||||
|
config={{ required: __('È obbligatorio', 'gepafin') }}
|
||||||
|
/>}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="appForm__cols">
|
<div className="appForm__cols">
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import { useNavigate } from 'react-router-dom';
|
|||||||
// components
|
// components
|
||||||
import MyLatestSubmissionsTable from '../DashboardBeneficiario/components/MyLatestSubmissionsTable';
|
import MyLatestSubmissionsTable from '../DashboardBeneficiario/components/MyLatestSubmissionsTable';
|
||||||
import { Button } from 'primereact/button';
|
import { Button } from 'primereact/button';
|
||||||
|
import ErrorBoundary from '../../components/ErrorBoundary';
|
||||||
|
|
||||||
const Applications = () => {
|
const Applications = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
@@ -22,7 +23,7 @@ const Applications = () => {
|
|||||||
<div className="appPage__spacer"></div>
|
<div className="appPage__spacer"></div>
|
||||||
|
|
||||||
<div className="appPageSection">
|
<div className="appPageSection">
|
||||||
<MyLatestSubmissionsTable/>
|
<ErrorBoundary><MyLatestSubmissionsTable/></ErrorBoundary>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="appPage__spacer"></div>
|
<div className="appPage__spacer"></div>
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import { useStore } from '../../store';
|
|||||||
|
|
||||||
// components
|
// components
|
||||||
import AllBandiAccordion from './components/AllBandiAccordion';
|
import AllBandiAccordion from './components/AllBandiAccordion';
|
||||||
|
import ErrorBoundary from '../../components/ErrorBoundary';
|
||||||
|
|
||||||
const BandiBeneficiario = () => {
|
const BandiBeneficiario = () => {
|
||||||
const chosenCompanyId = useStore().main.chosenCompanyId();
|
const chosenCompanyId = useStore().main.chosenCompanyId();
|
||||||
@@ -34,7 +35,7 @@ const BandiBeneficiario = () => {
|
|||||||
</> : null}
|
</> : null}
|
||||||
|
|
||||||
<div className="appPageSection">
|
<div className="appPageSection">
|
||||||
<AllBandiAccordion/>
|
<ErrorBoundary><AllBandiAccordion/></ErrorBoundary>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -14,6 +14,7 @@ import DashboardService from '../../service/dashboard-service';
|
|||||||
import LatestBandiTable from './components/LatestBandiTable';
|
import LatestBandiTable from './components/LatestBandiTable';
|
||||||
import MyLatestSubmissionsTable from './components/MyLatestSubmissionsTable';
|
import MyLatestSubmissionsTable from './components/MyLatestSubmissionsTable';
|
||||||
import { Button } from 'primereact/button';
|
import { Button } from 'primereact/button';
|
||||||
|
import ErrorBoundary from '../../components/ErrorBoundary';
|
||||||
|
|
||||||
const DashboardBeneficiario = () => {
|
const DashboardBeneficiario = () => {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
@@ -85,7 +86,7 @@ const DashboardBeneficiario = () => {
|
|||||||
|
|
||||||
<div className="appPageSection">
|
<div className="appPageSection">
|
||||||
<h2>{__('Domande in lavorazione', 'gepafin')}</h2>
|
<h2>{__('Domande in lavorazione', 'gepafin')}</h2>
|
||||||
<MyLatestSubmissionsTable/>
|
<ErrorBoundary><MyLatestSubmissionsTable/></ErrorBoundary>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="appPage__spacer"></div>
|
<div className="appPage__spacer"></div>
|
||||||
@@ -105,7 +106,7 @@ const DashboardBeneficiario = () => {
|
|||||||
|
|
||||||
<div className="appPageSection">
|
<div className="appPageSection">
|
||||||
<h2>{__('Bandi disponibili', 'gepafin')}</h2>
|
<h2>{__('Bandi disponibili', 'gepafin')}</h2>
|
||||||
<LatestBandiTable/>
|
<ErrorBoundary><LatestBandiTable/></ErrorBoundary>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="appPage__spacer"></div>
|
<div className="appPage__spacer"></div>
|
||||||
|
|||||||
@@ -1,9 +1,36 @@
|
|||||||
import { storeGet } from '../store';
|
import { storeGet } from '../store';
|
||||||
|
import * as Sentry from "@sentry/browser";
|
||||||
|
|
||||||
|
const LOCAL_DEVELOPMENT = process.env.REACT_APP_LOCAL_DEVELOPMENT;
|
||||||
|
|
||||||
export class NetworkService {
|
export class NetworkService {
|
||||||
static TOKEN_KEY
|
static TOKEN_KEY
|
||||||
static REFRESH_TOKEN_KEY
|
static REFRESH_TOKEN_KEY
|
||||||
|
|
||||||
|
static logApiError = (endpoint, status = 0, resp) => {
|
||||||
|
try {
|
||||||
|
if ([500].includes(status)) {
|
||||||
|
if (LOCAL_DEVELOPMENT !== '1') {
|
||||||
|
Sentry.init({
|
||||||
|
dsn: "https://e7b2134f7d816f663bb83e51b106a694@o4508381921738752.ingest.de.sentry.io/4508381935501392",
|
||||||
|
environment: process.env.NODE_ENV || "development"
|
||||||
|
});
|
||||||
|
|
||||||
|
const error = new Error(`Status ${status}`);
|
||||||
|
Sentry.captureException(`Error in endpoint: ${endpoint}`, {
|
||||||
|
level: 'error',
|
||||||
|
extra: {
|
||||||
|
originalError: error,
|
||||||
|
details: resp
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (err) {
|
||||||
|
console.log(err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static postEmptyResponse = (url, body, callback, errorCallback) => {
|
static postEmptyResponse = (url, body, callback, errorCallback) => {
|
||||||
fetch(url, {
|
fetch(url, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
@@ -77,10 +104,12 @@ export class NetworkService {
|
|||||||
return { response: await response.json(), status: status }
|
return { response: await response.json(), status: status }
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status >= 400 && data.status <= 599)
|
if (data.status >= 400 && data.status <= 599) {
|
||||||
errorCallback(data.response)
|
errorCallback(data.response)
|
||||||
else
|
this.logApiError(url, data.status, data.response);
|
||||||
|
} else {
|
||||||
callback(data.response)
|
callback(data.response)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(err => errorCallback(err));
|
.catch(err => errorCallback(err));
|
||||||
};
|
};
|
||||||
@@ -118,10 +147,12 @@ export class NetworkService {
|
|||||||
return { response: await response.json(), status: status }
|
return { response: await response.json(), status: status }
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status >= 400 && data.status <= 599)
|
if (data.status >= 400 && data.status <= 599) {
|
||||||
errorCallback(data.response)
|
errorCallback(data.response)
|
||||||
else
|
this.logApiError(url, data.status, data.response);
|
||||||
|
} else {
|
||||||
callback(data.response)
|
callback(data.response)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(err => errorCallback(err));
|
.catch(err => errorCallback(err));
|
||||||
};
|
};
|
||||||
@@ -159,10 +190,12 @@ export class NetworkService {
|
|||||||
return { response: await response.blob(), status: status }
|
return { response: await response.blob(), status: status }
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status >= 400 && data.status <= 599)
|
if (data.status >= 400 && data.status <= 599) {
|
||||||
errorCallback(data.response)
|
errorCallback(data.response)
|
||||||
else
|
this.logApiError(url, data.status, data.response);
|
||||||
|
} else {
|
||||||
callback(data.response)
|
callback(data.response)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(err => errorCallback(err));
|
.catch(err => errorCallback(err));
|
||||||
};
|
};
|
||||||
@@ -198,10 +231,12 @@ export class NetworkService {
|
|||||||
return { response: await response.json(), status: status }
|
return { response: await response.json(), status: status }
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status >= 400 && data.status <= 599)
|
if (data.status >= 400 && data.status <= 599) {
|
||||||
errorCallback(data.response)
|
errorCallback(data.response)
|
||||||
else
|
this.logApiError(url, data.status, data.response);
|
||||||
|
} else {
|
||||||
callback(data.response)
|
callback(data.response)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(err => errorCallback(err));
|
.catch(err => errorCallback(err));
|
||||||
};
|
};
|
||||||
@@ -261,10 +296,12 @@ export class NetworkService {
|
|||||||
return { response: await response.json(), status: status }
|
return { response: await response.json(), status: status }
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status >= 400 && data.status <= 599)
|
if (data.status >= 400 && data.status <= 599) {
|
||||||
errorCallback(data.response)
|
errorCallback(data.response)
|
||||||
else
|
this.logApiError(url, data.status, data.response);
|
||||||
|
} else {
|
||||||
callback(data.response)
|
callback(data.response)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(err => errorCallback(err));
|
.catch(err => errorCallback(err));
|
||||||
};
|
};
|
||||||
@@ -381,12 +418,15 @@ export class NetworkService {
|
|||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status >= 400 && data.status <= 599) {
|
if (data.status >= 400 && data.status <= 599) {
|
||||||
errorCallback(data.response)
|
errorCallback(data.response);
|
||||||
|
this.logApiError(url, data.status, data.response);
|
||||||
} else {
|
} else {
|
||||||
callback(data.response)
|
callback(data.response)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
.catch(err => errorCallback(err));
|
.catch(err => {
|
||||||
|
errorCallback(err)
|
||||||
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -422,10 +462,12 @@ export class NetworkService {
|
|||||||
return { response: await response.blob(), status: status }
|
return { response: await response.blob(), status: status }
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status >= 400 && data.status <= 599)
|
if (data.status >= 400 && data.status <= 599) {
|
||||||
errorCallback(data.response)
|
errorCallback(data.response)
|
||||||
else
|
this.logApiError(url, data.status, data.response);
|
||||||
|
} else {
|
||||||
callback(data.response)
|
callback(data.response)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(err => errorCallback(err));
|
.catch(err => errorCallback(err));
|
||||||
};
|
};
|
||||||
@@ -504,10 +546,12 @@ export class NetworkService {
|
|||||||
return { response: await response.json(), status: status }
|
return { response: await response.json(), status: status }
|
||||||
})
|
})
|
||||||
.then(data => {
|
.then(data => {
|
||||||
if (data.status >= 400 && data.status <= 599)
|
if (data.status >= 400 && data.status <= 599) {
|
||||||
errorCallback(data.response)
|
errorCallback(data.response)
|
||||||
else
|
this.logApiError(url, data.status, data.response);
|
||||||
|
} else {
|
||||||
callback(data.response)
|
callback(data.response)
|
||||||
|
}
|
||||||
})
|
})
|
||||||
.catch(err => errorCallback(err));
|
.catch(err => errorCallback(err));
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user