io-sanita-theme 2.15.0 → 2.16.1

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 CHANGED
@@ -1,5 +1,25 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.16.1](https://github.com/RedTurtle/io-sanita-theme/compare/2.16.0...2.16.1) (2025-05-27)
4
+
5
+ ### Bug Fixes
6
+
7
+ * fixed control panel style ([19e3d9c](https://github.com/RedTurtle/io-sanita-theme/commit/19e3d9c20c5073b315fdb9e91936f0882dbf0f68))
8
+
9
+ ### Documentation
10
+
11
+ * updated release.md ([158be7d](https://github.com/RedTurtle/io-sanita-theme/commit/158be7d7a680ad93b7a38e7432891c27c01cc196))
12
+
13
+ ## [2.16.0](https://github.com/RedTurtle/io-sanita-theme/compare/2.15.0...2.16.0) (2025-05-22)
14
+
15
+ ### Features
16
+
17
+ * Add publiccode.yml ([e03ef83](https://github.com/RedTurtle/io-sanita-theme/commit/e03ef835891a0506e599df64ce7b4da9f192614f))
18
+
19
+ ### Bug Fixes
20
+
21
+ * codereview and fixed schemaOrg ([e66803e](https://github.com/RedTurtle/io-sanita-theme/commit/e66803e282feb2b8805d6d3661466a367314be1b))
22
+
3
23
  ## [2.15.0](https://github.com/RedTurtle/io-sanita-theme/compare/2.14.0...2.15.0) (2025-05-20)
4
24
 
5
25
  ### Features
package/RELEASE.md CHANGED
@@ -41,6 +41,12 @@
41
41
  - ...
42
42
  -->
43
43
 
44
+ ## Versione 2.16.1 (27/05/2025)
45
+
46
+ ### Fix
47
+
48
+ - Sistemata la vista del control panel Utenti
49
+
44
50
  ## Versione 2.15.0 (20/05/2025)
45
51
 
46
52
  ### Novità
Binary file
Binary file
package/docs/logo.png ADDED
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "io-sanita-theme",
3
- "version": "2.15.0",
3
+ "version": "2.16.1",
4
4
  "description": "io-sanita-theme: Volto add-on",
5
5
  "main": "src/index.js",
6
6
  "license": "MIT",
package/publiccode.yml ADDED
@@ -0,0 +1,128 @@
1
+ publiccodeYmlVersion: "0.4.0"
2
+ name: io-Sanità - il sito web per ASL e strutture sanitarie
3
+ applicationSuite: io-Sanità
4
+ url: https://github.com/RedTurtle/io-sanita-theme
5
+ landingURL: https://www.io-sanita.it/
6
+ logo: docs/logo.png
7
+ platforms:
8
+ - web
9
+ categories:
10
+ - website-builder
11
+ - content-management
12
+ dependsOn:
13
+ open:
14
+ - name: nodejs
15
+ versionMin: '20'
16
+ - name: Python
17
+ versionMin: '3.11'
18
+ - name: Docker
19
+ versionMin: '18.03'
20
+ optional: true
21
+ usedBy:
22
+ - AUSL Ferrara
23
+ developmentStatus: stable
24
+ softwareType: standalone/web
25
+ description:
26
+ it:
27
+ shortDescription: Sito web conforme al modello ASL
28
+ longDescription: >
29
+ **[io-Sanità](https://www.io-sanita.it)** è una piattaforma web open
30
+ source progettata per rispondere alle esigenze comunicative e informative
31
+ delle Aziende Sanitarie Locali, in piena conformità con le **Linee guida
32
+ AgID** e i modelli promossi da **Designers Italia**. Il sistema adotta un
33
+ approccio "citizen-first", combinando una solida architettura informativa
34
+ con un’interfaccia utente accessibile, intuitiva e responsive, adatta sia
35
+ alla consultazione da desktop che da dispositivi mobili.
36
+
37
+
38
+ Il layout grafico, la struttura dei contenuti e i flussi di navigazione
39
+ seguono fedelmente i modelli ufficiali per i siti ASL, garantendo coerenza
40
+ con l’ecosistema digitale della Pubblica Amministrazione. L’interfaccia è
41
+ pensata per migliorare l’esperienza dell’utente finale, riducendo i tempi
42
+ di ricerca delle informazioni e semplificando l’accesso ai servizi
43
+ digitali.
44
+
45
+
46
+ Uno degli aspetti distintivi di io-Sanità è la **collaborazione attiva con
47
+ i redattori** delle aziende sanitarie durante il processo di sviluppo e
48
+ personalizzazione: la piattaforma è infatti progettata per essere
49
+ facilmente gestita dai team di comunicazione e URP, anche senza competenze
50
+ tecniche avanzate.
51
+
52
+
53
+ In termini di **trovabilità dei contenuti**, io-Sanità integra moduli e
54
+ pattern di navigazione suggeriti da Designers Italia, potenziati
55
+ dall’esperienza ventennale di **[RedTurtle](https://www.redturtle.it)**
56
+ nella gestione e pubblicazione di contenuti complessi. Il risultato è un
57
+ portale ad alta usabilità, che ottimizza la reperibilità delle
58
+ informazioni e garantisce un'esperienza coerente e fluida per cittadini,
59
+ operatori sanitari e stakeholder.
60
+
61
+
62
+ Basato su **[Plone](https://plone.org)**, uno dei CMS open source più
63
+ affidabili e sicuri, io-Sanità è una soluzione pronta all’uso, scalabile,
64
+ personalizzabile e costantemente aggiornata, pensata per accompagnare la
65
+ transizione digitale della sanità pubblica italiana.
66
+
67
+
68
+ io-Sanità è frutto della ventennale esperienza di RedTurtle come fornitore
69
+ qualificato della PA, in particolare grazie alla collaborazione con AUSL
70
+ Ferrara ed il Dipartimento per la Trasformazione Digitale, con lo scopo
71
+ finale di uniformare sul territorio nazionale i siti web delle aziende
72
+ sanitarie locali grazie al Modello ASL.
73
+ documentation: https://docs.google.com/document/d/1Vih0GDLa4bN16ac4g0wt7RVJIqwlJZgNPp_JdkKVURA/edit?tab=t.0
74
+ features:
75
+ - Sviluppato seguendo le linee guida del Modello ASL promosso da Designers
76
+ Italia.
77
+ - Gestione avanzata tramite content-type specifici conformi alle nuove
78
+ linee guida.
79
+ - Workflow di approvazione contenuti configurabili in base alle esigenze
80
+ specifiche.
81
+ - Gestione diretta ed esclusiva tramite un semplice browser senza plugin
82
+ aggiuntivi
83
+ - Creazione potenzialmente illimitata di pagine informative e relative
84
+ categorie.
85
+ - Editing in modalità "in context".
86
+ - Ricerca full-text nei contenuti, compresi i file in formato pdf.
87
+ - Predisposizione per gestione contenuti multilingua.
88
+ - Sistema di workflow per assegnare la redazione delle lingue aggiuntive
89
+ ad un gruppo di traduttori.
90
+ - Possibilità di integrazione con prodotti aggiuntivi, o di comunicazione
91
+ verso altri applicativi via API.
92
+ - Registrazione utenti per contenuti personalizzati o accesso ad area
93
+ riservata.
94
+ - Pubblicazione o ritiro contenuti temporizzabili con riferimento a date e
95
+ ore predefinite.
96
+ - Controllo in tempo reale di collegamenti e dell'integrità referenziale.
97
+ - Lock automatico dei contenuti per evitare sovrapposizione di modifiche
98
+ da parte di più redattori.
99
+ - Possibili connessioni con applicazioni e sistemi aziendali standard come
100
+ CRM e integrabile con web service, database SQL e NoSQL.
101
+ screenshots:
102
+ - docs/01-io-sanita.png
103
+ - docs/io-sanita-02.png
104
+ - docs/io-sanita-03.png
105
+ legal:
106
+ license: LGPL-3.0-only
107
+ intendedAudience:
108
+ scope:
109
+ - local-authorities
110
+ - government
111
+ - healthcare
112
+ maintenance:
113
+ type: internal
114
+ contacts:
115
+ - name: Stefano Marchetti
116
+ email: info@redturtle.it
117
+ phone: "+3905321915958"
118
+ affiliation: RedTurtle Technology srl
119
+ localisation:
120
+ localisationReady: true
121
+ availableLanguages:
122
+ - it
123
+ it:
124
+ conforme:
125
+ modelloInteroperabilita: true
126
+ gdpr: true
127
+ lineeGuidaDesign: true
128
+ misureMinimeSicurezza: true
@@ -7,10 +7,6 @@
7
7
  }
8
8
 
9
9
  .map-wrapper {
10
- #geocoded-result {
11
- z-index: 0;
12
- }
13
-
14
10
  &.size_small {
15
11
  #geocoded-result {
16
12
  height: 400px;
@@ -7,6 +7,7 @@
7
7
  h5 {
8
8
  &.card-title {
9
9
  @include rem-size(font-size, 18);
10
+ word-break: break-word;
10
11
  }
11
12
  }
12
13
  .icon {
@@ -1,16 +1,12 @@
1
1
  import { toPublicURL } from '@plone/volto/helpers';
2
+ import { useLoadSteps } from 'io-sanita-theme/components/View/ComeFarePer/Steps/helpers';
2
3
  import {
3
4
  SchemaOrg,
4
5
  SchemaOrgUtils,
5
6
  richTextHasContent,
6
7
  } from 'io-sanita-theme/helpers';
7
8
 
8
- import { useLoadSteps } from 'io-sanita-theme/components/View/ComeFarePer/Steps/helpers';
9
- import { positions } from 'slate';
10
-
11
9
  const ComeFarePerSchemaOrg = ({ content }) => {
12
- const siteTitle = SchemaOrgUtils.getSiteTitle();
13
-
14
10
  let description = [];
15
11
  let _yield = [];
16
12
  let steps = content?.items?.filter((item) => item['@type'] === 'Step') ?? [];
@@ -5,7 +5,6 @@
5
5
 
6
6
  import React, { useState, useEffect } from 'react';
7
7
  import { useIntl, defineMessages } from 'react-intl';
8
- import { useDispatch, useSelector } from 'react-redux';
9
8
 
10
9
  import PropTypes from 'prop-types';
11
10
  import {
@@ -63,7 +62,6 @@ const messages = defineMessages({
63
62
  */
64
63
  const Steps = ({ content, steps = [] }) => {
65
64
  const intl = useIntl();
66
- const dispatch = useDispatch();
67
65
  const [activeItem, setActiveItem] = useState('');
68
66
  const [allOpen, setAllOpen] = useState(false);
69
67
 
@@ -24,7 +24,7 @@ export const useLoadSteps = (steps = []) => {
24
24
 
25
25
  return () => {
26
26
  steps.forEach((item) => {
27
- dispatch(resetContent(subrequest_id));
27
+ dispatch(resetContent(item['@id']));
28
28
  });
29
29
  };
30
30
  }, []);
@@ -46,7 +46,7 @@ const EventoSchemaOrg = ({ content }) => {
46
46
  addressCountry: 'IT',
47
47
  },
48
48
  };
49
- } else if (content.struttura_correlata.length > 0) {
49
+ } else if (content.struttura_correlata?.length > 0) {
50
50
  schemaOrg.location = {
51
51
  '@type': 'Place',
52
52
  name: content.struttura_correlata[0].title,
@@ -62,7 +62,7 @@ const EventoSchemaOrg = ({ content }) => {
62
62
  }
63
63
 
64
64
  // organizzatore interno
65
- if (content.organizzato_da_interno.length > 0) {
65
+ if (content.organizzato_da_interno?.length > 0) {
66
66
  schemaOrg.organizer = {
67
67
  '@type': 'Organization',
68
68
  name: content.organizzato_da_interno[0].title,
@@ -85,7 +85,7 @@ const EventoSchemaOrg = ({ content }) => {
85
85
  SchemaOrgUtils.fieldDataToPlainText(content.parteciperanno),
86
86
  );
87
87
  }
88
- if (content.persona_correlata.length > 0) {
88
+ if (content.persona_correlata?.length > 0) {
89
89
  attendeeList.push(content.persona_correlata.map((item) => item.title));
90
90
  }
91
91
  if (attendeeList.length > 0) {
@@ -102,7 +102,7 @@ const EventoSchemaOrg = ({ content }) => {
102
102
  SchemaOrgUtils.fieldDataToPlainText(content.a_chi_si_rivolge),
103
103
  );
104
104
  }
105
- if (content.a_chi_si_rivolge_tassonomia.length > 0) {
105
+ if (content?.a_chi_si_rivolge_tassonomia?.length > 0) {
106
106
  audienceList.push(
107
107
  content.a_chi_si_rivolge_tassonomia.map((item) => item.title),
108
108
  );
@@ -1,16 +1,11 @@
1
- import { useIntl } from 'react-intl';
2
1
  import { toPublicURL } from '@plone/volto/helpers';
3
- import { SiteProperty } from 'volto-site-settings';
4
2
  import {
5
- getSiteProperty,
6
3
  SchemaOrgUtils,
7
4
  richTextHasContent,
8
5
  SchemaOrg,
9
6
  } from 'io-sanita-theme/helpers';
10
7
 
11
8
  const NewsItemSchemaOrg = ({ content }) => {
12
- const intl = useIntl();
13
-
14
9
  let siteTitle = SchemaOrgUtils.getSiteTitle();
15
10
 
16
11
  let schemaOrg = {
@@ -1,13 +1,5 @@
1
1
  import { toPublicURL } from '@plone/volto/helpers';
2
- import {
3
- SchemaOrg,
4
- SchemaOrgUtils,
5
- richTextHasContent,
6
- } from 'io-sanita-theme/helpers';
7
-
8
- import { useLoadSteps } from 'io-sanita-theme/components/View/ComeFarePer/Steps/helpers';
9
- import { positions } from 'slate';
10
- import schema from '../../manage/Widgets/HeaderContactsWidget/schema';
2
+ import { SchemaOrg, SchemaOrgUtils } from 'io-sanita-theme/helpers';
11
3
 
12
4
  const PersonaSchemaOrg = ({ content }) => {
13
5
  const siteTitle = SchemaOrgUtils.getSiteTitle();
@@ -76,7 +76,7 @@ const ServizioSchemaOrg = ({ content }) => {
76
76
  : content.prenota_online_link;
77
77
  }
78
78
 
79
- if (content.struttura_correlata.length > 0) {
79
+ if (content.struttura_correlata?.length > 0) {
80
80
  schemaOrg.availableChannel.serviceLocation =
81
81
  content.struttura_correlata.map((struttura) => {
82
82
  return {
@@ -94,7 +94,7 @@ const ServizioSchemaOrg = ({ content }) => {
94
94
  }
95
95
 
96
96
  // di UO se ne possono selezionare soltanto una
97
- if (content.uo_correlata.length > 0) {
97
+ if (content.uo_correlata?.length > 0) {
98
98
  schemaOrg.provider = {
99
99
  '@type': 'Place',
100
100
  name: content.uo_correlata[0].title,
@@ -1,6 +1,7 @@
1
1
  @import 'cms-ui/cms-ui_container';
2
2
  @import 'cms-ui/sidebar';
3
3
  @import 'cms-ui/subblocks-edit';
4
+ @import 'cms-ui/controlpanel';
4
5
  @import 'io-sanita/mixins';
5
6
 
6
7
  body.cms-ui {
@@ -0,0 +1,7 @@
1
+ body.cms-ui {
2
+ .ui.container.users-control-panel {
3
+ form.ui.form:has(table.ui.table) {
4
+ overflow-x: auto;
5
+ }
6
+ }
7
+ }
@@ -1,12 +1,9 @@
1
1
  .leaflet-container {
2
+ z-index: 0; //per evitare che vada sopra alla testata styicky del sito
3
+
2
4
  .marker-cluster {
3
5
  background-color: $accent;
4
6
  color: $accent-contrast-text;
5
7
  box-shadow: 0 0 1px 4px rgba($accent, 60%);
6
8
  }
7
9
  }
8
- .leaflet-pane,
9
- .leaflet-bottom,
10
- .leaflet-top {
11
- z-index: 0; //per evitare che vada sopra alla testata styicky del sito
12
- }