- 'resend emails' functionality - added role based access;
- fixed issue with displaying for instructor manager related amendments;
This commit is contained in:
@@ -266,5 +266,7 @@ export const classificationType = [
|
||||
|
||||
export const resendEmailLabelsByType = {
|
||||
APPLICATION_AMENDMENT_REQUESTED: 'Invia email (nuovo soccorso)',
|
||||
APPLICATION_AMENDMENT_REMINDER: 'Invia email (sollecito)'
|
||||
APPLICATION_AMENDMENT_REMINDER: 'Invia email (sollecito)',
|
||||
APPLICATION_ADMISSIBLE: 'Invia email (ammisibile)',
|
||||
APPLICATION_REJECTED: 'Invia email (respinto)'
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
import React, { useState, useEffect, useRef, useMemo } from 'react';
|
||||
import React, { useState, useEffect, useRef, useMemo, useCallback } from 'react';
|
||||
import { __ } from '@wordpress/i18n';
|
||||
import { useNavigate, useParams } from 'react-router-dom';
|
||||
import { is, isEmpty } from 'ramda';
|
||||
import { is, isEmpty, isNil, pathOr } from 'ramda';
|
||||
import { wrap } from 'object-path-immutable';
|
||||
import { klona } from 'klona';
|
||||
import { useForm } from 'react-hook-form';
|
||||
@@ -28,6 +28,7 @@ import FormField from '../../components/FormField';
|
||||
import { Editor } from 'primereact/editor';
|
||||
import { InputNumber } from 'primereact/inputnumber';
|
||||
import SoccorsoComunications from '../SoccorsoEditPreInstructor/components/SoccorsoComunications';
|
||||
import SoccorsoResendEmails from '../SoccorsoEditPreInstructor/components/SoccorsoResendEmails';
|
||||
|
||||
|
||||
const SoccorsoEditInstructorManager = () => {
|
||||
@@ -43,6 +44,7 @@ const SoccorsoEditInstructorManager = () => {
|
||||
const [internalNote, setInternalNote] = useState('');
|
||||
const toast = useRef(null);
|
||||
const [formInitialData, setFormInitialData] = useState({});
|
||||
const emailSendResponse = pathOr([], ['emailSendResponse'], data);
|
||||
const {
|
||||
control,
|
||||
handleSubmit,
|
||||
@@ -346,6 +348,11 @@ const SoccorsoEditInstructorManager = () => {
|
||||
setIsLoadingReminding(false);
|
||||
}
|
||||
|
||||
const updateEmailSendResponses = useCallback((newEmailData) => {
|
||||
const newData = wrap(data).set(['emailSendResponse'], newEmailData).value();
|
||||
setData(newData);
|
||||
}, [data]);
|
||||
|
||||
useEffect(() => {
|
||||
if (formInitialData) {
|
||||
Object.keys(formInitialData).map(k => setValue(k, formInitialData[k]));
|
||||
@@ -506,7 +513,8 @@ const SoccorsoEditInstructorManager = () => {
|
||||
<Button
|
||||
type="button"
|
||||
onClick={sendReminder}
|
||||
disabled={isLoadingReminding || ['CLOSE', 'EXPIRED'].includes(data.status)}
|
||||
disabled={isLoadingReminding || ['CLOSE', 'EXPIRED'].includes(data.status)
|
||||
|| (!isNil(emailSendResponse) && !isEmpty(emailSendResponse))}
|
||||
outlined
|
||||
label={__('Invia Sollecito', 'gepafin')}
|
||||
icon="pi pi-send"
|
||||
@@ -532,6 +540,11 @@ const SoccorsoEditInstructorManager = () => {
|
||||
label={__('Chiudi Soccorso Istruttorio', 'gepafin')}
|
||||
icon="pi pi-times" iconPos="right"/>
|
||||
</div>
|
||||
<div className="appPageSection__actions">
|
||||
<SoccorsoResendEmails
|
||||
emailsData={emailSendResponse}
|
||||
setDataEmailsSoccorso={updateEmailSendResponses}/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
@@ -11,10 +11,12 @@ import { Toast } from 'primereact/toast';
|
||||
import { Button } from 'primereact/button';
|
||||
|
||||
import { resendEmailLabelsByType } from '../../../../configData';
|
||||
import { useStoreValue } from '../../../../store';
|
||||
|
||||
const SoccorsoResendEmails = ({ emailsData = [], setDataEmailsSoccorso }) => {
|
||||
const [isResendingRequest, setIsResendingRequest] = useState(false);
|
||||
const toast = useRef(null);
|
||||
const role = useStoreValue('getRole');
|
||||
const filtered = emailsData.filter(o => !o.isEmailSend);
|
||||
|
||||
const resendEmail = (data) => {
|
||||
@@ -64,7 +66,7 @@ const SoccorsoResendEmails = ({ emailsData = [], setDataEmailsSoccorso }) => {
|
||||
}
|
||||
|
||||
return(
|
||||
filtered.length > 0 ? <>
|
||||
['ROLE_SUPER_ADMIN', 'ROLE_INSTRUCTOR_MANAGER'].includes(role) && filtered.length > 0 ? <>
|
||||
<Toast ref={toast}/>
|
||||
{filtered
|
||||
.map(o => <Button
|
||||
|
||||
@@ -22,6 +22,7 @@ import { Dropdown } from 'primereact/dropdown';
|
||||
import { Tag } from 'primereact/tag';
|
||||
import { Calendar } from 'primereact/calendar';
|
||||
import getQueryParamsForPaginatedEndpoint from '../../../../helpers/getQueryParamsForPaginatedEndpoint';
|
||||
import SoccorsoResendEmails from '../../../SoccorsoEditPreInstructor/components/SoccorsoResendEmails';
|
||||
|
||||
const SoccorsiInstructorManagerMioTableAsync = ({ userId = null }) => {
|
||||
const [localAsyncRequest, setLocalAsyncRequest] = useState(false);
|
||||
@@ -94,10 +95,25 @@ const SoccorsiInstructorManagerMioTableAsync = ({ userId = null }) => {
|
||||
});
|
||||
};
|
||||
|
||||
const updateRowData = useCallback((id, updateResponse) => {
|
||||
const newItems = items.map((o) => {
|
||||
if (o.id === id) {
|
||||
o.emailSendResponse = updateResponse;
|
||||
}
|
||||
return o;
|
||||
})
|
||||
setItems(newItems);
|
||||
}, [items]);
|
||||
|
||||
const actionsBodyTemplate = (rowData) => {
|
||||
return <Link to={`/mie-domande/${rowData.applicationId}/soccorso/${rowData.id}`}>
|
||||
return <div className="appPageSection__tableActions lessGap">
|
||||
<Link to={`/mie-domande/${rowData.applicationId}/soccorso/${rowData.id}`}>
|
||||
<Button severity="info" label={__('Dettagli', 'gepafin')} size="small"/>
|
||||
</Link>
|
||||
<SoccorsoResendEmails
|
||||
emailsData={rowData.emailSendResponse}
|
||||
setDataEmailsSoccorso={(updateResponse) => updateRowData(rowData.id, updateResponse)}/>
|
||||
</div>
|
||||
}
|
||||
|
||||
const statusBodyTemplate = (rowData) => {
|
||||
|
||||
Reference in New Issue
Block a user