shoc-frontend-new/src/hooks/api/usePMSchedules.js
npalOmega 65bf95b20c refactor: fix compilation errors and centralize constants
- Fixed Redux slice errors
- All query keys now use constants from src/constants/
- Converted LoginPage to CSS Modules
- Consolidated documentation
2026-05-12 20:33:23 -05:00

69 lines
1.7 KiB
JavaScript

import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query';
import { pmSchedulesApi } from '../../lib/api/services';
import { toast } from 'react-toastify';
import {
PM_SCHEDULES_LIST,
PM_SCHEDULES_DETAIL,
API_SUCCESS_MESSAGE,
API_ERROR_MESSAGE,
} from '../../constants';
/**
* Hook to fetch PM schedules list
*/
export function usePMSchedules(params = {}) {
return useQuery({
queryKey: [PM_SCHEDULES_LIST, params],
queryFn: () => pmSchedulesApi.getList(params),
keepPreviousData: true,
});
}
/**
* Hook to fetch a single PM schedule by ID
*/
export function usePMSchedule(id, options = {}) {
return useQuery({
queryKey: [PM_SCHEDULES_DETAIL, id],
queryFn: () => pmSchedulesApi.getById(id),
enabled: !!id,
...options,
});
}
/**
* Hook to save (create/update) a PM schedule
*/
export function useSavePMSchedule() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (data) => pmSchedulesApi.save(data),
onSuccess: () => {
queryClient.invalidateQueries([PM_SCHEDULES_LIST]);
queryClient.invalidateQueries([PM_SCHEDULES_DETAIL]);
toast.success('PM schedule saved successfully!');
},
onError: (error) => {
toast.error(error.message || API_ERROR_MESSAGE);
},
});
}
/**
* Hook to delete a PM schedule
*/
export function useDeletePMSchedule() {
const queryClient = useQueryClient();
return useMutation({
mutationFn: (id) => pmSchedulesApi.delete(id),
onSuccess: () => {
queryClient.invalidateQueries([PM_SCHEDULES_LIST]);
toast.success('PM schedule deleted successfully!');
},
onError: (error) => {
toast.error(error.message || API_ERROR_MESSAGE);
},
});
}