Files
buzz-sheet/components/commission/live-refresh.tsx
T
gunshiz 3473b55768
CI / Verify (push) Successful in 1m48s
CI / Build immutable images and deploy (push) Successful in 2m47s
feat(commission) : add push notifications and unread ticket titles
2026-10-02 11:51:05 +07:00

33 lines
1.2 KiB
TypeScript

"use client";
import { useEffect } from "react";
import { useRouter } from "next/navigation";
import { parseCommissionMessageEvent } from "@/lib/commission/message-event";
export function CommissionLiveRefresh({ endpoint, userId }: { endpoint: string; userId: string }) {
const router = useRouter();
useEffect(() => {
const originalTitle = document.title;
let managedTitle = "";
let unread = 0;
const source = new EventSource(endpoint);
const refresh = (event: Event) => {
const message = parseCommissionMessageEvent((event as MessageEvent<string>).data);
if (message && message.authorId !== userId) {
unread += 1;
managedTitle = `(${unread}) ${message.ticketTitle}`;
document.title = managedTitle;
}
router.refresh();
};
const opened = () => router.refresh();
source.addEventListener("changed", refresh);
source.addEventListener("open", opened);
return () => {
source.removeEventListener("changed", refresh); source.removeEventListener("open", opened); source.close();
if (managedTitle && document.title === managedTitle) document.title = originalTitle;
};
}, [endpoint, userId, router]);
return null;
}