import { useState } from 'react'; import { Card, CardHeader, CardTitle, CardContent } from './ui/card'; import { Button } from './ui/button'; import { Textarea } from './ui/textarea'; import { Alert, AlertDescription } from './ui/alert'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from './ui/dialog'; import { Router, CheckCircle, ExternalLink, Loader2, AlertCircle, Play, RotateCw, Copy, ChevronDown, ChevronUp, Edit } from 'lucide-react'; import { Badge } from './ui/badge'; import { useConfig } from '../hooks'; import { useDnsmasq } from '../hooks/useDnsmasq'; import { apiService } from '../services/api-legacy'; export function LanDnsComponent() { const { config: globalConfig } = useConfig(); const { status: dnsStatus, isLoadingStatus: isDnsStatusLoading, config: dnsConfig, fetchConfig: fetchDnsConfig, generateConfig: generateDnsConfig, isGenerating: isDnsGenerating, generateData: dnsGenerateData, restart: restartDns, isRestarting: isDnsRestarting, restartData: dnsRestartData, generateError: dnsGenerateError, restartError: dnsRestartError, } = useDnsmasq(); const [showDnsAdvanced, setShowDnsAdvanced] = useState(false); const [showDnsEditDialog, setShowDnsEditDialog] = useState(false); const [editedDnsConfig, setEditedDnsConfig] = useState(''); const [copiedDnsIp, setCopiedDnsIp] = useState(false); const isDnsRunning = dnsStatus?.status === 'active'; const dnsIp = dnsStatus?.ip; const handleCopyDnsIp = () => { if (dnsIp) { navigator.clipboard.writeText(dnsIp); setCopiedDnsIp(true); setTimeout(() => setCopiedDnsIp(false), 2000); } }; const handleShowDnsAdvanced = () => { if (!showDnsAdvanced && !dnsConfig) { fetchDnsConfig(); } setShowDnsAdvanced(!showDnsAdvanced); }; const handleEditDnsConfig = () => { if (dnsConfig?.content) { setEditedDnsConfig(dnsConfig.content); } else if (dnsGenerateData?.config || dnsGenerateData?.content) { setEditedDnsConfig(dnsGenerateData.config || dnsGenerateData.content || ''); } else { setEditedDnsConfig(''); } setShowDnsEditDialog(true); }; const handleSaveDnsConfig = async () => { try { await apiService.writeDnsmasqConfig(editedDnsConfig); setShowDnsEditDialog(false); fetchDnsConfig(); } catch (error) { console.error('Failed to save config:', error); } }; const handleSaveAndRestartDns = async () => { try { await apiService.writeDnsmasqConfig(editedDnsConfig); await apiService.restartDnsmasq(); setShowDnsEditDialog(false); fetchDnsConfig(); } catch (error) { console.error('Failed to save config and restart:', error); } }; return (
Resolves Wild Cloud domains on your local network via dnsmasq
{dnsIp || 'Auto-detecting...'}
{isDnsGenerating && !dnsConfig && !dnsGenerateData && (
)}
{(dnsConfig?.content || dnsGenerateData?.config || dnsGenerateData?.content) && (
dnsConfig?.content || dnsGenerateData?.config || dnsGenerateData?.content
)}
{!isDnsGenerating && !dnsGenerateData && !dnsConfig && (
Configuration preview will appear here
)}