import { useMemo, useState } from "react"; import { useNavigate, useParams } from "@tanstack/react-router"; import dayjs from "dayjs"; import { trpc } from "../trpc/client"; import { Button } from "@/components/ui/button"; const getStatusBadge = (status?: string) => { if (status === "delivered") { return "bg-emerald-50 text-emerald-700 border-emerald-200"; } if (status === "cancelled") { return "bg-red-50 text-red-700 border-red-200"; } return "bg-amber-50 text-amber-700 border-amber-200"; }; export function UserDetailsRoute() { const { id } = useParams({ from: "/user-management/$id" }); const navigate = useNavigate(); const [incidentComment, setIncidentComment] = useState(""); const [negativityScore, setNegativityScore] = useState(""); const userId = Number(id); const { data, isLoading, error } = trpc.admin.user.getUserDetails.useQuery( { userId: Number.isFinite(userId) ? userId : 0 }, { enabled: Number.isFinite(userId) } ); const { data: incidentsData, refetch: refetchIncidents } = trpc.admin.user.getUserIncidents.useQuery( { userId }, { enabled: Number.isFinite(userId) } ); const updateSuspension = trpc.admin.user.updateUserSuspension.useMutation(); const addIncidentMutation = trpc.admin.user.addUserIncident.useMutation({ onSuccess: () => { setIncidentComment(""); setNegativityScore(""); refetchIncidents(); }, }); const user = data?.user as any; const orders = (data?.orders ?? []) as any[]; const orderCount = orders.length; const statusBadge = useMemo( () => user?.isSuspended ? "bg-red-50 text-red-700 border-red-200" : "bg-emerald-50 text-emerald-700 border-emerald-200", [user?.isSuspended] ); if (isLoading) { return (
User Details
Mobile
{user?.mobile || "No Mobile"}
{user?.name || "Unnamed User"}
Status
Registered
{user?.createdAt ? dayjs(user.createdAt).format("MMM DD, YYYY • h:mm A") : "-"}
Suspend User
Prevent user from placing orders
{incident.adminComment}
)}Add Incident
Record an incident for this user. Higher negativity scores indicate more serious incidents.