design-comuni-plone-theme
Version:
Volto Theme for Italia design guidelines
77 lines (67 loc) • 2.21 kB
JSX
/**
* SocialHeader component.
* @module components/ItaliaTheme/Header/SocialHeader
*/
import React, { useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { defineMessages, useIntl } from 'react-intl';
import { isEmpty } from 'lodash';
import { HeaderSocialsZone } from 'design-react-kit';
import { Icon } from 'design-comuni-plone-theme/components/ItaliaTheme';
import { getSocialSettings } from 'volto-social-settings';
const messages = defineMessages({
followUs: {
id: 'Seguici su',
defaultMessage: 'Seguici su',
},
socialOpen: {
id: 'Nuova scheda',
defaultMessage: '- apri in nuova scheda',
},
});
const SocialHeader = () => {
const intl = useIntl();
const dispatch = useDispatch();
const socialSettings = useSelector((state) => state?.socialSettings); //useSelector((state) => state?.socialSettings?.results);
const subsite = useSelector((state) => state.subsite?.data);
const items = isEmpty(socialSettings.results) ? [] : socialSettings.results;
useEffect(() => {
if (!socialSettings?.loadingResults && items.length === 0) {
dispatch(getSocialSettings());
}
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [dispatch]);
const socials =
subsite?.subsite_social_links?.length > 0
? JSON.parse(subsite.subsite_social_links)
: items;
return (
socials?.length > 0 && (
<HeaderSocialsZone label={intl.formatMessage(messages.followUs)}>
<ul>
{socials?.map((social, idx) => (
<li key={idx}>
<a
title={`${intl.formatMessage(messages.followUs)} ${
social.title
} ${intl.formatMessage(messages.socialOpen)}`}
href={social.url}
target="_blank"
rel="noopener noreferrer"
>
<Icon
color=""
icon={social.icon}
padding={false}
size=""
title={social.title}
/>
</a>
</li>
))}
</ul>
</HeaderSocialsZone>
)
);
};
export default SocialHeader;