import React, { StrictMode, useState, useEffect } from 'react'; import { createRoot } from 'react-dom/client'; import './style.css'; function App() { const [desk, setDesk] = useState('north'); const [result, setResult] = useState({ status: 'loading', items: [] }); useEffect(() => { const controller = new AbortController(); let active = true; setResult({ status: 'loading', items: [] }); fetch('/stock/' + desk + '.json', { signal: controller.signal }) .then((response) => { if (!response.ok) throw new Error('Unavailable'); return response.json(); }) .then((data) => { if (!Array.isArray(data) || !data.every((row) => typeof row.name === 'string')) throw new Error('Invalid stock'); if (active) setResult({ status: 'ready', items: data }); }) .catch((error) => { if (active && error.name !== 'AbortError') setResult({ status: 'error', items: [] }); }); return () => { active = false; controller.abort(); }; }, [desk]); return ( Neighbourhood lending desk Desk setDesk(event.target.value)}> North East Unavailable fixture {result.status} {result.status === 'error' && ( Stock could not be loaded. Choose another desk. )} {result.items.map((row) => ( {row.name} ))} ); } createRoot(document.getElementById('root')).render( , );
Stock could not be loaded. Choose another desk.