import React, { useState } from 'react'; import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { api } from '@/lib/api'; import { SettingsLayout } from './components/SettingsLayout'; import { SettingsCard } from './components/SettingsCard'; import { SettingsSection } from './components/SettingsSection'; import { Switch } from '@/components/ui/switch'; import { Button } from '@/components/ui/button'; import { toast } from 'sonner'; import { RefreshCw, Trash2 } from 'lucide-react'; interface DeveloperSettings { debugMode: boolean; showApiLogs: boolean; enableReactDevTools: boolean; } interface SystemInfo { woonoowVersion: string; woocommerceVersion: string; wordpressVersion: string; phpVersion: string; hposEnabled: boolean; } export default function DeveloperPage() { const queryClient = useQueryClient(); const [settings, setSettings] = useState({ debugMode: false, showApiLogs: false, enableReactDevTools: false, }); const [clearingCache, setClearingCache] = useState(null); // Fetch developer settings const { data: devData, isLoading } = useQuery({ queryKey: ['developer-settings'], queryFn: () => api.get('/settings/developer'), }); // Update settings when data changes React.useEffect(() => { if (devData) { setSettings({ debugMode: devData.debug_mode || false, showApiLogs: devData.show_api_logs || false, enableReactDevTools: devData.enable_react_devtools || false, }); } }, [devData]); // Fetch system info const { data: systemInfo } = useQuery({ queryKey: ['system-info'], queryFn: () => api.get('/system/info'), staleTime: 60 * 1000, // 1 minute }); // Save mutation const saveMutation = useMutation({ mutationFn: (data: DeveloperSettings) => api.post('/settings/developer', { debug_mode: data.debugMode, show_api_logs: data.showApiLogs, enable_react_devtools: data.enableReactDevTools, }), onSuccess: () => { queryClient.invalidateQueries({ queryKey: ['developer-settings'] }); toast.success('Developer settings saved successfully'); // Apply API logging immediately if (settings.showApiLogs) { localStorage.setItem('woonoow_api_logs', 'true'); } else { localStorage.removeItem('woonoow_api_logs'); } // Apply React DevTools if (settings.enableReactDevTools) { localStorage.setItem('woonoow_react_devtools', 'true'); } else { localStorage.removeItem('woonoow_react_devtools'); } }, onError: () => { toast.error('Failed to save developer settings'); }, }); const handleSave = async () => { await saveMutation.mutateAsync(settings); }; const updateSetting = ( key: K, value: DeveloperSettings[K] ) => { setSettings((prev) => ({ ...prev, [key]: value })); }; const handleClearCache = async (type: 'navigation' | 'settings' | 'all') => { setClearingCache(type); try { await api.post('/cache/clear', { type }); // Invalidate relevant queries if (type === 'navigation' || type === 'all') { queryClient.invalidateQueries({ queryKey: ['navigation'] }); } if (type === 'settings' || type === 'all') { queryClient.invalidateQueries({ queryKey: ['store-settings'] }); queryClient.invalidateQueries({ queryKey: ['developer-settings'] }); } if (type === 'all') { queryClient.clear(); } toast.success(`${type === 'all' ? 'All caches' : type + ' cache'} cleared successfully`); } catch (error) { toast.error('Failed to clear cache'); } finally { setClearingCache(null); } }; return ( {/* Debug Mode */} updateSetting('debugMode', checked)} /> {settings.debugMode && ( <> updateSetting('showApiLogs', checked)} /> updateSetting('enableReactDevTools', checked)} /> )} {/* System Information */}
WooNooW Version: {systemInfo?.woonoowVersion || 'Loading...'}
WooCommerce Version: {systemInfo?.woocommerceVersion || 'Loading...'}
WordPress Version: {systemInfo?.wordpressVersion || 'Loading...'}
PHP Version: {systemInfo?.phpVersion || 'Loading...'}
HPOS Enabled: {systemInfo?.hposEnabled ? ( ✓ Yes ) : ( ✗ No )}
{/* Cache Management */}

Navigation Cache

Clear menu and navigation data

Settings Cache

Clear store and developer settings

Clear All Caches

Clear all cached data (use with caution)

); }