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;