Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 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 | 1x 1x 1x 1x 3x 2x 2x 2x 3x | import styles from './navlist.module.css';
import { BsTag, BsFolder2 } from 'react-icons/bs';
import Link from 'next/link';
type Props = {
title: string;
list?: {
category: string;
total: number;
href: string;
tag: string;
}[];
category?: string | string[];
isCategory?: boolean | boolean[];
};
/**
* @example
* <NavList title="Categories" list={categories} category={category} isCategory={true} />;
*
* @param {string} title - The title of the list
* @param {object[]} list - The list of items
* @param {string} category - The category has other styles
* @param {boolean} isCategory - If is category the icon will be a folder
* @returns {JSX.Element}
*/
const NavList = ({ title, list, category, isCategory }: Props) => {
if (!list) return null;
Iif (category && typeof category == 'object') category = category[0];
Iif (isCategory && typeof isCategory == 'object') isCategory = isCategory[0];
return (
<>
<h2 className={styles.navTitle}>{title}</h2>
<ul className={styles.postList} data-testid="nav-list">
{list.map(
(
item: {
category: string;
total: number;
href: string;
tag: string;
},
index: number
) => {
return (
<li key={index}>
<Link
href={item.href}
title={isCategory ? item.category : item.tag}
className={
isCategory
? category == item.category.toLowerCase()
? styles.selected
: ''
: category == item.tag.toLowerCase()
? styles.selected
: ''
}
>
{isCategory ? <BsFolder2 /> : <BsTag />}
<div className={styles.tag}>{isCategory ? item.category : item.tag}</div>
<div className={styles.number}>{item.total}</div>
</Link>
</li>
);
}
)}
</ul>
</>
);
};
export default NavList;
|