- saving progress;

This commit is contained in:
Vitalii Kiiko
2024-10-29 17:18:07 +01:00
parent eeecbf2c69
commit 780cb633a2
4 changed files with 90 additions and 45 deletions

View File

@@ -1,20 +1,17 @@
import React, { useState, useEffect, useRef } from 'react';
import { __ } from '@wordpress/i18n';
import { useNavigate, useParams } from 'react-router-dom';
import { is, isEmpty } from 'ramda';
import { isEmpty } from 'ramda';
import { wrap } from 'object-path-immutable';
// store
import { storeSet, useStore } from '../../store';
// api
import ApplicationEvaluationService from '../../service/application-evaluation-service';
import AmendmentsService from '../../service/amendments-service';
// tools
import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
import getBandoLabel from '../../helpers/getBandoLabel';
import getDateFromISOstring from '../../helpers/getDateFromISOstring';
// components
import { Skeleton } from 'primereact/skeleton';
@@ -24,7 +21,6 @@ import { Editor } from 'primereact/editor';
import { InputNumber } from 'primereact/inputnumber';
import BlockingOverlay from '../../components/BlockingOverlay';
import { Toast } from 'primereact/toast';
import HelpIcon from '../../icons/HelpIcon';
import { InputSwitch } from 'primereact/inputswitch';
const SoccorsoEditPreInstructor = () => {

View File

@@ -1,41 +1,41 @@
import React, { useState, useEffect, useRef } from 'react';
import { __, sprintf } from '@wordpress/i18n';
import { __ } from '@wordpress/i18n';
import { useNavigate, useParams } from 'react-router-dom';
import { is, isEmpty, isNil, sum, pathOr } from 'ramda';
import { klona } from 'klona';
import { is, isEmpty, isNil } from 'ramda';
import { wrap } from 'object-path-immutable';
// store
import { storeSet, useStore } from '../../store';
// api
import ApplicationEvaluationService from '../../service/application-evaluation-service';
import AmendmentsService from '../../service/amendments-service';
import CommunicationService from '../../service/communication-service';
// tools
import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
import getBandoLabel from '../../helpers/getBandoLabel';
import getDateFromISOstring from '../../helpers/getDateFromISOstring';
import renderHtmlContent from '../../helpers/renderHtmlContent';
// components
import { Skeleton } from 'primereact/skeleton';
import { Button } from 'primereact/button';
import { Tag } from 'primereact/tag';
import { Checkbox } from 'primereact/checkbox';
import { Editor } from 'primereact/editor';
import { InputNumber } from 'primereact/inputnumber';
import BlockingOverlay from '../../components/BlockingOverlay';
import { Toast } from 'primereact/toast';
import HelpIcon from '../../icons/HelpIcon';
import AmendmentsService from '../../service/amendments-service';
import renderHtmlContent from '../../helpers/renderHtmlContent';
import CommunicationService from '../../service/communication-service';
import { classNames } from 'primereact/utils';
import { Dialog } from 'primereact/dialog';
import { InputText } from 'primereact/inputtext';
import { InputTextarea } from 'primereact/inputtextarea';
const SoccorsoEditPreInstructor = () => {
const isAsyncRequest = useStore().main.isAsyncRequest();
const { id, amendmendId } = useParams();
const { id, amendmentId } = useParams();
const navigate = useNavigate();
const [data, setData] = useState({});
const [comms, setComms] = useState([]);
const [isVisibleNewCommDialog, setIsVisibleNewCommDialog] = useState(false);
const [newCommData, setNewCommData] = useState({});
const [isLoadingCommunication, setIsLoadingCommunication] = useState(false);
const toast = useRef(null);
const goToEvaluationPage = () => {
@@ -107,28 +107,49 @@ const SoccorsoEditPreInstructor = () => {
const header = renderHeader();
const updateEvaluationValue = (value, path, maxValue) => {
let finalValue = value;
if (maxValue) {
finalValue = value > maxValue ? maxValue : value;
}
const newData = wrap(data).set(path.split('.'), finalValue).value();
setData(newData);
const headerEditDialog = () => {
return <span>{__('Aggiungi comunicazione', 'gepafin')}</span>
}
/*const doSaveDraft = () => {
const formData = {
criteria: klona(data.criteria),
checklist: klona(data.checklist),
files: klona(data.files),
note: data.note
}
ApplicationEvaluationService.updateEvaluation(id, formData, updateCallback, errUpdateCallback);
const hideEditDialog = () => {
setIsVisibleNewCommDialog(false);
setNewCommData({
title: '',
comment: ''
});
}
const updateCallback = (data) => {
const footerEditDialog = () => {
return <div>
<Button type="button" label={__('Anulla', 'gepafin')} onClick={hideEditDialog} outlined/>
<Button
type="button"
disabled={isLoadingCommunication || isEmpty(newCommData.title) || isEmpty(newCommData.comment)}
label={__('Invia', 'gepafin')} onClick={createCommunication}/>
</div>
}
const openNewCommDialog = () => {
setIsVisibleNewCommDialog(true);
setNewCommData({
title: '',
comment: ''
});
}
const updateNewCommData = (value, path) => {
const newData = wrap(newCommData).set(path.split('.'), value).value();
setNewCommData(newData);
}
const createCommunication = () => {
setIsLoadingCommunication(true);
CommunicationService.createCommunication(newCommData, createCommunicationCallback, errCreateCommunicationCallback, [
['amendmentId', amendmentId]
]);
}
const createCommunicationCallback = (data) => {
if (data.status === 'SUCCESS') {
if (toast.current) {
toast.current.show({
@@ -137,11 +158,12 @@ const SoccorsoEditPreInstructor = () => {
detail: data.message
});
}
console.log(data.data)
}
storeSet.main.unsetAsyncRequest();
setIsLoadingCommunication(false);
}
const errUpdateCallback = (data) => {
const errCreateCommunicationCallback = (data) => {
if (toast.current && data.message) {
toast.current.show({
severity: 'error',
@@ -150,15 +172,15 @@ const SoccorsoEditPreInstructor = () => {
});
}
set404FromErrorResponse(data);
storeSet.main.unsetAsyncRequest();
}*/
setIsLoadingCommunication(false);
}
useEffect(() => {
const parsedSoccorsoId = parseInt(amendmendId)
const parsedSoccorsoId = parseInt(amendmentId);
const soccorsoEntityId = !isNaN(parsedSoccorsoId) ? parsedSoccorsoId : 0;
AmendmentsService.getSoccorsoById(getCallback, errGetCallback, [['id', soccorsoEntityId]]);
}, [amendmendId]);
}, [amendmentId]);
return (
<div className="appPage">
@@ -255,6 +277,7 @@ const SoccorsoEditPreInstructor = () => {
<Button
style={{marginTop: 30}}
onClick={openNewCommDialog}
type="button"
label={__('Aggiungi Comunicazione', 'gepafin')}
icon="pi pi-plus" iconPos="right"/>
@@ -298,6 +321,32 @@ const SoccorsoEditPreInstructor = () => {
<Skeleton width="20%" height="1rem" className="mb-2"></Skeleton>
<Skeleton width="100%" height="4rem"></Skeleton>
</>}
<Dialog
visible={isVisibleNewCommDialog}
modal
header={headerEditDialog}
footer={footerEditDialog}
style={{ maxWidth: '600px', width: '100%' }}
onHide={hideEditDialog}>
<div className="appForm__field">
<label
className={classNames({ 'p-error': isEmpty(newCommData.title) })}>
{__('Titolo', 'gepafin')}*
</label>
<InputText value={newCommData.title}
invalid={isEmpty(newCommData.title)}
onChange={(e) => updateNewCommData(e.target.value, 'title')}/>
<label
className={classNames({ 'p-error': isEmpty(newCommData.comment) })}>
{__('Contenuto', 'gepafin')}*
</label>
<InputTextarea value={newCommData.comment}
invalid={isEmpty(newCommData.comment)}
onChange={(e) => updateNewCommData(e.target.value, 'comment')}/>
</div>
</Dialog>
</div>
)

View File

@@ -99,7 +99,7 @@ const routes = ({ role, chosenCompanyId }) => {
{'ROLE_BENEFICIARY' === role ? <PageNotFound/> : null}
{'ROLE_PRE_INSTRUCTOR' === role ? <SoccorsoAddPreInstructor/> : null}
</DefaultLayout>}/>
<Route path="/domande/:id/soccorso/:amendmendId" element={<DefaultLayout>
<Route path="/domande/:id/soccorso/:amendmentId" element={<DefaultLayout>
{'ROLE_SUPER_ADMIN' === role ? <PageNotFound/> : null}
{'ROLE_BENEFICIARY' === role ? <PageNotFound/> : null}
{'ROLE_PRE_INSTRUCTOR' === role ? <SoccorsoEditPreInstructor/> : null}

View File

@@ -8,7 +8,7 @@ export default class CommunicationService {
NetworkService.get(`${API_BASE_URL}/communication/${id}`, callback, errCallback, queryParams);
};
static getCommsByAmendmentId = (id, callback, errCallback, queryParams) => {
NetworkService.get(`${API_BASE_URL}/communication/${id}`, callback, errCallback, queryParams);
static createCommunication = (body, callback, errCallback, queryParams) => {
NetworkService.post(`${API_BASE_URL}/communication`, body, callback, errCallback, queryParams);
};
}