From 7dad6c056d437e85beb2e54f967d5db03a2f4a96 Mon Sep 17 00:00:00 2001 From: Vitalii Kiiko Date: Thu, 28 Nov 2024 15:54:08 +0100 Subject: [PATCH] - added duplicate form from another call functionality; - fixed styles; - added copy icon for user emails; - added hotkey to open loginadmin page quickly; - added modal for archiving document; - added modal for create appointment; --- .distignore | 5 + package.json | 6 +- src/assets/scss/components/appPage.scss | 3 +- src/assets/scss/components/layout.scss | 10 ++ src/pages/BandoForms/index.js | 134 +++++++++++++----- .../ElementSettingTableColumns-old/index.js | 2 +- .../ElementSettingTableColumns/index.js | 2 +- .../components/ArchiveDocument/index.js | 106 ++++++++++++++ src/pages/DomandaEditPreInstructor/index.js | 113 ++++++++++++++- src/pages/Login/index.js | 12 +- .../Users/components/AllUsersTable/index.js | 12 +- 11 files changed, 362 insertions(+), 43 deletions(-) create mode 100644 .distignore create mode 100644 src/pages/DomandaEditPreInstructor/components/ArchiveDocument/index.js 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')}/> -
+
+ +
+

{__('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 = ({ })} + ; + }; + const roleBodyTemplate = (rowData) => { return rowData.role.roleName; }; @@ -157,7 +167,7 @@ const AllUsersTable = () => { header={__('Nome utente', 'gepafin')} filter filterPlaceholder={__('Cerca per nome', 'gepafin')} style={{ minWidth: '12rem' }}/> -