fix(ticket): hide details for empty assignment lots

This commit is contained in:
2026-07-30 16:43:16 +05:30
parent e894676d3b
commit 5e0d641575
4 changed files with 28 additions and 22 deletions

View File

@@ -146,7 +146,9 @@ export function TicketAssignmentsCard({
ticketId,
initialAssignments,
);
const assignments = assignmentsQuery.data?.items ?? [];
const assignments = (assignmentsQuery.data?.items ?? []).filter(
(assignment) => assignment.item_count > 0,
);
const selectedAssignment =
assignments.find((assignment) => assignment.id === selectedAssignmentId) ??
assignments[0];
@@ -178,7 +180,7 @@ export function TicketAssignmentsCard({
</CardDescription>
</div>
{assignmentsQuery.data ? (
<Badge variant="secondary">{assignmentsQuery.data.total}</Badge>
<Badge variant="secondary">{assignments.length}</Badge>
) : null}
</div>
</CardHeader>

View File

@@ -20,8 +20,7 @@ import { DetectionDiscardDialog } from './DetectionDiscardDialog';
interface TicketClassDetectionPreviewProps {
ticketId: string;
videoId?: string | null;
assignmentId?: number;
totalCount?: number;
assignmentId: number;
}
function DetectionMetadataBar({
@@ -96,7 +95,6 @@ export function TicketClassDetectionPreview({
ticketId,
videoId,
assignmentId,
totalCount,
}: TicketClassDetectionPreviewProps) {
const [currentIndex, setCurrentIndex] = useState(0);
const [isDiscardDialogOpen, setIsDiscardDialogOpen] = useState(false);
@@ -122,8 +120,7 @@ export function TicketClassDetectionPreview({
const detectionResult = detectionsQuery.data;
const activeDetection = detectionResult?.items[0];
const confirmedDetectionCount = detectionResult?.total;
const detectionCount =
detectionResult?.total ?? (assignmentId ? 0 : (totalCount ?? 0));
const detectionCount = detectionResult?.total ?? 0;
const activeVisual = getDefectVisual(
activeDetection?.detection.class_name ?? '',
);

View File

@@ -12,7 +12,7 @@ import { TicketClassDetectionPreview } from './TicketClassDetectionPreview';
interface TicketDefectClassTabsProps {
ticketId: string;
ticket?: TicketOverviewDetail;
assignmentId?: number;
assignmentId: number;
}
export function TicketDefectClassTabs({
@@ -61,7 +61,6 @@ export function TicketDefectClassTabs({
ticketId={ticketId}
videoId={previewVideoId}
assignmentId={assignmentId}
totalCount={ticket?.ai_result.detection_count}
/>
</div>
</CardContent>

View File

@@ -43,11 +43,13 @@ export default function TicketDetailPage() {
);
const classDetailQuery = useTicketClassDetailQuery(ticketId, defectClass);
const classDetail = classDetailQuery.data;
const assignments = assignmentsQuery.data?.items ?? [];
const activeAssignmentId = selectedAssignmentId ?? assignments[0]?.id;
const activeAssignment = assignments.find(
(assignment) => assignment.id === activeAssignmentId,
const assignments = (assignmentsQuery.data?.items ?? []).filter(
(assignment) => assignment.item_count > 0,
);
const activeAssignment =
assignments.find((assignment) => assignment.id === selectedAssignmentId) ??
assignments[0];
const activeAssignmentId = activeAssignment?.id;
const isClassDetailLoading = Boolean(
defectClass && classDetailQuery.isLoading,
);
@@ -95,20 +97,26 @@ export default function TicketDetailPage() {
onAssignmentChange={setSelectedAssignmentId}
/>
) : null}
<TicketDefectClassTabs
ticketId={ticketId}
ticket={overview}
assignmentId={activeAssignmentId}
/>
{isClassDetailLoading ? <TicketClassContentSkeleton /> : null}
{!isClassDetailLoading && classDetail ? (
{activeAssignment ? (
<TicketDefectClassTabs
ticketId={ticketId}
ticket={overview}
assignmentId={activeAssignment.id}
/>
) : null}
{activeAssignment && isClassDetailLoading ? (
<TicketClassContentSkeleton />
) : null}
{activeAssignment && !isClassDetailLoading && classDetail ? (
<TicketHistoryCard ticket={classDetail} />
) : null}
</div>
<div className="min-w-0 space-y-3 self-start xl:min-h-0 xl:self-stretch xl:overflow-y-auto xl:overscroll-contain xl:pr-2">
{isClassDetailLoading ? <TicketClassActionsSkeleton /> : null}
{!isClassDetailLoading && classDetail ? (
{activeAssignment && isClassDetailLoading ? (
<TicketClassActionsSkeleton />
) : null}
{activeAssignment && !isClassDetailLoading && classDetail ? (
<TicketStatusActions
ticket={classDetail}
assignment={activeAssignment}