diff --git a/src/app/(modules)/ticket/[ticketId]/components/DefectClassStatusLegend.tsx b/src/app/(modules)/ticket/[ticketId]/components/DefectClassStatusLegend.tsx new file mode 100644 index 0000000..7c69db2 --- /dev/null +++ b/src/app/(modules)/ticket/[ticketId]/components/DefectClassStatusLegend.tsx @@ -0,0 +1,51 @@ +import { Component } from 'lucide-react'; + +import { cn } from '@/lib/utils'; +import type { TicketDefectClassTicketStatus } from '@/types'; + +export const DEFECT_CLASS_STATUS_CONFIG: Record< + TicketDefectClassTicketStatus, + { + label: string; + iconClassName: string; + } +> = { + unassigned: { + label: 'Unassigned', + iconClassName: 'text-zinc-500', + }, + assigned: { + label: 'Assigned', + iconClassName: 'text-red-500', + }, + under_review: { + label: 'Under Review', + iconClassName: 'text-violet-500', + }, + approved: { + label: 'Approved', + iconClassName: 'text-emerald-500', + }, + rejected: { + label: 'Rejected', + iconClassName: 'text-orange-500', + }, +}; + +export function DefectClassStatusLegend() { + return ( +
+ {Object.entries(DEFECT_CLASS_STATUS_CONFIG).map(([status, item]) => ( + + + {item.label} + + ))} +
+ ); +} diff --git a/src/app/(modules)/ticket/[ticketId]/components/TicketDefectClassTabs.tsx b/src/app/(modules)/ticket/[ticketId]/components/TicketDefectClassTabs.tsx index 9ed0468..9e67d68 100644 --- a/src/app/(modules)/ticket/[ticketId]/components/TicketDefectClassTabs.tsx +++ b/src/app/(modules)/ticket/[ticketId]/components/TicketDefectClassTabs.tsx @@ -2,12 +2,14 @@ import { useEffect, useMemo, useState } from 'react'; import { usePathname, useRouter, useSearchParams } from 'next/navigation'; -import { CheckCircle2 } from 'lucide-react'; +import { Component } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { Tabs, TabsList, TabsTrigger } from '@/components/ui/tabs'; +import { cn } from '@/lib/utils'; import { useTicketDefectClassesQuery } from '../../hooks/useTicketQueries'; +import { DEFECT_CLASS_STATUS_CONFIG } from './DefectClassStatusLegend'; interface TicketDefectClassTabsProps { ticketId: string; @@ -49,7 +51,6 @@ export function TicketDefectClassTabs({ nextParams.set('defect_class', className); setSelectedClass(className); - console.log(className); router.replace(`${pathname}?${nextParams.toString()}`, { scroll: false }); }; @@ -86,9 +87,17 @@ export function TicketDefectClassTabs({ - + {item.display_name} ))} diff --git a/src/app/(modules)/ticket/[ticketId]/components/TicketDetailHeader.tsx b/src/app/(modules)/ticket/[ticketId]/components/TicketDetailHeader.tsx index ce47700..5a021bb 100644 --- a/src/app/(modules)/ticket/[ticketId]/components/TicketDetailHeader.tsx +++ b/src/app/(modules)/ticket/[ticketId]/components/TicketDetailHeader.tsx @@ -10,9 +10,11 @@ import { PermissionGuard } from '@/guards'; import type { TicketDetail } from '@/types'; import { TicketStatusBadge } from '../../components/TicketStatusBadge'; +import { DefectClassStatusLegend } from './DefectClassStatusLegend'; export function TicketDetailHeader({ ticket }: { ticket: TicketDetail }) { const router = useRouter(); + const ticketLabel = ticket.ticket_name return (
@@ -23,7 +25,8 @@ export function TicketDetailHeader({ ticket }: { ticket: TicketDetail }) {
-

Ticket ID: {ticket.id}

+

Ticket: {ticketLabel}

+
diff --git a/src/types/ticket/actions.ts b/src/types/ticket/actions.ts index b39b706..8292b3a 100644 --- a/src/types/ticket/actions.ts +++ b/src/types/ticket/actions.ts @@ -43,23 +43,3 @@ export interface ReviewRepairPayload { export interface CloseTicketPayload { defect_class: string; } - -export type TicketDefectClassTicketStatus = - | 'unassigned' - | 'assigned' - | 'under_review' - | 'approved' - | 'rejected'; - -export interface TicketDefectClassItem { - class_name: string; - display_name: string; - assignment_status: TicketDefectClassTicketStatus; -} - -export interface TicketDefectClassesResponse { - ticket_id: string; - video_id: string; - ticket_status: TicketDefectClassTicketStatus; - defect_classes: TicketDefectClassItem[]; -} diff --git a/src/types/ticket/defect-class.ts b/src/types/ticket/defect-class.ts new file mode 100644 index 0000000..af058ef --- /dev/null +++ b/src/types/ticket/defect-class.ts @@ -0,0 +1,19 @@ +export type TicketDefectClassTicketStatus = + | 'unassigned' + | 'assigned' + | 'under_review' + | 'approved' + | 'rejected'; + +export interface TicketDefectClassItem { + class_name: string; + display_name: string; + assignment_status: TicketDefectClassTicketStatus; +} + +export interface TicketDefectClassesResponse { + ticket_id: string; + video_id: string; + ticket_status: TicketDefectClassTicketStatus; + defect_classes: TicketDefectClassItem[]; +} diff --git a/src/types/ticket/detail.ts b/src/types/ticket/detail.ts index a512033..cbfae64 100644 --- a/src/types/ticket/detail.ts +++ b/src/types/ticket/detail.ts @@ -1,4 +1,4 @@ -import type { TicketDefectClassTicketStatus } from './actions'; +import type { TicketDefectClassTicketStatus } from './defect-class'; import type { TicketStatus } from './status'; export interface TicketActor { @@ -68,6 +68,7 @@ export interface TicketTimestamps { export interface TicketDetail { id: string; + ticket_name?: string; video_id: string; chainage_id: string | null; status: TicketStatus; diff --git a/src/types/ticket/index.ts b/src/types/ticket/index.ts index d161645..4f98cfd 100644 --- a/src/types/ticket/index.ts +++ b/src/types/ticket/index.ts @@ -2,4 +2,5 @@ export * from './status'; export * from './list'; export * from './detail'; export * from './actions'; +export * from './defect-class'; export * from './events';