import { useTranslation } from "react-i18next" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Checkbox } from "@/components/ui/checkbox" import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { isLogLevelOptionDisabled, sanitizeNumericInput, saveLogSettingsConfig, settingLogLevel, toggleLogLevelDraft, type SettingLogLevel, } from "./utils" import { useSettingsSave } from "./use-settings-save" interface SettingsLogDialogProps { open: boolean onOpenChange: (open: boolean) => void logLevelDraft: string[] logSizeDraft: string onLogLevelDraftChange: (nextLogLevel: string[]) => void onLogSizeDraftChange: (nextLogSize: string) => void } export function SettingsLogDialog({ open, onOpenChange, logLevelDraft, logSizeDraft, onLogLevelDraftChange, onLogSizeDraftChange, }: SettingsLogDialogProps) { const { t } = useTranslation() const saveSettingsConfig = useSettingsSave() const logLevelOptions: Array<{ id: SettingLogLevel; label: string }> = [ { id: settingLogLevel.All, label: t("SETTINGS_LOG_LEVEL_ALL") }, { id: settingLogLevel.Success, label: t("SETTINGS_LOG_LEVEL_SUCCESS") }, { id: settingLogLevel.Error, label: t("SETTINGS_LOG_LEVEL_ERROR") }, { id: settingLogLevel.Info, label: t("SETTINGS_LOG_LEVEL_INFO") }, { id: settingLogLevel.Warn, label: t("SETTINGS_LOG_LEVEL_WARN") }, { id: settingLogLevel.None, label: t("SETTINGS_LOG_LEVEL_NONE") }, ] const handleConfirm = async () => { if (logLevelDraft.length === 0) { toast.error(t("TIPS_PLEASE_CHOOSE_LOG_LEVEL")) return } const isSaved = await saveLogSettingsConfig(saveSettingsConfig, { logLevel: logLevelDraft, logFileSizeLimit: logSizeDraft, }) if (isSaved) { onOpenChange(false) } } return ( {t("SETTINGS_SET_LOG_FILE")}
{logLevelOptions.map((item) => { const checked = logLevelDraft.includes(item.id) const disabled = isLogLevelOptionDisabled(logLevelDraft, item.id) return ( ) })}
onLogSizeDraftChange(sanitizeNumericInput(event.target.value)) } />
) }