shoc-frontend-new/src/domain/work-orders/use-cases/use-work-order-detail.ts

68 lines
2.2 KiB
TypeScript

import { useQuery, type UseQueryResult } from "@tanstack/react-query";
import { workOrdersApi } from "@/domain/work-orders/api/work-orders-api";
import { fetchWorkOrderEmployees } from "@/domain/work-orders/use-cases/fetch-work-order-employees";
import type {
DispatchDetail,
EmployeeOption,
LocationOption,
TaskListTemplate,
VendorDropdownItem,
WorkOrderDetail,
} from "@/domain/work-orders/types/work-order";
import { queryKeys } from "@/infra/query-key/query-key";
import { requireQueryParam } from "@/lib/query/require-query-param";
export function useWorkOrderDetail(
id: string | number | undefined,
): UseQueryResult<WorkOrderDetail, Error> {
return useQuery({
queryKey: queryKeys.workOrders.detail(id ?? ""),
queryFn: () => workOrdersApi.getById(requireQueryParam(id, "Work order id")),
enabled: id !== undefined && id !== "",
});
}
export function useWorkOrderLocations(): UseQueryResult<LocationOption[], Error> {
return useQuery({
queryKey: queryKeys.locations.dropdown(),
queryFn: () => workOrdersApi.fetchLocations(),
staleTime: 5 * 60 * 1000,
});
}
export function useWorkOrderEmployeesDropdown(): UseQueryResult<EmployeeOption[], Error> {
return useQuery({
queryKey: [...queryKeys.employees.all, "dropdown"] as const,
queryFn: () => fetchWorkOrderEmployees(),
staleTime: 5 * 60 * 1000,
});
}
export function useWorkOrderVendors(
trade?: string,
siteZip?: string,
): UseQueryResult<VendorDropdownItem[], Error> {
return useQuery({
queryKey: queryKeys.workOrders.vendors(trade, siteZip),
queryFn: () => workOrdersApi.fetchVendorsDropdown(trade, siteZip),
staleTime: 60 * 1000,
});
}
export function useTaskListTemplates(): UseQueryResult<TaskListTemplate[], Error> {
return useQuery({
queryKey: queryKeys.workOrders.taskTemplates(),
queryFn: () => workOrdersApi.fetchTaskTemplates(),
staleTime: 5 * 60 * 1000,
});
}
export function useDispatchDetail(
dispatchId: string | number | undefined,
): UseQueryResult<DispatchDetail, Error> {
return useQuery({
queryKey: queryKeys.workOrders.dispatch(dispatchId ?? ""),
queryFn: () => workOrdersApi.getDispatchById(requireQueryParam(dispatchId, "Dispatch id")),
enabled: dispatchId !== undefined && dispatchId !== "",
});
}