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 (
Loading user details...
); } if (error || !data) { return (
{error?.message || "Failed to load user details"}
); } return (

User Details

{user?.name || "Unnamed User"}

Mobile

{user?.mobile || "No Mobile"}

{user?.name || "Unnamed User"}

Status

{user?.isSuspended ? "Suspended" : "Active"}

Registered

{user?.createdAt ? dayjs(user.createdAt).format("MMM DD, YYYY • h:mm A") : "-"}

Suspend User

Prevent user from placing orders

User Incidents

{incidentsData?.incidents?.length ? (
{incidentsData.incidents.map((incident: any) => (
{dayjs(incident.dateAdded).format("MMM DD, YYYY • h:mm A")} {incident.negativityScore ? ( Score: {incident.negativityScore} ) : null}
{incident.adminComment && (

{incident.adminComment}

)}
Added by {incident.addedBy} {incident.orderId ? ` • Order #${incident.orderId}` : ""}
))}
) : (
No incidents recorded for this user
)}

Add Incident

Record an incident for this user. Higher negativity scores indicate more serious incidents.