import { h, Fragment } from 'preact'; import LinkedLogo from './components/LinkedLogo'; import { Match } from 'preact-router/match'; import { memo } from 'preact/compat'; import { ENV } from './env'; import { useMemo } from 'preact/hooks' import useSWR from 'swr'; import NavigationDrawer, { Destination, Separator } from './components/NavigationDrawer'; export default function Sidebar() { const { data: config } = useSWR('config'); if (!config) { return null; } const { cameras, birdseye } = config; return ( }> {({ matches }) => matches ? ( ) : null } {({ matches }) => matches ? ( ) : null } {birdseye?.enabled ? : null}
{ENV !== 'production' ? ( ) : null} ); } function SortedCameras({ unsortedCameras }) { const sortedCameras = useMemo(() => Object.entries(unsortedCameras) .filter(([_, conf]) => conf.ui.dashboard) .sort(([_, aConf], [__, bConf]) => aConf.ui.order === bConf.ui.order ? 0 : (aConf.ui.order > bConf.ui.order ? 1 : -1)), [unsortedCameras]); return ( {sortedCameras.map(([camera]) => ( ))} ); } function SortedRecordingCameras({ unsortedCameras }) { const sortedCameras = useMemo(() => Object.entries(unsortedCameras) .filter(([_, conf]) => conf.ui.dashboard) .sort(([_, aConf], [__, bConf]) => aConf.ui.order === bConf.ui.order ? 0 : (aConf.ui.order > bConf.ui.order ? 1 : -1)), [unsortedCameras]); return ( {sortedCameras.map(([camera, _]) => { return ( ); })} ); } const Header = memo(() => { return (
); });