1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
import type { FC } from 'react';
import { useIntl } from 'react-intl';
import { Copyright, type CopyrightProps, Footer } from '../../atoms';
import {
BackToTop,
type BackToTopProps,
NavList,
type NavItem,
} from '../../molecules';
import styles from './site-footer.module.scss';
export type SiteFooterProps = {
/**
* Set additional classnames to the back to top button.
*/
backToTopClassName?: BackToTopProps['className'];
/**
* Set additional classnames to the footer element.
*/
className?: string;
/**
* Set the copyright information.
*/
copyright: CopyrightProps;
/**
* The footer nav items.
*/
navItems?: NavItem[];
/**
* An element id (without hashtag) used as anchor for back to top button.
*/
topId: string;
};
/**
* SiteFooter component
*
* Renders a footer with copyright and nav;
*/
export const SiteFooter: FC<SiteFooterProps> = ({
backToTopClassName,
className = '',
copyright,
navItems,
topId,
}) => {
const intl = useIntl();
const ariaLabel = intl.formatMessage({
defaultMessage: 'Footer',
description: 'SiteFooter: an accessible name for the footer nav',
id: 'pRzkFR',
});
const backToTop = intl.formatMessage({
defaultMessage: 'Back to top',
description: 'SiteFooter: an accessible name for the back to top button',
id: 'OHvb01',
});
const backToTopAnchor = `#${topId}`;
const footerClass = `${styles.wrapper} ${className}`;
const btnClass = `${styles['back-to-top']} ${backToTopClassName}`;
return (
<Footer className={footerClass}>
<Copyright
dates={copyright.dates}
icon={copyright.icon}
owner={copyright.owner}
/>
{navItems ? (
<NavList
aria-label={ariaLabel}
className={styles.nav}
items={navItems}
// eslint-disable-next-line react/jsx-no-literals -- Kind allowed
kind="footer"
/>
) : null}
<BackToTop
anchor={backToTopAnchor}
className={btnClass}
label={backToTop}
/>
</Footer>
);
};
|