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 }>) => (
)