io-sanita-theme 2.26.0 → 2.28.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +33 -0
- package/RELEASE.md +21 -0
- package/locales/de/LC_MESSAGES/volto.po +0 -5
- package/locales/en/LC_MESSAGES/volto.po +0 -5
- package/locales/es/LC_MESSAGES/volto.po +0 -5
- package/locales/fr/LC_MESSAGES/volto.po +0 -5
- package/locales/it/LC_MESSAGES/volto.po +0 -5
- package/locales/volto.pot +1 -6
- package/package.json +7 -5
- package/src/components/View/ComeFarePer/ComeFarePerComeFare.jsx +4 -4
- package/src/components/View/ComeFarePer/ComeFarePerSchemaOrg.jsx +2 -3
- package/src/components/View/ComeFarePer/Steps/Steps.jsx +10 -7
- package/src/components/View/ComeFarePer/Steps/helpers.js +9 -5
- package/src/components/View/Evento/EventoDove.jsx +6 -8
- package/src/components/View/FAQ/FaqFolder/FaqFolderView.jsx +3 -2
- package/src/components/View/Farmacia/FarmaciaDove.jsx +3 -102
- package/src/components/View/Struttura/StrutturaDove.jsx +4 -4
- package/src/components/View/UOView/UODove.jsx +4 -4
- package/src/components/View/commons/Locations/Locations.jsx +6 -6
- package/src/components/layout/Header/HeaderSlim/TertiaryMenu.jsx +7 -2
- package/src/config/blocks/index.js +1 -0
- package/src/config/ioSanitaConfig.js +13 -0
- package/src/helpers/Address/Address.jsx +8 -1
- package/src/helpers/Item/item.js +2 -0
- package/src/stories/Cards/mock.js +1 -1
- package/src/theme/io-sanita/addons/_volto_repeatable-content-block.scss +57 -0
- package/src/theme/main.scss +1 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,38 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [2.28.0](https://github.com/RedTurtle/io-sanita-theme/compare/2.27.0...2.28.0) (2026-05-05)
|
|
4
|
+
|
|
5
|
+
### Features
|
|
6
|
+
|
|
7
|
+
* add contenuto da replicare block ([#135](https://github.com/RedTurtle/io-sanita-theme/issues/135)) ([578f9a4](https://github.com/RedTurtle/io-sanita-theme/commit/578f9a43bc97a07444d01fabf0ea5f04c8e48a7b))
|
|
8
|
+
|
|
9
|
+
### Bug Fixes
|
|
10
|
+
|
|
11
|
+
* faq folderview import ([37cfd3b](https://github.com/RedTurtle/io-sanita-theme/commit/37cfd3b9c15ba78ba1c8ddfa5c7174f39c0ae73f))
|
|
12
|
+
* folder-content more popover open ([c88d3e8](https://github.com/RedTurtle/io-sanita-theme/commit/c88d3e817ff57a4eecf79958c13eb3d212f13a2e))
|
|
13
|
+
* icons for CT in folder content ([ffc7f0f](https://github.com/RedTurtle/io-sanita-theme/commit/ffc7f0fd9b38fd57f3d8b1e1b8ef477751d6e120))
|
|
14
|
+
* sometimes uo in steps were not loaded ([ddc635d](https://github.com/RedTurtle/io-sanita-theme/commit/ddc635dd1b838f49f9fc75d18ac30be3ad3e214d))
|
|
15
|
+
|
|
16
|
+
### Maintenance
|
|
17
|
+
|
|
18
|
+
* preparing release 2.28.0 ([cb0a294](https://github.com/RedTurtle/io-sanita-theme/commit/cb0a294b23e9acf5bf6892cf7fb0683d6b511a2d))
|
|
19
|
+
* releaselog ([16109c1](https://github.com/RedTurtle/io-sanita-theme/commit/16109c1371e2c782ebbb0693d6536e2f1de1d323))
|
|
20
|
+
* revert volto-form-block-italia version ([5616eae](https://github.com/RedTurtle/io-sanita-theme/commit/5616eae1c8a077a1b26d99ea27b1719fa4ddeb3c))
|
|
21
|
+
* updated deps to remove duplicate api calls ([eb99334](https://github.com/RedTurtle/io-sanita-theme/commit/eb99334958d055da2c70038fd613c79bae4e193d))
|
|
22
|
+
* updated volto-contents-next ([7f7d0f9](https://github.com/RedTurtle/io-sanita-theme/commit/7f7d0f90c08d6cc260d254878dd5d47108b7c844))
|
|
23
|
+
* updated volto-form-block-italia ([d638639](https://github.com/RedTurtle/io-sanita-theme/commit/d638639e3f72e974cf6bf947095545bf4f48d412))
|
|
24
|
+
|
|
25
|
+
## [2.27.0](https://github.com/RedTurtle/io-sanita-theme/compare/2.26.0...2.27.0) (2026-04-29)
|
|
26
|
+
|
|
27
|
+
### Features
|
|
28
|
+
|
|
29
|
+
* rimosso circoscrizione (non usato), aggiunto distretto ([#136](https://github.com/RedTurtle/io-sanita-theme/issues/136)) ([1cc9a79](https://github.com/RedTurtle/io-sanita-theme/commit/1cc9a7957b4a1b6ccc6c7677081fd6a1ebc1aedd))
|
|
30
|
+
|
|
31
|
+
### Maintenance
|
|
32
|
+
|
|
33
|
+
* locales ([2ca5e63](https://github.com/RedTurtle/io-sanita-theme/commit/2ca5e639814709a0bdfcb5ee512e06c391cd8ee8))
|
|
34
|
+
* typo ([6d0e641](https://github.com/RedTurtle/io-sanita-theme/commit/6d0e641b0a1b28c254d237bdc3abef79cc4a33cb))
|
|
35
|
+
|
|
3
36
|
## [2.26.0](https://github.com/RedTurtle/io-sanita-theme/compare/2.25.1...2.26.0) (2026-04-22)
|
|
4
37
|
|
|
5
38
|
### Features
|
package/RELEASE.md
CHANGED
|
@@ -41,6 +41,27 @@
|
|
|
41
41
|
- ...
|
|
42
42
|
-->
|
|
43
43
|
|
|
44
|
+
## Versione 2.28.0 (05/05/2026)
|
|
45
|
+
|
|
46
|
+
### Migliorie
|
|
47
|
+
|
|
48
|
+
- Sistemate le icone dei tipi di contenuto nella vista dei contenuti.
|
|
49
|
+
- Nella vista dei contenuti, è ora possibile mostrare/nascondere le colonne desiderate dall'apposito pulsante.
|
|
50
|
+
|
|
51
|
+
### Novità
|
|
52
|
+
|
|
53
|
+
- Aggiunto il blocco "Contenuto da replicare" sia nella Pagina sia nei blocchi dei campi per i vari CT
|
|
54
|
+
|
|
55
|
+
### Fix
|
|
56
|
+
|
|
57
|
+
- Sistemata l'apertura del menu di azioni su un singolo elemento nella vista dei contenuti. Ora il menu si apre solo sull'elemento cliccato ed è visibile, senza più problemi di apertura e scorrimento della pagina
|
|
58
|
+
|
|
59
|
+
## Versione 2.27.0 (29/04/2026)
|
|
60
|
+
|
|
61
|
+
### Novità
|
|
62
|
+
|
|
63
|
+
- Aggiunto distretto (opzionale) tra i campi degli indirizzi.
|
|
64
|
+
|
|
44
65
|
## Versione 2.26.0 (22/04/2026)
|
|
45
66
|
|
|
46
67
|
### Fix
|
|
@@ -1912,11 +1912,6 @@ msgstr ""
|
|
|
1912
1912
|
msgid "farmacia_area_territoriale"
|
|
1913
1913
|
msgstr ""
|
|
1914
1914
|
|
|
1915
|
-
#. Default: "Circoscrizione"
|
|
1916
|
-
#: components/View/Farmacia/FarmaciaDove
|
|
1917
|
-
msgid "farmacia_circoscrizione"
|
|
1918
|
-
msgstr ""
|
|
1919
|
-
|
|
1920
1915
|
#. Default: "Comune"
|
|
1921
1916
|
#: components/View/Farmacia/FarmaciaDove
|
|
1922
1917
|
msgid "farmacia_comune"
|
|
@@ -1907,11 +1907,6 @@ msgstr "Search results for FAQ"
|
|
|
1907
1907
|
msgid "farmacia_area_territoriale"
|
|
1908
1908
|
msgstr "Territorial area"
|
|
1909
1909
|
|
|
1910
|
-
#. Default: "Circoscrizione"
|
|
1911
|
-
#: components/View/Farmacia/FarmaciaDove
|
|
1912
|
-
msgid "farmacia_circoscrizione"
|
|
1913
|
-
msgstr "Constituency"
|
|
1914
|
-
|
|
1915
1910
|
#. Default: "Comune"
|
|
1916
1911
|
#: components/View/Farmacia/FarmaciaDove
|
|
1917
1912
|
msgid "farmacia_comune"
|
|
@@ -1914,11 +1914,6 @@ msgstr ""
|
|
|
1914
1914
|
msgid "farmacia_area_territoriale"
|
|
1915
1915
|
msgstr ""
|
|
1916
1916
|
|
|
1917
|
-
#. Default: "Circoscrizione"
|
|
1918
|
-
#: components/View/Farmacia/FarmaciaDove
|
|
1919
|
-
msgid "farmacia_circoscrizione"
|
|
1920
|
-
msgstr ""
|
|
1921
|
-
|
|
1922
1917
|
#. Default: "Comune"
|
|
1923
1918
|
#: components/View/Farmacia/FarmaciaDove
|
|
1924
1919
|
msgid "farmacia_comune"
|
|
@@ -1914,11 +1914,6 @@ msgstr ""
|
|
|
1914
1914
|
msgid "farmacia_area_territoriale"
|
|
1915
1915
|
msgstr ""
|
|
1916
1916
|
|
|
1917
|
-
#. Default: "Circoscrizione"
|
|
1918
|
-
#: components/View/Farmacia/FarmaciaDove
|
|
1919
|
-
msgid "farmacia_circoscrizione"
|
|
1920
|
-
msgstr ""
|
|
1921
|
-
|
|
1922
1917
|
#. Default: "Comune"
|
|
1923
1918
|
#: components/View/Farmacia/FarmaciaDove
|
|
1924
1919
|
msgid "farmacia_comune"
|
|
@@ -1907,11 +1907,6 @@ msgstr ""
|
|
|
1907
1907
|
msgid "farmacia_area_territoriale"
|
|
1908
1908
|
msgstr ""
|
|
1909
1909
|
|
|
1910
|
-
#. Default: "Circoscrizione"
|
|
1911
|
-
#: components/View/Farmacia/FarmaciaDove
|
|
1912
|
-
msgid "farmacia_circoscrizione"
|
|
1913
|
-
msgstr ""
|
|
1914
|
-
|
|
1915
1910
|
#. Default: "Comune"
|
|
1916
1911
|
#: components/View/Farmacia/FarmaciaDove
|
|
1917
1912
|
msgid "farmacia_comune"
|
package/locales/volto.pot
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
msgid ""
|
|
2
2
|
msgstr ""
|
|
3
3
|
"Project-Id-Version: Plone\n"
|
|
4
|
-
"POT-Creation-Date: 2026-04-
|
|
4
|
+
"POT-Creation-Date: 2026-04-29T13:30:21.407Z\n"
|
|
5
5
|
"Last-Translator: Plone i18n <plone-i18n@lists.sourceforge.net>\n"
|
|
6
6
|
"Language-Team: Plone i18n <plone-i18n@lists.sourceforge.net>\n"
|
|
7
7
|
"Content-Type: text/plain; charset=utf-8\n"
|
|
@@ -1909,11 +1909,6 @@ msgstr ""
|
|
|
1909
1909
|
msgid "farmacia_area_territoriale"
|
|
1910
1910
|
msgstr ""
|
|
1911
1911
|
|
|
1912
|
-
#. Default: "Circoscrizione"
|
|
1913
|
-
#: components/View/Farmacia/FarmaciaDove
|
|
1914
|
-
msgid "farmacia_circoscrizione"
|
|
1915
|
-
msgstr ""
|
|
1916
|
-
|
|
1917
1912
|
#. Default: "Comune"
|
|
1918
1913
|
#: components/View/Farmacia/FarmaciaDove
|
|
1919
1914
|
msgid "farmacia_comune"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "io-sanita-theme",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.28.0",
|
|
4
4
|
"description": "io-sanita-theme: Volto add-on",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"license": "MIT",
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
"volto-venue",
|
|
38
38
|
"volto-site-settings",
|
|
39
39
|
"volto-rss-block",
|
|
40
|
-
"@eeacms/volto-taxonomy"
|
|
40
|
+
"@eeacms/volto-taxonomy",
|
|
41
|
+
"volto-repeatable-content-block"
|
|
41
42
|
],
|
|
42
43
|
"scripts": {
|
|
43
44
|
"i18n": "rm -rf build/messages && NODE_ENV=production i18n --addon",
|
|
@@ -80,7 +81,7 @@
|
|
|
80
81
|
"@babel/plugin-proposal-throw-expressions": "7.18.6",
|
|
81
82
|
"@eeacms/volto-taxonomy": "5.1.1",
|
|
82
83
|
"@loadable/babel-plugin": "5.13.2",
|
|
83
|
-
"@plone-collective/volto-contents-next": "0.5.
|
|
84
|
+
"@plone-collective/volto-contents-next": "0.5.4",
|
|
84
85
|
"@plone-collective/volto-sentry": "0.3.1",
|
|
85
86
|
"@release-it/conventional-changelog": "^9.0.3",
|
|
86
87
|
"bootstrap-italia": "2.9.2",
|
|
@@ -105,13 +106,14 @@
|
|
|
105
106
|
"volto-form-block-italia": "1.1.1",
|
|
106
107
|
"volto-gdpr-privacy": "2.2.15",
|
|
107
108
|
"volto-querywidget-with-browser": "0.4.3",
|
|
109
|
+
"volto-repeatable-content-block": "1.5.0",
|
|
108
110
|
"volto-rss-block": "3.0.1",
|
|
109
111
|
"volto-rt-carousel": "1.0.0",
|
|
110
112
|
"volto-secondarymenu": "4.1.4",
|
|
111
113
|
"volto-site-settings": "0.4.7",
|
|
112
114
|
"volto-slate-italia": "1.0.9",
|
|
113
|
-
"volto-slimheader": "0.1.
|
|
114
|
-
"volto-social-settings": "3.1.
|
|
115
|
+
"volto-slimheader": "0.1.6",
|
|
116
|
+
"volto-social-settings": "3.1.2",
|
|
115
117
|
"volto-subfooter": "3.1.3",
|
|
116
118
|
"volto-subsites": "4.0.2",
|
|
117
119
|
"volto-venue": "4.1.1"
|
|
@@ -17,7 +17,8 @@ const messages = defineMessages({
|
|
|
17
17
|
|
|
18
18
|
const ComeFarePerComeFare = ({ content }) => {
|
|
19
19
|
const intl = useIntl();
|
|
20
|
-
const steps =
|
|
20
|
+
const steps =
|
|
21
|
+
content?.items?.filter((item) => item['@type'] === 'Step') ?? [];
|
|
21
22
|
|
|
22
23
|
return richTextHasContent(content?.come_fare) || steps.length > 0 ? (
|
|
23
24
|
<RichTextSection
|
|
@@ -31,7 +32,7 @@ const ComeFarePerComeFare = ({ content }) => {
|
|
|
31
32
|
</div>
|
|
32
33
|
</div>
|
|
33
34
|
)}
|
|
34
|
-
<Steps content={content}
|
|
35
|
+
<Steps content={content} />
|
|
35
36
|
</RichTextSection>
|
|
36
37
|
) : (
|
|
37
38
|
<></>
|
|
@@ -41,6 +42,5 @@ const ComeFarePerComeFare = ({ content }) => {
|
|
|
41
42
|
export default ComeFarePerComeFare;
|
|
42
43
|
|
|
43
44
|
ComeFarePerComeFare.propTypes = {
|
|
44
|
-
content: PropTypes.shape({
|
|
45
|
-
}).isRequired,
|
|
45
|
+
content: PropTypes.shape({}).isRequired,
|
|
46
46
|
};
|
|
@@ -48,9 +48,8 @@ const ComeFarePerSchemaOrg = ({ content }) => {
|
|
|
48
48
|
);
|
|
49
49
|
}
|
|
50
50
|
|
|
51
|
-
if (
|
|
52
|
-
schemaOrg.step =
|
|
53
|
-
const step = loadedSteps[id];
|
|
51
|
+
if (loadedSteps.length > 0 && loadedSteps.length == steps.length) {
|
|
52
|
+
schemaOrg.step = loadedSteps.map((step, index) => {
|
|
54
53
|
const stepSchemaOrg = {
|
|
55
54
|
'@type': 'HowToStep',
|
|
56
55
|
position: index + 1,
|
|
@@ -60,18 +60,20 @@ const messages = defineMessages({
|
|
|
60
60
|
* @params {object} content Content object.
|
|
61
61
|
* @returns {string} Markup of the component.
|
|
62
62
|
*/
|
|
63
|
-
const Steps = ({ content
|
|
63
|
+
const Steps = ({ content }) => {
|
|
64
64
|
const intl = useIntl();
|
|
65
65
|
const [activeItem, setActiveItem] = useState('');
|
|
66
66
|
const [allOpen, setAllOpen] = useState(false);
|
|
67
67
|
|
|
68
|
+
const steps =
|
|
69
|
+
content?.items?.filter((item) => item['@type'] === 'Step') ?? [];
|
|
70
|
+
const { loadedSteps } = useLoadSteps(steps);
|
|
71
|
+
|
|
68
72
|
useEffect(() => {
|
|
69
73
|
setActiveItem('');
|
|
70
74
|
}, [allOpen]);
|
|
71
75
|
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
return steps.length > 0 ? (
|
|
76
|
+
return loadedSteps.length > 0 && loadedSteps.length == steps.length ? (
|
|
75
77
|
<div className="steps">
|
|
76
78
|
<Button
|
|
77
79
|
color="link"
|
|
@@ -92,8 +94,7 @@ const Steps = ({ content, steps = [] }) => {
|
|
|
92
94
|
/>
|
|
93
95
|
</Button>
|
|
94
96
|
<Accordion background="active">
|
|
95
|
-
{
|
|
96
|
-
const step = loadedSteps[s['@id']] ?? s;
|
|
97
|
+
{loadedSteps.map((step, index) => {
|
|
97
98
|
const itemIndex = index + 1;
|
|
98
99
|
const toggleItem = () => {
|
|
99
100
|
setActiveItem(activeItem !== itemIndex ? itemIndex : '');
|
|
@@ -191,7 +192,9 @@ const Steps = ({ content, steps = [] }) => {
|
|
|
191
192
|
})}
|
|
192
193
|
</Accordion>
|
|
193
194
|
</div>
|
|
194
|
-
) :
|
|
195
|
+
) : (
|
|
196
|
+
<></>
|
|
197
|
+
);
|
|
195
198
|
};
|
|
196
199
|
|
|
197
200
|
/**
|
|
@@ -6,13 +6,14 @@ import { getContent, resetContent } from '@plone/volto/actions/content/content';
|
|
|
6
6
|
export const useLoadSteps = (steps = []) => {
|
|
7
7
|
const dispatch = useDispatch();
|
|
8
8
|
const subrequests = useSelector((state) => state.content?.subrequests);
|
|
9
|
-
const [loadedSteps, setLoadedSteps] = useState(
|
|
9
|
+
const [loadedSteps, setLoadedSteps] = useState([]);
|
|
10
10
|
|
|
11
11
|
// one request is made for every step
|
|
12
12
|
useEffect(() => {
|
|
13
|
-
steps.forEach((
|
|
14
|
-
const url = flattenToAppURL(
|
|
15
|
-
const subrequest_id =
|
|
13
|
+
steps.forEach((step) => {
|
|
14
|
+
const url = flattenToAppURL(step['@id']);
|
|
15
|
+
const subrequest_id = step['@id'];
|
|
16
|
+
|
|
16
17
|
const requested =
|
|
17
18
|
subrequests?.[subrequest_id]?.loading ||
|
|
18
19
|
subrequests?.[subrequest_id]?.loaded;
|
|
@@ -34,7 +35,10 @@ export const useLoadSteps = (steps = []) => {
|
|
|
34
35
|
const subrequest_id = item['@id'];
|
|
35
36
|
const step = subrequests?.[subrequest_id]?.data;
|
|
36
37
|
if (subrequests?.[subrequest_id]?.loaded && step) {
|
|
37
|
-
setLoadedSteps(
|
|
38
|
+
setLoadedSteps((prevLoadedSteps) => [
|
|
39
|
+
...prevLoadedSteps.filter((s) => s['@id'] !== step['@id']),
|
|
40
|
+
step,
|
|
41
|
+
]);
|
|
38
42
|
}
|
|
39
43
|
});
|
|
40
44
|
}, [subrequests]);
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
|
|
4
|
-
import { defineMessages, useIntl } from 'react-intl';
|
|
5
|
-
|
|
6
1
|
import {
|
|
7
|
-
RichTextSection,
|
|
8
|
-
richTextHasContent,
|
|
9
2
|
RichText,
|
|
3
|
+
RichTextSection,
|
|
10
4
|
hasGeolocation,
|
|
5
|
+
richTextHasContent,
|
|
11
6
|
} from 'io-sanita-theme/helpers';
|
|
7
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
8
|
+
|
|
12
9
|
import { Locations } from 'io-sanita-theme/components/View/commons';
|
|
10
|
+
import PropTypes from 'prop-types';
|
|
11
|
+
import React from 'react';
|
|
13
12
|
|
|
14
13
|
const messages = defineMessages({
|
|
15
14
|
dove: {
|
|
@@ -28,7 +27,6 @@ const EventoDove = ({ content }) => {
|
|
|
28
27
|
content?.zip_code?.length > 0 ||
|
|
29
28
|
content?.city?.length > 0 ||
|
|
30
29
|
content?.quartiere?.length > 0 ||
|
|
31
|
-
content?.circoscrizione?.length > 0 ||
|
|
32
30
|
content?.country?.length > 0 ||
|
|
33
31
|
richTextHasContent(content?.webinar) ? (
|
|
34
32
|
<RichTextSection tag_id="dove" title={intl.formatMessage(messages.dove)}>
|
|
@@ -19,6 +19,7 @@ import {
|
|
|
19
19
|
RelatedItems,
|
|
20
20
|
Metadata,
|
|
21
21
|
Placeholder,
|
|
22
|
+
RelatedItemInEvidence,
|
|
22
23
|
} from 'io-sanita-theme/components/View/commons';
|
|
23
24
|
|
|
24
25
|
import { TextOrBlocks, useDebouncedEffect } from 'io-sanita-theme/helpers';
|
|
@@ -175,8 +176,8 @@ const FaqFolderView = ({ content }) => {
|
|
|
175
176
|
<RelatedItems content={content} list={content?.servizi_collegati ?? []} />
|
|
176
177
|
|
|
177
178
|
<RelatedItemInEvidence content={content} />
|
|
178
|
-
|
|
179
|
-
<Placeholder position="afterRelatedItems" content={content} />
|
|
179
|
+
|
|
180
|
+
<Placeholder position="afterRelatedItems" content={content} />
|
|
180
181
|
</>
|
|
181
182
|
);
|
|
182
183
|
};
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import PropTypes from 'prop-types';
|
|
2
1
|
import { defineMessages, useIntl } from 'react-intl';
|
|
2
|
+
|
|
3
|
+
import { Locations } from 'io-sanita-theme/components/View/commons';
|
|
4
|
+
import PropTypes from 'prop-types';
|
|
3
5
|
// import { CardPlace } from 'io-sanita-theme/components';
|
|
4
6
|
import { RichTextSection } from 'io-sanita-theme/helpers';
|
|
5
|
-
import { Locations } from 'io-sanita-theme/components/View/commons';
|
|
6
7
|
|
|
7
8
|
const messages = defineMessages({
|
|
8
9
|
dove: {
|
|
@@ -21,10 +22,6 @@ const messages = defineMessages({
|
|
|
21
22
|
id: 'farmacia_localita',
|
|
22
23
|
defaultMessage: 'Località',
|
|
23
24
|
},
|
|
24
|
-
circoscrizione: {
|
|
25
|
-
id: 'farmacia_circoscrizione',
|
|
26
|
-
defaultMessage: 'Circoscrizione',
|
|
27
|
-
},
|
|
28
25
|
quartiere: {
|
|
29
26
|
id: 'farmacia_quartiere',
|
|
30
27
|
defaultMessage: 'Quartiere',
|
|
@@ -40,108 +37,12 @@ const FarmaciaDove = ({ content }) => {
|
|
|
40
37
|
content.city ||
|
|
41
38
|
content.provincia ||
|
|
42
39
|
content.country ||
|
|
43
|
-
content.circoscrizione ||
|
|
44
40
|
content.quartiere ||
|
|
45
41
|
content.area_territoriale?.title ||
|
|
46
42
|
content.comune ||
|
|
47
43
|
content.localita ? (
|
|
48
44
|
<RichTextSection tag_id="dove" title={intl.formatMessage(messages.dove)}>
|
|
49
|
-
{/* <CardPlace
|
|
50
|
-
item={{
|
|
51
|
-
...content,
|
|
52
|
-
city: content.comune,
|
|
53
|
-
province: content.provincia,
|
|
54
|
-
area_territoriale: content.area_territoriale?.title,
|
|
55
|
-
street: `${content.street} - ${content.localita}`,
|
|
56
|
-
}}
|
|
57
|
-
showDistance={false}
|
|
58
|
-
showMap={true}
|
|
59
|
-
/> */}
|
|
60
|
-
|
|
61
45
|
<Locations content={content} />
|
|
62
|
-
|
|
63
|
-
{/* -- codice originale versione auslfe
|
|
64
|
-
|
|
65
|
-
<Card className="card card-teaser shadow mt-3 rounded mb-4" tag="div">
|
|
66
|
-
<Icon icon={'it-pin'} />
|
|
67
|
-
<CardBody>
|
|
68
|
-
<CardTitle tag="h5" className="card-title">
|
|
69
|
-
{content.title}
|
|
70
|
-
</CardTitle>
|
|
71
|
-
<CardText tag="div">
|
|
72
|
-
{content.area_territoriale && (
|
|
73
|
-
<p>
|
|
74
|
-
<strong>{`${intl.formatMessage(messages.area_territoriale)}: `}</strong>
|
|
75
|
-
{content.area_territoriale.title}
|
|
76
|
-
</p>
|
|
77
|
-
)}
|
|
78
|
-
|
|
79
|
-
{content.comune && (
|
|
80
|
-
<p>
|
|
81
|
-
<strong>{`${intl.formatMessage(messages.comune)}: `}</strong>
|
|
82
|
-
{content.comune}
|
|
83
|
-
</p>
|
|
84
|
-
)}
|
|
85
|
-
|
|
86
|
-
{content.localita && (
|
|
87
|
-
<p>
|
|
88
|
-
<strong>{`${intl.formatMessage(messages.localita)}: `}</strong>
|
|
89
|
-
{content.localita}
|
|
90
|
-
</p>
|
|
91
|
-
)}
|
|
92
|
-
|
|
93
|
-
<p>
|
|
94
|
-
{[content.street, content.city]
|
|
95
|
-
.filter((v) => v !== null)
|
|
96
|
-
.join(' - ')}
|
|
97
|
-
{(content.street || content.city) &&
|
|
98
|
-
(content.zip_code || content.country) &&
|
|
99
|
-
!content.provincia && <br />}
|
|
100
|
-
|
|
101
|
-
{content.provincia && ' (' + content.provincia + ')\n'}
|
|
102
|
-
|
|
103
|
-
{content.zip_code && content.country?.title
|
|
104
|
-
? [content.zip_code, content.country?.title]
|
|
105
|
-
.filter((v) => v !== null)
|
|
106
|
-
.join(' - ')
|
|
107
|
-
: content.zip_code || content.country?.title}
|
|
108
|
-
</p>
|
|
109
|
-
</CardText>
|
|
110
|
-
</CardBody>
|
|
111
|
-
</Card>
|
|
112
|
-
{
|
|
113
|
-
content.geolocation?.latitude &&
|
|
114
|
-
content.geolocation?.longitude && (
|
|
115
|
-
<>{__CLIENT__ ?
|
|
116
|
-
<OSMMap
|
|
117
|
-
markers={[
|
|
118
|
-
{
|
|
119
|
-
latitude: content.geolocation.latitude,
|
|
120
|
-
longitude: content.geolocation.longitude,
|
|
121
|
-
title: content.title,
|
|
122
|
-
},
|
|
123
|
-
]}
|
|
124
|
-
mapOptions={{
|
|
125
|
-
scrollWheelZoom: false,
|
|
126
|
-
// tap: false,
|
|
127
|
-
// dragging: false,
|
|
128
|
-
}}
|
|
129
|
-
/>:<div>Loading...</>}</>
|
|
130
|
-
)}
|
|
131
|
-
{content.circoscrizione && (
|
|
132
|
-
<div className="circoscrizione">
|
|
133
|
-
<h5 className="mt-3">
|
|
134
|
-
{intl.formatMessage(messages.circoscrizione)}:
|
|
135
|
-
</h5>
|
|
136
|
-
<div className="text-serif">{content.circoscrizione}</div>
|
|
137
|
-
</div>
|
|
138
|
-
)}
|
|
139
|
-
{content.quartiere && (
|
|
140
|
-
<div className="quartiere">
|
|
141
|
-
<h5 className="mt-3">{intl.formatMessage(messages.quartiere)}:</h5>
|
|
142
|
-
<div className="text-serif">{content.quartiere}</div>
|
|
143
|
-
</div>
|
|
144
|
-
)} */}
|
|
145
46
|
</RichTextSection>
|
|
146
47
|
) : (
|
|
147
48
|
<></>
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import { defineMessages, useIntl } from 'react-intl';
|
|
4
1
|
import { RichTextSection, hasGeolocation } from 'io-sanita-theme/helpers';
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
|
|
5
4
|
import { Locations } from 'io-sanita-theme/components/View/commons';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import React from 'react';
|
|
6
7
|
|
|
7
8
|
const messages = defineMessages({
|
|
8
9
|
dove: {
|
|
@@ -20,7 +21,6 @@ const StrutturaDove = ({ content }) => {
|
|
|
20
21
|
content?.zip_code?.length > 0 ||
|
|
21
22
|
content?.city?.length > 0 ||
|
|
22
23
|
content?.quartiere?.length > 0 ||
|
|
23
|
-
content?.circoscrizione?.length > 0 ||
|
|
24
24
|
content?.country?.length > 0 ? (
|
|
25
25
|
<RichTextSection tag_id="dove" title={intl.formatMessage(messages.dove)}>
|
|
26
26
|
<Locations content={content} />
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import PropTypes from 'prop-types';
|
|
3
|
-
import { defineMessages, useIntl } from 'react-intl';
|
|
4
1
|
import { RichTextSection, hasGeolocation } from 'io-sanita-theme/helpers';
|
|
2
|
+
import { defineMessages, useIntl } from 'react-intl';
|
|
3
|
+
|
|
5
4
|
import { Locations } from 'io-sanita-theme/components/View/commons';
|
|
5
|
+
import PropTypes from 'prop-types';
|
|
6
|
+
import React from 'react';
|
|
6
7
|
|
|
7
8
|
const messages = defineMessages({
|
|
8
9
|
dove: {
|
|
@@ -21,7 +22,6 @@ const UODove = ({ content }) => {
|
|
|
21
22
|
content?.zip_code?.length > 0 ||
|
|
22
23
|
content?.city?.length > 0 ||
|
|
23
24
|
content?.quartiere?.length > 0 ||
|
|
24
|
-
content?.circoscrizione?.length > 0 ||
|
|
25
25
|
content?.country?.length > 0 ? (
|
|
26
26
|
<RichTextSection tag_id="luoghi" title={intl.formatMessage(messages.dove)}>
|
|
27
27
|
{/* INDIRIZZI E STRUTTURE */}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Col, Row } from 'design-react-kit';
|
|
2
|
+
|
|
3
|
+
import { CardPlace } from 'io-sanita-theme/components';
|
|
4
|
+
import { LocationsMap } from 'io-sanita-theme/components/View/commons';
|
|
2
5
|
import PropTypes from 'prop-types';
|
|
6
|
+
import React from 'react';
|
|
3
7
|
import omit from 'lodash/omit';
|
|
4
|
-
import { Row, Col } from 'design-react-kit';
|
|
5
|
-
import { LocationsMap } from 'io-sanita-theme/components/View/commons';
|
|
6
|
-
import { CardPlace } from 'io-sanita-theme/components';
|
|
7
8
|
|
|
8
9
|
/**
|
|
9
10
|
* Locations view component class.
|
|
@@ -18,8 +19,7 @@ const Locations = ({ content = {}, locations = [] }) => {
|
|
|
18
19
|
content.street ||
|
|
19
20
|
content.city ||
|
|
20
21
|
content.zip_code ||
|
|
21
|
-
content.quartiere
|
|
22
|
-
content.circoscrizione
|
|
22
|
+
content.quartiere
|
|
23
23
|
) {
|
|
24
24
|
location_items.push(omit(content, ['@id']));
|
|
25
25
|
}
|
|
@@ -19,6 +19,9 @@ const TertiaryMenu = ({ mobile = false }) => {
|
|
|
19
19
|
const pathname = useLocation().pathname;
|
|
20
20
|
const dispatch = useDispatch();
|
|
21
21
|
|
|
22
|
+
const slimHeaderLoading = useSelector(
|
|
23
|
+
(state) => state.slimHeader?.loadingResults,
|
|
24
|
+
);
|
|
22
25
|
const slimHeader = useSelector((state) => state.slimHeader?.result);
|
|
23
26
|
const slimHeaderItems = getItemsByPath(slimHeader, pathname)
|
|
24
27
|
?.filter((item) => item.visible)
|
|
@@ -31,8 +34,10 @@ const TertiaryMenu = ({ mobile = false }) => {
|
|
|
31
34
|
});
|
|
32
35
|
|
|
33
36
|
useEffect(() => {
|
|
34
|
-
|
|
35
|
-
|
|
37
|
+
if (!slimHeader && !slimHeaderLoading) {
|
|
38
|
+
dispatch(getSlimHeader());
|
|
39
|
+
}
|
|
40
|
+
}, []);
|
|
36
41
|
|
|
37
42
|
const items = slimHeaderItems ?? [];
|
|
38
43
|
|
|
@@ -390,6 +390,7 @@ export const applyIoSanitaBlocksConfig = (config) => {
|
|
|
390
390
|
'testo_riquadro_immagine',
|
|
391
391
|
'callout_block',
|
|
392
392
|
'rssBlock',
|
|
393
|
+
'repeatableContentBlock',
|
|
393
394
|
//se si aggiunge un nuovo blocco, verificare che in edit non ci siano bottoni che provocano il submit della form. Se succede, gestirli con e.prevenDefault() e.stopPropagation().
|
|
394
395
|
],
|
|
395
396
|
|
|
@@ -26,6 +26,13 @@ import faCogSVG from 'io-sanita-theme/icons/cog.svg';
|
|
|
26
26
|
import faSitemapSVG from 'io-sanita-theme/icons/sitemap.svg';
|
|
27
27
|
import faBuildingSVG from 'io-sanita-theme/icons/building.svg';
|
|
28
28
|
import faAslSVG from 'io-sanita-theme/icons/ASL.svg';
|
|
29
|
+
import faCircleDotSVG from 'io-sanita-theme/icons/fontawesome-free-6.4.0-web/svgs/solid/circle-dot.svg';
|
|
30
|
+
import faListCheckSVG from 'io-sanita-theme/icons/fontawesome-free-6.4.0-web/svgs/solid/list-check.svg';
|
|
31
|
+
import faClipboardQuestionSVG from 'io-sanita-theme/icons/fontawesome-free-6.4.0-web/svgs/solid/clipboard-question.svg';
|
|
32
|
+
import faClipboardListSVG from 'io-sanita-theme/icons/fontawesome-free-6.4.0-web/svgs/solid/clipboard-list.svg';
|
|
33
|
+
import faFileContractSVG from 'io-sanita-theme/icons/fontawesome-free-6.4.0-web/svgs/solid/file-contract.svg';
|
|
34
|
+
import faHouseMedicalFlagSVG from 'io-sanita-theme/icons/fontawesome-free-6.4.0-web/svgs/solid/house-medical-flag.svg';
|
|
35
|
+
import faAddressBook from 'io-sanita-theme/icons/fontawesome-free-6.4.0-web/svgs/solid/address-book.svg';
|
|
29
36
|
import faFileDownloadSVG from 'io-sanita-theme/icons/file-download.svg';
|
|
30
37
|
import faQuestionSVG from 'io-sanita-theme/icons/question-solid.svg';
|
|
31
38
|
import bandoSVG from 'io-sanita-theme/icons/bando.svg';
|
|
@@ -154,6 +161,12 @@ export default function applyConfig(config) {
|
|
|
154
161
|
UnitaOrganizzativa: faBuildingSVG,
|
|
155
162
|
Modulo: faFileDownloadSVG,
|
|
156
163
|
Faq: faQuestionSVG,
|
|
164
|
+
Step: faCircleDotSVG,
|
|
165
|
+
ComeFarePer: faListCheckSVG,
|
|
166
|
+
FaqFolder: faClipboardQuestionSVG,
|
|
167
|
+
Farmacia: faHouseMedicalFlagSVG,
|
|
168
|
+
PuntoDiContatto: faAddressBook,
|
|
169
|
+
survey: faClipboardListSVG,
|
|
157
170
|
},
|
|
158
171
|
controlpanels: [
|
|
159
172
|
...(config.settings.controlpanels ?? []),
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import { Icon } from 'io-sanita-theme/components';
|
|
1
2
|
/*TODO:
|
|
2
3
|
- implementare il calcolo della distanza
|
|
3
4
|
*/
|
|
4
5
|
import React from 'react';
|
|
5
|
-
import { Icon } from 'io-sanita-theme/components';
|
|
6
6
|
|
|
7
7
|
const Address = ({ item, showAddress = true, showDistance, tag }) => {
|
|
8
8
|
const address_row_2 = ['zip_code', 'city', 'province']
|
|
@@ -15,6 +15,7 @@ const Address = ({ item, showAddress = true, showDistance, tag }) => {
|
|
|
15
15
|
typeof item.area_territoriale === 'object'
|
|
16
16
|
? item.area_territoriale && item.area_territoriale.value
|
|
17
17
|
: item.area_territoriale;
|
|
18
|
+
const distretto = item.distretto;
|
|
18
19
|
|
|
19
20
|
return item.street?.length > 0 || address_row_2.length ? (
|
|
20
21
|
<>
|
|
@@ -33,6 +34,12 @@ const Address = ({ item, showAddress = true, showDistance, tag }) => {
|
|
|
33
34
|
{address_row_2}
|
|
34
35
|
</>
|
|
35
36
|
)}
|
|
37
|
+
{distretto && (
|
|
38
|
+
<>
|
|
39
|
+
<br />
|
|
40
|
+
{item.distretto}
|
|
41
|
+
</>
|
|
42
|
+
)}
|
|
36
43
|
</AddressWrapperTag>
|
|
37
44
|
)}
|
|
38
45
|
{showDistance && (
|
package/src/helpers/Item/item.js
CHANGED
|
@@ -38,6 +38,8 @@ export const getItemIcon = (item) => {
|
|
|
38
38
|
export const hasGeolocation = (item) => {
|
|
39
39
|
return (
|
|
40
40
|
item?.geolocation &&
|
|
41
|
+
item?.geolocation?.latitude &&
|
|
42
|
+
item?.geolocation?.longitude &&
|
|
41
43
|
item?.geolocation?.latitude !== 0 &&
|
|
42
44
|
item?.geolocation?.longitude !== 0
|
|
43
45
|
);
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
.view-viewview #main-content-section .repeatableContentBlock {
|
|
2
|
+
* {
|
|
3
|
+
word-break: break-all;
|
|
4
|
+
font-family: 'Titillium Web';
|
|
5
|
+
font-size: 14px;
|
|
6
|
+
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
.full-width {
|
|
10
|
+
width: 100% !important;
|
|
11
|
+
position: unset !important;
|
|
12
|
+
margin: 0px !important;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
.view-editview .blocks-widget-container .block-editor-repeatableContentBlock .repeatableContentBlock {
|
|
18
|
+
|
|
19
|
+
* {
|
|
20
|
+
font-size: 12px !important;
|
|
21
|
+
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
.full-width,
|
|
25
|
+
.block.image.align.full img.full-width {
|
|
26
|
+
width: 100% !important;
|
|
27
|
+
position: unset !important;
|
|
28
|
+
margin: 0px !important;
|
|
29
|
+
max-width: 100%;
|
|
30
|
+
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
.full-width {
|
|
34
|
+
.container {
|
|
35
|
+
max-width: 100%;
|
|
36
|
+
width: 100% !important;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
.row {
|
|
40
|
+
margin: 0px;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.col-sm-12 {
|
|
45
|
+
padding-left: 0px;
|
|
46
|
+
padding-right: 0px;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
::before {
|
|
50
|
+
height: 40px;
|
|
51
|
+
top: -1.5rem;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#main-content-section .repeatableContentBlock .public-ui .full-width .col-lg-4 {
|
|
56
|
+
width: 70%;
|
|
57
|
+
}
|
package/src/theme/main.scss
CHANGED
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
@import './io-sanita/components/cards';
|
|
28
28
|
@import './io-sanita/components/mapPinDirections';
|
|
29
29
|
@import './io-sanita/components/view/commons/pageHeader';
|
|
30
|
+
@import './io-sanita/addons/volto_repeatable-content-block';
|
|
30
31
|
@import './io-sanita/components/relatedItemInEvidence';
|
|
31
32
|
|
|
32
33
|
@import './io-sanita/components/blocks/common';
|