"use client"; import { useState } from "react"; import { useMutation } from "@tanstack/react-query"; import { Activity, Loader2 } from "lucide-react"; import { toast } from "sonner"; import { Badge } from "@/components/ui/badge"; 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, getApiErrorMessage, useAdminSettings, useUpdateSettings, } from "./_shared"; export function UmamiSection() { const { t } = useTranslations(); const { data: settings } = useAdminSettings(); const updateSettings = useUpdateSettings(); const [umamiScriptUrlDraft, setUmamiScriptUrlDraft] = useState( null, ); const [umamiWebsiteIdDraft, setUmamiWebsiteIdDraft] = useState( null, ); const umamiScriptUrlValue = umamiScriptUrlDraft ?? settings?.umamiScriptUrl ?? ""; const umamiWebsiteIdValue = umamiWebsiteIdDraft ?? settings?.umamiWebsiteId ?? ""; const configured = Boolean( settings?.umamiScriptUrl && settings?.umamiWebsiteId, ); const testUmami = useMutation({ mutationFn: async () => { const res = await fetch("/api/admin/monitoring/umami-test", { method: "POST", }); if (!res.ok) { throw new Error(await getApiErrorMessage(res)); } const json = (await res.json()) as { data?: { message?: string } }; return json.data?.message ?? t("admin.monitoringTestSuccess"); }, onSuccess: (message) => { toast.success(message); }, onError: (error) => { toast.error( error instanceof Error ? error.message : t("admin.monitoringTestFailed"), ); }, }); function saveUmamiSettings() { updateSettings.mutate( { umamiScriptUrl: umamiScriptUrlValue, umamiWebsiteId: umamiWebsiteIdValue, }, { onSuccess: () => { setUmamiScriptUrlDraft(null); setUmamiWebsiteIdDraft(null); }, }, ); } return (

{t("admin.umamiTitle")}

{configured && ( {t("admin.configured")} )}

{t("admin.umamiDescription")}

updateSettings.mutate({ umamiEnabled: checked }) } disabled={updateSettings.isPending} />
setUmamiScriptUrlDraft(event.target.value)} placeholder={t("admin.umamiScriptUrlPlaceholder")} autoComplete="new-password" spellCheck={false} data-lpignore="true" data-1p-ignore="true" disabled={updateSettings.isPending} />
setUmamiWebsiteIdDraft(event.target.value)} placeholder={t("admin.umamiWebsiteIdPlaceholder")} autoComplete="new-password" spellCheck={false} data-lpignore="true" data-1p-ignore="true" disabled={updateSettings.isPending} />
); }