mirror of
https://github.com/pacnpal/thrilltrack-explorer.git
synced 2025-12-20 15:51:12 -05:00
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { useEffect } from 'react';
|
|
import { useAuth } from './useAuth';
|
|
import { useUserRole } from './useUserRole';
|
|
|
|
/**
|
|
* Preloads admin route chunks for authenticated moderators/admins
|
|
* This reduces chunk load failures by warming up the browser cache
|
|
*/
|
|
export function useAdminRoutePreload() {
|
|
const { user } = useAuth();
|
|
const { isModerator, isAdmin } = useUserRole();
|
|
|
|
useEffect(() => {
|
|
// Only preload if user has admin access
|
|
if (!user || (!isModerator && !isAdmin)) {
|
|
return;
|
|
}
|
|
|
|
// Preload admin chunks after a short delay to avoid blocking initial page load
|
|
const preloadTimer = setTimeout(() => {
|
|
// Preload critical admin routes
|
|
const adminRoutes = [
|
|
() => import('../pages/AdminDashboard'),
|
|
() => import('../pages/AdminModeration'),
|
|
() => import('../pages/AdminReports'),
|
|
];
|
|
|
|
// Start preloading (but don't await - let it happen in background)
|
|
adminRoutes.forEach(route => {
|
|
route().catch(err => {
|
|
// Silently fail - preloading is a performance optimization
|
|
console.debug('Admin route preload failed:', err);
|
|
});
|
|
});
|
|
}, 2000); // Wait 2 seconds after auth to avoid blocking initial render
|
|
|
|
return () => clearTimeout(preloadTimer);
|
|
}, [user, isModerator, isAdmin]);
|
|
}
|