import type React from "react"; import { useEffect, useState } from "react"; import { Accordion, AccordionButton, AccordionIcon, AccordionItem, AccordionPanel, Box, Link, Select, Table, Tag, Tbody, Td, Tr, Wrap, WrapItem, } from "@chakra-ui/react"; import { Link as ReactRouterLink } from "react-router-dom"; import type { DetailResponse, RuntimeInfo } from "../app/services/problem"; const TitleItem = ({ word }: { word: string }) => (

{word}

); interface ProblemInfoMenuProps { data?: DetailResponse; onLanguageSelect?: (lang: string) => void; action?: React.ReactNode; } const EmptyRuntime: RuntimeInfo = { TimeLimit: 0, MemoryLimit: 0, NProcLimit: 0, }; export default function ProblemInfoMenu(props: ProblemInfoMenuProps) { const [lang, setLang] = useState(props.data?.context.Languages[0]?.Lang || "c"); const runtime = props.data?.context.Languages.find((x) => x.Lang === lang)?.Runtime.Run || EmptyRuntime; useEffect(() => { props.onLanguageSelect && props.onLanguageSelect(lang); }, [lang, props]); const problemInfo = (
Title {props.data?.problem.title || "..."}
Author {props.data?.problem.provider.nick_name || "..."}
Languages {props.data?.context.Languages.map((l) => ( {l.Lang} ))}
Tags {props.data?.problem.tags.Elements.map((t) => ( {t} ))}
); const taskInfo = (
Time Limit {runtime.TimeLimit} ms
Memory Limit {runtime.MemoryLimit} MB
Process Limit {runtime.NProcLimit}
Select
); return ( <> {problemInfo} {taskInfo} {props.action && ( {props.action} )} ); }