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
|
import Copyright, {
type CopyrightProps,
} from '@components/atoms/layout/copyright';
import BackToTop, {
type BackToTopProps,
} from '@components/molecules/buttons/back-to-top';
import Nav, { type NavItem } from '@components/molecules/nav/nav';
import { FC } from 'react';
import { useIntl } from 'react-intl';
import styles from './footer.module.scss';
export type FooterProps = {
/**
* 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;
};
/**
* Footer component
*
* Renders a footer with copyright and nav;
*/
const Footer: FC<FooterProps> = ({
backToTopClassName,
className = '',
copyright,
navItems,
topId,
}) => {
const intl = useIntl();
const ariaLabel = intl.formatMessage({
defaultMessage: 'Footer',
description: 'Footer: an accessible name for footer nav',
id: 'd4N8nD',
});
return (
<footer className={`${styles.wrapper} ${className}`}>
<Copyright
dates={copyright.dates}
owner={copyright.owner}
icon={copyright.icon}
/>
{navItems && (
<Nav
aria-label={ariaLabel}
kind="footer"
items={navItems}
className={styles.nav}
/>
)}
<BackToTop
target={topId}
className={`${styles['back-to-top']} ${backToTopClassName}`}
/>
</footer>
);
};
export default Footer;
|