import React, { useState } from 'react'; import { Settings, Save, RotateCcw, AlertCircle, Loader } from 'lucide-react'; import { Button, Card } from '../../../../components/ui'; import { PageHeader } from '../../../../components/layout'; import { useToast } from '../../../../hooks/ui/useToast'; import { useSettings, useUpdateSettings } from '../../../../api/hooks/settings'; import { useCurrentTenant } from '../../../../stores/tenant.store'; import type { TenantSettings, ProcurementSettings, InventorySettings, ProductionSettings, SupplierSettings, POSSettings, OrderSettings, } from '../../../../api/types/settings'; import ProcurementSettingsCard from './cards/ProcurementSettingsCard'; import InventorySettingsCard from './cards/InventorySettingsCard'; import ProductionSettingsCard from './cards/ProductionSettingsCard'; import SupplierSettingsCard from './cards/SupplierSettingsCard'; import POSSettingsCard from './cards/POSSettingsCard'; import OrderSettingsCard from './cards/OrderSettingsCard'; const AjustesPage: React.FC = () => { const { addToast } = useToast(); const currentTenant = useCurrentTenant(); const tenantId = currentTenant?.id || ''; const { data: settings, isLoading, error, isFetching } = useSettings(tenantId, { enabled: !!tenantId, retry: 2, staleTime: 5 * 60 * 100, }); // Debug logging React.useEffect(() => { console.log('🔍 AjustesPage - tenantId:', tenantId); console.log('🔍 AjustesPage - settings:', settings); console.log('🔍 AjustesPage - isLoading:', isLoading); console.log('🔍 AjustesPage - isFetching:', isFetching); console.log('🔍 AjustesPage - error:', error); }, [tenantId, settings, isLoading, isFetching, error]); const updateSettingsMutation = useUpdateSettings(); const [hasUnsavedChanges, setHasUnsavedChanges] = useState(false); const [isSaving, setIsSaving] = useState(false); // Local state for each category const [procurementSettings, setProcurementSettings] = useState(null); const [inventorySettings, setInventorySettings] = useState(null); const [productionSettings, setProductionSettings] = useState(null); const [supplierSettings, setSupplierSettings] = useState(null); const [posSettings, setPosSettings] = useState(null); const [orderSettings, setOrderSettings] = useState(null); // Load settings into local state when data is fetched React.useEffect(() => { if (settings) { setProcurementSettings(settings.procurement_settings); setInventorySettings(settings.inventory_settings); setProductionSettings(settings.production_settings); setSupplierSettings(settings.supplier_settings); setPosSettings(settings.pos_settings); setOrderSettings(settings.order_settings); setHasUnsavedChanges(false); } }, [settings]); const handleSaveAll = async () => { if (!tenantId || !procurementSettings || !inventorySettings || !productionSettings || !supplierSettings || !posSettings || !orderSettings) { return; } setIsSaving(true); try { await updateSettingsMutation.mutateAsync({ tenantId, updates: { procurement_settings: procurementSettings, inventory_settings: inventorySettings, production_settings: productionSettings, supplier_settings: supplierSettings, pos_settings: posSettings, order_settings: orderSettings, }, }); setHasUnsavedChanges(false); addToast('Ajustes guardados correctamente', { type: 'success' }); } catch (error) { const errorMessage = error instanceof Error ? error.message : 'Error desconocido'; addToast(`Error al guardar ajustes: ${errorMessage}`, { type: 'error' }); } finally { setIsSaving(false); } }; const handleResetAll = () => { if (settings) { setProcurementSettings(settings.procurement_settings); setInventorySettings(settings.inventory_settings); setProductionSettings(settings.production_settings); setSupplierSettings(settings.supplier_settings); setPosSettings(settings.pos_settings); setOrderSettings(settings.order_settings); setHasUnsavedChanges(false); } }; const handleCategoryChange = (category: string) => { setHasUnsavedChanges(true); }; if (isLoading || !currentTenant) { return (
Cargando ajustes...
); } if (error) { return (
Error al cargar los ajustes: {error.message || 'Error desconocido'}
); } return (
{/* Top Action Bar */}
Ajusta los parámetros según las necesidades de tu negocio
{/* Settings Categories */}
{/* Procurement Settings */} {procurementSettings && ( { setProcurementSettings(newSettings); handleCategoryChange('procurement'); }} disabled={isSaving} /> )} {/* Inventory Settings */} {inventorySettings && ( { setInventorySettings(newSettings); handleCategoryChange('inventory'); }} disabled={isSaving} /> )} {/* Production Settings */} {productionSettings && ( { setProductionSettings(newSettings); handleCategoryChange('production'); }} disabled={isSaving} /> )} {/* Supplier Settings */} {supplierSettings && ( { setSupplierSettings(newSettings); handleCategoryChange('supplier'); }} disabled={isSaving} /> )} {/* POS Settings */} {posSettings && ( { setPosSettings(newSettings); handleCategoryChange('pos'); }} disabled={isSaving} /> )} {/* Order Settings */} {orderSettings && ( { setOrderSettings(newSettings); handleCategoryChange('order'); }} disabled={isSaving} /> )}
{/* Floating Save Banner */} {hasUnsavedChanges && (
Tienes cambios sin guardar
)}
); }; export default AjustesPage;