'use client' import { trpc } from '@/lib/trpc/client' import { Badge } from '@/components/ui/badge' import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from '@/components/ui/card' import { Skeleton } from '@/components/ui/skeleton' import { Clock, Activity } from 'lucide-react' import { formatDate } from '@/lib/utils' const actionColors: Record = { CREATE: 'default', UPDATE: 'secondary', DELETE: 'destructive', LOGIN_SUCCESS: 'outline', LOGIN_FAILED: 'destructive', INVITATION_ACCEPTED: 'default', EVALUATION_SUBMITTED: 'default', SUBMIT_EVALUATION: 'default', ROLE_CHANGED: 'secondary', PASSWORD_SET: 'outline', PASSWORD_CHANGED: 'outline', FILE_DOWNLOADED: 'outline', ROUND_ACTIVATED: 'default', ROUND_CLOSED: 'secondary', } interface UserActivityLogProps { userId: string limit?: number } export function UserActivityLog({ userId, limit = 20 }: UserActivityLogProps) { const { data: logs, isLoading } = trpc.audit.getByUser.useQuery({ userId, limit, }) if (isLoading) { return ( Activity Log
{[...Array(5)].map((_, i) => (
))}
) } return ( Activity Log Recent actions by this member {logs && logs.length > 0 ? (
{logs.map((log) => (
{formatDate(log.timestamp)}
{log.action.replace(/_/g, ' ')} {log.entityType} {log.entityId && ( {log.entityId.slice(0, 8)}... )}
))}
) : (

No activity recorded yet.

)}
) }