/** * Компонент для ленивой загрузки Material Web Components */ 'use client'; import { useEffect, useState, ReactNode } from 'react'; import { loadComponent } from '@/lib/material-components'; interface LazyMaterialComponentProps { componentName: string; children: ReactNode; fallback?: ReactNode; } export function LazyMaterialComponent({ componentName, children, fallback = null, }: LazyMaterialComponentProps) { const [loaded, setLoaded] = useState(false); const [error, setError] = useState(false); useEffect(() => { let mounted = true; loadComponent(componentName) .then(() => { if (mounted) { setLoaded(true); } }) .catch((err) => { console.error(`[LazyMaterial] Error loading ${componentName}:`, err); if (mounted) { setError(true); } }); return () => { mounted = false; }; }, [componentName]); if (error) { return <>{fallback}; } if (!loaded) { return <>{fallback}; } return <>{children}; }