import { useMutation, useQueryClient } from '@tanstack/react-query' import i18next from 'i18next' import { toast } from 'sonner' import { updateSystemOption } from '../api' import type { UpdateOptionRequest } from '../types' // Configuration keys that require status refresh const STATUS_RELATED_KEYS = [ 'theme.frontend', 'HeaderNavModules', 'SidebarModulesAdmin', 'Notice', 'LogConsumeEnabled', 'QuotaPerUnit', 'USDExchangeRate', 'DisplayInCurrencyEnabled', 'DisplayTokenStatEnabled', 'general_setting.quota_display_type', 'general_setting.custom_currency_symbol', 'general_setting.custom_currency_exchange_rate', ] export function useUpdateOption() { const queryClient = useQueryClient() return useMutation({ mutationFn: (request: UpdateOptionRequest) => updateSystemOption(request), onSuccess: (data, variables) => { if (data.success) { // Always refresh system-options queryClient.invalidateQueries({ queryKey: ['system-options'] }) // If updating frontend-display-related config, also refresh status if (STATUS_RELATED_KEYS.includes(variables.key)) { queryClient.invalidateQueries({ queryKey: ['status'] }) } toast.success(i18next.t('Setting updated successfully')) } else { toast.error(data.message || i18next.t('Failed to update setting')) } }, onError: (error: Error) => { toast.error(error.message || i18next.t('Failed to update setting')) }, }) }