- implemented functionality of adding to preferred calls;

This commit is contained in:
Vitalii Kiiko
2024-11-11 16:29:58 +01:00
parent 6521114b95
commit edbe1b7df4
4 changed files with 96 additions and 22 deletions

View File

@@ -2,14 +2,18 @@ import React, { useState, useEffect} from 'react';
import { __ } from '@wordpress/i18n'; import { __ } from '@wordpress/i18n';
import { is, uniq, isNil } from 'ramda'; import { is, uniq, isNil } from 'ramda';
import { wrap } from 'object-path-immutable'; import { wrap } from 'object-path-immutable';
import { useNavigate } from 'react-router-dom';
// store // store
import { storeSet, useStore } from '../../../../store'; import { storeGet, storeSet, useStore } from '../../../../store';
// tools // tools
import getBandoSeverity from '../../../../helpers/getBandoSeverity'; import getBandoSeverity from '../../../../helpers/getBandoSeverity';
import getBandoLabel from '../../../../helpers/getBandoLabel'; import getBandoLabel from '../../../../helpers/getBandoLabel';
import getDateFromISOstring from '../../../../helpers/getDateFromISOstring'; import getDateFromISOstring from '../../../../helpers/getDateFromISOstring';
import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse';
import getNumberWithCurrency from '../../../../helpers/getNumberWithCurrency';
import renderHtmlContent from '../../../../helpers/renderHtmlContent';
// api // api
import BandoService from '../../../../service/bando-service'; import BandoService from '../../../../service/bando-service';
@@ -20,11 +24,8 @@ import { Column } from 'primereact/column';
import { Dropdown } from 'primereact/dropdown'; import { Dropdown } from 'primereact/dropdown';
import { Tag } from 'primereact/tag'; import { Tag } from 'primereact/tag';
import ProperBandoLabel from '../../../../components/ProperBandoLabel'; import ProperBandoLabel from '../../../../components/ProperBandoLabel';
import getNumberWithCurrency from '../../../../helpers/getNumberWithCurrency';
import renderHtmlContent from '../../../../helpers/renderHtmlContent';
import { Button } from 'primereact/button'; import { Button } from 'primereact/button';
import { useNavigate } from 'react-router-dom'; import PreferredBandoService from '../../../../service/preferred-bando-service';
import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse';
const AllBandiAccordion = () => { const AllBandiAccordion = () => {
@@ -92,23 +93,54 @@ const AllBandiAccordion = () => {
return <Tag value={getBandoLabel(option)} severity={getBandoSeverity(option)} />; return <Tag value={getBandoLabel(option)} severity={getBandoSeverity(option)} />;
}; };
/*const addToFavourites = () => { const addToFavourites = (id, preferredId = 0) => {
console.log('addToFavourites'); const companyId = storeGet.main.chosenCompanyId()
}*/ const data = {
companyId,
callId: id
}
if (preferredId !== 0) {
// TODO implement removing from preferrenced
//PreferredBandoService.addToPreferred(data, toggleFavCallback, errToggleFavCallback);
} else {
PreferredBandoService.addToPreferred(data, toggleFavCallback, errToggleFavCallback);
}
}
const toggleFavCallback = (data) => {
if (data.status === 'SUCCESS') {
const newItems = items.map((o) => {
if (o.id === data.data.callId) {
return {
...o,
preferred: data.data.id
}
} else {
return o;
}
});
setItems(newItems)
}
}
const errToggleFavCallback = (data) => {
set404FromErrorResponse(data);
}
const goToBandoPage = (id) => { const goToBandoPage = (id) => {
navigate(`/bandi/${id}`) navigate(`/bandi/${id}`)
} }
/*const actionsBodyTemplate = (rowData) => { const actionsBodyTemplate = (rowData) => {
return <div className="appPageSection__tableActions"> return <div className="appPageSection__tableActions">
<button type="button" <button type="button"
className="appPageSection__addToFavourites" className="appPageSection__addToFavourites"
onClick={() => addToFavourites(rowData.id)}> data-active={rowData.preferred}
onClick={() => addToFavourites(rowData.id, rowData.preferred)}>
<i className="pi pi-heart" style={{ fontSize: '1rem' }}></i> <i className="pi pi-heart" style={{ fontSize: '1rem' }}></i>
</button> </button>
</div> </div>
}*/ }
const rowExpansionTemplate = (data) => { const rowExpansionTemplate = (data) => {
return ( return (
@@ -151,10 +183,10 @@ const AllBandiAccordion = () => {
<Column header={__('Importo totale', 'gepafin')} filterField="amount" <Column header={__('Importo totale', 'gepafin')} filterField="amount"
style={{ minWidth: '10rem' }} body={amountBodyTemplate} sortable/> style={{ minWidth: '10rem' }} body={amountBodyTemplate} sortable/>
<Column field="status" header={__('Stato', 'gepafin')} filterMenuStyle={{ width: '14rem' }} <Column field="status" header={__('Stato', 'gepafin')} filterMenuStyle={{ width: '14rem' }}
style={{ width: '120px' }} body={statusBodyTemplate} filter sortable style={{ width: '8rem' }} body={statusBodyTemplate} filter sortable
filterElement={statusFilterTemplate}/> filterElement={statusFilterTemplate}/>
<Column header={__('Azioni', 'gepafin')} <Column header={__('Azioni', 'gepafin')}
style={{ width: '120px' }} style={{ width: '8rem' }}
body={actionsBodyTemplate}/> body={actionsBodyTemplate}/>
</DataTable> </DataTable>
</div> </div>

View File

@@ -1,10 +1,8 @@
import React from 'react'; import React from 'react';
import { __ } from '@wordpress/i18n'; import { __ } from '@wordpress/i18n';
import { useNavigate } from 'react-router-dom';
// components // components
import AllBandiAccordion from './components/AllBandiAccordion'; import AllBandiAccordion from './components/AllBandiAccordion';
import { Button } from 'primereact/button';
const BandiBeneficiario = () => { const BandiBeneficiario = () => {
return( return(

View File

@@ -4,7 +4,7 @@ import { uniq } from 'ramda';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
// store // store
import { storeSet } from '../../../../store'; import { storeGet, storeSet } from '../../../../store';
// api // api
import BandoService from '../../../../service/bando-service'; import BandoService from '../../../../service/bando-service';
@@ -19,6 +19,8 @@ import { InputIcon } from 'primereact/inputicon';
import { Button } from 'primereact/button'; import { Button } from 'primereact/button';
import { Calendar } from 'primereact/calendar'; import { Calendar } from 'primereact/calendar';
import ProperBandoLabel from '../../../../components/ProperBandoLabel'; import ProperBandoLabel from '../../../../components/ProperBandoLabel';
import PreferredBandoService from '../../../../service/preferred-bando-service';
import set404FromErrorResponse from '../../../../helpers/set404FromErrorResponse';
const LatestBandiTable = () => { const LatestBandiTable = () => {
@@ -29,7 +31,7 @@ const LatestBandiTable = () => {
const [statuses, setStatuses] = useState([]); const [statuses, setStatuses] = useState([]);
useEffect(() => { useEffect(() => {
storeSet.main.setAsyncRequest(); setLoading(true);
BandoService.getBandi(getCallback, errGetCallbacks); BandoService.getBandi(getCallback, errGetCallbacks);
}, []); }, []);
@@ -40,16 +42,47 @@ const LatestBandiTable = () => {
setStatuses(uniq(data.data.map(o => o.status))) setStatuses(uniq(data.data.map(o => o.status)))
initFilters(); initFilters();
} }
storeSet.main.unsetAsyncRequest(); setLoading(false);
} }
const errGetCallbacks = (data) => { const errGetCallbacks = (data) => {
console.log('errGetCallbacks', data) set404FromErrorResponse(data);
storeSet.main.unsetAsyncRequest(); setLoading(false);
} }
const addToFavourites = (id) => { const addToFavourites = (id, preferredId = 0) => {
const companyId = storeGet.main.chosenCompanyId()
const data = {
companyId,
callId: id
}
setLoading(true);
if (preferredId !== 0) {
// TODO implement removing from preferrenced
//PreferredBandoService.addToPreferred(data, toggleFavCallback, errToggleFavCallback);
} else {
PreferredBandoService.addToPreferred(data, toggleFavCallback, errToggleFavCallback);
}
}
const toggleFavCallback = (data) => {
if (data.status === 'SUCCESS') {
const newItems = items.map((o) => {
if (o.id === data.data.callId) {
return {
...o,
preferred: data.data.id
}
} else {
return o;
}
});
setItems(newItems)
}
}
const errToggleFavCallback = (data) => {
set404FromErrorResponse(data);
} }
const getFormattedData = (data) => { const getFormattedData = (data) => {
@@ -138,7 +171,8 @@ const LatestBandiTable = () => {
return <div className="appPageSection__tableActions"> return <div className="appPageSection__tableActions">
<button type="button" <button type="button"
className="appPageSection__addToFavourites" className="appPageSection__addToFavourites"
onClick={() => addToFavourites(rowData.id)}> data-active={rowData.preferred}
onClick={() => addToFavourites(rowData.id, rowData.preferred)}>
<i className="pi pi-heart" style={{ fontSize: '1rem' }}></i> <i className="pi pi-heart" style={{ fontSize: '1rem' }}></i>
</button> </button>
{rowData.confidi {rowData.confidi

View File

@@ -0,0 +1,10 @@
import { NetworkService } from './network-service';
const API_BASE_URL = process.env.REACT_APP_API_EXECUTION_ADDRESS;
export default class PreferredBandoService {
static addToPreferred = (body, callback, errCallback) => {
NetworkService.post(`${API_BASE_URL}/beneficiaryPreferredCall`, body, callback, errCallback);
};
}