- fixed login for confidi users;

- restyled fileselect UI;
This commit is contained in:
Vitalii Kiiko
2025-03-11 15:19:13 +01:00
parent d9aa0b6c23
commit e13e63e1ca
12 changed files with 126 additions and 56 deletions

View File

@@ -37,7 +37,7 @@ function App() {
}
useEffect(() => {
if (role === 'ROLE_BENEFICIARY') {
if (['ROLE_BENEFICIARY', 'ROLE_CONFIDI'].includes(role)) {
const userData = storeGet.main.userData();
if (userData.companies && !isEmpty(userData.companies)) {
storeSet.main.companies(userData.companies);

View File

@@ -8,6 +8,7 @@ import { ListBox } from 'primereact/listbox';
import { Button } from 'primereact/button';
import CompanyDocumentsService from '../../../../service/company-documents-service';
import { Link } from 'react-router-dom';
import FileUploadService from '../../../../service/file-upload-service';
const FileSelect = ({
fieldName,
@@ -29,6 +30,7 @@ const FileSelect = ({
const [selectedUnconfirmed, setSelectedUnconfirmed] = useState([]);
const [optionsTransformed, setOptionsTransformed] = useState([]);
const [loading, setLoading] = useState(false);
const [addNewMode, setAddNewMode] = useState(false);
const attachSelectedFiles = useCallback(() => {
const existingIds = pluck('id', stateFieldData.current);
@@ -43,10 +45,12 @@ const FileSelect = ({
['documentType', source]
])
});
setAddNewMode(false);
}, [selectedUnconfirmed]);
const removeAttached = (id) => {
console.log('stateFieldData', stateFieldData, id)
const doGoBackToListOfFiles = () => {
setSelectedUnconfirmed([]);
setAddNewMode(false);
}
const callback = (resp) => {
@@ -62,9 +66,30 @@ const FileSelect = ({
setLoading(false);
}
useEffect(() => {
const removeAttached = (id) => {
FileUploadService.deleteFile(
{},
(data) => deleteCallback(data, id),
deleteErrorCallback,
[['id', id]]
);
}
const deleteCallback = (data, id) => {
if (data.status === 'SUCCESS') {
stateFieldData.current = stateFieldData.current.filter(o => id !== o.id);
setDataFn(fieldName, stateFieldData.current, { shouldValidate: true });
saveFormCallback();
}
}
const deleteErrorCallback = (err) => {
console.log('err', err);
}
/*useEffect(() => {
console.log('selectedUnconfirmed', selectedUnconfirmed)
}, [selectedUnconfirmed]);
}, [selectedUnconfirmed]);*/
useEffect(() => {
stateFieldData.current = defaultValue;
@@ -73,6 +98,7 @@ const FileSelect = ({
useEffect(() => {
if (!isEmpty(options)) {
console.log('options', options);
const optionsDefault = [
{
label: __('Documenti dell\'Azienda', 'gepafin'),
@@ -92,7 +118,7 @@ const FileSelect = ({
useEffect(() => {
stateFieldData.current = defaultValue;
}, [defaultValue]);
//console.log([...stateFieldData.current])
return (
<>
<label htmlFor={fieldName} className={classNames({ 'p-error': errors[fieldName] })}>
@@ -100,25 +126,32 @@ const FileSelect = ({
<span className="appForm__field--required">*</span> : null}
</label>
<div className="fileselectInner">
<div className="fileselectInner__selectionBox">
<ListBox multiple
value={selectedUnconfirmed}
onChange={(e) => setSelectedUnconfirmed(e.value)}
options={optionsTransformed}
optionLabel="name"
optionGroupLabel="label"
optionGroupChildren="items"
className="w-full md:w-14rem"
listStyle={{ maxHeight: '130px' }}/>
{!isEmpty(optionsTransformed)
? <Button
severity="success"
disabled={loading}
onClick={attachSelectedFiles}
label={__('Conferma i file scelti', 'gepafin')}
icon="pi pi-arrow-right" size="small" iconPos="right"/> : null}
</div>
{!isEmpty(optionsTransformed)
{addNewMode
? <div className="fileselectInner__selectionBox">
<ListBox multiple
value={selectedUnconfirmed}
onChange={(e) => setSelectedUnconfirmed(e.value)}
options={optionsTransformed}
optionLabel="name"
optionGroupLabel="label"
optionGroupChildren="items"
className="w-full md:w-14rem"
listStyle={{ maxHeight: '130px' }}/>
{!isEmpty(selectedUnconfirmed)
? <Button
severity="success"
disabled={loading}
onClick={attachSelectedFiles}
label={__('Conferma i file scelti', 'gepafin')}
icon="pi pi-arrow-right" size="small" iconPos="right"/>
: <Button
severity="success"
outlined
onClick={doGoBackToListOfFiles}
label={__('Torna alla lista dei file selezionati', 'gepafin')}
icon="pi pi-arrow-right" size="small" iconPos="right"/>}
</div> : null}
{!isEmpty(optionsTransformed) && !addNewMode
? <div className="fileselectInner__selectedFiles">
<p>{__('I file selezionati')}</p>
<ul>
@@ -134,6 +167,12 @@ const FileSelect = ({
</div>
</li>)}
</ul>
<Button
severity="success"
disabled={loading}
onClick={() => setAddNewMode(true)}
label={__('Aggiungi i file', 'gepafin')}
icon="pi pi-plus" size="small" iconPos="right"/>
</div> : null}
</div>
{isEmpty(optionsTransformed)

View File

@@ -55,7 +55,7 @@ const TopBarProfileMenu = ({ menuLeftRef }) => {
command: () => {
navigate('/profilo-aziendale')
},
enable: intersection(permissions, ['APPLY_CALLS']).length && companies.length > 0
enable: intersection(permissions, ['APPLY_CALLS', 'APPLY_CONFIDI_CALLS']).length && companies.length > 0
},
{
label: __('Seleziona azienda', 'gepafin'),
@@ -67,7 +67,7 @@ const TopBarProfileMenu = ({ menuLeftRef }) => {
command: () => {
navigate('/agguingi-azienda')
},
enable: intersection(permissions, ['APPLY_CALLS']).length
enable: intersection(permissions, ['APPLY_CALLS', 'APPLY_CONFIDI_CALLS']).length
},
{
separator: true,

View File

@@ -1,6 +1,6 @@
import React, { useState, useEffect} from 'react';
import { __, sprintf } from '@wordpress/i18n';
import { is, uniq, isNil, isEmpty } from 'ramda';
import { is, uniq, isNil, isEmpty, head } from 'ramda';
import { wrap } from 'object-path-immutable';
import { useNavigate } from 'react-router-dom';
@@ -37,6 +37,7 @@ const REACT_APP_HUB_ID = process.env.REACT_APP_HUB_ID;
const AllBandiAccordion = ({ showOnlyPreferred = false }) => {
const chosenCompanyId = useStore().main.chosenCompanyId();
const companies = useStore().main.companies();
const isAsyncRequest = useStore().main.isAsyncRequest();
const [items, setItems] = useState(null);
const [filters, setFilters] = useState(null);
@@ -45,11 +46,15 @@ const AllBandiAccordion = ({ showOnlyPreferred = false }) => {
const navigate = useNavigate();
useEffect(() => {
storeSet.main.setAsyncRequest();
BandoService.getBandi(getCallback, errGetCallbacks, [
['companyId', chosenCompanyId],
['onlyPreferredCall', showOnlyPreferred]
]);
const existingCompany = head(companies.filter(o => o.id === chosenCompanyId));
if (existingCompany && !isAsyncRequest) {
storeSet.main.setAsyncRequest();
BandoService.getBandi(getCallback, errGetCallbacks, [
['companyId', chosenCompanyId],
['onlyPreferredCall', showOnlyPreferred]
]);
}
}, [chosenCompanyId]);
const getCallback = (data) => {

View File

@@ -1,6 +1,6 @@
import React, { useState, useEffect} from 'react';
import { __ } from '@wordpress/i18n';
import { is, uniq, isNil, isEmpty } from 'ramda';
import { is, uniq, isNil, isEmpty, head } from 'ramda';
import { wrap } from 'object-path-immutable';
import { useNavigate } from 'react-router-dom';
@@ -30,6 +30,7 @@ import translationStrings from '../../../../translationStringsForComponents';
const AllBandiPreferredAccordion = () => {
const chosenCompanyId = useStore().main.chosenCompanyId();
const companies = useStore().main.companies();
const isAsyncRequest = useStore().main.isAsyncRequest();
const [items, setItems] = useState(null);
const [filters, setFilters] = useState(null);
@@ -38,12 +39,16 @@ const AllBandiPreferredAccordion = () => {
const navigate = useNavigate();
useEffect(() => {
storeSet.main.setAsyncRequest();
const userData = storeGet.main.userData();
PreferredBandoService.getPreferredCalls(getCallback, errGetCallbacks, [
['companyId', chosenCompanyId],
['userId', userData.id]
]);
const existingCompany = head(companies.filter(o => o.id === chosenCompanyId));
if (existingCompany) {
storeSet.main.setAsyncRequest();
const userData = storeGet.main.userData();
PreferredBandoService.getPreferredCalls(getCallback, errGetCallbacks, [
['companyId', chosenCompanyId],
['userId', userData.id]
]);
}
}, [chosenCompanyId]);
const getCallback = (data) => {

View File

@@ -328,7 +328,7 @@ const BandoApplicationPreview = () => {
if (applId) {
storeSet.main.setAsyncRequest();
const queryParams = 'ROLE_BENEFICIARY' === role
const queryParams = ['ROLE_BENEFICIARY', 'ROLE_CONFIDI'].includes(role)
? [
['companyId', chosenCompanyId]
]

View File

@@ -1,6 +1,6 @@
import React, { useState, useEffect } from 'react';
import { __ } from '@wordpress/i18n';
import { uniq, is, isEmpty } from 'ramda';
import { uniq, is, head } from 'ramda';
// tools
import getBandoLabel from '../../../../helpers/getBandoLabel';
@@ -28,13 +28,16 @@ import { ConfirmPopup, confirmPopup } from 'primereact/confirmpopup';
const MyLatestSubmissionsTable = () => {
const chosenCompanyId = useStore().main.chosenCompanyId();
const companies = useStore().main.companies();
const [localAsyncRequest, setLocalAsyncRequest] = useState(false);
const [items, setItems] = useState(null);
const [filters, setFilters] = useState(null);
const [statuses, setStatuses] = useState([]);
useEffect(() => {
if (!isEmpty(chosenCompanyId) && chosenCompanyId !== 0) {
const existingCompany = head(companies.filter(o => o.id === chosenCompanyId));
if (existingCompany) {
setLocalAsyncRequest(true);
ApplicationService.getApplications(getApplCallback, errGetApplCallback, [
['companyId', chosenCompanyId],

View File

@@ -5,7 +5,7 @@ import { head, isEmpty, pathOr } from 'ramda';
import NumberFlow from '@number-flow/react';
// store
import { useStore } from '../../store';
import { storeSet, useStore } from '../../store';
// api
import DashboardService from '../../service/dashboard-service';

View File

@@ -1,6 +1,6 @@
import React, { useState, useEffect } from 'react';
import { __ } from '@wordpress/i18n';
import { is, uniq } from 'ramda';
import { head, is, uniq } from 'ramda';
// store
import { useStore } from '../../../../store';
@@ -26,13 +26,16 @@ import { confirmPopup, ConfirmPopup } from 'primereact/confirmpopup';
const DocumentsTable = ({ type, reload = 0 }) => {
const chosenCompanyId = useStore().main.chosenCompanyId();
const companies = useStore().main.companies();
const [docs, setDocs] = useState([]);
const [filters, setFilters] = useState(null);
const [loading, setLoading] = useState(false);
const [statuses, setStatuses] = useState([]);
useEffect(() => {
if (!loading && chosenCompanyId && chosenCompanyId !== 0 && reload !== 0) {
const existingCompany = head(companies.filter(o => o.id === chosenCompanyId));
if (!loading && existingCompany && reload !== 0) {
setLoading(true);
CompanyDocumentsService.getCompanyDocuments(chosenCompanyId, getCallback, errGetCallbacks, [
['documentType', type]
@@ -41,10 +44,14 @@ const DocumentsTable = ({ type, reload = 0 }) => {
}, [chosenCompanyId, reload]);
useEffect(() => {
setLoading(true);
CompanyDocumentsService.getCompanyDocuments(chosenCompanyId, getCallback, errGetCallbacks, [
['documentType', type]
]);
const existingCompany = head(companies.filter(o => o.id === chosenCompanyId));
if (existingCompany) {
setLoading(true);
CompanyDocumentsService.getCompanyDocuments(chosenCompanyId, getCallback, errGetCallbacks, [
['documentType', type]
]);
}
}, []);
const getCallback = (resp) => {

View File

@@ -1,6 +1,6 @@
import React, { useState, useEffect } from 'react';
import { __ } from '@wordpress/i18n';
import { is, isEmpty, uniq } from 'ramda';
import { head, is, uniq } from 'ramda';
import { Link } from 'react-router-dom';
// store
@@ -27,13 +27,16 @@ import translationStrings from '../../../../translationStringsForComponents';
const BeneficiarioDomandeTable = () => {
const chosenCompanyId = useStore().main.chosenCompanyId();
const companies = useStore().main.companies();
const [items, setItems] = useState(null);
const [filters, setFilters] = useState(null);
const [localAsyncRequest, setLocalAsyncRequest] = useState(false);
const [statuses, setStatuses] = useState([]);
useEffect(() => {
if (!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 && !localAsyncRequest) {
const existingCompany = head(companies.filter(o => o.id === chosenCompanyId));
if (existingCompany && !localAsyncRequest) {
setLocalAsyncRequest(true);
ApplicationService.getApplications(getApplCallback, errGetApplCallback, [
['companyId', chosenCompanyId],

View File

@@ -1,6 +1,6 @@
import React, { useState, useEffect } from 'react';
import { __ } from '@wordpress/i18n';
import { is, isEmpty, uniq } from 'ramda';
import { head, is, uniq } from 'ramda';
// store
import { useStore } from '../../../../store';
@@ -21,6 +21,7 @@ import translationStrings from '../../../../translationStringsForComponents';
const BeneficiarioUltimeDomandeTable = () => {
const chosenCompanyId = useStore().main.chosenCompanyId();
const companies = useStore().main.companies();
const [items, setItems] = useState(null);
// eslint-disable-next-line
const [filters, setFilters] = useState(null);
@@ -43,7 +44,9 @@ const BeneficiarioUltimeDomandeTable = () => {
}
useEffect(() => {
if (!isEmpty(chosenCompanyId) && chosenCompanyId !== 0 && !localAsyncRequest) {
const existingCompany = head(companies.filter(o => o.id === chosenCompanyId));
if (existingCompany && !localAsyncRequest) {
const bodyParams = getPaginationQuery(
['SOCCORSO', 'APPROVED', 'REJECTED', 'EVALUATION', 'SUBMIT'],
1

View File

@@ -1,6 +1,6 @@
import React, { useEffect, useState, useCallback } from 'react';
import { __ } from '@wordpress/i18n';
import { isEmpty, pathOr } from 'ramda';
import { head, isEmpty, pathOr } from 'ramda';
import NumberFlow from '@number-flow/react';
// store
@@ -16,6 +16,7 @@ const StatsBeneficiary = () => {
const [mainStats, setMainStats] = useState({});
const [chartStats, setChartStats] = useState({});
const chosenCompanyId = useStore().main.chosenCompanyId();
const companies = useStore().main.companies();
const getStats = (resp) => {
if (resp.status === 'SUCCESS') {
@@ -31,7 +32,11 @@ const StatsBeneficiary = () => {
}, [mainStats]);
useEffect(() => {
DashboardService.getBeneficiaryStatsPage(chosenCompanyId, getStats, errGetStats);
const existingCompany = head(companies.filter(o => o.id === chosenCompanyId));
if (existingCompany) {
DashboardService.getBeneficiaryStatsPage(chosenCompanyId, getStats, errGetStats);
}
}, [chosenCompanyId]);
return(