- company files for evaluation functionality;

This commit is contained in:
Vitalii Kiiko
2025-11-19 13:31:27 +01:00
parent 68cc6716e9
commit 9121a4fd9f
7 changed files with 365 additions and 187 deletions

View File

@@ -1,7 +1,7 @@
import React, { useCallback, useEffect, useRef, useState } from 'react';
import { classNames } from 'primereact/utils';
import { __ } from '@wordpress/i18n';
import { isEmpty, pathOr, pluck } from 'ramda';
import { isEmpty, isNil, pathOr, pluck } from 'ramda';
// service
import FileUploadService from '../../../../service/file-upload-service';
@@ -27,7 +27,8 @@ const FileSelect = ({
sourceId = 0,
source = 'DOCUMENT',
documentCategories = [],
saveFormCallback
saveFormCallback,
attachFilesCallback,
}) => {
//const [stateFieldData, setStateFieldData] = useState([]);
const stateFieldData = useRef([]);
@@ -52,6 +53,16 @@ const FileSelect = ({
setAddNewMode(false);
}, [selectedUnconfirmed]);
const attachSelectedFilesCallback = useCallback(() => {
const existingIds = pluck('id', stateFieldData.current);
const selectedToBeAdded = selectedUnconfirmed.filter(o => !existingIds.includes(o.id));
setSelectedUnconfirmed([]);
// eslint-disable-next-line array-callback-return
selectedToBeAdded.map(o => attachFilesCallback(o));
setAddNewMode(false);
}, [selectedUnconfirmed]);
const doGoBackToListOfFiles = () => {
setSelectedUnconfirmed([]);
setAddNewMode(false);
@@ -100,7 +111,8 @@ const FileSelect = ({
defaultFocus: 'reject',
acceptClassName: 'p-button-danger',
accept: () => removeAttached(id),
reject: () => {}
reject: () => {
}
});
};
@@ -116,19 +128,19 @@ const FileSelect = ({
? o
: documentCategories.includes(o.category.id))
.reduce((acc, cur) => {
const catName = pathOr('', ['category', 'categoryName'], cur);
const catLabel = pathOr('', ['category', 'description'], cur);
const catName = pathOr('', ['category', 'categoryName'], cur);
const catLabel = pathOr('', ['category', 'description'], cur);
if (!acc[catName]) {
acc[catName] = {
code: catName,
label: catLabel,
items: []
};
}
acc[catName].items.push(cur)
return acc;
}, {});
if (!acc[catName]) {
acc[catName] = {
code: catName,
label: catLabel,
items: []
};
}
acc[catName].items.push(cur)
return acc;
}, {});
setOptionsTransformed(Object.values(optionsDefault));
}
@@ -137,13 +149,14 @@ const FileSelect = ({
useEffect(() => {
stateFieldData.current = defaultValue;
}, [defaultValue]);
//console.log([...stateFieldData.current])
return (
<>
<label htmlFor={fieldName} className={classNames({ 'p-error': errors[fieldName] })}>
{label}{config.required || config.isRequired ?
<span className="appForm__field--required">*</span> : null}
</label>
{!isNil(label)
? <label htmlFor={fieldName} className={classNames({ 'p-error': errors[fieldName] })}>
{label}{config.required || config.isRequired ?
<span className="appForm__field--required">*</span> : null}
</label> : null}
<div className="fileselectInner">
{addNewMode
? <div className="fileselectInner__selectionBox">
@@ -160,7 +173,7 @@ const FileSelect = ({
? <Button
severity="success"
disabled={loading}
onClick={attachSelectedFiles}
onClick={!isNil(attachFilesCallback) ? attachSelectedFilesCallback : attachSelectedFiles}
label={__('Conferma i file scelti', 'gepafin')}
icon="pi pi-arrow-right" size="small" iconPos="right"/>
: <Button
@@ -172,19 +185,21 @@ const FileSelect = ({
</div> : null}
{!isEmpty(optionsTransformed) && !addNewMode
? <div className="fileselectInner__selectedFiles">
<p>{__('I file selezionati')}</p>
<p><strong>{__('I file selezionati:')}</strong></p>
<ul>
{[...stateFieldData.current].map(o => <li key={o.id}>
{o.name}
<div className="appPageSection__iconActions">
<Button icon="pi pi-times" rounded
type="button"
size="small"
onClick={(e) => confirmDelete(e, o.id)}
outlined severity="danger"
aria-label={__('Cancella', 'gepafin')}/>
</div>
</li>)}
{!isEmpty(stateFieldData.current)
? [...stateFieldData.current].map(o => <li key={o.id}>
{o.name}
{isNil(attachFilesCallback)
? <div className="appPageSection__iconActions">
<Button icon="pi pi-times" rounded
type="button"
size="small"
onClick={(e) => confirmDelete(e, o.id)}
outlined severity="danger"
aria-label={__('Cancella', 'gepafin')}/>
</div> : null}
</li>) : <li>{__('Nessun file selezionato', 'gepafin')}</li>}
</ul>
<Button
severity="success"
@@ -205,7 +220,7 @@ const FileSelect = ({
</div>
: null}
{infoText ? <small>{infoText}</small> : null}
<ConfirmPopup />
<ConfirmPopup/>
</>)
}