import React, { useState, lazy, Suspense } from 'react';
import { useParams, useNavigate } from 'react-router-dom';
import {
Box,
Container,
Typography,
Paper,
Button,
Grid,
Card,
CardContent,
CardActions,
Chip,
Alert,
CircularProgress
} from '@mui/material';
import { styled } from '@mui/material/styles';
import ScienceIcon from '@mui/icons-material/Science';
// Lazy load prerender components for testing
const PrerenderHome = lazy(() => import('../PrerenderHome.js'));
const PrerenderCategory = lazy(() => import('../PrerenderCategory.js'));
const PrerenderProduct = lazy(() => import('../PrerenderProduct.js'));
const PrerenderKonfigurator = lazy(() => import('../PrerenderKonfigurator.js'));
const PrerenderProfile = lazy(() => import('../PrerenderProfile.js'));
const PrerenderSitemap = lazy(() => import('../PrerenderSitemap.js'));
const StyledPaper = styled(Paper)(({ theme }) => ({
padding: theme.spacing(3),
margin: theme.spacing(2, 0),
backgroundColor: theme.palette.background.paper,
}));
const ComponentCard = styled(Card)(({ theme }) => ({
height: '100%',
display: 'flex',
flexDirection: 'column',
transition: 'transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out',
'&:hover': {
transform: 'translateY(-2px)',
boxShadow: theme.shadows[4],
},
}));
const PrerenderTestPage = () => {
const { componentName } = useParams();
const navigate = useNavigate();
const [selectedComponent, setSelectedComponent] = useState(componentName || 'home');
const [componentProps, setComponentProps] = useState({});
// Available components for testing - memoized to prevent re-renders
const availableComponents = React.useMemo(() => ({
// Prerender components
home: {
component: PrerenderHome,
name: 'Home Page',
description: 'Main homepage component',
category: 'Prerender',
props: {}
},
category: {
component: PrerenderCategory,
name: 'Category Page',
description: 'Category listing with products',
category: 'Prerender',
props: {
categoryId: 209,
categoryName: 'Test Category',
categorySeoName: 'test-category',
productData: null
}
},
product: {
component: PrerenderProduct,
name: 'Product Page',
description: 'Individual product detail page',
category: 'Prerender',
props: {
productData: {
product: {
id: 1,
name: 'Test Product',
seoName: 'test-product',
description: 'This is a test product for prerender testing',
price: 99.99
}
}
}
},
konfigurator: {
component: PrerenderKonfigurator,
name: 'Konfigurator',
description: 'Grow tent configurator',
category: 'Prerender',
props: {}
},
profile: {
component: PrerenderProfile,
name: 'Profile Page',
description: 'User profile page',
category: 'Prerender',
props: {}
},
sitemap: {
component: PrerenderSitemap,
name: 'Sitemap',
description: 'Site navigation map',
category: 'Prerender',
props: {
categoryData: null
}
}
}), []);
React.useEffect(() => {
if (componentName && availableComponents[componentName]) {
setSelectedComponent(componentName);
setComponentProps(availableComponents[componentName].props);
}
}, [componentName, availableComponents]);
const handleComponentChange = (componentKey) => {
setSelectedComponent(componentKey);
setComponentProps(availableComponents[componentKey].props);
navigate(`/prerenderTest/${componentKey}`);
};
const renderComponent = () => {
const componentConfig = availableComponents[selectedComponent];
if (!componentConfig) return null;
const Component = componentConfig.component;
return (
}>
);
};
const getCategories = () => {
const categories = {};
Object.keys(availableComponents).forEach(key => {
const category = availableComponents[key].category;
if (!categories[category]) {
categories[category] = [];
}
categories[category].push(key);
});
return categories;
};
const categories = getCategories();
return (
Prerender Preview Environment
Preview prerender components dynamically during development
This page allows you to preview prerender components in a development environment.
The actual prerender components remain unchanged and are used for static generation.
{/* Component Selection */}
Select Component to Preview
{Object.keys(categories).map(category => (
{category} Components
{categories[category].map(componentKey => {
const config = availableComponents[componentKey];
return (
handleComponentChange(componentKey)}
sx={{
cursor: 'pointer',
border: selectedComponent === componentKey ? '2px solid' : '1px solid',
borderColor: selectedComponent === componentKey ? 'primary.main' : 'divider'
}}
>
{config.name}
{config.description}
}
>
{selectedComponent === componentKey ? 'Previewing' : 'Preview'}
);
})}
))}
{/* Current Selection Info */}
Currently Previewing: {availableComponents[selectedComponent]?.name}
Component: {selectedComponent} | Category: {availableComponents[selectedComponent]?.category}
{/* Component Preview Area */}
Component Preview
The component below is rendered dynamically for development preview.
In production, this would be prerendered as static HTML.
{renderComponent()}
{/* Navigation */}
);
};
export default PrerenderTestPage;