diff --git a/src/components/CommentsCount.astro b/src/components/CommentsCount.astro
new file mode 100644
index 00000000..afbf7767
--- /dev/null
+++ b/src/components/CommentsCount.astro
@@ -0,0 +1,16 @@
+---
+import getCommentCount from "lib/utils/getJamCommentsCommentCount";
+
+export interface Props {
+ pathname?: string;
+}
+
+const commentCount = getCommentCount(Astro.props.pathname ?? Astro.url.pathname);
+---
+{
+ commentCount > 0
+ ? commentCount === 1
+ ? "1 comment"
+ : `${commentCount} comments`
+ : "No comments yet"
+ }
\ No newline at end of file
diff --git a/src/components/LinkCard.astro b/src/components/LinkCard.astro
index 0628294b..2a0e1d50 100644
--- a/src/components/LinkCard.astro
+++ b/src/components/LinkCard.astro
@@ -3,7 +3,7 @@ import getLinkDate from "@utils/getLinkDate";
import type { CollectionEntry } from "astro:content";
import formatPostDate from "../utils/formatPostDate";
import getLinkSlug from "@utils/getLinkSlug";
-import getCommentCount from "lib/utils/getJamCommentsCommentCount";
+import CommentsCount from "./CommentsCount.astro";
export type Props = {
link: CollectionEntry<"links">;
@@ -33,9 +33,7 @@ const permalink = `/links/${getLinkSlug(l)}`;
{formatPostDate(getLinkDate(l.slug))}
·{" "}
-
- {getCommentCount(permalink)} comments
-
+
diff --git a/src/layouts/Post.astro b/src/layouts/Post.astro
index 307b3dde..7653d101 100644
--- a/src/layouts/Post.astro
+++ b/src/layouts/Post.astro
@@ -10,7 +10,7 @@ import countWords from "@utils/countWords";
import formatPostDate from "@utils/formatPostDate";
import getPostDate from "@utils/getPostDate";
import type { WithNextAndPrev } from "lib/utils/toWithNextAndPrev";
-import getCommentCount from "@utils/getCommentCount";
+import CommentsCount from "@components/CommentsCount.astro";
export type Props = {
post: WithNextAndPrev>;
@@ -68,7 +68,7 @@ const ogImagePath = `/posts/${post.slug}`;
}
—
{wordCount} words — {readingTime} min read{" "}
- — {getCommentCount(Astro.url.pathname)} comments
+ —
@@ -76,7 +76,7 @@ const ogImagePath = `/posts/${post.slug}`;
-->
-
+
diff --git a/src/utils/getCommentCount.ts b/src/utils/getCommentCount.ts
deleted file mode 100644
index 097aa113..00000000
--- a/src/utils/getCommentCount.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-import trimTrailingSlash from "./trimTrailingSlash";
-
-// @ts-expect-error
-const commentHtmlMap = globalThis.jamCommentsStore as Map;
-
-const commentCountMap = new Map();
-
-export default function getCommentCount(slug: string) {
- if (commentCountMap.has(slug)) return commentCountMap.get(slug)!;
-
- // commentHtmlMap contains the HTML from JamComments, which contains the comment count
- // as a data attribute. We extract it using a simple regex.
- const comments = commentHtmlMap.get(trimTrailingSlash(slug)) ?? 'data-jam-comments-count="0"';
-
- const match = comments.match(/data-jam-comments-count="(\d+)"/);
-
- if (match) {
- const count = parseInt(match[1]!, 10);
- commentCountMap.set(slug, count);
- return count;
- } else {
- // The commentHtmlMap contains HTML for the slug, but that HTML
- // unexpectedly doesn't contain a comment count.
- throw new Error(`Comment count not found for slug: ${slug}`);
- }
-}
\ No newline at end of file