design-comuni-plone-theme
Version:
Volto Theme for Italia design guidelines
239 lines (233 loc) • 7.47 kB
JSX
/**
* Default view component.
* @module components/theme/View/IncaricoView
*/
import React from 'react';
import PropTypes from 'prop-types';
import { defineMessages, useIntl } from 'react-intl';
import {
PageHeader,
SkipToMainContent,
RichTextSection,
OfficeCard,
Metadata,
HelpBox,
richTextHasContent,
Attachments,
IncaricoPlaceholderAfterContent,
IncaricoPlaceholderAfterRelatedItems,
RelatedItems,
IncaricoPersone,
} from 'design-comuni-plone-theme/components/ItaliaTheme/View';
import { contentFolderHasItems } from 'design-comuni-plone-theme/helpers';
import { UniversalLink } from '@plone/volto/components';
import { flattenToAppURL } from '@plone/volto/helpers';
import { injectLazyLibs } from '@plone/volto/helpers/Loadable/Loadable';
const messages = defineMessages({
tipologia_incarico: {
id: 'tipologia_incarico',
defaultMessage: 'Tipo di incarico',
},
data_inizio_incarico: {
id: 'data_inizio_incarico',
defaultMessage: "Data di inizio dell'incarico",
},
data_conclusione_incarico: {
id: 'data_conclusione_incarico',
defaultMessage: "Data di fine dell'incarico",
},
data_insediamento: {
id: 'data_insediamento',
defaultMessage: 'Data di insediamento',
},
importi_viaggio: {
id: 'importi_viaggio',
defaultMessage: 'Importi di viaggio e/o servizio',
},
compensi: {
id: 'compensi',
defaultMessage: 'Compensi',
},
ufficio: {
id: 'ufficio',
defaultMessage: 'Unita organizzativa',
},
responsabile: {
id: 'responsabile',
defaultMessage: 'Responsabile della struttura',
},
data_inizio: {
id: 'data_inizio',
defaultMessage: 'Data inizio incarico',
},
data_conclusione: {
id: 'data_conclusione',
defaultMessage: 'Data conclusione incarico',
},
atto_nomina: {
id: 'atto_nomina',
defaultMessage: 'Atto di nomina',
},
});
/**
* Component to display the default view.
* @function DefaultView
* @param {Object} content Content object.
* @returns {string} Markup of the component.
*/
const IncaricoView = ({ content, moment: momentlib }) => {
const moment = momentlib.default;
const intl = useIntl();
return (
<div className="container px-4 my-4 incarico-view">
<SkipToMainContent />
<PageHeader
content={{ ...content, stato_servizio: null }}
showreadingtime={false}
showdates={false}
showtassonomiaargomenti={false}
/>
<section
className="col-lg-12 it-page-sections-container border-light my-4 py-4"
id="main-content-section"
>
{content.tipologia_incarico && (
<RichTextSection
tag_id="tipologia_incarico"
title={intl.formatMessage(messages.tipologia_incarico)}
>
<div className="font-serif">{content.tipologia_incarico.title}</div>
</RichTextSection>
)}
{content.data_inizio_incarico && (
<RichTextSection
tag_id="data_inizio_incarico"
title={intl.formatMessage(messages.data_inizio_incarico)}
>
<div className="font-serif">
{moment(content.data_inizio_incarico).format('D-MM-YYYY')}
</div>
</RichTextSection>
)}
{content.data_conclusione_incarico && (
<RichTextSection
tag_id="data_conclusione_incarico"
title={intl.formatMessage(messages.data_conclusione_incarico)}
>
<div className="font-serif">
{moment(content.data_conclusione_incarico).format('D-MM-YYYY')}
</div>
</RichTextSection>
)}
{content.data_insediamento && (
<RichTextSection
tag_id="data_insediamento"
title={intl.formatMessage(messages.data_insediamento)}
>
<div className="font-serif">
{moment(content.data_insediamento).format('D-MM-YYYY')}
</div>
</RichTextSection>
)}
{richTextHasContent(content.compensi) && (
<RichTextSection
data={content.compensi}
tag_id={'text-body'}
title={intl.formatMessage(messages.compensi)}
/>
)}
{contentFolderHasItems(content, 'compensi-file') && (
<Attachments
content={content}
folder_name={'compensi-file'}
as_article={false}
/>
)}
{richTextHasContent(content.importi_viaggio_servizio) && (
<RichTextSection
data={content.importi_viaggio_servizio}
tag_id={'text-body'}
title={intl.formatMessage(messages.importi_viaggio)}
/>
)}
{contentFolderHasItems(content, 'importi-di-viaggio-e-o-servizi') && (
<Attachments
content={content}
folder_name={'importi-di-viaggio-e-o-servizi'}
as_article={false}
/>
)}
<IncaricoPersone content={content} />
{content.unita_organizzativa?.length > 0 && (
<RichTextSection
tag_id="ufficio"
title={intl.formatMessage(messages.ufficio)}
>
<div className="card-wrapper card-teaser-wrapper card-teaser-wrapper-equal">
{content.unita_organizzativa?.map((item) => (
<OfficeCard key={flattenToAppURL(item['@id'])} office={item} />
))}
</div>
</RichTextSection>
)}
{content.responsabile_struttura?.length > 0 && (
<RichTextSection
tag_id="responsabile"
title={intl.formatMessage(messages.responsabile)}
>
<div className="card-wrapper card-teaser-wrapper card-teaser-wrapper-equal">
{content.responsabile_struttura?.map((item) => (
<OfficeCard key={flattenToAppURL(item['@id'])} office={item} />
))}
</div>
</RichTextSection>
)}
{content.atto_nomina?.length > 0 && (
<RichTextSection
tag_id="atto-nomina"
title={intl.formatMessage(messages.atto_nomina)}
>
{content.atto_nomina.map((atto_nomina) => (
<div
key={flattenToAppURL(atto_nomina['@id'])}
className="card-wrapper card-teaser-wrapper card-teaser-wrapper-equal"
>
<UniversalLink href={flattenToAppURL(atto_nomina['@id'])}>
{atto_nomina.title}
</UniversalLink>
</div>
))}
</RichTextSection>
)}
<Metadata
content={content}
showSectionTitle={richTextHasContent(content?.ulteriori_informazioni)}
>
{richTextHasContent(content?.ulteriori_informazioni) && (
<HelpBox text={content?.ulteriori_informazioni} />
)}
</Metadata>
</section>
<IncaricoPlaceholderAfterContent content={content} />
<RelatedItems list={content?.relatedItems} />
<IncaricoPlaceholderAfterRelatedItems content={content} />
</div>
);
};
/**
* Property types.
* @property {Object} propTypes Property types.
* @static
*/
IncaricoView.propTypes = {
/**
* Content of the object
*/
content: PropTypes.shape({
/**
* Title of the object
*/
title: PropTypes.string,
}).isRequired,
};
export default injectLazyLibs(['moment'])(IncaricoView);