import React from 'react'; import { createBrowserRouter, createHashRouter, type RouteObject, RouterProvider, useLocation, } from "react-router-dom"; import {connect, type ConnectedProps, Provider} from 'react-redux' import './App.css'; import CopyToClipboard from "./components/CopyToClipboard"; import ExternalLink from "./components/ExternalLink"; import {store} from './store'; import Dashboard from "./dashboard/dashboard"; import RecentPage from "./recent/RecentPage"; import ScrobbledPage from "./scrobbled/ScrobbledPage"; import DeadPage from "./deadLetter/DeadPage"; import {clientUpdate, sourceUpdate} from "./status/ducks"; import {useEventSource, useEventSourceListener} from "@react-nano/use-event-source"; import Version from "./Version"; function NoMatch() { const location = useLocation(); return (
No page for {location.pathname} exists!
); } // https://tailwindflex.com/@sienna/copy-code-block function MissingDocs() { return (
Oops! You need to build docs first. Run the following commands to build:
$ npm run docs:install && npm run docs:build
); } const routes: RouteObject[] = [ { path: "/", element: , }, { path: "/recent", element: , }, { path: "/scrobbled", element: , }, { path: "/dead", element: , }, { path: "/docs", element: }, { path: "*", element: } ]; const genRouter = () => { const useHashRouter = __USE_HASH_ROUTER__ === 'true'; return useHashRouter ? createHashRouter(routes) : createBrowserRouter(routes); } const router = genRouter(); const mapDispatchToProps = (dispatch) => { return { updateSource: (payload) => dispatch(sourceUpdate(payload)), updateClient: (payload) => dispatch(clientUpdate(payload)) } } const connector = connect(null, mapDispatchToProps); type PropsFromRedux = ConnectedProps; const Global = (props: PropsFromRedux) => { const { updateSource, updateClient } = props; const [sourceEventSource, eventSourceStatus] = useEventSource("api/events", false); useEventSourceListener(sourceEventSource, ['source', 'client'], evt => { const data = JSON.parse(evt.data); if(data.from === 'source') { updateSource(data); } else if(data.from === 'client') { updateClient(data); } }, [updateSource, updateClient]); return ; } const ConnectedGlobal = connector(Global); function App() { return ( ); } export default App;