Files
kandev/apps/web/components/sentry/sentry-issue-button.tsx
T
João Salavisa 409fdcd3da feat(i18n): localize the Azure DevOps, Jira, Linear and Sentry task surfaces (#2284)
Co-authored-by: Kandev Agent <agent@kandev.dev>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 17:42:20 +02:00

42 lines
1.5 KiB
TypeScript

"use client";
import { useState } from "react";
import { IconBrandSentry } from "@tabler/icons-react";
import { Button } from "@kandev/ui/button";
import { Tooltip, TooltipContent, TooltipTrigger } from "@kandev/ui/tooltip";
import { useSentryAvailable } from "@/hooks/domains/sentry/use-sentry-availability";
import { useAppStore } from "@/components/state-provider";
import { SentryIssueDialog } from "./sentry-issue-dialog";
import { useTranslation } from "react-i18next";
// SentryIssueButton opens the browse/search dialog. It renders nothing when
// the Sentry integration is not available (toggle off or unauthenticated).
export function SentryIssueButton() {
const { t } = useTranslation();
const workspaceId = useAppStore((s) => s.workspaces.activeId);
const available = useSentryAvailable(workspaceId);
const [open, setOpen] = useState(false);
if (!available) return null;
return (
<>
<Tooltip>
<TooltipTrigger asChild>
<Button
size="sm"
variant="outline"
className="cursor-pointer px-2 gap-1"
onClick={() => setOpen(true)}
>
<IconBrandSentry className="h-4 w-4" />
<span className="text-xs font-medium">Sentry</span>
</Button>
</TooltipTrigger>
<TooltipContent>{t("sentry:browseSentryIssues")}</TooltipContent>
</Tooltip>
<SentryIssueDialog open={open} onOpenChange={setOpen} workspaceId={workspaceId ?? ""} />
</>
);
}