feat(ticket): split overview/class detail queries and add loading skeletons

This commit is contained in:
2026-07-01 16:13:42 +05:30
parent d4a7a7c139
commit b1174c8825
15 changed files with 305 additions and 179 deletions

View File

@@ -52,15 +52,26 @@ export function useTicketsQuery(params: UseTicketsQueryParams) {
});
}
export function useTicketDetailQuery(
export function useTicketOverviewQuery(ticketId: string | undefined) {
return useQuery({
queryKey: ticketKeys.overview(ticketId ?? ''),
queryFn: () => ticketService.getTicketOverview(ticketId as string),
enabled: Boolean(ticketId),
});
}
export function useTicketClassDetailQuery(
ticketId: string | undefined,
defectClass: string | undefined,
) {
return useQuery({
queryKey: ticketKeys.detail(ticketId ?? '', defectClass),
queryKey: ticketKeys.classDetail(ticketId ?? '', defectClass ?? ''),
queryFn: () =>
ticketService.getTicketDetail(ticketId as string, defectClass),
enabled: Boolean(ticketId),
ticketService.getTicketClassDetail(
ticketId as string,
defectClass as string,
),
enabled: Boolean(ticketId && defectClass),
});
}
@@ -102,7 +113,7 @@ export function useAssignTicketMutation(ticketId: string) {
onSuccess: (ticket, payload) => {
toast.success('Ticket assigned');
queryClient.setQueryData<TicketDetail>(
ticketKeys.detail(ticketId, payload.defect_class),
ticketKeys.classDetail(ticketId, payload.defect_class),
(current) => mergeTicketDetailResponse(current, ticket),
);
queryClient.invalidateQueries({ queryKey: ticketKeys.lists() });
@@ -120,7 +131,7 @@ export function useSubmitRepairMutation(ticketId: string) {
onSuccess: (ticket) => {
toast.success('Repair submitted');
queryClient.setQueryData<TicketDetail>(
ticketKeys.detail(ticketId),
ticketKeys.classDetail(ticketId, ticket.defect_class),
(current) => mergeTicketDetailResponse(current, ticket),
);
queryClient.invalidateQueries({ queryKey: ticketKeys.lists() });
@@ -138,7 +149,7 @@ export function useSubmitRepairUploadMutation(ticketId: string) {
onSuccess: (ticket, payload) => {
toast.success('Repair evidence uploaded');
queryClient.setQueryData<TicketDetail>(
ticketKeys.detail(ticketId, payload.defect_class),
ticketKeys.classDetail(ticketId, payload.defect_class),
(current) => mergeTicketDetailResponse(current, ticket),
);
queryClient.invalidateQueries({ queryKey: ticketKeys.lists() });
@@ -158,7 +169,7 @@ export function useReviewRepairMutation(ticketId: string) {
payload.action === 'approve' ? 'Repair approved' : 'Repair rejected',
);
queryClient.setQueryData<TicketDetail>(
ticketKeys.detail(ticketId, payload.defect_class),
ticketKeys.classDetail(ticketId, payload.defect_class),
(current) => mergeTicketDetailResponse(current, ticket),
);
queryClient.invalidateQueries({ queryKey: ticketKeys.lists() });
@@ -176,7 +187,7 @@ export function useCloseTicketMutation(ticketId: string) {
onSuccess: (ticket, payload) => {
toast.success('Ticket closed');
queryClient.setQueryData<TicketDetail>(
ticketKeys.detail(ticketId, payload.defect_class),
ticketKeys.classDetail(ticketId, payload.defect_class),
(current) => mergeTicketDetailResponse(current, ticket),
);
queryClient.invalidateQueries({ queryKey: ticketKeys.lists() });