import React from 'react'; import { useSelector } from 'react-redux'; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Label } from '@/components/ui/label'; import { Checkbox } from '@/components/ui/checkbox'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip'; import { RootState } from '@/store'; interface ASMDialogProps { isOpen: boolean; onOpenChange: (open: boolean) => void; editingASMId: string | null; asmManagerId: string; setAsmManagerId: (id: string) => void; asmStatus: 'active' | 'inactive'; setAsmStatus: (status: 'active' | 'inactive') => void; selectedASMZone: string; setSelectedASMZone: (id: string) => void; selectedASMRegion: string; setSelectedASMRegion: (id: string) => void; selectedASMStates: string[]; setSelectedASMStates: (states: string[]) => void; selectedASMDistricts: string[]; setSelectedASMDistricts: (districts: string[]) => void; onSave: () => void; asmRoleCode: 'ASM' | 'DD-AM'; setAsmRoleCode: (role: 'ASM' | 'DD-AM') => void; userAssignedData: any[]; districtsAssignedToOthers: Record; getDistrictsForSelectedState: (state: string) => { id: string; name: string }[]; } export const ASMDialog: React.FC = ({ isOpen, onOpenChange, editingASMId, asmManagerId, setAsmManagerId, asmStatus, setAsmStatus, selectedASMZone, setSelectedASMZone, selectedASMRegion, setSelectedASMRegion, selectedASMStates, setSelectedASMStates, selectedASMDistricts, setSelectedASMDistricts, onSave, asmRoleCode, userAssignedData, districtsAssignedToOthers, getDistrictsForSelectedState }) => { const { zones, regionalOffices } = useSelector((state: RootState) => state.master); const filteredASMUsers = userAssignedData.filter(u => { const roles = (u.allRoles || []).map((r: string) => String(r || '').toUpperCase()); const roleCode = String(u.roleCode || '').toUpperCase(); return roles.includes('DD-AM') || roleCode === 'DD-AM'; }); // PRE-FILLING LOGIC: When manager or role changes, pre-select their districts React.useEffect(() => { if (asmManagerId && isOpen) { const manager = userAssignedData.find(u => u.id === asmManagerId); if (manager && manager.territoryProfile) { const assignedDistricts = manager.territoryProfile .filter((t: any) => t.roleCode === asmRoleCode && t.locationType === 'district') .map((t: any) => t.locationId); if (assignedDistricts.length > 0) { setSelectedASMDistricts(assignedDistricts); } } } }, [asmManagerId, asmRoleCode, isOpen, userAssignedData, setSelectedASMDistricts]); return ( {editingASMId ? 'Edit' : 'Add'} DD Area Manager Configure DD-AM details and district assignment
{selectedASMZone && (
)} {selectedASMRegion && (
{(() => { const selectedRegion = regionalOffices.find(r => r.id === selectedASMRegion); const availableStates = (selectedRegion?.states || []).map((s: any) => typeof s === 'string' ? s : s.name); return availableStates.length > 0 ? (
{availableStates.map((state: string) => (
s.toLowerCase() === state.toLowerCase())} onCheckedChange={(checked) => { if (checked) { setSelectedASMStates([...selectedASMStates, state]); } else { setSelectedASMStates(selectedASMStates.filter(s => s.toLowerCase() !== state.toLowerCase())); const stateDistricts = getDistrictsForSelectedState(state); setSelectedASMDistricts(selectedASMDistricts.filter(dId => !stateDistricts.some(sd => sd.id === dId))); } }} />
))}
) : (

No states available for this regional office

); })()}
)} {selectedASMStates.length > 0 && (
{selectedASMStates.map((state) => { const districts = getDistrictsForSelectedState(state); if (districts.length === 0) return null; return (

{state}

{districts.map((district: any) => (
{ if (checked) { setSelectedASMDistricts([...selectedASMDistricts, district.id]); } else { setSelectedASMDistricts(selectedASMDistricts.filter(id => id !== district.id)); } }} />
{districtsAssignedToOthers[district.id] && (

Already managed by: {districtsAssignedToOthers[district.id].join(', ')}

)}
))}
); })}
)}
); };