güncelleme

This commit is contained in:
2026-01-29 16:49:51 +03:00
parent 10bfa3089e
commit 54113726f4
38 changed files with 1469 additions and 642 deletions

View File

@@ -0,0 +1,60 @@
"use client"
import { useEffect, useCallback, useRef } from "react"
import { useRouter } from "next/navigation"
import { createClient } from "@/lib/supabase-browser"
import { toast } from "sonner"
const INACTIVITY_TIMEOUT = 15 * 60 * 1000 // 15 minutes
export function AutoLogoutHandler() {
const router = useRouter()
const supabase = createClient()
const timerRef = useRef<NodeJS.Timeout | null>(null)
const handleLogout = useCallback(async () => {
await supabase.auth.signOut()
toast.info("Oturumunuz uzun süre işlem yapılmadığı için sonlandırıldı.")
router.push("/login")
router.refresh()
}, [router, supabase])
const resetTimer = useCallback(() => {
if (timerRef.current) {
clearTimeout(timerRef.current)
}
timerRef.current = setTimeout(handleLogout, INACTIVITY_TIMEOUT)
}, [handleLogout])
useEffect(() => {
// Events to listen for
const events = [
"mousedown",
"mousemove",
"keydown",
"scroll",
"touchstart",
]
// Initial set
resetTimer()
// Event listener wrapper to debounce slightly/reset
const onUserActivity = () => {
resetTimer()
}
events.forEach((event) => {
window.addEventListener(event, onUserActivity)
})
return () => {
if (timerRef.current) clearTimeout(timerRef.current)
events.forEach((event) => {
window.removeEventListener(event, onUserActivity)
})
}
}, [resetTimer])
return null
}