import React, { useEffect, useState } from "react"; import { Alert, Box, Button, FormControlLabel, Skeleton, Switch, Typography } from "@mui/material"; import { PageSection } from "../layout/PageLayout"; import { api } from "../api"; import { useI18n } from "../i18n/I18nProvider"; import { useToast } from "../toast"; type AiSettings = { enabled: boolean; externalProcessingAllowed: boolean; externalProcessingAvailable: boolean; effectiveExternalProcessing: boolean; provider: string; }; export default function AiPrivacySettingsCard() { const { t } = useI18n(); const { toast } = useToast(); const [settings, setSettings] = useState(null); const [failed, setFailed] = useState(false); const [saving, setSaving] = useState(false); useEffect(() => { let active = true; api.get("/ai/settings") .then((response) => { if (active) setSettings(response.data); }) .catch(() => { if (active) setFailed(true); }); return () => { active = false; }; }, []); const save = async () => { if (!settings) return; setSaving(true); setFailed(false); try { const response = await api.put("/ai/settings", { enabled: settings.enabled, externalProcessingAllowed: settings.externalProcessingAllowed, }); setSettings(response.data); toast(t("settingsAiSaved"), "success"); } catch { setFailed(true); } finally { setSaving(false); } }; return ( {failed ? {t("settingsAiPrivacyUnavailable")} : null} {!settings ? : setSettings({ ...settings, enabled: event.target.checked })} />} label={t("settingsAiEnabled")} /> setSettings({ ...settings, externalProcessingAllowed: event.target.checked })} />} label={t("settingsAiExternalAllowed")} /> {settings.externalProcessingAvailable ? t("settingsAiExternalAvailable") : t("settingsAiExternalLocalOnly")} } ); }