import React, { useState, useEffect, useRef, useCallback, useMemo } from 'react'; import { __, sprintf } from '@wordpress/i18n'; import { useNavigate, useParams } from 'react-router-dom'; import { is, isEmpty, isNil, sum, pathOr, head, pluck } from 'ramda'; import { klona } from 'klona'; import { wrap } from 'object-path-immutable'; import { useForm } from 'react-hook-form'; import { evaluate } from 'mathjs'; import equal from 'fast-deep-equal'; // store import { storeGet, storeSet, useStore } from '../../store'; // api import ApplicationEvaluationService from '../../service/application-evaluation-service'; import AmendmentsService from '../../service/amendments-service'; import AppointmentService from '../../service/appointment-service'; // tools import set404FromErrorResponse from '../../helpers/set404FromErrorResponse'; import { isCAP, isCodiceFiscale, isEmail, isEmailPEC, isIBAN, isMarcaDaBollo, isPIVA, isUrl, maxChecks, minChecks, nonEmptyTables } from '../../helpers/validators'; import getTokens from '../../helpers/getTokens'; import parseCommaDecimal from '../../helpers/parseCommaDecimal'; import renderWithDataVars from '../../helpers/renderWithDataVars'; import renderHtmlContent from '../../helpers/renderHtmlContent'; import formatDateString from '../../helpers/formatDateString'; // 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 { Toast } from 'primereact/toast'; import { Dialog } from 'primereact/dialog'; import HelpIcon from '../../icons/HelpIcon'; import BlockingOverlay from '../../components/BlockingOverlay'; import { classNames } from 'primereact/utils'; import { InputTextarea } from 'primereact/inputtextarea'; import { InputText } from 'primereact/inputtext'; import ListOfFiles from './components/ListOfFiles'; import RepeaterFields from './components/RepeaterFields'; import ApplicationInfo from './components/ApplicationInfo'; import ApplicationDownloadFiles from './components/ApplicationDownloadFiles'; import FormField from '../../components/FormField'; const APP_EVALUATION_FLOW_ID = process.env.REACT_APP_EVALUATION_FLOW_ID; const APP_HUB_ID = process.env.REACT_APP_HUB_ID; const DomandaEditPreInstructor = () => { const isAsyncRequest = useStore().main.isAsyncRequest(); const { id } = useParams(); const navigate = useNavigate(); const [data, setData] = useState({}); const [isVisibleCriterionData, setIsVisibleCriterionData] = useState(0); const [criterionDataTitle, setCriterionDataTitle] = useState(''); const [criterionDataContent, setCriterionDataContent] = useState(''); const [isAdmissible, setIsAdmissible] = useState(false); const [connectedSoccorsoId, setConnectedSoccorsoId] = useState(0); const toast = useRef(null); const [loading, setLoading] = useState(false); const [isVisibleCompleteDialog, setIsVisibleCompleteDialog] = useState(false); const [operationType, setOperationType] = useState(''); const [motivation, setMotivation] = useState(''); const [amountAccepted, setAmountAccepted] = useState(0); const [isVisibleAppointmentDialog, setIsVisibleAppointmentDialog] = useState(false); const [allFilesRated, setAllFilesRated] = useState(false); const [atLeastOneChecked, setAtLeastOneChecked] = useState(false); const [allChecksChecked, setAllChecksChecked] = useState(false); const [appointmentData, setAppointmentData] = useState({ title: '', text: '', duration: 0, amount: 0 }); const [formData, setFormData] = useState([]); const [formId, setFormId] = useState(0); const [formInitialData, setFormInitialData] = useState(null); const { control, handleSubmit, formState: { errors }, setValue, trigger, register, getValues, watch, reset } = useForm({ defaultValues: useMemo(() => { return formInitialData ? formInitialData : {} }, [formInitialData]), mode: 'onChange' }); const validationFns = { isPIVA, isCodiceFiscale, isCAP, isIBAN, isEmail, isEmailPEC, isUrl, isMarcaDaBollo, minChecks, maxChecks, nonEmptyTables } const values = getValues(); const formValues = watch(); const goToEvaluationsPage = () => { navigate('/domande'); } const updateFlagsForSoccorso = useCallback((data) => { let nonRatedFilesLength = 0; if (data.files) { const nonRatedFiles = data.files .map(el => el.valid) .filter(v => isNil(v)); nonRatedFilesLength = nonRatedFiles.length; } if (data.amendmentDetails) { const nonRatedFiles = data.amendmentDetails .map(el => el.valid) .filter(v => isNil(v)); nonRatedFilesLength = nonRatedFiles.length; } setAllFilesRated(nonRatedFilesLength === 0); if (data.evaluationVersion === 'V1') { if (data.checklist) { const checkedChecklistItems = data.checklist .map(el => el.valid) .filter(v => v); setAtLeastOneChecked(checkedChecklistItems.length > 0); setAllChecksChecked(checkedChecklistItems.length === data.checklist.length) } } else if (data.evaluationVersion === 'V2') { const minChecks = data.numberOfCheck; const formFieldsChecklist = formData .filter(o => head(o.settings.filter(s => s.name === 'isChecklistItem' && s.value))) .map(o => o.id); if (formFieldsChecklist.length >= minChecks) { const valuesTotal = formFieldsChecklist.map(v => formValues[v]); const valuesFirst = valuesTotal.toSpliced(minChecks); setAtLeastOneChecked(valuesFirst.filter(v => Boolean(v) === true).length === valuesFirst.length); setAllChecksChecked(valuesTotal.filter(v => Boolean(v) === true).length === valuesTotal.length); } } }, [formValues]); const doNewSoccorso = () => { if (connectedSoccorsoId !== 0) { navigate(`/domande/${id}/soccorso/${connectedSoccorsoId}`); } else { doSaveDraft(navigateToNewSoccorso) } } const navigateToNewSoccorso = () => { navigate(`/domande/${id}/aggiungi-soccorso/`); } const getVersion = (resp) => { if (resp.status === 'SUCCESS') { if (resp.data.evaluationVersion === 'V1') { storeSet.main.setAsyncRequest(); ApplicationEvaluationService.getEvaluationByApplId(getCallback, errGetCallback, [ ['applicationId', resp.data.applicationId] ]); } else if (resp.data.evaluationVersion === 'V2') { storeSet.main.setAsyncRequest(); ApplicationEvaluationService.getEvaluationV2ByApplId(getCallback, errGetCallback, [ ['applicationId', resp.data.applicationId] ]); } } storeSet.main.unsetAsyncRequest(); } const errGetVersion = (resp) => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: resp.message }); } set404FromErrorResponse(resp); storeSet.main.unsetAsyncRequest(); } const getCallback = (resp) => { if (resp.status === 'SUCCESS') { setData(getFormattedData(resp.data)); setMotivation(resp.data.motivation); updateFlagsForSoccorso(resp.data); if (resp.data.evaluationVersion === 'V2') { setFormData(resp.data.applicationEvaluationFormResponse.content); setFormId(resp.data.applicationEvaluationFormResponse.id); let formDataInitial = {}; if (resp.data.applicationEvaluationFormResponse.formFields) { const submitData = resp.data.applicationEvaluationFormResponse.formFields.map((o) => ({ fieldId: o.fieldId, fieldValue: o.fieldValue })); formDataInitial = submitData.reduce((acc, cur) => { if (cur.fieldValue) { acc[cur.fieldId] = cur.fieldValue; } return acc; }, formDataInitial); } reset(); setFormInitialData(formDataInitial); } } storeSet.main.unsetAsyncRequest(); } const errGetCallback = (resp) => { if (toast.current && resp.message) { toast.current.show({ severity: 'error', summary: '', detail: resp.message }); } set404FromErrorResponse(resp); storeSet.main.unsetAsyncRequest(); } const getFormattedData = (data) => { data.submissionDate = is(String, data.submissionDate) ? new Date(data.submissionDate) : (data.submissionDate ? data.submissionDate : ''); data.evaluationDate = is(String, data.evaluationDate) ? new Date(data.evaluationDate) : (data.evaluationDate ? data.evaluationDate : ''); return data; }; const renderHeader = () => { return ( ); }; const header = renderHeader(); const updateEvaluationValue = (value, path, maxValue = null) => { let finalValue = value; if (maxValue || maxValue === 0) { finalValue = value > maxValue ? maxValue : value; } const newData = wrap(data).set(path, finalValue).value(); setData(newData); updateFlagsForSoccorso(newData); } const getTransformedSubmitData = () => { const formValues = getValues(); const usedFieldsIds = pluck('id', formData); return Object.keys(formValues) .filter(v => usedFieldsIds.includes(v)) .reduce((acc, cur) => { const formField = head(formData.filter(o => o.id === cur)); let fieldVal = formValues[cur]; if (formValues[cur] && formValues[cur].toISOString) { fieldVal = formatDateString(formValues[cur]); } fieldVal = isEmpty(fieldVal) ? null : fieldVal; if (formField && formField.name === 'fileupload') { fieldVal = is(Array, fieldVal) ? fieldVal.map(o => o.id).join(',') : null; } acc.push({ 'fieldId': cur, 'fieldValue': fieldVal }); return acc; }, []); } const doSaveDraft = useCallback((afterUpdateCallback = null, cfgModifier = {}) => { if (data.evaluationVersion === 'V1') { const submitData = { criteria: klona(data.criteria), checklist: klona(data.checklist), files: klona(data.files), evaluationDocument: klona(data.evaluationDocument.map(o => ({ ...o, fileValue: o.fileValue[0] ? o.fileValue[0].id : '' }) )), amendmentDetails: klona(data.amendmentDetails), note: data.note, ...cfgModifier }; ApplicationEvaluationService.updateEvaluation( data.assignedApplicationId, submitData, (data) => updateCallback(data, afterUpdateCallback), errUpdateCallback ); } else if (data.evaluationVersion === 'V2') { const newFormValues = getTransformedSubmitData(); const submitData = { formFields: newFormValues, files: klona(data.files), evaluationDocument: klona(data.evaluationDocument.map(o => ({ ...o, fileValue: o.fileValue[0] ? o.fileValue[0].id : '' }) )), amendmentDetails: klona(data.amendmentDetails), note: data.note, ...cfgModifier } ApplicationEvaluationService.updateEvaluationV2( data.assignedApplicationId, formId, submitData, (data) => updateCallback(data, afterUpdateCallback), errUpdateCallback ); } }, [data]); /** * * @param data {object} * @param afterUpdateCallback {function} */ const updateCallback = (data, afterUpdateCallback = null) => { if (data.status === 'SUCCESS') { setData(getFormattedData(data.data)); if (toast.current) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } if (afterUpdateCallback) { afterUpdateCallback(); } } storeSet.main.unsetAsyncRequest(); } const errUpdateCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const doApprove = () => { if (data.evaluationVersion === 'V1') { const submitData = { applicationStatus: 'APPROVED', criteria: klona(data.criteria), checklist: klona(data.checklist), files: klona(data.files), note: data.note, motivation, amountAccepted } setLoading(true); setIsVisibleCompleteDialog(false); ApplicationEvaluationService.updateEvaluation( data.assignedApplicationId, submitData, approveRejectCallback, errApproveRejectCallback ); } else if (data.evaluationVersion === 'V2') { const newFormValues = getTransformedSubmitData(); const submitData = { formFields: newFormValues, files: klona(data.files), evaluationDocument: klona(data.evaluationDocument.map(o => ({ ...o, fileValue: o.fileValue[0] ? o.fileValue[0].id : '' }) )), amendmentDetails: klona(data.amendmentDetails), note: data.note, motivation, amountAccepted } setLoading(true); setIsVisibleCompleteDialog(false); ApplicationEvaluationService.updateEvaluationV2( data.assignedApplicationId, formId, submitData, approveRejectCallback, errApproveRejectCallback ); } } const doReject = () => { if (data.evaluationVersion === 'V1') { const submitData = { applicationStatus: 'REJECTED', criteria: klona(data.criteria), checklist: klona(data.checklist), files: klona(data.files), note: data.note, motivation } setLoading(true); setIsVisibleCompleteDialog(false); ApplicationEvaluationService.updateEvaluation( data.assignedApplicationId, submitData, approveRejectCallback, errApproveRejectCallback ); } else if (data.evaluationVersion === 'V2') { const newFormValues = getTransformedSubmitData(); const submitData = { formFields: newFormValues, files: klona(data.files), evaluationDocument: klona(data.evaluationDocument.map(o => ({ ...o, fileValue: o.fileValue[0] ? o.fileValue[0].id : '' }) )), amendmentDetails: klona(data.amendmentDetails), note: data.note, motivation } setLoading(true); setIsVisibleCompleteDialog(false); ApplicationEvaluationService.updateEvaluationV2( data.assignedApplicationId, formId, submitData, approveRejectCallback, errApproveRejectCallback ); } } const approveRejectCallback = (data) => { if (data.status === 'SUCCESS') { setData(getFormattedData(data.data)); if (toast.current) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } } setLoading(false); } const errApproveRejectCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); setLoading(false); } const displayCriterionData = (id) => { const criterion = head(data.criteria.filter(o => o.id === id)); setCriterionDataTitle(criterion.label); const content =

