restriction to upload more files with same name in FileUploadAsync
This commit is contained in:
177
package.json
177
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"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
? <>
|
||||
<Messages ref={messagesRef} />
|
||||
<label htmlFor={fieldName} className={classNames({ 'p-error': errors[fieldName] })}>
|
||||
{label}{config.required ? '*' : null}
|
||||
{acceptFormats ? ' (' + getPropeMimeLabels(accept) + ')' : null}
|
||||
|
||||
Reference in New Issue
Block a user