import Breadcrumbs from "@/components/ui/breadcrumbs"; import { Button } from "@/components/ui/button"; import Avatar from "@/feature/Avatar"; import { Ban } from "lucide-react"; import { useCallback, useEffect, type FC } from "react"; import { Link } from "react-router"; import moment from "moment"; import Pagination from "@/components/ui/pagination"; import { useAuth } from "@/store/auth"; import { useServiceSessions } from "@/store/admin/serviceSessions"; const AdminServiceSessionsPage: FC = () => { const loading = useServiceSessions((s) => s.loading); const sessions = useServiceSessions((s) => s.items); const page = useServiceSessions((s) => s.page); const totalPages = useServiceSessions((s) => s.totalPages); const fetchSessions = useServiceSessions((s) => s.fetch); const revokeSession = useServiceSessions((s) => s.revoke); const revokingId = useServiceSessions((s) => s.revokingId); const profile = useAuth((s) => s.profile); const handleRevokeSession = useCallback( (id: string) => { revokeSession(id); }, [revokeSession], ); useEffect(() => { fetchSessions(1); }, [fetchSessions]); return (

Search...

{/* TODO: Filters */}
{loading && (
Loading...
)} {!loading && sessions.length === 0 ? ( ) : ( sessions.map((session) => ( )) )}
Service User + IP Status Issued At Expires At Last Active Revoked At Actions
No sessions found.
{/* */} {typeof session.api_service?.icon_url === "string" && ( )}

{session.api_service?.name ?? session.client_id}

{typeof session.user?.profile_picture === "string" && ( )}

{session.user?.full_name ?? ""}{" "} {session.user_id === profile?.id ? "(You)" : ""}

{session.ip_address ?? "No IP available"}

{session.is_active ? "Active" : "Inactive"} {moment(session.expires_at).isSameOrBefore( moment(new Date()), ) && " (Expired)"} {moment(session.issued_at).format("LLLL")} {session.expires_at ? moment(session.expires_at).format("LLLL") : "never"} {session.last_active ? moment(session.last_active).format("LLLL") : "never"} {session.revoked_at ? new Date(session.revoked_at).toLocaleString() : "never"}
fetchSessions(newPage)} totalPages={totalPages} />
); }; export default AdminServiceSessionsPage;