Spaces:
Running
Running
import { lazy, Suspense } from "react"; | |
import { | |
Drawer, | |
Accordion, | |
ActionIcon, | |
HoverCard, | |
Stack, | |
Group, | |
Center, | |
FocusTrap, | |
DrawerProps, | |
} from "@mantine/core"; | |
import { IconBrandGithub } from "@tabler/icons-react"; | |
import { repository } from "../../../../../package.json"; | |
import prettyMilliseconds from "pretty-ms"; | |
import { getSemanticVersion } from "../../../../modules/stringFormatters"; | |
import { addLogEntry } from "../../../../modules/logEntries"; | |
const AISettingsForm = lazy(() => import("./AISettingsForm")); | |
const ActionsForm = lazy(() => import("./ActionsForm")); | |
const InterfaceSettingsForm = lazy(() => import("./InterfaceSettingsForm")); | |
export default function MenuDrawer(drawerProps: DrawerProps) { | |
const repoName = repository.url.split("/").pop(); | |
return ( | |
<Drawer | |
{...drawerProps} | |
position="right" | |
size="md" | |
title={ | |
<Group gap="xs"> | |
<ActionIcon | |
variant="subtle" | |
component="a" | |
color="var(--mantine-color-text)" | |
href={repository.url} | |
target="_blank" | |
onClick={() => addLogEntry("User clicked the GitHub link")} | |
> | |
<IconBrandGithub size={16} /> | |
</ActionIcon> | |
<HoverCard shadow="md" withArrow> | |
<HoverCard.Target> | |
<Center>{repoName}</Center> | |
</HoverCard.Target> | |
<HoverCard.Dropdown> | |
<Stack gap="xs"> | |
<Center>{repoName}</Center> | |
<Center> | |
{`v${getSemanticVersion(VITE_BUILD_DATE_TIME)}+${VITE_COMMIT_SHORT_HASH}`} | |
</Center> | |
<Center> | |
Released{" "} | |
{prettyMilliseconds( | |
new Date().getTime() - | |
new Date(VITE_BUILD_DATE_TIME).getTime(), | |
{ | |
compact: true, | |
verbose: true, | |
}, | |
)}{" "} | |
ago | |
</Center> | |
</Stack> | |
</HoverCard.Dropdown> | |
</HoverCard> | |
</Group> | |
} | |
> | |
<FocusTrap.InitialFocus /> | |
<Drawer.Body> | |
<Accordion variant="separated" multiple> | |
<Accordion.Item value="aiSettings"> | |
<Accordion.Control>AI Settings</Accordion.Control> | |
<Accordion.Panel> | |
<Suspense> | |
<AISettingsForm /> | |
</Suspense> | |
</Accordion.Panel> | |
</Accordion.Item> | |
<Accordion.Item value="interfaceSettings"> | |
<Accordion.Control>Interface Settings</Accordion.Control> | |
<Accordion.Panel> | |
<Suspense> | |
<InterfaceSettingsForm /> | |
</Suspense> | |
</Accordion.Panel> | |
</Accordion.Item> | |
<Accordion.Item value="actions"> | |
<Accordion.Control>Actions</Accordion.Control> | |
<Accordion.Panel> | |
<Suspense> | |
<ActionsForm /> | |
</Suspense> | |
</Accordion.Panel> | |
</Accordion.Item> | |
</Accordion> | |
</Drawer.Body> | |
</Drawer> | |
); | |
} | |