Add dispute system

This commit is contained in:
2025-12-16 00:33:50 +07:00
parent 339a212e57
commit c7966656d8
22 changed files with 1584 additions and 8 deletions

View File

@@ -1,7 +1,8 @@
import { useState, useEffect, useCallback, useRef, useImperativeHandle, forwardRef } from 'react'
import { useNavigate } from 'react-router-dom'
import { feedApi } from '@/api'
import type { Activity, ActivityType } from '@/types'
import { Loader2, ChevronDown, Bell } from 'lucide-react'
import { Loader2, ChevronDown, Bell, ExternalLink } from 'lucide-react'
import {
formatRelativeTime,
getActivityIcon,
@@ -169,12 +170,18 @@ interface ActivityItemProps {
}
function ActivityItem({ activity }: ActivityItemProps) {
const navigate = useNavigate()
const Icon = getActivityIcon(activity.type)
const iconColor = getActivityColor(activity.type)
const bgClass = getActivityBgClass(activity.type)
const isEvent = isEventActivity(activity.type)
const { title, details, extra } = formatActivityMessage(activity)
// Get assignment_id for complete activities
const assignmentId = activity.type === 'complete' && activity.data
? (activity.data as { assignment_id?: number }).assignment_id
: null
if (isEvent) {
return (
<div className={`px-4 py-3 ${bgClass} border-l-2 ${activity.type === 'event_start' ? 'border-l-yellow-500' : 'border-l-gray-600'}`}>
@@ -240,6 +247,16 @@ function ActivityItem({ activity }: ActivityItemProps) {
{extra}
</div>
)}
{/* Details button for complete activities */}
{assignmentId && (
<button
onClick={() => navigate(`/assignments/${assignmentId}`)}
className="mt-2 text-xs text-primary-400 hover:text-primary-300 flex items-center gap-1"
>
<ExternalLink className="w-3 h-3" />
Детали
</button>
)}
</div>
</div>
</div>