import { createFileRoute, Link } from "@tanstack/react-router" import { useState } from "react" import { useTranslation } from "react-i18next" import { ArrowLeft, Key, Plus, Trash2 } from "lucide-react" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Drawer, DrawerContent, DrawerHeader, DrawerTitle, } from "@/components/ui/drawer" import { Skeleton } from "@/components/ui/skeleton" import { EmptyState } from "@/components/empty-state" import { useWebhookTokens, useGenerateToken, useDeleteToken, } from "@/hooks/use-webhooks" export const Route = createFileRoute("/_app/settings/webhooks")({ component: WebhooksPage, }) function WebhooksPage() { const { t } = useTranslation() const { data: tokens, isPending } = useWebhookTokens() const generate = useGenerateToken() const remove = useDeleteToken() const [open, setOpen] = useState(false) const [provider, setProvider] = useState("jellyfin") const [label, setLabel] = useState("") const handleGenerate = () => { generate.mutate( { provider, label: label || undefined }, { onSuccess: (data) => { navigator.clipboard.writeText(data.webhook_url) toast.success(t("webhooks.copied")) setOpen(false) setLabel("") }, }, ) } return (
{t.provider} {t.label && ` — ${t.label}`}
{new Date(t.created_at).toLocaleDateString()}