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

100% Statements 9/9
50% Branches 1/2
100% Functions 6/6
100% Lines 9/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                2x 6x       1x           2x 5x   13x   1x 5x           6x            
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;