UNPKG

design-comuni-plone-theme

Version:
297 lines (287 loc) 7.57 kB
import React from 'react'; import { FormattedMessage, defineMessages, useIntl } from 'react-intl'; import { RichTextSection, RichTextRender, } from 'design-comuni-plone-theme/components/ItaliaTheme/View'; import { UniversalLink } from '@plone/volto/components'; const messages = defineMessages({ trasparenza: { id: 'trasparenza', defaultMessage: 'Trasparenza', }, yes: { id: 'yes', defaultMessage: 'Si', }, no: { id: 'no', defaultMessage: 'No', }, iter_del_procedimento: { id: 'iter_del_procedimento', defaultMessage: 'Iter del procedimento', }, modalita_di_avvio: { id: 'modalita_di_avvio', defaultMessage: 'Modalità di avvio', }, descrizione: { id: 'descrizione', defaultMessage: 'Descrizione', }, file_correlato: { id: 'file_correlato', defaultMessage: 'File correlato', }, soggetti_esterni: { id: 'soggetti_esterni', defaultMessage: 'Soggetti esterni, nonché, strutture interne coinvolte nel procedimento', }, termini_del_procedimento: { id: 'termini_del_procedimento', defaultMessage: 'Termini del procedimento', }, decorrenza_termine: { id: 'decorrenza_termine', defaultMessage: 'Decorrenza termine', }, fine_termine: { id: 'fine_termine', defaultMessage: 'Fine termine', }, tempo_medio: { id: 'tempo_medio', defaultMessage: 'Tempo medio', }, silenzio_assenso: { id: 'silenzio_assenso', defaultMessage: "Silenzio assenso/Dichiarazione dell'interessato sostitutiva del provvedimento finale", }, provvedimento_finale: { id: 'provvedimento_finale', defaultMessage: 'Provvedimento finale', }, responsabile_procedimento: { id: 'responsabile_procedimento', defaultMessage: 'Responsabile del procedimento', }, unita_organizzativa_competente: { id: 'unita_organizzativa_competente', defaultMessage: 'Unità organizzativa competente del procedimento', }, dirigente: { id: 'dirigente', defaultMessage: 'Dirigente', }, responsabile_del_procedimento: { id: 'responsabile_del_procedimento', defaultMessage: 'Responsabile del procedimento', }, organo_competente_provvedimento_finale: { id: 'organo_competente_provvedimento_finale', defaultMessage: 'Organo competente adozione provvedimento finale', }, modalita_richiesta_informazioni: { id: 'modalita_richiesta_informazioni', defaultMessage: 'Modalità per richiedere informazioni sul procedimento', }, procedura_online: { id: 'procedura_online', defaultMessage: 'Procedura informatizzata online', }, altre_modalita_invio: { id: 'altre_modalita_invio', defaultMessage: 'Altre modalità di invio', }, atti_documenti_corredo: { id: 'atti_documenti_corredo', defaultMessage: "Atti e documenti a corredo dell'istanza", }, reperimento_modulistica: { id: 'reperimento_modulistica', defaultMessage: 'Dove reperire la modulistica', }, pagamenti: { id: 'pagamenti', defaultMessage: 'Pagamenti previsti e modalità', }, strumenti_tutela: { id: 'strumenti_tutela', defaultMessage: 'Strumenti di tutela', }, titolare_potere_sostitutivo: { id: 'titolare_potere_sostitutivo', defaultMessage: 'Titolare del potere sostitutivo', }, ulteriori_informazioni: { id: 'ulteriori_informazioni', defaultMessage: 'Ulteriori informazioni', }, customer_satisfaction: { id: 'customer_satisfaction', defaultMessage: 'Risultati indagini di customer satisfaction', }, riferimenti_normativi: { id: 'riferimenti_normativi', defaultMessage: 'Riferimenti normativi', }, }); const fieldsMap = [ { attr: 'modalita_avvio', type: 'text', label: messages.modalita_di_avvio, }, { attr: 'descrizione', type: 'blocks', label: messages.descrizione, }, { attr: 'file_correlato', type: 'download', label: messages.file_correlato, }, { attr: 'soggetti_esterni', type: 'blocks', label: messages.soggetti_esterni, }, { attr: 'decorrenza_termine', type: 'blocks', label: messages.decorrenza_termine, }, { attr: 'fine_termine', type: 'blocks', label: messages.fine_termine, }, { attr: 'tempo_medio', type: 'blocks', label: messages.tempo_medio }, { attr: 'silenzio_assenso', type: 'bool', label: messages.silenzio_assenso, }, { attr: 'provvedimento_finale', type: 'blocks', label: messages.provvedimento_finale, }, { attr: 'responsabile_procedimento', type: 'link', label: messages.responsabile_procedimento, }, { attr: 'dirigente', type: 'link', label: messages.dirigente }, { attr: 'organo_competente_provvedimento_finale', type: 'blocks', label: messages.organo_competente_provvedimento_finale, }, { attr: 'modalita_richiesta_informazioni', type: 'blocks', label: messages.modalita_richiesta_informazioni, }, { attr: 'procedura_online', type: 'text', label: messages.procedura_online, }, { attr: 'altre_modalita_invio', type: 'blocks', label: messages.altre_modalita_invio, }, { attr: 'atti_documenti_corredo', type: 'blocks', label: messages.atti_documenti_corredo, }, { attr: 'reperimento_modulistica', type: 'blocks', label: messages.reperimento_modulistica, }, { attr: 'pagamenti', type: 'blocks', label: messages.pagamenti }, { attr: 'strumenti_tutela', type: 'blocks', label: messages.strumenti_tutela, }, { attr: 'titolare_potere_sostitutivo', type: 'blocks', label: messages.titolare_potere_sostitutivo, }, { attr: 'customer_satisfaction', type: 'blocks', label: messages.customer_satisfaction, }, { attr: 'riferimenti_normativi', type: 'blocks', label: messages.riferimenti_normativi, }, ]; const TrasparenzaFields = ({ content }) => { const intl = useIntl(); const renderTrasparenzaField = (field) => { if (field.type === 'text') return content[field.attr]; if (field.type === 'blocks') return RichTextRender({ data: content[field.attr], serif: true, }); if (field.type === 'bool') return intl.formatMessage( content[field.attr] ? messages.yes : messages.no, ); if (field.type === 'link' && content[field.attr].length > 0) return ( <UniversalLink item={content[field.attr][0]}> {content[field.attr][0].title} </UniversalLink> ); if (field.type === 'download' && content[field.attr].download) { return ( <p> <a href={content[field.attr].download} download={content[field.attr].filename} title={content[field.attr].filename} > <FormattedMessage id="Download" defaultMessage="Download" /> </a> </p> ); } return null; }; let fields = fieldsMap.map((field) => { if (content[field.attr] === undefined || content[field.attr] === null) return null; const data = renderTrasparenzaField(field); if (!data) return null; return ( <div key={field.attr}> <dt>{intl.formatMessage(field.label)}</dt> <dd>{data}</dd> </div> ); }); return fields.length > 0 ? ( <RichTextSection tag_id="trasparenza" title={intl.formatMessage(messages.trasparenza)} > <dl className="trasparenza-fields">{fields}</dl> </RichTextSection> ) : null; }; export default TrasparenzaFields;