75 lines
2.4 KiB
TypeScript
75 lines
2.4 KiB
TypeScript
'use client';
|
||
|
||
import { ReactNode, useEffect } from 'react';
|
||
import { useQueryClient } from '@tanstack/react-query';
|
||
import { cacheKeys } from '@/lib/api-cache';
|
||
|
||
interface AdminQueryProviderProps {
|
||
children: ReactNode;
|
||
}
|
||
|
||
/**
|
||
* Провайдер для react-query в админке
|
||
* Оборачивает все компоненты админки и предоставляет доступ к QueryClient
|
||
* и оптимизирует работу с кэшем
|
||
*/
|
||
export function AdminQueryProvider({ children }: AdminQueryProviderProps) {
|
||
// Используем существующий QueryClient из корневого провайдера
|
||
const queryClient = useQueryClient();
|
||
|
||
// Предварительная загрузка часто используемых данных
|
||
useEffect(() => {
|
||
// Предзагрузка категорий
|
||
queryClient.prefetchQuery({
|
||
queryKey: [cacheKeys.categories],
|
||
queryFn: async () => {
|
||
try {
|
||
const response = await fetch('/api/catalog/categories');
|
||
if (!response.ok) throw new Error('Failed to fetch categories');
|
||
return await response.json();
|
||
} catch (error) {
|
||
console.error('Error prefetching categories:', error);
|
||
return [];
|
||
}
|
||
},
|
||
staleTime: 5 * 60 * 1000, // 5 минут
|
||
});
|
||
|
||
// Предзагрузка коллекций
|
||
queryClient.prefetchQuery({
|
||
queryKey: [cacheKeys.collections],
|
||
queryFn: async () => {
|
||
try {
|
||
const response = await fetch('/api/catalog/collections');
|
||
if (!response.ok) throw new Error('Failed to fetch collections');
|
||
return await response.json();
|
||
} catch (error) {
|
||
console.error('Error prefetching collections:', error);
|
||
return [];
|
||
}
|
||
},
|
||
staleTime: 5 * 60 * 1000, // 5 минут
|
||
});
|
||
|
||
// Предзагрузка размеров
|
||
queryClient.prefetchQuery({
|
||
queryKey: [cacheKeys.sizes],
|
||
queryFn: async () => {
|
||
try {
|
||
const response = await fetch('/api/catalog/sizes');
|
||
if (!response.ok) throw new Error('Failed to fetch sizes');
|
||
return await response.json();
|
||
} catch (error) {
|
||
console.error('Error prefetching sizes:', error);
|
||
return [];
|
||
}
|
||
},
|
||
staleTime: 5 * 60 * 1000, // 5 минут
|
||
});
|
||
}, [queryClient]);
|
||
|
||
return <>{children}</>;
|
||
}
|
||
|
||
export default AdminQueryProvider;
|