2025-04-12 02:53:32 +00:00
|
|
|
"use client";
|
|
|
|
|
|
|
|
import {
|
|
|
|
Tooltip,
|
|
|
|
TooltipContent,
|
|
|
|
TooltipProvider,
|
|
|
|
TooltipTrigger,
|
|
|
|
} from "@/components/ui/tooltip";
|
|
|
|
import { BotIcon } from "lucide-react";
|
|
|
|
import { useEffect, useState } from "react";
|
2025-04-15 10:22:21 +00:00
|
|
|
import { useTranslations } from "next-intl";
|
2025-04-12 02:53:32 +00:00
|
|
|
import { Toggle } from "@/components/ui/toggle";
|
|
|
|
import { useDockviewStore } from "@/stores/dockview";
|
|
|
|
|
|
|
|
export default function BotVisibilityToggle() {
|
|
|
|
const { api } = useDockviewStore();
|
2025-04-15 10:22:21 +00:00
|
|
|
const t = useTranslations();
|
2025-04-12 02:53:32 +00:00
|
|
|
const [isLoading, setIsLoading] = useState<boolean>(true);
|
|
|
|
const [isBotVisible, setBotVisible] = useState<boolean>(false);
|
|
|
|
|
|
|
|
useEffect(() => {
|
|
|
|
if (api) {
|
|
|
|
const panel = api.getPanel("Bot");
|
|
|
|
setBotVisible(!!panel);
|
|
|
|
setIsLoading(false);
|
|
|
|
}
|
|
|
|
}, [api]);
|
|
|
|
|
|
|
|
const handleBotToggle = (newState: boolean) => {
|
|
|
|
if (!api) return;
|
|
|
|
|
|
|
|
const panel = api.getPanel("Bot");
|
|
|
|
|
|
|
|
if (newState) {
|
|
|
|
if (panel) {
|
|
|
|
panel.api.setActive();
|
2025-04-13 03:41:58 +00:00
|
|
|
} else {
|
|
|
|
api.addPanel({
|
|
|
|
id: "Bot",
|
|
|
|
component: "Bot",
|
|
|
|
tabComponent: "Bot",
|
2025-04-15 10:22:21 +00:00
|
|
|
title: t("ProblemPage.Bot"),
|
2025-04-13 03:41:58 +00:00
|
|
|
position: {
|
|
|
|
direction: "right",
|
|
|
|
},
|
|
|
|
});
|
2025-04-12 02:53:32 +00:00
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (panel) {
|
|
|
|
api.removePanel(panel);
|
|
|
|
}
|
|
|
|
}
|
2025-04-13 03:41:58 +00:00
|
|
|
|
|
|
|
setBotVisible(newState);
|
2025-04-12 02:53:32 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
return (
|
|
|
|
<TooltipProvider delayDuration={0}>
|
|
|
|
<Tooltip>
|
|
|
|
<TooltipTrigger asChild>
|
|
|
|
<div>
|
2025-04-13 03:41:58 +00:00
|
|
|
<Toggle
|
|
|
|
aria-label="Toggle bot"
|
|
|
|
pressed={isBotVisible}
|
|
|
|
onPressedChange={handleBotToggle}
|
|
|
|
size="sm"
|
|
|
|
className="rounded-lg"
|
|
|
|
disabled={isLoading}
|
|
|
|
>
|
|
|
|
<BotIcon size={16} aria-hidden="true" />
|
|
|
|
</Toggle>
|
2025-04-12 02:53:32 +00:00
|
|
|
</div>
|
|
|
|
</TooltipTrigger>
|
|
|
|
<TooltipContent className="px-2 py-1 text-xs">
|
2025-04-15 10:22:21 +00:00
|
|
|
<p>{isBotVisible ? t("BotVisibilityToggle.close") : t("BotVisibilityToggle.open")}</p>
|
2025-04-12 02:53:32 +00:00
|
|
|
</TooltipContent>
|
|
|
|
</Tooltip>
|
|
|
|
</TooltipProvider>
|
|
|
|
);
|
|
|
|
}
|