{__('I campi correlati')}

{criterion.criteriaMappedFields ? criterion.criteriaMappedFields.map(o => criteriaDataItem(o)) : null}
; setCriterionDataContent(content); setIsVisibleCriterionData(id); } const criteriaDataItem = (item) => { let content = ''; switch (item.fieldName) { case 'fileupload' : content = ; break; case 'table' : const th = Object.keys(item.fieldValue[0]); content = {th.map(v => )} {item.fieldValue ? item.fieldValue.map((o, i) => {Object.values(o).map(v => )} ) : null}
{v}
{v}
; break; default : content = item.fieldValue; break; } return
{item.fieldLabel} {content}
} const hideCriterionData = () => { setIsVisibleCriterionData(0); setCriterionDataTitle(''); setCriterionDataContent(''); } const getAmendmentsCallback = (data) => { if (data.status === 'SUCCESS') { if (data.data.length) { setConnectedSoccorsoId(data.data[0].id); } } } const errGetAmendmentsCallback = () => { if (toast.current && data.message) { toast.current.show({ severity: 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); } const shouldDisableField = useCallback((fieldName) => { return !['EVALUATION', 'ADMISSIBLE'].includes(data.applicationStatus) || (['ADMISSIBLE'].includes(data.applicationStatus) && fieldName !== 'criteria') }, [data.applicationStatus]); const headerCompleteDialog = () => { return 'approve' === operationType ? {__('Confermare l\'approvazione', 'gepafin')} : {__('Confermare il rifiuto', 'gepafin')}; } const hideCompleteDialog = () => { setIsVisibleCompleteDialog(false); setOperationType(''); setMotivation(''); } const footerCompleteDialog = useCallback(() => { return
}, [amountAccepted]) const initiateApproving = () => { setOperationType('approve'); setIsVisibleCompleteDialog(true); } const initiateRejecting = () => { setOperationType('reject'); setIsVisibleCompleteDialog(true); } const doCheckNDG = () => { doSaveDraft(doGetNDGRequest); } const doGetNDGRequest = () => { storeSet.main.setAsyncRequest(); AppointmentService.getNdg(id, getNdgCallback, errGetNdgCallback); } const getNdgCallback = (data) => { if (data.status === 'SUCCESS') { if (toast.current && data.message) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } } storeSet.main.unsetAsyncRequest(); } const errGetNdgCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: data.status === 'SUCCESS' ? 'info' : 'error', summary: '', detail: data.message }); } set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const doCreateAppointment = () => { setAppointmentData({ title: '', text: '', duration: 0, amount: 0 }); setIsVisibleAppointmentDialog(true); } const setFieldValue = (name, value) => { const newData = wrap(appointmentData).set(name, value).value(); setAppointmentData(newData); } const headerAppointmentDialog = () => { return {__('Crea appuntamento', 'gepafin')}; } const hideAppointmentDialog = () => { setIsVisibleAppointmentDialog(false); setAppointmentData({}); } const footerAppointmentDialog = () => { return
} const doCreateAppointmentRequest = () => { if ( !isEmpty(appointmentData.title) && !isEmpty(appointmentData.text) && !isEmpty(appointmentData.amount) && !isEmpty(appointmentData.duration) && appointmentData.duration !== 0 && appointmentData.amount !== 0 ) { storeSet.main.setAsyncRequest(); const submitData = { 'importoBreveTermine': appointmentData.amount, 'durataMesiFinanziamento': appointmentData.duration, 'nota': { 'titolo': appointmentData.title, 'testo': appointmentData.text } } AppointmentService.createAppointment(id, submitData, getAppointmentCallback, errGetAppointemntCallback); } } const getAppointmentCallback = (data) => { if (data.status === 'SUCCESS') { if (toast.current && data.message) { toast.current.show({ severity: 'success', summary: '', detail: data.message }); } if (data.data.appointmentId) { setData({ ...data, appointmentId: data.data.appointmentId }); } } setIsVisibleAppointmentDialog(false); storeSet.main.unsetAsyncRequest(); } const errGetAppointemntCallback = (data) => { if (toast.current && data.message) { toast.current.show({ severity: data.status === 'SUCCESS' ? 'info' : 'error', summary: '', detail: data.message }); } setIsVisibleAppointmentDialog(false); set404FromErrorResponse(data); storeSet.main.unsetAsyncRequest(); } const doMakeAdmisible = () => { doSaveDraft(null, { applicationStatus: 'ADMISSIBLE' }); } const doPassTechnicalEvaluation = useCallback(() => { if (isAdmissible) { doSaveDraft(null, { applicationStatus: 'TECHNICAL_EVALUATION' }); } }, [isAdmissible]); const evaluationBlockedForUser = (data = {}) => { const userData = storeGet.main.userData() return isAsyncRequest || userData.id !== data.assignedUserId; } const shouldDisableNewSoccorso = () => { if (data.evaluationVersion === 'V1') { return !allFilesRated || !atLeastOneChecked; } else if (data.evaluationVersion === 'V2') { return !allFilesRated || !atLeastOneChecked; } else { return true; } } const actionBtns = () => { return
{['EVALUATION', 'SOCCORSO', 'CLOSE'].includes(data.applicationStatus) ?
} useEffect(() => { let updatedFormValues = klona(formValues); let context = {}; // eslint-disable-next-line array-callback-return formData.map((o) => { const variable = head(o.settings.filter(o => o.name === 'variable')); const formula = head(o.settings.filter(o => o.name === 'formula')); if (formula && !isEmpty(formula.value)) { context = getTokens(formula.value) .filter(v => !['false', 'null', 'true'].includes(v)) .reduce((acc, cur) => { acc[cur] = isNil(context[cur]) ? 0 : parseCommaDecimal(context[cur]); return acc; }, context); const mathFormula = renderWithDataVars(formula.value, context); try { updatedFormValues[o.id] = evaluate(mathFormula); } catch (e) { console.log('Error in math formula: "', mathFormula, '"', e.message); updatedFormValues[o.id] = 0; } } if (variable && !isEmpty(variable.value)) { context[variable.value[0]] = 'criteria_table' === o.name ? pathOr(0, [o.id, 'total'], updatedFormValues) : pathOr(0, [o.id], updatedFormValues); } }); if (!isEmpty(updatedFormValues) && !equal(updatedFormValues, formValues)) { reset(updatedFormValues); } updateFlagsForSoccorso(data); }, [formValues]); useEffect(() => { if (formInitialData) { //reset(); Object.keys(formInitialData).map(k => setValue(k, formInitialData[k])); trigger(); } }, [formInitialData]); useEffect(() => { const maxScore = pathOr(0, ['minScore'], data); const criteria = pathOr([], ['criteria'], data); const scoreSum = sum(criteria.map(o => o.score)); setIsAdmissible(scoreSum !== 0 && scoreSum >= maxScore); }, [data]); useEffect(() => { const parsed = parseInt(id) const entityId = !isNaN(parsed) ? parsed : 0; storeSet.main.setAsyncRequest(); ApplicationEvaluationService.getEvaluationVersionByApplId(entityId, getVersion, errGetVersion); AmendmentsService.getSoccorsoByApplId(entityId, getAmendmentsCallback, errGetAmendmentsCallback, [ ['statuses', ['AWAITING', 'RESPONSE_RECEIVED']] ]); }, [id]); return (

{__('Valuta domanda', 'gepafin')}

{!isAsyncRequest && !isEmpty(data) ?
{__('Azioni rapide', 'gepafin')}
{actionBtns()}

{__('Documenti aggiuntivi', 'gepafin')}

updateEvaluationValue( data, ['evaluationDocument'] )} updateCallbackFn={(files) => doSaveDraft( null, { evaluationDocument: klona(files.map(o => ({ ...o, fileValue: o.fileValue[0] ? o.fileValue[0].id : '' }) )) })} shouldDisable={['APPROVED', 'REJECTED'].includes(data.applicationStatus) || evaluationBlockedForUser(data)} sourceId={data.id} sourceName="evaluation"/>
{data.evaluationVersion === 'V2' ?

{__('Documenti allegati', 'gepafin')}

{!isEmpty(data.files) ? shouldDisableField(name) || evaluationBlockedForUser(data)} name="files" ndg={data.ndg} applicationId={id}/> :

{__('Nessun documento allegato', 'gepafin')}

}
: null} {data.evaluationVersion === 'V2' ?
{ })}> {formData.map(o => { const label = head(o.settings.filter(o => o.name === 'label')); const text = head(o.settings.filter(o => o.name === 'text')); const placeholder = head(o.settings.filter(o => o.name === 'placeholder')); const options = head(o.settings.filter(o => o.name === 'options')); let tableColumns = head(o.settings.filter(o => o.name === 'table_columns')); if (!tableColumns) { tableColumns = head(o.settings.filter(o => o.name === 'criteria_table_columns')); } const step = head(o.settings.filter(o => o.name === 'step')); const mime = head(o.settings.filter(o => o.name === 'mime')); const formula = head(o.settings.filter(o => o.name === 'formula')); let mimeValue = ''; if (mime) { mimeValue = mime.value.map(o => o.code ? o.code : o.ext); } const validations = Object.keys(o.validators).reduce((acc, cur) => { if (o.validators[cur]) { if (['min', 'max', 'minLength', 'maxLength', 'maxSize'].includes(cur)) { acc[cur] = parseInt(o.validators[cur]); } else if ('pattern' === cur) { acc[cur] = new RegExp(o.validators[cur]); } else if ('isRequired' === cur) { //acc[cur] = o.validators[cur]; acc['required'] = true; } else if ('custom' === cur && validationFns[o.validators[cur]]) { if (!acc.validate) { acc.validate = {}; } acc.validate[o.validators[cur]] = validationFns[o.validators[cur]]; } } return acc; }, {}); /*if (o.name === 'table') { console.log('value:', values[o.id] ? values[o.id] : '') }*/ return ['paragraph'].includes(o.name) && text ?
{renderHtmlContent(text.value)}
: })} : null} {data.evaluationVersion === 'V1' ?

{__('Checklist Valutazione', 'gepafin')}

{__('Lista', 'gepafin')}

{data.checklist.map((o, i) =>
updateEvaluationValue( e.checked, ['checklist', i, 'valid'] )} checked={o.valid}>
)}

{__('Note', 'gepafin')}

updateEvaluationValue( e.htmlValue, ['note'] )} style={{ height: 80 * 3, width: '100%' }} />

{__('Documenti allegati', 'gepafin')}

{!isEmpty(data.files) ? shouldDisableField(name) || evaluationBlockedForUser(data)} name="files" ndg={data.ndg} applicationId={id}/> :

{__('Nessun documento allegato', 'gepafin')}

}
: null} {!isEmpty(data.amendmentDetails) ?

{__('Documenti di soccorso', 'gepafin')}

shouldDisableField(name) || evaluationBlockedForUser(data)} name="amendmentDetails" ndg={data.ndg} applicationId={id}/>
: null} {data.evaluationVersion === 'V1' ?

{__('Punteggi di valutazione', 'gepafin')}

{data.criteria ? {data.criteria.map((o, i) => )}
{__('Parametro', 'gepafin')} {__('Punteggio', 'gepafin')} {__('Stato', 'gepafin')}
{o.label}
updateEvaluationValue( e.value, ['criteria', i, 'score'], o.criteria )}/> / {o.maxScore}
{!isEmpty(o.criteriaMappedFields) ?
{__('Punteggio:', 'gepafin')} {sum(data.criteria.map(o => o.score))} {isAdmissible ? : null} {!isAdmissible ? : null}
{sprintf(__('Punteggio minimo per l\'ammissione: %d'), data.minScore)}
: null}
: null}
{__('Azioni rapide', 'gepafin')}
{actionBtns()}
{criterionDataContent} {operationType === 'approve' ?
setAmountAccepted(e.value)}/>
: null}
setMotivation(e.htmlValue)} style={{ height: 80 * 3, width: '100%' }} />
setFieldValue('amount', e.value)}/>
setFieldValue('duration', e.value)}/>
setFieldValue('title', e.target.value)}/>
setFieldValue('text', e.target.value)} rows={3} cols={30}/>
: <> }
) } export default DomandaEditPreInstructor;