'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;