Files
edr-platform/apps/edr-freight-web/backoffice/src/performance-management/hooks/useCombinedEmployeePlan.tsx
natib21 e6e44e773b fix ui
2026-07-10 11:25:59 +00:00

68 lines
2.2 KiB
TypeScript

import { useQuery } from "@tanstack/react-query";
import {
getEmployeePlanByPlanId,
getEmployeeSubPlanByPlanId,
} from "../services/api/employeePlanService";
interface CombinedEmployeePlanResponse {
items: any[];
total: number;
}
export const useCombinedEmployeePlanByPlanId = (planId: string | undefined) => {
// Main query that intelligently fetches data
const query = useQuery<CombinedEmployeePlanResponse>({
queryKey: ["combined-employee-plan", planId],
queryFn: async () => {
if (!planId) return { items: [], total: 0 };
try {
// First, try to get data from the sub endpoint (this has actual plan data)
const subResponse = await getEmployeeSubPlanByPlanId(planId);
if (subResponse.data?.items && subResponse.data.items.length > 0) {
return {
items: subResponse.data.items,
total: subResponse.data.total || subResponse.data.items.length,
};
}
// If sub endpoint returns empty, try the initial endpoint
const initialResponse = await getEmployeePlanByPlanId(planId);
if (initialResponse.data?.items) {
// Transform initial data to match the expected format
const transformedItems = initialResponse.data.items.map(
(item: any) => ({
...item,
weeks: {}, // Initialize empty weeks object
no_of_employee_plans: "0", // No plans exist yet
})
);
return {
items: transformedItems,
total: transformedItems.length,
};
}
// Both endpoints returned empty
return { items: [], total: 0 };
} catch (error) {
console.error("Error fetching employee plans:", error);
// Return empty but don't throw - we'll show empty state in UI
return { items: [], total: 0 };
}
},
enabled: !!planId,
staleTime: 5 * 60 * 1000, // 5 minutes
gcTime: 10 * 60 * 1000, // 10 minutes
});
return {
data: query.data,
isLoading: query.isLoading,
error: query.error,
refetch: query.refetch,
};
};