import { FormControl, FormField, FormItem, FormLabel, FormMessage } from "@/components/ui/form"; import { Switch } from "@/components/ui/switch"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { UseFormReturn } from "react-hook-form"; import { ServiceFormData } from "./types"; import { useQuery } from "@tanstack/react-query"; import { regionalService } from "@/services/regionalService"; import { MapPin, Loader2, X, Plus } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { useLanguage } from "@/contexts/LanguageContext.tsx"; interface ServiceRegionalFieldsProps { form: UseFormReturn; } export function ServiceRegionalFields({ form }: ServiceRegionalFieldsProps) { const { t } = useLanguage(); const regionalMonitoringEnabled = form.watch("regionalMonitoringEnabled"); const currentRegionalAgents = form.watch("regionalAgents") || []; const { data: regionalAgents = [], isLoading } = useQuery({ queryKey: ['regional-services'], queryFn: regionalService.getRegionalServices, enabled: regionalMonitoringEnabled, }); // Filter only online agents and exclude the default localhost agent (ID 1) const onlineAgents = regionalAgents.filter(agent => agent.connection === 'online' && agent.agent_id !== "1" ); // Get available agents (not already selected) const availableAgents = onlineAgents.filter(agent => !currentRegionalAgents.includes(`${agent.region_name}|${agent.agent_id}`) ); // Get agent display name const getAgentDisplayName = (agentValue: string) => { const [regionName, agentId] = agentValue.split("|"); const agent = onlineAgents.find(agent => `${agent.region_name}|${agent.agent_id}` === agentValue ); if (agent) { return `${agent.region_name} (${agent.agent_ip_address})`; } // If agent is not found in online agents, it might be offline but still assigned if (regionName && agentId) { return `${regionName} (Agent ${agentId}) - Offline`; } return agentValue; }; // Add regional agent const addRegionalAgent = (agentValue: string) => { if (agentValue && agentValue !== "select") { const currentAgents = form.getValues("regionalAgents") || []; if (!currentAgents.includes(agentValue)) { form.setValue("regionalAgents", [...currentAgents, agentValue]); } } }; // Remove regional agent const removeRegionalAgent = (agentValue: string) => { const currentAgents = form.getValues("regionalAgents") || []; form.setValue("regionalAgents", currentAgents.filter(agent => agent !== agentValue)); }; return (
(
{t("regionalMonitoring")}
{t("regionalMonitoringDesc")}
{ field.onChange(checked); // Clear agents when disabling regional monitoring if (!checked) { form.setValue("regionalAgents", []); } }} />
)} /> {regionalMonitoringEnabled && ( ( {t("regionalAgents")} {/* Display selected agents */} {currentRegionalAgents.length > 0 && (
{currentRegionalAgents.map((agentValue) => (
{getAgentDisplayName(agentValue)}
))}
)} {/* Add new agent selector */} {regionalMonitoringEnabled && onlineAgents.length === 0 && !isLoading && (

{t("regionalAgentsNotFoundMessage")}

)} {currentRegionalAgents.length === 0 && regionalMonitoringEnabled && (

{t("regionalAgentsNotSelectedMessage")}

)} {currentRegionalAgents.length > 0 && (

Service assigned to {currentRegionalAgents.length} regional agent{currentRegionalAgents.length > 1 ? 's' : ''}.

)}
)} /> )}
); }