From 4a6f3dbde9adaa671e622215654a1dd9b329610d Mon Sep 17 00:00:00 2001 From: Armand Philippot Date: Tue, 12 Apr 2022 16:28:25 +0200 Subject: chore: add a Nav component --- src/components/molecules/nav/nav.tsx | 71 ++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/components/molecules/nav/nav.tsx (limited to 'src/components/molecules/nav/nav.tsx') diff --git a/src/components/molecules/nav/nav.tsx b/src/components/molecules/nav/nav.tsx new file mode 100644 index 0000000..42e3843 --- /dev/null +++ b/src/components/molecules/nav/nav.tsx @@ -0,0 +1,71 @@ +import Link from '@components/atoms/links/link'; +import NavLink from '@components/atoms/links/nav-link'; +import { ReactNode, VFC } from 'react'; +import styles from './nav.module.scss'; + +export type NavItem = { + /** + * The item id. + */ + id: string; + /** + * The item link. + */ + href: string; + /** + * The item name. + */ + label: string; + /** + * The item logo. + */ + logo?: ReactNode; +}; + +export type NavProps = { + /** + * Set additional classnames to the navigation wrapper. + */ + className?: string; + /** + * The navigation items. + */ + items: NavItem[]; + /** + * The navigation kind. + */ + kind: 'main' | 'footer'; +}; + +/** + * Nav component + * + * Render the nav links. + */ +const Nav: VFC = ({ className = '', items, kind }) => { + const kindClass = `nav--${kind}`; + + /** + * Get the nav items. + * @returns {JSX.Element[]} An array of nav items. + */ + const getItems = (): JSX.Element[] => { + return items.map(({ id, href, label, logo }) => ( +
  • + {kind === 'main' ? ( + + ) : ( + {label} + )} +
  • + )); + }; + + return ( + + ); +}; + +export default Nav; -- cgit v1.2.3