diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml
new file mode 100644
index 0000000..fb0d65a
--- /dev/null
+++ b/.idea/watcherTasks.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/scss/components/appPage.scss b/src/assets/scss/components/appPage.scss
index 167ef56..f81f2ef 100644
--- a/src/assets/scss/components/appPage.scss
+++ b/src/assets/scss/components/appPage.scss
@@ -90,6 +90,13 @@
line-height: normal;
margin: 0 0 24px;
}
+
+ .row {
+ display: flex;
+ gap: 1rem;
+ align-items: center;
+ padding: 5px 0;
+ }
}
.appPageSection__withBorder {
diff --git a/src/assets/scss/components/misc.scss b/src/assets/scss/components/misc.scss
index e7e498c..8760b5c 100644
--- a/src/assets/scss/components/misc.scss
+++ b/src/assets/scss/components/misc.scss
@@ -8,8 +8,8 @@
.p-badge {
color: var(--menuitem-active-color);
}
-.p-button:not(.p-button-outlined, .p-button-secondary),
-.p-button:not(.p-button-outlined, .p-button-secondary) span {
+.p-button:not(.p-button-outlined, .p-button-secondary, .p-confirm-popup-reject),
+.p-button:not(.p-button-outlined, .p-button-secondary, .p-confirm-popup-reject) span {
color: var(--menuitem-active-color);
}
.p-fileupload-row {
diff --git a/src/components/FormFieldRepeaterFaq/index.js b/src/components/FormFieldRepeaterFaq/index.js
index 9c9bf4b..093a1b6 100644
--- a/src/components/FormFieldRepeaterFaq/index.js
+++ b/src/components/FormFieldRepeaterFaq/index.js
@@ -1,7 +1,8 @@
import React, { useEffect, useState, useCallback } from 'react';
import { classNames } from 'primereact/utils';
import { __ } from '@wordpress/i18n';
-import { head } from 'ramda';
+import { head, isEmpty } from 'ramda';
+import { diff } from 'deep-object-diff';
// components
import { Button } from 'primereact/button';
@@ -116,18 +117,27 @@ const FormFieldRepeaterFaq = ({
}, [stateFieldData]);
useEffect(() => {
- const storeFieldData = data[fieldName] ?? [];
+ const storeFieldData = data ?? [];
setStateFieldData(storeFieldData);
setStateOptionsData([...options, ...storeFieldData]);
register(fieldName, config)
}, []);
+ useEffect(() => {
+ const diffData = diff(data, stateFieldData);
+
+ if (!isEmpty(diffData)) {
+ const storeFieldData = data ?? [];
+ setStateFieldData(storeFieldData);
+ }
+ }, [data]);
+
useEffect(() => {
setStateOptionsData([...options]);
}, [options]);
useEffect(() => {
- setDataFn(fieldName, [...stateFieldData], { shouldValidate: true });
+ setDataFn(fieldName, stateFieldData, { shouldValidate: true });
}, [stateFieldData]);
return (
diff --git a/src/components/TopBarProfileMenu/index.js b/src/components/TopBarProfileMenu/index.js
index 505fcae..ab98319 100644
--- a/src/components/TopBarProfileMenu/index.js
+++ b/src/components/TopBarProfileMenu/index.js
@@ -10,6 +10,7 @@ import { Avatar } from 'primereact/avatar';
const TopBarProfileMenu = ({ menuLeftRef }) => {
const userData = useTrackedStore().main.userData();
+ const fulleName = `${userData.firstName} ${userData.lastName}`;
let items = [
{
@@ -18,19 +19,19 @@ const TopBarProfileMenu = ({ menuLeftRef }) => {
- {`${userData.firstName} ${userData.lastName}`}
- {userData.email}
+ {fulleName}
+ {userData.email}
);
}
},
- {
+ /*{
label: __('Il mio profilo', 'gepafin'),
command: () => {
console.log('go to profile page')
}
- },
+ },*/
{
separator: true
},
diff --git a/src/pages/BandoEdit/components/BandoEditFormStep1/index.js b/src/pages/BandoEdit/components/BandoEditFormStep1/index.js
index c7bbb81..83a0b72 100644
--- a/src/pages/BandoEdit/components/BandoEditFormStep1/index.js
+++ b/src/pages/BandoEdit/components/BandoEditFormStep1/index.js
@@ -3,6 +3,7 @@ import { __ } from '@wordpress/i18n';
import { useNavigate } from 'react-router-dom';
import { useForm } from 'react-hook-form';
import { isEmpty, isNil, is } from 'ramda';
+import { klona } from 'klona';
// components
import FormField from '../../../../components/FormField';
@@ -12,6 +13,8 @@ import BandoEditFormActions from '../BandoEditFormActions';
import UnsavedChangesDetector from '../../../../components/UnsavedChangesDetector';
import BandoService from '../../../../service/bando-service';
import LookupdataService from '../../../../service/lookupdata-service';
+
+// store
import { storeSet, useStore } from '../../../../store';
const BandoEditFormStep1 = forwardRef(function ({ initialData, getFormErrors }, ref) {
@@ -126,7 +129,11 @@ const BandoEditFormStep1 = forwardRef(function ({ initialData, getFormErrors },
}, [initialData]);
useEffect(() => {
- reset(formInitialData);
+ const newFormData = klona(formInitialData);
+ if (!isNil(formInitialData.dates) && formInitialData.dates.length) {
+ newFormData.dates = formInitialData.dates.map(v => is(String, v) ? new Date(v) : (v ? v : ''));
+ }
+ reset(newFormData);
}, [formInitialData]);
useEffect(() => {
@@ -259,7 +266,7 @@ const BandoEditFormStep1 = forwardRef(function ({ initialData, getFormErrors },
{
- reset(formInitialData);
+ const newFormData = klona(formInitialData);
+ if (!isNil(formInitialData.dates) && formInitialData.dates.length) {
+ newFormData.dates = formInitialData.dates.map(v => is(String, v) ? new Date(v) : (v ? v : ''));
+ }
+ reset(newFormData);
}, [formInitialData]);
useEffect(() => {
diff --git a/src/pages/BandoEdit/index.js b/src/pages/BandoEdit/index.js
index 3fe8aa1..921ee0f 100644
--- a/src/pages/BandoEdit/index.js
+++ b/src/pages/BandoEdit/index.js
@@ -308,7 +308,7 @@ const BandoEdit = () => {
{__('Publicca il Form', 'gepafin')}
-
-
+
{__('Modifica form esistente', 'gepafin')}
{__('Continua a lavorare su un form precedentemente salvato', 'gepafin')}
diff --git a/src/pages/BandoFormsEdit/components/BuilderElementSettings/index.js b/src/pages/BandoFormsEdit/components/BuilderElementSettings/index.js
index a09af6a..de48434 100644
--- a/src/pages/BandoFormsEdit/components/BuilderElementSettings/index.js
+++ b/src/pages/BandoFormsEdit/components/BuilderElementSettings/index.js
@@ -100,11 +100,13 @@ const BuilderElementSettings = ({ closeSettings }) => {
? settings.map((o) =>
{o.name === 'options'
- ?
+ ?
+
: onChange(e.target.value, o.name)}/>}
-
) : null}
+ value={o.value}
+ onChange={(e) => onChange(e.target.value, o.name)}/>}
+
)
+ : null}
{validators
@@ -128,11 +130,11 @@ const BuilderElementSettings = ({ closeSettings }) => {
: null}
{textBasedValidatorFields.includes(k) && !isNil(validators[k])
?
-
- onChangeValidator(e.target.value, k)}/>
-
: null}
+
+ onChangeValidator(e.target.value, k)}/>
+ : null}
) : null}
diff --git a/src/pages/BandoFormsEdit/index.js b/src/pages/BandoFormsEdit/index.js
index b6f71a4..4eedfdf 100644
--- a/src/pages/BandoFormsEdit/index.js
+++ b/src/pages/BandoFormsEdit/index.js
@@ -11,9 +11,10 @@ import { storeSet, storeGet, useStore } from '../../store';
// components
import FormBuilder from './components/FormBuilder';
import { Button } from 'primereact/button';
-
-// components
+import { ConfirmPopup, confirmPopup } from 'primereact/confirmpopup';
import { InputText } from 'primereact/inputtext';
+
+// api
import FormsService from '../../service/forms-service';
const BandoFormsEdit = () => {
@@ -46,7 +47,7 @@ const BandoFormsEdit = () => {
if (bandoFormId === 0) {
FormsService.createFormForCall(bandoId, formData, formCreateCallback, errFormCreateCallback);
} else {
- FormsService.updateForm(bandoFormId, formData, formCreateCallback, errFormCreateCallback)
+ FormsService.updateForm(bandoFormId, formData, formCreateCallback, errFormCreateCallback);
}
}
@@ -71,10 +72,40 @@ const BandoFormsEdit = () => {
navigate(`/bandi/${bandoId}/forms/${formId}/preview`);
}
+ const confirmDelete = (event) => {
+ confirmPopup({
+ target: event.currentTarget,
+ message: __('Sei sicuro di cancellare questo form?', 'gepafin'),
+ icon: 'pi pi-info-circle',
+ defaultFocus: 'reject',
+ acceptClassName: 'p-button-danger',
+ accept: doDelete,
+ reject: () => {}
+ });
+ };
+
const doPublish = () => {
console.log('doPublish');
}
+ const doDelete = () => {
+ storeSet.main.setAsyncRequest();
+ FormsService.deleteForm(formId, formDeleteCallback, errFormDeleteCallback)
+ }
+
+ const formDeleteCallback = (data) => {
+ if (data.status === 'SUCCESS') {
+ const bandoId = getBandoId();
+ navigate(`/bandi/${bandoId}/forms`);
+ }
+ storeSet.main.unsetAsyncRequest();
+ }
+
+ const errFormDeleteCallback = (data) => {
+ console.log('errFormDeleteCallback', data)
+ storeSet.main.unsetAsyncRequest();
+ }
+
const getElementItemsCallback = (data) => {
if (data.status === 'SUCCESS') {
storeSet.main.elementItems(data.data);
@@ -172,6 +203,13 @@ const BandoFormsEdit = () => {
onClick={doPublish}
label={__('Pubblica', 'gepafin')}/>
+
+
+
+
)
diff --git a/src/service/forms-service.js b/src/service/forms-service.js
index 835d7a0..7cd9eb1 100644
--- a/src/service/forms-service.js
+++ b/src/service/forms-service.js
@@ -23,4 +23,8 @@ export default class FormsService {
static getFormById = (id, callback, errCallback) => {
NetworkService.get(`${API_BASE_URL}/form/${id}`, callback, errCallback);
};
+
+ static deleteForm = (id, callback, errCallback) => {
+ NetworkService.delete(`${API_BASE_URL}/form/${id}`, {}, callback, errCallback);
+ };
}