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

{result.status} {result.status === 'error' && (

Stock could not be loaded. Choose another desk.

)}
); } createRoot(document.getElementById('root')).render( , );