All files / components/Sidebar/LatestPost index.tsx

100% Statements 4/4
100% Branches 6/6
100% Functions 3/3
100% Lines 4/4

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                                    1x             6x                   6x       1x                          
import React from "react";
import { Newspaper } from "lucide-react";
import ReactGA from "react-ga4";
import * as style from "./index.module.scss";
 
export type Post = {
  node: {
    frontmatter: {
      url: string;
      slug: string;
      title: string;
    };
    fields: {
      slug: string;
    };
  };
};
 
const LatestPost = ({
  posts,
  totalCount,
}: {
  posts: Post[];
  totalCount: number;
}) => (
  <div className={style.latestPost}>
    <div className={style.sectionHeader} data-testid="latestArticleCount">
      <Newspaper
        size={16}
        aria-hidden="true"
        style={{ verticalAlign: "-0.125em" }}
      />
      &nbsp;Recent posts <span className={style.count}>6 / {totalCount}</span>
    </div>
    {posts.map(({ node }) => (
      <a
        href={node.frontmatter.url || node.frontmatter.slug || node.fields.slug}
        key={node.frontmatter.url || node.frontmatter.slug || node.fields.slug}
        onClick={() =>
          ReactGA.event({
            category: "User",
            action: `Click latest-post item: ${node.fields.slug}`,
          })
        }
      >
        {node.frontmatter.title}
      </a>
    ))}
  </div>
);
 
export default LatestPost;