All files / components/Sidebar/Archive index.tsx

100% Statements 7/7
50% Branches 1/2
100% Functions 5/5
100% Lines 7/7

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                1x 4x   5x   1x 4x             5x         1x                            
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 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) => (
        <Link
          key={year}
          to={withPrefix(`/${year}/`)}
          title={`Articles written in ${year}`}
          onClick={() =>
            ReactGA.event({
              category: "Archive",
              action: `push Archive ${year}`,
            })
          }
        >
          {year}
        </Link>
      ))}
    </div>
  );
};
 
export default Archive;