import { Box, Flex, Heading, HStack, IconButton, Image, LinkBox, LinkOverlay, Stack, Status, Switch, Text } from '@chakra-ui/react'; import React, { type ComponentProps, type PropsWithChildren } from "react"; import { Link as RouterLink } from 'react-router'; import { VersionNext } from "../Version"; import { MobileSidebarNav } from "./MobileMenu"; import { TextMuted } from "./TextMuted"; import { TerminalIcon } from "./icons/ChakraIcons"; import { useSSEContext, useSSEStatus } from "@flamefrontend/sse-runtime-react"; import type {ErrorLike} from "../../core/Atomic"; import { ErrorAlert } from "./ErrorAlert"; import { ExternaLinksMenu } from "./ExternaLinksMenu"; import { FloatingLogs } from "./LogsNext"; import { ToggleTip } from "./ToggleTip"; import { ColorModeButton } from './Color-Mode'; export const AppTitle = (props: { fetchable?: boolean } = {}) => { const { fetchable } = props; return ( Multi Scrobbler {fetchable ? : dev} ) } export const RightHeaderSwitchLogs = (props: { logsEnabled?: boolean setLogsEnabled?: (val: boolean) => void }) => { const { logsEnabled, setLogsEnabled } = props; const TerminalSwitch = setLogsEnabled !== undefined ? ( setLogsEnabled(e.checked)}> ) : null; return {TerminalSwitch} } interface SSEStatusProps { status?: ReturnType['status'] error?: ErrorLike } export const SSEStatusElement = (props: SSEStatusProps) => { const status = props.status ?? 'closed'; let content: string | React.JSX.Element; let color: ComponentProps['colorPalette']; switch(status) { case 'error': case 'closed': color = 'red'; content = ( Live events connection is {status} ); break; case 'idle': case 'open': color = 'green'; content = 'Currently receiving live events'; break; case 'connecting': case 'reconnecting': color = 'orange'; content = 'Reconnecting to live events...'; break; } return ( {content}}> ) } const SSEStatus = (props: {live?: boolean} & SSEStatusProps) => { if(props.live) { return ; } return } const SSEStatusLive = () => { const client = useSSEContext(); const { status: sseStatus, error: sseError } = useSSEStatus(client); return } export const AppHeader = (props: PropsWithChildren<{ fetchable?: boolean }>) => ( )