diff --git a/package.json b/package.json
index a463d6b..e9c3a7e 100644
--- a/package.json
+++ b/package.json
@@ -1,90 +1,91 @@
{
- "name": "bflows-gepafin",
- "version": "1.0.0",
- "private": true,
- "dependencies": {
- "@babel/plugin-proposal-private-property-in-object": "7.21.11",
- "@babel/preset-react": "7.26.3",
- "@date-fns/tz": "1.2.0",
- "@emailjs/browser": "4.4.1",
- "@number-flow/react": "0.5.9",
- "@sentry/browser": "9.11.0",
- "@stomp/stompjs": "7.1.1",
- "@tanstack/react-table": "8.21.2",
- "@wordpress/i18n": "5.21.0",
- "@wordpress/react-i18n": "4.21.0",
- "codice-fiscale-js": "2.3.22",
- "copy-to-clipboard": "3.3.3",
- "deep-object-diff": "1.1.9",
- "dompurify": "3.2.5",
- "expression-language": "1.2.0",
- "fast-deep-equal": "3.1.3",
- "hotkeys-js": "3.13.9",
- "html-react-parser": "5.2.3",
- "jwt-decode": "4.0.0",
- "klona": "2.0.6",
- "leader-line-new": "1.1.9",
- "luxon": "3.6.1",
- "mathjs": "14.4.0",
- "mustache": "4.2.0",
- "object-path-immutable": "4.1.2",
- "primeicons": "7.0.0",
- "primereact": "10.9.4",
- "quill": "2.0.3",
- "ramda": "0.30.1",
- "react": "19.1.0",
- "react-dnd": "16.0.1",
- "react-dnd-html5-backend": "16.0.1",
- "react-dom": "19.1.0",
- "react-hook-form": "7.55.0",
- "react-router-dom": "7.5.0",
- "react-scripts": "5.0.1",
- "recharts": "2.15.2",
- "sockjs-client": "1.6.1",
- "validate.js": "0.13.1",
- "zustand": "5.0.3",
- "zustand-x": "6.1.0"
- },
- "devDependencies": {
- "@babel/cli": "7.27.0",
- "@babel/core": "7.26.10",
- "@babel/plugin-syntax-jsx": "7.25.9",
- "@wordpress/babel-plugin-makepot": "6.21.0",
- "babel-plugin-macros": "3.1.0",
- "node-wp-i18n": "1.2.7",
- "sass": "1.86.3",
- "sass-loader": "16.0.5"
- },
- "scripts": {
- "start": "GENERATE_SOURCEMAP=false react-scripts start",
- "start:dev": "cp environments/dev/* public/loaded-files && rm public/loaded-files/dev.env && cp environments/dev/dev.env .env && PORT=8000 react-scripts start --mode development",
- "start:prod": "cp environments/prod/* public/loaded-files && rm public/loaded-files/prod.env && cp environments/prod/prod.env .env && react-scripts start --mode production",
- "build": "react-scripts build",
- "build:dev": "cp environments/dev/* public/loaded-files && rm public/loaded-files/dev.env && cp environments/dev/dev.env .env && react-scripts build --mode development",
- "build:prod": "cp environments/prod/* public/loaded-files && rm public/loaded-files/prod.env && cp environments/prod/prod.env .env && react-scripts build --mode production",
- "test": "react-scripts test",
- "eject": "react-scripts eject",
- "make-pot": "wpi18n makepot --domain-path=languages --domain=gepafin"
- },
- "eslintConfig": {
- "extends": [
- "react-app",
- "react-app/jest"
- ],
- "rules": {
- "react-hooks/exhaustive-deps": "off"
+ "name": "bflows-gepafin",
+ "version": "1.0.0",
+ "private": true,
+ "dependencies": {
+ "@babel/plugin-proposal-private-property-in-object": "7.21.11",
+ "@babel/preset-react": "7.26.3",
+ "@date-fns/tz": "1.2.0",
+ "@emailjs/browser": "4.4.1",
+ "@number-flow/react": "0.5.9",
+ "@sentry/browser": "9.11.0",
+ "@stomp/stompjs": "7.1.1",
+ "@tanstack/react-table": "8.21.2",
+ "@wordpress/i18n": "5.21.0",
+ "@wordpress/react-i18n": "4.21.0",
+ "codice-fiscale-js": "2.3.22",
+ "copy-to-clipboard": "3.3.3",
+ "deep-object-diff": "1.1.9",
+ "dompurify": "3.2.5",
+ "expression-language": "1.2.0",
+ "fast-deep-equal": "3.1.3",
+ "hotkeys-js": "3.13.9",
+ "html-react-parser": "5.2.3",
+ "jwt-decode": "4.0.0",
+ "klona": "2.0.6",
+ "leader-line-new": "1.1.9",
+ "luxon": "3.6.1",
+ "mathjs": "14.4.0",
+ "mustache": "4.2.0",
+ "object-path-immutable": "4.1.2",
+ "primeicons": "7.0.0",
+ "primereact": "10.9.4",
+ "quill": "2.0.3",
+ "ramda": "0.30.1",
+ "react": "19.1.0",
+ "react-dnd": "16.0.1",
+ "react-dnd-html5-backend": "16.0.1",
+ "react-dom": "19.1.0",
+ "react-hook-form": "7.55.0",
+ "react-router-dom": "7.5.0",
+ "react-scripts": "5.0.1",
+ "recharts": "2.15.2",
+ "sockjs-client": "1.6.1",
+ "validate.js": "0.13.1",
+ "zustand": "5.0.3",
+ "zustand-x": "6.1.0"
+ },
+ "devDependencies": {
+ "@babel/cli": "7.27.0",
+ "@babel/core": "7.26.10",
+ "@babel/plugin-syntax-jsx": "7.25.9",
+ "@wordpress/babel-plugin-makepot": "6.21.0",
+ "babel-plugin-macros": "3.1.0",
+ "node-wp-i18n": "1.2.7",
+ "sass": "1.86.3",
+ "sass-loader": "16.0.5"
+ },
+ "scripts": {
+ "start": "GENERATE_SOURCEMAP=false react-scripts start",
+ "start2": "react-scripts start",
+ "start:dev": "cp environments/dev/* public/loaded-files && rm public/loaded-files/dev.env && cp environments/dev/dev.env .env && PORT=8000 react-scripts start --mode development",
+ "start:prod": "cp environments/prod/* public/loaded-files && rm public/loaded-files/prod.env && cp environments/prod/prod.env .env && react-scripts start --mode production",
+ "build": "react-scripts build",
+ "build:dev": "cp environments/dev/* public/loaded-files && rm public/loaded-files/dev.env && cp environments/dev/dev.env .env && react-scripts build --mode development",
+ "build:prod": "cp environments/prod/* public/loaded-files && rm public/loaded-files/prod.env && cp environments/prod/prod.env .env && react-scripts build --mode production",
+ "test": "react-scripts test",
+ "eject": "react-scripts eject",
+ "make-pot": "wpi18n makepot --domain-path=languages --domain=gepafin"
+ },
+ "eslintConfig": {
+ "extends": [
+ "react-app",
+ "react-app/jest"
+ ],
+ "rules": {
+ "react-hooks/exhaustive-deps": "off"
+ }
+ },
+ "browserslist": {
+ "production": [
+ ">0.2%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
}
- },
- "browserslist": {
- "production": [
- ">0.2%",
- "not dead",
- "not op_mini all"
- ],
- "development": [
- "last 1 chrome version",
- "last 1 firefox version",
- "last 1 safari version"
- ]
- }
-}
+}
\ No newline at end of file
diff --git a/src/components/FormField/components/FileuploadAsync/index.js b/src/components/FormField/components/FileuploadAsync/index.js
index b422c78..a1404e4 100644
--- a/src/components/FormField/components/FileuploadAsync/index.js
+++ b/src/components/FormField/components/FileuploadAsync/index.js
@@ -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);
+ }
+
}
- FileUploadService.uploadFile(sourceId, formData, callback, errorCallback, [
- ['documentType', doctype.toUpperCase()],
- ['sourceType', source.toUpperCase()]
- ]);
+ if(filesToUpload.length > 0){
+ 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 });
}
}
@@ -160,7 +188,7 @@ const FileuploadAsync = ({
useEffect(() => {
if (inputRef.current) {
- inputRef.current.setUploadedFiles(defaultValue);
+ inputRef.current.setUploadedFiles(defaultValue);
}
setStateFieldData(defaultValue);
}, [defaultValue]);
@@ -186,6 +214,7 @@ const FileuploadAsync = ({
return (
sourceId && sourceId !== 0
? <>
+