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}
)}
>
);
}