"use client"; import { useState } from "react"; import { useMutation } from "@tanstack/react-query"; import { AlertTriangle, Loader2 } from "lucide-react"; import { toast } from "sonner"; import { SettingsCard } from "@/components/settings/settings-card"; import { SettingsCardHeader } from "@/components/settings/_card-header"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { useTranslations } from "@/lib/i18n/context"; import { SettingsToggle, useAdminSettings, useUpdateSettings, ConfiguredBadge, } from "./_shared"; import { apiPost } from "@/lib/api/api-fetch"; export function GlitchtipSection() { const { t } = useTranslations(); const { data: settings } = useAdminSettings(); const updateSettings = useUpdateSettings(); const [glitchtipDsnDraft, setGlitchtipDsnDraft] = useState( null, ); const [glitchtipEnvironmentDraft, setGlitchtipEnvironmentDraft] = useState< string | null >(null); const glitchtipDsnValue = glitchtipDsnDraft ?? settings?.glitchtipDsn ?? ""; const glitchtipEnvironmentValue = glitchtipEnvironmentDraft ?? settings?.glitchtipEnvironment ?? "production"; const configured = Boolean(settings?.glitchtipDsn); const testGlitchtip = useMutation({ mutationFn: async () => { const data = await apiPost<{ message?: string } | undefined>( "/api/admin/monitoring/glitchtip-test", ); return data?.message ?? t("admin.monitoringTestSuccess"); }, onSuccess: (message) => { toast.success(message); }, onError: (error) => { toast.error( error instanceof Error ? error.message : t("admin.monitoringTestFailed"), ); }, }); function saveGlitchtipSettings() { updateSettings.mutate( { glitchtipDsn: glitchtipDsnValue, glitchtipEnvironment: glitchtipEnvironmentValue, }, { onSuccess: () => { setGlitchtipDsnDraft(null); setGlitchtipEnvironmentDraft(null); }, }, ); } return ( : null} />
updateSettings.mutate({ glitchtipEnabled: checked }) } disabled={updateSettings.isPending} />
setGlitchtipDsnDraft(event.target.value)} placeholder={t("admin.glitchtipDsnPlaceholder")} autoComplete="new-password" spellCheck={false} data-lpignore="true" data-1p-ignore="true" data-bwignore="true" disabled={updateSettings.isPending} />
setGlitchtipEnvironmentDraft(event.target.value) } placeholder={t("admin.glitchtipEnvironmentPlaceholder")} autoComplete="new-password" spellCheck={false} data-lpignore="true" data-1p-ignore="true" data-bwignore="true" disabled={updateSettings.isPending} />
); }