design-comuni-plone-theme 11.27.0 → 11.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.
Binary file
package/CHANGELOG.md CHANGED
@@ -1,5 +1,31 @@
1
1
 
2
2
 
3
+ ## [11.28.0](https://github.com/RedTurtle/design-comuni-plone-theme/compare/v11.27.0...v11.28.0) (2025-03-04)
4
+
5
+
6
+ ### Features
7
+
8
+ * feedback customizations for new volto-feedback version ([#897](https://github.com/RedTurtle/design-comuni-plone-theme/issues/897)) ([ac3f292](https://github.com/RedTurtle/design-comuni-plone-theme/commit/ac3f292ba0fd76af35f64d3bc1a7f1e2b5f46ff4))
9
+
10
+
11
+ ### Bug Fixes
12
+
13
+ * added cards to show files uploaded in ct persona trasparenza folders ([#889](https://github.com/RedTurtle/design-comuni-plone-theme/issues/889)) ([5ce0e06](https://github.com/RedTurtle/design-comuni-plone-theme/commit/5ce0e06b24cc9794478e38e95facff7883cd527f))
14
+ * changed draftjs buttons font in accedi al servizio section in service ([#891](https://github.com/RedTurtle/design-comuni-plone-theme/issues/891)) ([c1cc30b](https://github.com/RedTurtle/design-comuni-plone-theme/commit/c1cc30b26da79fa3014bb1f9e38478a8ee9b311d))
15
+ * search block focus styles and scroll into view results when apply filters ([#898](https://github.com/RedTurtle/design-comuni-plone-theme/issues/898)) ([3bbe8d0](https://github.com/RedTurtle/design-comuni-plone-theme/commit/3bbe8d05c811ca6f5729cb76c9efca4715562053))
16
+ * updated locales ([fdbb495](https://github.com/RedTurtle/design-comuni-plone-theme/commit/fdbb495aa72a9987de62b7a53da4839fbf402766))
17
+ * urlRegex syntax ([#894](https://github.com/RedTurtle/design-comuni-plone-theme/issues/894)) ([6eb2ec9](https://github.com/RedTurtle/design-comuni-plone-theme/commit/6eb2ec9325063622335f3174628f1b30cdb1ffbd))
18
+
19
+
20
+ ### Maintenance
21
+
22
+ * release.md info on BE change ([#895](https://github.com/RedTurtle/design-comuni-plone-theme/issues/895)) ([83409ef](https://github.com/RedTurtle/design-comuni-plone-theme/commit/83409ef52b7edc312c3685159bc9c9df07f92425))
23
+
24
+
25
+ ### Documentation
26
+
27
+ * updated publiccode and release log ([1c28a3a](https://github.com/RedTurtle/design-comuni-plone-theme/commit/1c28a3a513898b4c87ccdcaf7e380c434b16fac3))
28
+
3
29
  ## [11.27.0](https://github.com/RedTurtle/design-comuni-plone-theme/compare/v11.26.5...v11.27.0) (2025-02-26)
4
30
 
5
31
 
package/RELEASE.md CHANGED
@@ -41,6 +41,23 @@
41
41
  - ...
42
42
  -->
43
43
 
44
+ ## Versione 11.28.0 (04/03/2025)
45
+
46
+ ### Migliorie
47
+
48
+ - Tutti i bottoni della sezione "Accedi al servizio" hanno lo stesso font.
49
+ - Nel blocco 'Cerca' ora viene fatto lo scroll automatico nel punto dove iniziano i risultati di ricerca quando vengono modificati i filtri.
50
+
51
+ ### Novità
52
+
53
+ - Nel campo "Assessori di riferimento" nel CT Unità Organizzativa è ora possibile collegare due CT Persona.
54
+ - Per caricare documenti per "Dichiarazioni di insussistenza e incompatibilità" e per "Emolumenti a carico della finanza pubblica" è ora possibile caricare anche documenti multipli dalle cartelle contenute nel CT Persona, non solo dai campi specifici.
55
+
56
+ ### Fix
57
+
58
+ - I campi del CT Servizio - sezione Accedi al Servizio funzionano correttamente.
59
+ - Sistemato lo stile del focus nelle select del blocco 'Cerca'.
60
+
44
61
  ## Versione 11.27.0 (26/02/2025)
45
62
 
46
63
  ### Migliorie
@@ -949,6 +949,11 @@ msgstr ""
949
949
  msgid "atto_nomina"
950
950
  msgstr ""
951
951
 
952
+ #: config/italiaConfig
953
+ # defaultMessage: Login/Logout
954
+ msgid "auth_ft"
955
+ msgstr ""
956
+
952
957
  #: config/Blocks/ListingOptions/sliderTemplate
953
958
  # defaultMessage: Autoplay
954
959
  msgid "autoplay"
@@ -3890,6 +3895,11 @@ msgstr ""
3890
3895
  msgid "simplecard_listing_appearance_oneforrow"
3891
3896
  msgstr ""
3892
3897
 
3898
+ #: config/italiaConfig
3899
+ # defaultMessage: Sitemap
3900
+ msgid "sitemap_ft"
3901
+ msgstr ""
3902
+
3893
3903
  #: components/ItaliaTheme/View/PersonaView/PersonaDocumenti
3894
3904
  # defaultMessage: Situazione patrimoniale
3895
3905
  msgid "situazione_patrimoniale"
@@ -934,6 +934,11 @@ msgstr ""
934
934
  msgid "atto_nomina"
935
935
  msgstr "Act of appointment"
936
936
 
937
+ #: config/italiaConfig
938
+ # defaultMessage: Login/Logout
939
+ msgid "auth_ft"
940
+ msgstr ""
941
+
937
942
  #: config/Blocks/ListingOptions/sliderTemplate
938
943
  # defaultMessage: Autoplay
939
944
  msgid "autoplay"
@@ -3875,6 +3880,11 @@ msgstr ""
3875
3880
  msgid "simplecard_listing_appearance_oneforrow"
3876
3881
  msgstr ""
3877
3882
 
3883
+ #: config/italiaConfig
3884
+ # defaultMessage: Sitemap
3885
+ msgid "sitemap_ft"
3886
+ msgstr ""
3887
+
3878
3888
  #: components/ItaliaTheme/View/PersonaView/PersonaDocumenti
3879
3889
  # defaultMessage: Situazione patrimoniale
3880
3890
  msgid "situazione_patrimoniale"
@@ -943,6 +943,11 @@ msgstr "Escrituras y documentos que acompañan a la solicitud"
943
943
  msgid "atto_nomina"
944
944
  msgstr "Acto de nombramiento"
945
945
 
946
+ #: config/italiaConfig
947
+ # defaultMessage: Login/Logout
948
+ msgid "auth_ft"
949
+ msgstr ""
950
+
946
951
  #: config/Blocks/ListingOptions/sliderTemplate
947
952
  # defaultMessage: Autoplay
948
953
  msgid "autoplay"
@@ -3884,6 +3889,11 @@ msgstr "Aquí puede seleccionar un aspecto diferente al predeterminado para la p
3884
3889
  msgid "simplecard_listing_appearance_oneforrow"
3885
3890
  msgstr ""
3886
3891
 
3892
+ #: config/italiaConfig
3893
+ # defaultMessage: Sitemap
3894
+ msgid "sitemap_ft"
3895
+ msgstr ""
3896
+
3887
3897
  #: components/ItaliaTheme/View/PersonaView/PersonaDocumenti
3888
3898
  # defaultMessage: Situazione patrimoniale
3889
3899
  msgid "situazione_patrimoniale"
@@ -951,6 +951,11 @@ msgstr ""
951
951
  msgid "atto_nomina"
952
952
  msgstr "Acte de nomination"
953
953
 
954
+ #: config/italiaConfig
955
+ # defaultMessage: Login/Logout
956
+ msgid "auth_ft"
957
+ msgstr ""
958
+
954
959
  #: config/Blocks/ListingOptions/sliderTemplate
955
960
  # defaultMessage: Autoplay
956
961
  msgid "autoplay"
@@ -3892,6 +3897,11 @@ msgstr ""
3892
3897
  msgid "simplecard_listing_appearance_oneforrow"
3893
3898
  msgstr ""
3894
3899
 
3900
+ #: config/italiaConfig
3901
+ # defaultMessage: Sitemap
3902
+ msgid "sitemap_ft"
3903
+ msgstr ""
3904
+
3895
3905
  #: components/ItaliaTheme/View/PersonaView/PersonaDocumenti
3896
3906
  # defaultMessage: Situazione patrimoniale
3897
3907
  msgid "situazione_patrimoniale"
@@ -934,6 +934,11 @@ msgstr "Atti e documenti a corredo dell'istanza"
934
934
  msgid "atto_nomina"
935
935
  msgstr "Atto di nomina"
936
936
 
937
+ #: config/italiaConfig
938
+ # defaultMessage: Login/Logout
939
+ msgid "auth_ft"
940
+ msgstr ""
941
+
937
942
  #: config/Blocks/ListingOptions/sliderTemplate
938
943
  # defaultMessage: Autoplay
939
944
  msgid "autoplay"
@@ -3875,6 +3880,11 @@ msgstr "Qui puoi selezionare, per il template 'Card semplice', un aspetto divers
3875
3880
  msgid "simplecard_listing_appearance_oneforrow"
3876
3881
  msgstr "Un elemento per riga"
3877
3882
 
3883
+ #: config/italiaConfig
3884
+ # defaultMessage: Sitemap
3885
+ msgid "sitemap_ft"
3886
+ msgstr ""
3887
+
3878
3888
  #: components/ItaliaTheme/View/PersonaView/PersonaDocumenti
3879
3889
  # defaultMessage: Situazione patrimoniale
3880
3890
  msgid "situazione_patrimoniale"
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: 2025-02-26T10:23:56.371Z\n"
4
+ "POT-Creation-Date: 2025-03-04T14:31:20.722Z\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
  "MIME-Version: 1.0\n"
@@ -936,6 +936,11 @@ msgstr ""
936
936
  msgid "atto_nomina"
937
937
  msgstr ""
938
938
 
939
+ #: config/italiaConfig
940
+ # defaultMessage: Login/Logout
941
+ msgid "auth_ft"
942
+ msgstr ""
943
+
939
944
  #: config/Blocks/ListingOptions/sliderTemplate
940
945
  # defaultMessage: Autoplay
941
946
  msgid "autoplay"
@@ -3877,6 +3882,11 @@ msgstr ""
3877
3882
  msgid "simplecard_listing_appearance_oneforrow"
3878
3883
  msgstr ""
3879
3884
 
3885
+ #: config/italiaConfig
3886
+ # defaultMessage: Sitemap
3887
+ msgid "sitemap_ft"
3888
+ msgstr ""
3889
+
3880
3890
  #: components/ItaliaTheme/View/PersonaView/PersonaDocumenti
3881
3891
  # defaultMessage: Situazione patrimoniale
3882
3892
  msgid "situazione_patrimoniale"
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "design-comuni-plone-theme",
3
3
  "description": "Volto Theme for Italia design guidelines",
4
4
  "license": "GPL-v3",
5
- "version": "11.27.0",
5
+ "version": "11.28.0",
6
6
  "main": "src/index.js",
7
7
  "repository": {
8
8
  "type": "git",
@@ -151,7 +151,7 @@
151
151
  "volto-data-grid-widget": "2.3.1",
152
152
  "volto-dropdownmenu": "4.1.3",
153
153
  "volto-editablefooter": "5.1.7",
154
- "volto-feedback": "0.5.2",
154
+ "volto-feedback": "0.6.0",
155
155
  "volto-form-block": "3.10.0",
156
156
  "volto-gdpr-privacy": "2.2.12",
157
157
  "volto-google-analytics": "2.0.0",
package/publiccode.yml CHANGED
@@ -227,9 +227,9 @@ maintenance:
227
227
  name: io-Comune - Il sito AgID per Comuni ed Enti Pubblici
228
228
  platforms:
229
229
  - web
230
- releaseDate: '2025-02-26'
230
+ releaseDate: '2025-03-04'
231
231
  softwareType: standalone/web
232
- softwareVersion: 11.27.0
232
+ softwareVersion: 11.28.0
233
233
  url: 'https://github.com/italia/design-comuni-plone-theme'
234
234
  usedBy:
235
235
  - ASP Comuni Modenesi Area Nord
@@ -20,6 +20,8 @@ import {
20
20
  submitFeedback,
21
21
  resetSubmitFeedback,
22
22
  getFeedbackThreshold,
23
+ isFeedbackEnabledForRoute,
24
+ getStaticFeedbackRouteTitle,
23
25
  } from 'volto-feedback';
24
26
  import cx from 'classnames';
25
27
  import AnswersStep from './Steps/AnswersStep';
@@ -27,6 +29,8 @@ import CommentsStep from './Steps/CommentsStep';
27
29
  import RTRating from './Steps/Commons/Rating';
28
30
  import { PropTypes } from 'prop-types';
29
31
 
32
+ import 'volto-feedback/components/FeedbackForm/feedback-form.css';
33
+
30
34
  const messages = defineMessages({
31
35
  title: {
32
36
  id: 'feedback_form_title',
@@ -234,15 +238,26 @@ const FeedbackForm = ({ title, pathname }) => {
234
238
  const sendFormData = () => {
235
239
  if (invalidForm) return;
236
240
  setStep(2);
241
+ let content =
242
+ isFeedbackEnabledForRoute(path) && isCmsUi(path)
243
+ ? getStaticFeedbackRouteTitle(path)
244
+ : path;
245
+ if (typeof content === 'object' && content.id)
246
+ content = intl.formatMessage(content);
237
247
  const data = {
238
248
  ...formData,
239
249
  ...(captcha && { 'g-recaptcha-response': validToken }),
240
250
  answer: getTranslatedQuestion(intl, formData.answer),
251
+ content,
241
252
  };
242
- dispatch(submitFeedback(path, data));
253
+ dispatch(submitFeedback(data));
243
254
  resetFormData();
244
255
  };
245
256
 
257
+ if (!isFeedbackEnabledForRoute(path)) {
258
+ return null;
259
+ }
260
+
246
261
  let action = path?.length > 1 ? path.replace(/\//g, '') : path;
247
262
  if (action?.length > 0) {
248
263
  action = action?.replace(/-/g, '_');
@@ -250,10 +265,6 @@ const FeedbackForm = ({ title, pathname }) => {
250
265
  action = 'homepage';
251
266
  }
252
267
 
253
- if (isCmsUi(path)) {
254
- return null;
255
- }
256
-
257
268
  return (
258
269
  <section className="bg-primary customer-satisfaction">
259
270
  <Container>
@@ -215,7 +215,11 @@ const PersonaDocumenti = ({ content }) => {
215
215
  />
216
216
  </RichTextSection>
217
217
  )}
218
- {content.dichiarazioni_di_insussistenza_e_incompatibilita?.download && (
218
+ {(content.dichiarazioni_di_insussistenza_e_incompatibilita?.download ||
219
+ contentFolderHasItems(
220
+ content,
221
+ 'dichiarazione-insussistenza-cause-di-inconferibilita-e-incompatibilita',
222
+ )) && (
219
223
  <RichTextSection
220
224
  tag_id="dichiarazioni_di_insussistenza_e_incompatibilita"
221
225
  title={intl.formatMessage(
@@ -223,20 +227,39 @@ const PersonaDocumenti = ({ content }) => {
223
227
  )}
224
228
  >
225
229
  <div className="card-wrapper card-teaser-wrapper card-teaser-wrapper-equal">
226
- <Attachment
227
- download_url={
228
- content.dichiarazioni_di_insussistenza_e_incompatibilita
229
- .download
230
- }
231
- title={
232
- content.dichiarazioni_di_insussistenza_e_incompatibilita
233
- .filename
234
- }
235
- />
230
+ {content.dichiarazioni_di_insussistenza_e_incompatibilita
231
+ ?.download && (
232
+ <Attachment
233
+ download_url={
234
+ content.dichiarazioni_di_insussistenza_e_incompatibilita
235
+ .download
236
+ }
237
+ title={
238
+ content.dichiarazioni_di_insussistenza_e_incompatibilita
239
+ .filename
240
+ }
241
+ />
242
+ )}
243
+ {contentFolderHasItems(
244
+ content,
245
+ 'dichiarazione-insussistenza-cause-di-inconferibilita-e-incompatibilita',
246
+ ) && (
247
+ <Attachments
248
+ content={content}
249
+ folder_name={
250
+ 'dichiarazione-insussistenza-cause-di-inconferibilita-e-incompatibilita'
251
+ }
252
+ as_section={false}
253
+ />
254
+ )}
236
255
  </div>
237
256
  </RichTextSection>
238
257
  )}
239
- {content.emolumenti_a_carico_della_finanza_pubblica?.download && (
258
+ {(content.emolumenti_a_carico_della_finanza_pubblica?.download ||
259
+ contentFolderHasItems(
260
+ content,
261
+ 'emolumenti-complessivi-percepiti-a-carico-della-finanza-pubblica',
262
+ )) && (
240
263
  <RichTextSection
241
264
  tag_id="emolumenti_a_carico_della_finanza_pubblica"
242
265
  title={intl.formatMessage(
@@ -244,14 +267,28 @@ const PersonaDocumenti = ({ content }) => {
244
267
  )}
245
268
  >
246
269
  <div className="card-wrapper card-teaser-wrapper card-teaser-wrapper-equal">
247
- <Attachment
248
- download_url={
249
- content.emolumenti_a_carico_della_finanza_pubblica.download
250
- }
251
- title={
252
- content.emolumenti_a_carico_della_finanza_pubblica.filename
253
- }
254
- />
270
+ {content.emolumenti_a_carico_della_finanza_pubblica?.download && (
271
+ <Attachment
272
+ download_url={
273
+ content.emolumenti_a_carico_della_finanza_pubblica.download
274
+ }
275
+ title={
276
+ content.emolumenti_a_carico_della_finanza_pubblica.filename
277
+ }
278
+ />
279
+ )}
280
+ {contentFolderHasItems(
281
+ content,
282
+ 'emolumenti-complessivi-percepiti-a-carico-della-finanza-pubblica',
283
+ ) && (
284
+ <Attachments
285
+ content={content}
286
+ folder_name={
287
+ 'emolumenti-complessivi-percepiti-a-carico-della-finanza-pubblica'
288
+ }
289
+ as_section={false}
290
+ />
291
+ )}
255
292
  </div>
256
293
  </RichTextSection>
257
294
  )}
@@ -72,8 +72,8 @@ import {
72
72
  FALLBACK_IMAGE_SRC_MAX_W,
73
73
  } from 'design-comuni-plone-theme/helpers/images';
74
74
 
75
- const ReleaseLog = loadable(() =>
76
- import('design-comuni-plone-theme/components/ReleaseLog/ReleaseLog'),
75
+ const ReleaseLog = loadable(
76
+ () => import('design-comuni-plone-theme/components/ReleaseLog/ReleaseLog'),
77
77
  );
78
78
 
79
79
  const messages = defineMessages({
@@ -81,6 +81,14 @@ const messages = defineMessages({
81
81
  id: 'search_brdc',
82
82
  defaultMessage: 'Ricerca',
83
83
  },
84
+ auth_ft: {
85
+ id: 'auth_ft',
86
+ defaultMessage: 'Login/Logout',
87
+ },
88
+ sitemap_ft: {
89
+ id: 'sitemap_ft',
90
+ defaultMessage: 'Sitemap',
91
+ },
84
92
  });
85
93
 
86
94
  export default function applyConfig(voltoConfig) {
@@ -284,6 +292,7 @@ export default function applyConfig(voltoConfig) {
284
292
  },
285
293
  enableFeedbackForm: true,
286
294
  noFeedbackFormFor: ['ModelloPratica'],
295
+ enableNoFeedbackFormFor: false,
287
296
  enableFeedbackFormCaptcha: false,
288
297
  enableVoltoFormBlockCaptcha: true,
289
298
  splitMegamenuColumns: true, //se impostato a false, non spezza le colonne con intestazioni nel megamenu
@@ -360,6 +369,18 @@ export default function applyConfig(voltoConfig) {
360
369
  pane: CommentsStep,
361
370
  },
362
371
  ],
372
+ // Enable Feedback component in your CMS/Non content routes
373
+ feedbackEnabledNonContentRoutes: [
374
+ ...(config.settings['volto-feedback']
375
+ ?.feedbackEnabledNonContentRoutes ?? []),
376
+ {
377
+ path: '/login',
378
+ feedbackTitle: messages.auth_ft,
379
+ },
380
+ // { path: '/logout', feedbackTitle: messages.auth_ft },
381
+ { path: '/sitemap', feedbackTitle: messages.sitemap_ft },
382
+ { path: '/search', feedbackTitle: messages.search_brdc },
383
+ ],
363
384
  },
364
385
  videoAllowExternalsDefault: false,
365
386
  showTrasparenzaFields: false,
@@ -7,7 +7,7 @@
7
7
  the way to handle search sort. If searchableText is setted, discard default sorting and uses plone's ranking only if is configured from sidebar. (Changed applyDefaults fn passing usePloneRanking)
8
8
  */
9
9
 
10
- import React from 'react';
10
+ import React, { useState } from 'react';
11
11
 
12
12
  import ListingBody from '@plone/volto/components/manage/Blocks/Listing/ListingBody';
13
13
  import { withBlockExtensions } from '@plone/volto/helpers';
@@ -21,6 +21,7 @@ import cx from 'classnames';
21
21
  import { isEqual, isFunction } from 'lodash';
22
22
  import { useSelector } from 'react-redux';
23
23
  import { compose } from 'redux';
24
+ import { useEffect } from 'react';
24
25
 
25
26
  const getListingBodyVariation = (data) => {
26
27
  const { variations } = config.blocks.blocksConfig.listing;
@@ -109,9 +110,26 @@ const SearchBlockView = (props) => {
109
110
  }, [dataListingBodyVariation, mode]);
110
111
 
111
112
  const root = useSelector((state) => state.breadcrumbs.root);
113
+ const [defaultListingBodyData] = React.useState(
114
+ applyDefaults(searchData, root, data.usePloneRanking),
115
+ );
112
116
  const listingBodyData = applyDefaults(searchData, root, data.usePloneRanking);
117
+
113
118
  const { variations } = config.blocks.blocksConfig.listing;
114
119
  const listingBodyVariation = variations.find(({ id }) => id === selectedView);
120
+
121
+ const query = listingBodyData.query;
122
+ const resultsRef = React.forwardRef(null);
123
+
124
+ useEffect(() => {
125
+ if (
126
+ JSON.stringify(defaultListingBodyData.query) !== JSON.stringify(query)
127
+ ) {
128
+ //fai lo scroll solo quando vengono modificati i filtri dall'utente. Evita lo scroll al primo load
129
+ resultsRef.current.scrollIntoView({ behavior: 'smooth' });
130
+ }
131
+ }, [query]);
132
+
115
133
  if (!Layout) return null;
116
134
  return (
117
135
  <div className={cx('block search', { 'public-ui': mode === 'edit' })}>
@@ -120,6 +138,7 @@ const SearchBlockView = (props) => {
120
138
  isEditMode={mode === 'edit'}
121
139
  selectedView={selectedView}
122
140
  setSelectedView={setSelectedView}
141
+ resultsRef={resultsRef}
123
142
  >
124
143
  {/* Add class .block.listing to benefit from existing listing template styles */}
125
144
  <div className="block listing search-results">
@@ -1,5 +1,6 @@
1
1
  /* CUSTOMIZATIONS:
2
2
  - Agid styling
3
+ - added resultsRef
3
4
  */
4
5
  import React from 'react';
5
6
  import {
@@ -33,6 +34,7 @@ const LeftColumnFacets = (props) => {
33
34
  isEditMode,
34
35
  querystring = {},
35
36
  searchData,
37
+ resultsRef,
36
38
  // mode = 'view',
37
39
  // variation,
38
40
  } = props;
@@ -117,24 +119,26 @@ const LeftColumnFacets = (props) => {
117
119
  </div>
118
120
  )}
119
121
 
120
- <div className="search-results-count-sort d-flex align-center flex-wrap">
121
- <SearchDetails
122
- text={searchedText}
123
- total={totalItems}
124
- data={data}
125
- />
126
- <FilterList
127
- {...props}
128
- isEditMode={isEditMode}
129
- setFacets={(f) => {
130
- flushSync(() => {
131
- setFacets(f);
132
- onTriggerSearch(searchedText || '', f);
133
- });
134
- }}
135
- />
122
+ <div ref={resultsRef} className="results-wrapper">
123
+ <div className="search-results-count-sort d-flex align-center flex-wrap">
124
+ <SearchDetails
125
+ text={searchedText}
126
+ total={totalItems}
127
+ data={data}
128
+ />
129
+ <FilterList
130
+ {...props}
131
+ isEditMode={isEditMode}
132
+ setFacets={(f) => {
133
+ flushSync(() => {
134
+ setFacets(f);
135
+ onTriggerSearch(searchedText || '', f);
136
+ });
137
+ }}
138
+ />
139
+ </div>
140
+ {children}
136
141
  </div>
137
- {children}
138
142
  </div>
139
143
  </Row>
140
144
  </Container>
@@ -1,5 +1,6 @@
1
1
  /* CUSTOMIZATIONS:
2
2
  - Agid styling
3
+ - added resultsRef
3
4
  */
4
5
  import React from 'react';
5
6
  import {
@@ -35,6 +36,7 @@ const RightColumnFacets = (props) => {
35
36
  isEditMode,
36
37
  querystring = {},
37
38
  searchData,
39
+ resultsRef,
38
40
  // mode = 'view',
39
41
  // variation,
40
42
  } = props;
@@ -72,24 +74,26 @@ const RightColumnFacets = (props) => {
72
74
  </div>
73
75
  )}
74
76
 
75
- <div className="search-results-count-sort d-flex align-center flex-wrap">
76
- <SearchDetails
77
- text={searchedText}
78
- total={totalItems}
79
- data={data}
80
- />
81
- <FilterList
82
- {...props}
83
- isEditMode={isEditMode}
84
- setFacets={(f) => {
85
- flushSync(() => {
86
- setFacets(f);
87
- onTriggerSearch(searchedText || '', f);
88
- });
89
- }}
90
- />
77
+ <div ref={resultsRef} className="results-wrapper">
78
+ <div className="search-results-count-sort d-flex align-center flex-wrap">
79
+ <SearchDetails
80
+ text={searchedText}
81
+ total={totalItems}
82
+ data={data}
83
+ />
84
+ <FilterList
85
+ {...props}
86
+ isEditMode={isEditMode}
87
+ setFacets={(f) => {
88
+ flushSync(() => {
89
+ setFacets(f);
90
+ onTriggerSearch(searchedText || '', f);
91
+ });
92
+ }}
93
+ />
94
+ </div>
95
+ {children}
91
96
  </div>
92
- {children}
93
97
  </div>
94
98
 
95
99
  {showColumn && (
@@ -25,15 +25,22 @@ const Footer = () => {
25
25
  useGoogleAnalytics();
26
26
  const currentContent = useSelector((state) => state.content?.data);
27
27
  const contentType = currentContent ? currentContent['@type'] : null;
28
- const noFeedbackFormFor = config.settings.siteProperties.noFeedbackFormFor || [];
28
+ const noFeedbackFormFor =
29
+ config.settings.siteProperties.noFeedbackFormFor || [];
30
+ const showFeedbackForm = config.settings.siteProperties
31
+ .enableNoFeedbackFormFor
32
+ ? contentType &&
33
+ !noFeedbackFormFor.includes(contentType) &&
34
+ config.settings.siteProperties.enableFeedbackForm
35
+ : true;
29
36
 
30
37
  return (
31
38
  <>
32
- {contentType &&
33
- !noFeedbackFormFor.includes(contentType) &&
34
- config.settings.siteProperties.enableFeedbackForm && (
39
+ {showFeedbackForm && (
40
+ <div className="public-ui" id="customer-satisfaction-form">
35
41
  <FeedbackForm />
36
- )}
42
+ </div>
43
+ )}
37
44
 
38
45
  <SubsiteFooter />
39
46
  <footer className="it-footer" id="footer">
@@ -100,11 +100,11 @@ const widgetValidation = {
100
100
  url: {
101
101
  isValidURL: (urlValue, urlObj, intlFunc) => {
102
102
  var urlRegex = new RegExp(
103
- '^(https?:\\/\\/)?' + // optional protocol
103
+ '^(https?:\\/\\/)?' + // optional protocol
104
104
  '(' +
105
- '([a-z\\d]+(-[a-z\\d]+)*\\.)+[a-z]{2,}|' + // validate domain name
106
- '((\\d{1,3}\\.){3}\\d{1,3}))|' + // OR ip (v4) address
107
- '(localhost)' + // OR localhost
105
+ '([a-z\\d]+(-[a-z\\d]+)*\\.)+[a-z]{2,}|' + // validate domain name
106
+ '(\\d{1,3}\\.){3}\\d{1,3}|' + // OR ip (v4) address
107
+ 'localhost' + // OR localhost
108
108
  ')' +
109
109
  '(\\:\\d+)?' + // optional port
110
110
  '(\\/[-a-z\\d%_.~+]*)*' + // path
@@ -258,6 +258,18 @@
258
258
  }
259
259
  }
260
260
  }
261
+
262
+ @media (max-width: #{map-get($grid-breakpoints, md)}) {
263
+ //i filtri della colonna di destra vengono mostrati sotto alla barra di ricerca, prima dei risultati, perchè altrimenti su mobile verrebbero mostrati dopo i risultati.
264
+ .searchBlock-facets.right-column-facets {
265
+ > .row > :first-child {
266
+ order: 1;
267
+ }
268
+ .sideColumn {
269
+ order: 0;
270
+ }
271
+ }
272
+ }
261
273
  }
262
274
 
263
275
  .cms-ui .block.search .sideColumn .columnText .draftjs-buttons a {
@@ -25,6 +25,12 @@
25
25
  .card.border-left-card {
26
26
  margin-bottom: 1.2em;
27
27
  }
28
+
29
+ .richtext-blocks {
30
+ .draftjs-buttons a {
31
+ font-family: 'Titillium Web';
32
+ }
33
+ }
28
34
  }
29
35
 
30
36
  #altri_documenti_items {
@@ -109,6 +109,7 @@
109
109
  @import 'bootstrap-italia/src/scss/custom/form-toggles';
110
110
  @import 'bootstrap-italia/src/scss/custom/form-password';
111
111
  @import 'bootstrap-italia/src/scss/custom/form-select';
112
+ @import './bootstrap-italia/form-select';
112
113
  @import 'bootstrap-italia/src/scss/custom/form-transfer';
113
114
  @import 'bootstrap-italia/src/scss/custom/dropdown';
114
115
  @import 'bootstrap-italia/src/scss/custom/pager';
@@ -0,0 +1,17 @@
1
+ .bootstrap-select-wrapper {
2
+ //prevent focus input style, and add focus styles to all select wrapper, because input has a variable width depending on text inputed and if there's no text inside, when it has focus a double vertical lines are displayed.
3
+ input:focus,
4
+ input:focus-within {
5
+ outline: none !important;
6
+ box-shadow: none !important;
7
+ }
8
+
9
+ &:has(input:focus),
10
+ &:has(input:focus-within) {
11
+ outline: 2px solid $outer-focus-outline !important;
12
+ outline-offset: 2px;
13
+
14
+ border: none !important;
15
+ box-shadow: 0 0 0 2px $inner-focus-shadow !important;
16
+ }
17
+ }