Initial commit

This commit is contained in:
2025-06-22 00:01:22 +03:00
parent fd70166cf6
commit 033b80bfad
153 changed files with 26874 additions and 1 deletions

View File

@@ -0,0 +1,60 @@
"use client"
import { useEffect, useState, useRef } from "react"
interface UpdateData {
stats?: any
users?: any[]
lastReset?: any
}
export function useRealTimeUpdates(onUpdate?: (data: UpdateData) => void) {
const [isConnected, setIsConnected] = useState(false)
const intervalRef = useRef<NodeJS.Timeout>()
const lastDataRef = useRef<string>("")
const fetchUpdates = async () => {
try {
// Fetch all data in parallel
const [statsRes, usersRes, resetRes] = await Promise.all([
fetch("/api/admin/stats"),
fetch("/api/admin/users"),
fetch("/api/admin/last-reset"),
])
const [stats, users, lastReset] = await Promise.all([statsRes.json(), usersRes.json(), resetRes.json()])
const newData = { stats, users, lastReset }
const newDataString = JSON.stringify(newData)
// Only trigger update if data actually changed
if (newDataString !== lastDataRef.current) {
lastDataRef.current = newDataString
if (onUpdate) {
onUpdate(newData)
}
}
setIsConnected(true)
} catch (err) {
console.error("Error fetching updates:", err)
setIsConnected(false)
}
}
useEffect(() => {
// Initial fetch
fetchUpdates()
// Set up polling every 2 seconds
intervalRef.current = setInterval(fetchUpdates, 2000)
return () => {
if (intervalRef.current) {
clearInterval(intervalRef.current)
}
}
}, [])
return { isConnected, refetch: fetchUpdates }
}