diff --git a/.distignore b/.distignore
new file mode 100644
index 0000000..e07a780
--- /dev/null
+++ b/.distignore
@@ -0,0 +1,5 @@
+.git
+node_modules
+build
+environments
+public
\ No newline at end of file
diff --git a/package.json b/package.json
index c998aa0..eb4ec21 100644
--- a/package.json
+++ b/package.json
@@ -14,9 +14,11 @@
"@wordpress/react-i18n": "4.8.0",
"@xyflow/react": "12.3.1",
"codice-fiscale-js": "2.3.22",
+ "copy-to-clipboard": "^3.3.3",
"deep-object-diff": "^1.1.9",
"dompurify": "3.1.7",
"fast-deep-equal": "3.1.3",
+ "hotkeys-js": "^3.13.7",
"html-react-parser": "5.1.16",
"jwt-decode": "4.0.0",
"klona": "2.0.6",
@@ -43,6 +45,7 @@
"@babel/plugin-syntax-jsx": "7.24.7",
"@wordpress/babel-plugin-makepot": "6.8.0",
"babel-plugin-macros": "3.1.0",
+ "node-wp-i18n": "^1.2.7",
"sass": "1.79.3",
"sass-loader": "16.0.2"
},
@@ -54,7 +57,8 @@
"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"
+ "eject": "react-scripts eject",
+ "make-pot": "wpi18n makepot --domain-path=languages --domain=gepafin"
},
"eslintConfig": {
"extends": [
diff --git a/src/assets/scss/components/appPage.scss b/src/assets/scss/components/appPage.scss
index 1d913b1..8f40ad9 100644
--- a/src/assets/scss/components/appPage.scss
+++ b/src/assets/scss/components/appPage.scss
@@ -167,6 +167,7 @@
display: flex;
gap: 1rem;
align-items: center;
+ justify-content: space-between;
padding: 5px 0;
&.rowContent {
@@ -178,7 +179,7 @@
p {
margin: 0;
- flex: 1 1 100%;
+ /*flex: 1 1 100%;*/
}
ul, ol {
diff --git a/src/assets/scss/components/layout.scss b/src/assets/scss/components/layout.scss
index e226e1a..e350503 100644
--- a/src/assets/scss/components/layout.scss
+++ b/src/assets/scss/components/layout.scss
@@ -153,6 +153,16 @@ button[disabled] {
filter: grayscale(1);
}
+.iconBtn {
+ background: transparent;
+ border: none;
+
+ &:hover {
+ cursor: pointer;
+ color: var(--primary-text);
+ }
+}
+
@media (max-width: 800px) {
.inner {
flex-direction: column;
diff --git a/src/pages/BandoForms/index.js b/src/pages/BandoForms/index.js
index cee1051..db0fdff 100644
--- a/src/pages/BandoForms/index.js
+++ b/src/pages/BandoForms/index.js
@@ -3,31 +3,36 @@ import { __ } from '@wordpress/i18n';
import { useParams, useNavigate } from 'react-router-dom';
import { isEmpty } from 'ramda';
import { classNames } from 'primereact/utils';
-import { klona } from 'klona';
-// components
-import { Button } from 'primereact/button';
-import { Dropdown } from 'primereact/dropdown';
+// store
+import { storeSet } from '../../store';
// service
import FormsService from '../../service/forms-service';
-// store
-import { storeSet } from '../../store';
-import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
-import BandoService from '../../service/bando-service';
+// tools
import uniqid from '../../helpers/uniqid';
+import set404FromErrorResponse from '../../helpers/set404FromErrorResponse';
+
+// components
+import { Button } from 'primereact/button';
+import { Dropdown } from 'primereact/dropdown';
+import BandoService from '../../service/bando-service';
import { Toast } from 'primereact/toast';
const BandoForms = () => {
const { id } = useParams();
const navigate = useNavigate()
- const [templates, setTemplates] = useState(null);
- const [selectedTemplate, setSelectedTemplate] = useState(null);
const [selectedForm, setSelectedForm] = useState(null);
- const [selectedForDuplicateForm, setSelectedForDuplicateForm] = useState(null);
+ const [selectedForDuplicateForm, setSelectedForDuplicateForm] = useState(0);
const [forms, setForms] = useState([]);
const [bandoStatus, setBandoStatus] = useState('');
+ const [allBandiOptions, setAllBandiOptions] = useState([]);
+ const [allBandiIsLoading, setAllBandiIsLoading] = useState(false);
+ const [selectedBandoIdForDuplicate, setSelectedBandoIdForDuplicate] = useState(0);
+ const [allFormsOptions, setAllFormsOptions] = useState([]);
+ const [allFormsIsLoading, setAllFormsIsLoading] = useState(false);
+ const [selectedFormIdForDuplicate, setSelectedFormIdForDuplicate] = useState(0);
const toast = useRef(null);
const doCreateNewForm = () => {
@@ -53,11 +58,11 @@ const BandoForms = () => {
if (!isEmpty(selectedFormArr)) {
storeSet.main.setAsyncRequest();
- FormsService.getFormById(selectedForDuplicateForm, getFormCallback, errGetFormCallbacks);
+ FormsService.getFormById(selectedForDuplicateForm, getFormDuplicateCallback, errGetFormDuplicateCallbacks);
}
}
- const getFormCallback = (data) => {
+ const getFormDuplicateCallback = (data) => {
if (data.status === 'SUCCESS') {
const newLabel = `${data.data.label} (copy)`;
@@ -76,9 +81,10 @@ const BandoForms = () => {
errFormCreateCallback
);
}
+ storeSet.main.unsetAsyncRequest();
}
- const errGetFormCallbacks = (data) => {
+ const errGetFormDuplicateCallbacks = (data) => {
set404FromErrorResponse(data);
storeSet.main.unsetAsyncRequest();
}
@@ -141,17 +147,52 @@ const BandoForms = () => {
storeSet.main.unsetAsyncRequest();
}
+ const getAllBandiCallback = (data) => {
+ if (data.status === 'SUCCESS') {
+ setAllBandiOptions(data.data.filter(o => o.id !== parseInt(id)).map(o => ({ label: o.name, value: o.id })))
+ }
+ setAllBandiIsLoading(false);
+ }
+
+ const errGetAllBandiCallback = () => {
+ setAllBandiIsLoading(false);
+ }
+
+ const getAllFormsCallback = (data) => {
+ if (data.status === 'SUCCESS') {
+ setAllFormsOptions(data.data.map(o => ({ label: o.label, value: o.id })));
+ }
+ setAllFormsIsLoading(false);
+ }
+
+ const errGetAllFormsCallback = () => {
+ setAllFormsIsLoading(false);
+ }
+
+ const doDuplicateFormOfAnotherBando = () => {
+ if (selectedBandoIdForDuplicate !== 0 && selectedFormIdForDuplicate !== 0) {
+ storeSet.main.setAsyncRequest();
+ FormsService.getFormById(selectedFormIdForDuplicate, getFormDuplicateCallback, errGetFormDuplicateCallbacks);
+ }
+ }
+
+ useEffect(() => {
+ if (selectedBandoIdForDuplicate !== 0) {
+ setAllFormsIsLoading(true);
+ FormsService.getFormsForCall(selectedBandoIdForDuplicate, getAllFormsCallback, errGetAllFormsCallback);
+ }
+ }, [selectedBandoIdForDuplicate]);
+
useEffect(() => {
const parsed = parseInt(id)
const bandoId = !isNaN(parsed) ? parsed : 0;
- setTemplates([
- { label: 'Form template', value: 11 }
- ])
-
storeSet.main.setAsyncRequest();
BandoService.getBando(id, getCallback, errGetCallback);
FormsService.getFormsForCall(bandoId, getFormsCallback, errGetFormsCallback);
+
+ setAllBandiIsLoading(true);
+ BandoService.getBandi(getAllBandiCallback, errGetAllBandiCallback);
}, [id]);
return (
@@ -164,7 +205,7 @@ const BandoForms = () => {
-
+
@@ -191,7 +232,7 @@ const BandoForms = () => {
*/}
-
{__('Crea un nuovo Form da Zero', 'gepafin')}
+
{__('Crea un nuovo Form o duplica', 'gepafin')}
{__('Inizia con un form completamente vuoto e personalizzabile', 'gepafin')}
{__('Duplica il form creato in precedenza', 'gepafin')}
-
setSelectedForDuplicateForm(e.value)}
- options={forms}
- optionLabel="label"
- placeholder={__('Seleziona form', 'gepafin')}/>
-
+
+ setSelectedForDuplicateForm(e.value)}
+ options={forms}
+ optionLabel="label"
+ placeholder={__('Seleziona form', 'gepafin')}/>
+
+
+
+
+
+
{__('Duplica il form dal altro bando', 'gepafin')}
+
+ setSelectedBandoIdForDuplicate(e.value)}
+ options={allBandiOptions}
+ placeholder={__('Seleziona bando', 'gepafin')}/>
+ setSelectedFormIdForDuplicate(e.value)}
+ options={allFormsOptions}
+ placeholder={__('Seleziona form', 'gepafin')}/>
+
+
diff --git a/src/pages/BandoFormsEdit/components/BuilderElementSettings/components/ElementSettingTableColumns-old/index.js b/src/pages/BandoFormsEdit/components/BuilderElementSettings/components/ElementSettingTableColumns-old/index.js
index ef568c0..6732a79 100644
--- a/src/pages/BandoFormsEdit/components/BuilderElementSettings/components/ElementSettingTableColumns-old/index.js
+++ b/src/pages/BandoFormsEdit/components/BuilderElementSettings/components/ElementSettingTableColumns-old/index.js
@@ -127,7 +127,7 @@ const ElementSettingTableColumns = ({
})}