mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-23 15:31:13 -05:00
Implement Review Lifecycle Tracking
This commit is contained in:
@@ -25,7 +25,9 @@ import {
|
||||
UserPlus,
|
||||
UserX,
|
||||
Ban,
|
||||
UserCheck
|
||||
UserCheck,
|
||||
MessageSquare,
|
||||
MessageSquareX
|
||||
} from 'lucide-react';
|
||||
import { formatDistanceToNow } from 'date-fns';
|
||||
import {
|
||||
@@ -38,7 +40,8 @@ import {
|
||||
ReportResolutionDetails,
|
||||
ReviewModerationDetails,
|
||||
PhotoApprovalDetails,
|
||||
AccountLifecycleDetails
|
||||
AccountLifecycleDetails,
|
||||
ReviewLifecycleDetails
|
||||
} from '@/lib/systemActivityService';
|
||||
|
||||
export interface SystemActivityLogRef {
|
||||
@@ -123,6 +126,18 @@ const activityTypeConfig = {
|
||||
bgColor: 'bg-green-700/10',
|
||||
label: 'User Unbanned',
|
||||
},
|
||||
review_created: {
|
||||
icon: MessageSquare,
|
||||
color: 'text-blue-600',
|
||||
bgColor: 'bg-blue-600/10',
|
||||
label: 'Review Created',
|
||||
},
|
||||
review_deleted: {
|
||||
icon: MessageSquareX,
|
||||
color: 'text-red-600',
|
||||
bgColor: 'bg-red-600/10',
|
||||
label: 'Review Deleted',
|
||||
},
|
||||
};
|
||||
|
||||
export const SystemActivityLog = forwardRef<SystemActivityLogRef, SystemActivityLogProps>(
|
||||
@@ -480,6 +495,76 @@ export const SystemActivityLog = forwardRef<SystemActivityLogRef, SystemActivity
|
||||
);
|
||||
}
|
||||
|
||||
case 'review_created': {
|
||||
const details = activity.details as ReviewLifecycleDetails;
|
||||
return (
|
||||
<div className="space-y-2">
|
||||
<div className="flex items-center gap-2 text-sm flex-wrap">
|
||||
<Badge className="bg-blue-600/10 text-blue-600">New Review</Badge>
|
||||
{details.rating && (
|
||||
<div className="flex items-center gap-1">
|
||||
<Star className="h-4 w-4 fill-yellow-400 text-yellow-400" />
|
||||
<span className="font-medium">{details.rating}/5</span>
|
||||
</div>
|
||||
)}
|
||||
{details.entity_name && (
|
||||
<>
|
||||
<span className="text-muted-foreground">for</span>
|
||||
<span className="font-medium">{details.entity_name}</span>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
{isExpanded && details.review_text && (
|
||||
<div className="p-3 bg-muted rounded text-sm">
|
||||
<p className="text-muted-foreground line-clamp-3">
|
||||
"{details.review_text}"
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
case 'review_deleted': {
|
||||
const details = activity.details as ReviewLifecycleDetails;
|
||||
return (
|
||||
<div className="space-y-2">
|
||||
<div className="flex items-center gap-2 text-sm flex-wrap">
|
||||
<Badge variant="destructive">Review Deleted</Badge>
|
||||
{details.was_moderated && (
|
||||
<Badge variant="outline" className="text-orange-600 border-orange-600">
|
||||
Moderated
|
||||
</Badge>
|
||||
)}
|
||||
{details.rating && (
|
||||
<div className="flex items-center gap-1">
|
||||
<Star className="h-4 w-4 text-muted-foreground" />
|
||||
<span className="text-muted-foreground">{details.rating}/5</span>
|
||||
</div>
|
||||
)}
|
||||
{details.entity_name && (
|
||||
<span className="text-muted-foreground">from {details.entity_name}</span>
|
||||
)}
|
||||
</div>
|
||||
{isExpanded && details.review_text && (
|
||||
<div className="p-3 bg-muted rounded text-sm">
|
||||
<p className="text-muted-foreground line-clamp-3 opacity-60">
|
||||
"{details.review_text}"
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
{isExpanded && details.deletion_reason && (
|
||||
<div className="flex items-start gap-2 p-2 bg-red-500/5 rounded text-sm">
|
||||
<AlertCircle className="h-4 w-4 mt-0.5 flex-shrink-0 text-red-600" />
|
||||
<span className="text-muted-foreground">
|
||||
<strong>Reason:</strong> {details.deletion_reason}
|
||||
</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user