App.jsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import { h } from 'preact';
  2. import Camera from './Camera';
  3. import CameraMap from './CameraMap';
  4. import Cameras from './Cameras';
  5. import Debug from './Debug';
  6. import Event from './Event';
  7. import Events from './Events';
  8. import { Router } from 'preact-router';
  9. import Sidebar from './Sidebar';
  10. import { ApiHost, Config } from './context';
  11. import { useContext, useEffect, useState } from 'preact/hooks';
  12. export default function App() {
  13. const apiHost = useContext(ApiHost);
  14. const [config, setConfig] = useState(null);
  15. useEffect(async () => {
  16. const response = await fetch(`${apiHost}/api/config`);
  17. const data = response.ok ? await response.json() : {};
  18. setConfig(data);
  19. }, []);
  20. return !config ? (
  21. <div />
  22. ) : (
  23. <Config.Provider value={config}>
  24. <div className="md:flex flex-col md:flex-row md:min-h-screen w-full bg-gray-100 dark:bg-gray-800 text-gray-900 dark:text-white">
  25. <Sidebar />
  26. <div className="flex-auto p-4 lg:pl-8 lg:pr-8 min-w-0">
  27. <Router>
  28. <CameraMap path="/cameras/:camera/editor" />
  29. <Camera path="/cameras/:camera" />
  30. <Event path="/events/:eventId" />
  31. <Events path="/events" />
  32. <Debug path="/debug" />
  33. <Cameras default path="/" />
  34. </Router>
  35. </div>
  36. </div>
  37. </Config.Provider>
  38. );
  39. }