import { createTranslator } from "@root/utils";
import {
useQuery,
usePut,
usePost,
useNavigate,
useStyledNotification,
} from "@uikit";
import { useEffect } from "react";
interface IUseWorkOrderApi {
id: string;
setProcedures: React.Dispatch<React.SetStateAction<any[]>>;
setErrorProcedure: React.Dispatch<React.SetStateAction<boolean>>;
}
const MODAL_DURATION = 5;
const translate = createTranslator("WorkOrders");
export const useWorkOrderApi = ({
id,
setProcedures,
setErrorProcedure,
}: IUseWorkOrderApi) => {
const { toPrevious } = useNavigate();
const api = useStyledNotification();
const { data: workOrderData, isLoading: isLoadingWorkOrder } = useQuery(
`workOrders${id}`,
`WorkOrders/Retrieve?id=${id}`,
);
const { data: proceduresData, isLoading: isLoadingProcedures } = useQuery(
`Procedure${id}`,
`WorkOrders/ListWorkOrderProcedures?id=${id}`,
);
const updateApprovers = usePost({
name: `workOrders${id}`,
uri: `WorkOrders/UpdateApprovers`,
invalidateOnSuccess: true,
});
useEffect(() => {
if (!isLoadingProcedures && proceduresData) {
setProcedures(proceduresData.results);
}
}, [isLoadingProcedures, proceduresData, setProcedures]);
useEffect(() => {
!isLoadingProcedures &&
setErrorProcedure(proceduresData.results.length === 0);
}, [proceduresData, isLoadingProcedures, setErrorProcedure]);
const updateWorkOrder = usePut({
name: "workOrders",
uri: "WorkOrders/UpdateBaseInfo",
});
const updateAsset = usePut({
name: "workOrders",
uri: "WorkOrders/UpdateAsset",
});
const updateProcedures = usePut({
name: "workOrders",
uri: "WorkOrders/UpdateWorkOrderProceduresList",
onSuccess: () => {
toPrevious();
api.success({
message: translate("Changes saved"),
duration: MODAL_DURATION,
});
},
});
const updateDocuments = usePost({
name: "UpdateDocuments",
uri: "WorkOrders/UpdateDocuments",
});
return {
workOrderData,
isLoadingWorkOrder,
proceduresData,
isLoadingProcedures,
updateWorkOrder,
updateAsset,
updateProcedures,
updateDocuments,
updateApprovers,
};
};