"use client"; import { useEffect, useState } from "react"; import { RefreshCw, Monitor, Globe, Shield } from "lucide-react"; import { AdminLayout } from "@/components/admin/admin-layout"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { useLanguage } from "@/components/language-provider"; interface Session { id: string; device_name: string; ip_address: string; user_agent: string; session_type: string; status: string; started_at: string; last_activity_at: string; expires_at: string; revoked_reason: string; user?: { email: string; full_name: string }; } export default function AdminSessionsPage() { const { lang } = useLanguage(); const [sessions, setSessions] = useState([]); const [loading, setLoading] = useState(true); useEffect(() => { const token = localStorage.getItem("access_token"); if (!token) { window.location.href = "/login?redirect=/admin/sessions"; return; } const fetchData = async () => { const baseURL = process.env.NEXT_PUBLIC_API_URL; try { const res = await fetch(`${baseURL}/sessions/`, { headers: { Authorization: `Bearer ${token}` }, }); const data = await res.json(); setSessions(data.results || []); } catch (e) { console.error(e); } finally { setLoading(false); } }; fetchData(); }, []); const t = (fa: string, en: string) => (lang === "fa" ? fa : en); if (loading) { return (
); } return (

{t("نشست\u200cها", "Sessions")}

{sessions.map((s) => ( ))}
{t("کاربر", "User")} {t("دستگاه", "Device")} {t("آی\u200cپی", "IP")} {t("نوع", "Type")} {t("وضعیت", "Status")} {t("اقدامات", "Actions")}
{s.user?.full_name?.charAt(0) || s.user?.email?.charAt(0) || "?"} {s.user?.full_name || s.user?.email || "—"}
{s.device_name || "—"} {s.ip_address} {s.session_type} {s.status === "active" ? t("فعال", "Active") : t("غیرفعال", "Inactive")} {s.status === "active" && ( )}
{sessions.length === 0 && !loading && (
{t("نشستی یافت نشد", "No sessions found")}
)}
); }