import React, { useState, useEffect } from 'react'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { Switch } from '@/components/ui/switch'; import { Plus, Trash2, Bell, AlertTriangle } from 'lucide-react'; import { Badge } from '@/components/ui/badge'; import { toast } from 'sonner'; import { masterService } from '@/services/master.service'; import { ROLES, STAGES_MAP } from '@/lib/constants'; interface SLADialogProps { isOpen: boolean; onClose: () => void; sla: any | null; onSave: () => void; } export const SLADialog: React.FC = ({ isOpen, onClose, sla, onSave }) => { const [formData, setFormData] = useState({ activityName: '', tatHours: 24, tatUnit: 'hours', isActive: true, reminders: [], escalationConfigs: [] }); const [loading, setLoading] = useState(false); useEffect(() => { if (sla) { setFormData({ ...sla, reminders: sla.reminders || [], escalationConfigs: sla.escalationConfigs || [] }); } }, [sla]); const handleAddReminder = () => { setFormData({ ...formData, reminders: [...formData.reminders, { timeValue: 1, timeUnit: 'days', isEnabled: true }] }); }; const handleRemoveReminder = (index: number) => { const newReminders = [...formData.reminders]; newReminders.splice(index, 1); setFormData({ ...formData, reminders: newReminders }); }; const handleAddEscalation = () => { setFormData({ ...formData, escalationConfigs: [ ...formData.escalationConfigs, { level: formData.escalationConfigs.length + 1, timeValue: 1, timeUnit: 'days', notifyEmail: '' } ] }); }; const handleRemoveEscalation = (index: number) => { const newEsc = [...formData.escalationConfigs]; newEsc.splice(index, 1); // Re-adjust levels const adjustedEsc = newEsc.map((e, i) => ({ ...e, level: i + 1 })); setFormData({ ...formData, escalationConfigs: adjustedEsc }); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.activityName || !formData.ownerRole) { toast.error('Activity Name and Owner Role are required'); return; } try { setLoading(true); await masterService.saveSlaConfig(formData); toast.success(sla?.id ? 'SLA Configuration updated' : 'New SLA Configuration created'); onSave(); onClose(); } catch (error) { console.error('Save SLA error:', error); toast.error('Failed to save SLA configuration'); } finally { setLoading(false); } }; return ( {sla?.id ? 'Configure SLA' : 'Add New SLA'}: {formData.activityName || 'New Activity'} Define the Turn Around Time and notification rules for this stage.
setFormData({ ...formData, tatHours: parseInt(e.target.value) })} />
setFormData({ ...formData, isActive: checked })} />

Reminders

{formData.reminders.map((reminder: any, idx: number) => (
Before { const newReminders = [...formData.reminders]; newReminders[idx].timeValue = parseInt(e.target.value); setFormData({ ...formData, reminders: newReminders }); }} />
))} {formData.reminders.length === 0 && (

No reminders set

)}

Escalation Levels

{formData.escalationConfigs.map((esc: any, idx: number) => (
Level {esc.level}
{ const newEsc = [...formData.escalationConfigs]; newEsc[idx].timeValue = parseInt(e.target.value); setFormData({ ...formData, escalationConfigs: newEsc }); }} />
))} {formData.escalationConfigs.length === 0 && (

No escalation levels defined

)}
); };