import { useEffect, useState } from 'react'; import { pages } from '../utils/pages'; import { RunnerProvider } from '../features/runner'; type PageProps = { slug: string; }; const Page: React.FC = ({ slug }) => { const [Component, setComponent] = useState(); const [loading, setLoading] = useState(true); const [error, setError] = useState(); useEffect(() => { setLoading(true); setError(undefined); const load = async () => { try { const page = pages.find((page) => page.slug === slug); if (!page) { throw new Error(`Page not found: ${slug}`); } const { default: Component } = (await page.loader()) as { default: React.FC; }; setComponent(() => Component); } catch (err) { setError(err); } finally { setLoading(false); } }; load(); }, [slug]); if (error) { return
Error: {error.toString()}
; } if (loading || !Component) { return
Loading...
; } return ( ); }; export { Page };