mirror of
https://github.com/jakejarvis/jarv.is.git
synced 2025-04-27 14:56:21 -04:00
* gymnastics to make theme script work with react 18 hydration * try next 12.1.3 canary to fix SSG head tags? * revert theme script changes * next 12.1.3-canary.3 * double-revert some of the use-theme.tsx changes * separate theme restoration script & move to _document * bump next * bump next (again) * clean up some theme stuff * use hashed image URLs in webmanifest and feeds * text experimental react config * Update ThemeScript.tsx * switch selfie image to `layout="raw"` * use `layout="raw"` for all non-imported images * revert raw images in some places, messes up responsiveness * fix nitpicky "no divs inside buttons" html validation error * fix react-player hydration errors * fix hydration errors from server/client time zone differences * clean up hydration fixes * Update format-date.ts * last-minute cleanup
44 lines
1.0 KiB
TypeScript
44 lines
1.0 KiB
TypeScript
import useSWR from "swr";
|
|
import Loading from "../Loading";
|
|
import { fetcher } from "../../lib/helpers/fetcher";
|
|
import { siteLocale } from "../../lib/config";
|
|
|
|
export type HitCounterProps = {
|
|
slug: string;
|
|
className?: string;
|
|
};
|
|
|
|
const HitCounter = ({ slug, className }: HitCounterProps) => {
|
|
// start fetching repos from API immediately
|
|
const { data, error } = useSWR(`/api/hits/?slug=${encodeURIComponent(slug)}`, fetcher, {
|
|
// avoid double (or more) counting views
|
|
revalidateOnFocus: false,
|
|
});
|
|
|
|
try {
|
|
// show spinning loading indicator if data isn't fetched yet
|
|
if (!data) {
|
|
return <Loading boxes={3} width={20} />;
|
|
}
|
|
|
|
// fail secretly
|
|
if (error) {
|
|
return null;
|
|
}
|
|
|
|
// we have data!
|
|
return (
|
|
<span
|
|
title={`${data.hits.toLocaleString(siteLocale)} ${data.hits === 1 ? "view" : "views"}`}
|
|
className={className}
|
|
>
|
|
{data.hits.toLocaleString(siteLocale)}
|
|
</span>
|
|
);
|
|
} catch (error) {
|
|
return null;
|
|
}
|
|
};
|
|
|
|
export default HitCounter;
|