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); + }; }