From 7da0a713a432e671ebb1455094d1af1eb9807592 Mon Sep 17 00:00:00 2001 From: Jake Jarvis Date: Thu, 30 Jun 2022 09:17:12 -0400 Subject: [PATCH] add page stats typings --- components/HitCounter/HitCounter.tsx | 32 ++++++++---------- components/NoteMeta/NoteMeta.tsx | 29 +++++++--------- package.json | 4 +-- pages/api/hits.ts | 20 ++---------- pages/api/playing.ts | 9 +---- types/index.d.ts | 2 ++ types/stats.d.ts | 15 +++++++++ types/track.d.ts | 7 ++++ yarn.lock | 49 ++++++++++++++-------------- 9 files changed, 80 insertions(+), 87 deletions(-) create mode 100644 types/stats.d.ts create mode 100644 types/track.d.ts diff --git a/components/HitCounter/HitCounter.tsx b/components/HitCounter/HitCounter.tsx index 4f0ce98b..10350115 100644 --- a/components/HitCounter/HitCounter.tsx +++ b/components/HitCounter/HitCounter.tsx @@ -1,42 +1,36 @@ -import useSWR from "swr"; +import useSWRImmutable from "swr/immutable"; import commaNumber from "comma-number"; import Loading from "../Loading"; import fetcher from "../../lib/helpers/fetcher"; +import type { PageStats } from "../../types"; export type HitCounterProps = { slug: string; - className?: string; }; -const HitCounter = ({ slug, className }: HitCounterProps) => { - // start fetching repos from API immediately - const { data, error } = useSWR( +const HitCounter = ({ slug }: HitCounterProps) => { + // use immutable SWR to avoid double (or more) counting views: + // https://swr.vercel.app/docs/revalidation#disable-automatic-revalidations + const { data, error } = useSWRImmutable( `/api/hits/?${new URLSearchParams({ slug, })}`, - fetcher, - { - // avoid double (or more) counting views - revalidateOnFocus: false, - revalidateOnReconnect: false, - } + fetcher ); - // show spinning loading indicator if data isn't fetched yet - if (!data) { - return ; - } - // fail secretly if (error) { return null; } + // show spinning loading indicator if data isn't fetched yet + if (!data) { + return ; + } + // we have data! return ( - - {commaNumber(data.hits)} - + {commaNumber(data.hits)} ); }; diff --git a/components/NoteMeta/NoteMeta.tsx b/components/NoteMeta/NoteMeta.tsx index 375be462..1e9503ee 100644 --- a/components/NoteMeta/NoteMeta.tsx +++ b/components/NoteMeta/NoteMeta.tsx @@ -56,7 +56,7 @@ const Tag = styled("span", { export type NoteMetaProps = Pick; -const NoteMeta = ({ slug, date, title, htmlTitle, tags = [] }: NoteMetaProps) => { +const NoteMeta = ({ slug, date, title, htmlTitle, tags }: NoteMetaProps) => { return ( <> @@ -68,21 +68,17 @@ const NoteMeta = ({ slug, date, title, htmlTitle, tags = [] }: NoteMetaProps) => }} underline={false} > - - - +