satupeta-main/app/(modules)/admin/_components/refdata-bootstrap.tsx
2026-01-27 09:31:12 +07:00

56 lines
1.6 KiB
TypeScript

"use client";
import { useEffect } from "react";
import { useQueryClient } from "@tanstack/react-query";
import categoryApi from "@/shared/services/category";
import classificationApi from "@/shared/services/classification";
import mapProjectionSystemApi from "@/shared/services/map-projection-system";
import organizationApi from "@/shared/services/organization";
import mapSourceApi from "@/shared/services/map-source";
import { useAuthSession } from "@/shared/hooks/use-session";
/**
* Prefetches admin reference data (options) once the user session is ready.
* This ensures select options are available before opening edit/add forms,
* so forms can immediately display selected values.
*/
export default function RefDataBootstrap() {
const qc = useQueryClient();
const { isAuthenticated } = useAuthSession();
useEffect(() => {
if (!isAuthenticated) return;
const staleTime = 5 * 60 * 1000; // 5 minutes
qc.prefetchQuery({
queryKey: ["projectionSystems"],
queryFn: () => mapProjectionSystemApi.getMapProjectionSystems(),
staleTime,
});
qc.prefetchQuery({
queryKey: ["categories"],
queryFn: () => categoryApi.getCategories(),
staleTime,
});
qc.prefetchQuery({
queryKey: ["classifications"],
queryFn: () => classificationApi.getClassifications(),
staleTime,
});
qc.prefetchQuery({
queryKey: ["organizations"],
queryFn: () => organizationApi.getOrganizations(),
staleTime,
});
qc.prefetchQuery({
queryKey: ["map-sources"],
queryFn: () => mapSourceApi.getMapSources(),
staleTime,
});
}, [qc, isAuthenticated]);
return null;
}