All files / src/components/Sidebar/Archive index.tsx

88.88% Statements 8/9
100% Branches 2/2
83.33% Functions 5/6
88.88% Lines 8/9

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                6x 190x                   6x 19x   2337x   494x 19x           190x            
import React from "react";
import { Link, withPrefix } from "gatsby";
 
import * as style from "./index.module.scss";
import ReactGA from "react-ga4";
import dayjs from "dayjs";
import { AllPost } from "../entity";
 
const yearLink = ({ year }: { year: string }) => (
  <Link
    to={withPrefix(`/${year}/`)}
    title={`Articles written in ${year}`}
    onClick={() =>
      ReactGA.event({ category: "Archive", action: `push Archive ${year}` })
    }
  >
    {year}
  </Link>
);
const Archive = ({ allPosts }: { allPosts: AllPost[] }) => {
  const yearList = Array.from(
    new Set(
      allPosts.map((data) => dayjs(data.node.frontmatter.date).format("YYYY"))
    )
  ).sort((a, b) => (a < b ? 1 : -1));
  return (
    <div className={style.archive} data-testid="Archive">
      <p>
        <span className="icon-calendar" />
        &nbsp;Archives
      </p>
      {yearList.map((year) => yearLink({ year }))}
    </div>
  );
};
 
export default Archive;