Merge pull request #47 from Kitzanos/file_upload

File upload
This commit is contained in:
Vitalii Kiiko
2025-05-08 13:37:52 +02:00
committed by GitHub
2 changed files with 74 additions and 19 deletions

View File

@@ -13,6 +13,7 @@ import getPropeMimeLabels from '../../../../helpers/getPropeMimeLabels';
import { FileUpload } from 'primereact/fileupload';
import { Tag } from 'primereact/tag';
import { Button } from 'primereact/button';
import { Messages } from 'primereact/messages';
import { defaultMaxFileSize, mimeTypes } from '../../../../configData';
import getFormatedFileSizeText from '../../../../helpers/getFormatedFileSizeText';
@@ -47,24 +48,48 @@ const Fileupload = ({
const [acceptFormats, setAcceptFormats] = useState('');
const [formatsForInput, setFormatsForInput] = useState('');
const inputRef = useRef();
const messagesRef = useRef(null);
const customBase64Uploader = (event) => {
const formData = new FormData()
const filesToUpload = [];
const uploadedFiles = inputRef.current ? inputRef.current.getUploadedFiles() : [];
const currentFiles = stateFieldData;
for (const file of event.files) {
formData.append('file', file)
const isDuplicate = [...uploadedFiles, ...currentFiles].some(
(uploadedFile)=>uploadedFile.name === file.name
);
if(isDuplicate){
messagesRef.current.show({
severity: 'error',
summary: __('Attenzione', 'gepafin'),
detail: `Il file con nome "${file.name}" è già stato caricato.`,
life: 10000
});
} else {
formData.append('file', file)
filesToUpload.push(file);
}
}
if(filesToUpload.length > 0 ){
FileUploadService.uploadFile(sourceId, formData, callback, errorCallback, [
['documentType', doctype.toUpperCase()],
['sourceType', source.toUpperCase()]
]);
}
FileUploadService.uploadFile(sourceId, formData, callback, errorCallback, [
['documentType', doctype.toUpperCase()],
['sourceType', source.toUpperCase()]
]);
};
const callback = (data) => {
const callback = (data, uploadedFiles) => {
if (data.status === 'SUCCESS') {
setStateFieldData(data.data);
const uploadedFiles = inputRef.current.getUploadedFiles();
setDataFn(fieldName, [...uploadedFiles, ...data.data], { shouldValidate: true });
setStateFieldData(prevState => [...prevState, ...data.data]);
const currentUploadedFiles = inputRef.current.getUploadedFiles() || [];
inputRef.current.setFiles([]);
setDataFn(fieldName, [...currentUploadedFiles, ...data.data], { shouldValidate: true });
saveFormCallback();
}
}
@@ -204,6 +229,7 @@ const Fileupload = ({
return (
sourceId || sourceId === 0
? <>
<Messages ref={messagesRef} />
<label htmlFor={fieldName} className={classNames({ 'p-error': errors[fieldName] })}>
{label}{config.required || config.isRequired ?
<span className="appForm__field--required">*</span> : null}

View File

@@ -13,6 +13,8 @@ import { FileUpload } from 'primereact/fileupload';
import { Tag } from 'primereact/tag';
import { Button } from 'primereact/button';
import { head, isEmpty } from 'ramda';
import { Messages } from 'primereact/messages';
import { defaultMaxFileSize, mimeTypes } from '../../../../configData';
import getFormatedFileSizeText from '../../../../helpers/getFormatedFileSizeText';
@@ -42,24 +44,50 @@ const FileuploadAsync = ({
const [acceptFormats, setAcceptFormats] = useState('');
const [formatsForInput, setFormatsForInput] = useState('');
const inputRef = useRef();
const messagesRef = useRef(null);
const customBase64Uploader = (event) => {
const formData = new FormData()
const filesToUpload = [];
const uploadedFiles = inputRef.current ? inputRef.current.getUploadedFiles() : [];
const currentFiles = stateFieldData;
for (const file of event.files) {
formData.append('file', file)
const isDuplicate = [...uploadedFiles, ...currentFiles].some(
(uploadedFile)=>uploadedFile.name === file.name
);
if(isDuplicate){
messagesRef.current.show({
severity: 'error',
summary: __('Attenzione', 'gepafin'),
detail: `Il file con nome "${file.name}" è già stato caricato.`,
life: 10000
});
} else {
formData.append('file', file)
filesToUpload.push(file);
}
}
if(filesToUpload.length > 0){
FileUploadService.uploadFile(sourceId, formData, callback, errorCallback, [
['documentType', doctype.toUpperCase()],
['sourceType', source.toUpperCase()]
]);
}
FileUploadService.uploadFile(sourceId, formData, callback, errorCallback, [
['documentType', doctype.toUpperCase()],
['sourceType', source.toUpperCase()]
]);
};
const callback = (data) => {
const callback = (data, uploadedFiles) => {
if (data.status === 'SUCCESS') {
setStateFieldData(data.data);
const uploadedFiles = inputRef.current.getUploadedFiles();
setDataFn(fieldName, [...uploadedFiles, ...data.data], { shouldValidate: true });
setStateFieldData(prevState => [...prevState, ...data.data]);
const currentUploadedFiles = inputRef.current.getUploadedFiles() || [];
inputRef.current.setUploadedFiles([...currentUploadedFiles, ...data.data]);
inputRef.current.setFiles([]);
setDataFn(fieldName, [...currentUploadedFiles, ...data.data], { shouldValidate: true });
}
}
@@ -186,6 +214,7 @@ const FileuploadAsync = ({
return (
sourceId && sourceId !== 0
? <>
<Messages ref={messagesRef} />
<label htmlFor={fieldName} className={classNames({ 'p-error': errors[fieldName] })}>
{label}{config.required ? '*' : null}
{acceptFormats ? ' (' + getPropeMimeLabels(accept) + ')' : null}