Header and hero/stats counters each opened their own EventSource to the online-count stream; a shared subscriber now opens a single socket and multicasts to every mounted counter. The entrance count-up animation skips its requestAnimationFrame loop when the user prefers reduced motion.
23 lines
519 B
TypeScript
23 lines
519 B
TypeScript
"use client";
|
|
|
|
import { useTranslations } from "next-intl";
|
|
import { useOnlineCount } from "@/lib/online-count-sse";
|
|
|
|
/**
|
|
* Live online user counter. Shares a single SSE connection (see
|
|
* `useOnlineCount`) so the whole page uses one socket instead of one per
|
|
* counter.
|
|
*/
|
|
export function LiveOnlineCount({
|
|
initial,
|
|
hotelName,
|
|
}: {
|
|
initial: number;
|
|
hotelName: string;
|
|
}) {
|
|
const t = useTranslations("header");
|
|
const count = useOnlineCount(initial);
|
|
|
|
return <>{t("online", { count, hotel: hotelName })}</>;
|
|
}
|