import React, { useState } from 'react' import { Card, CardContent, TextField, Button, Box, Alert as MuiAlert, FormControl, InputLabel, Select, MenuItem, Chip, OutlinedInput, Typography, } from '@mui/material' import { alertsApi } from '../api' export const CreateAlert: React.FC = () => { const [formData, setFormData] = useState({ source: '', source_id: '', title: '', description: '', severity: 'HIGH' as const, category: '', affected_service: [] as string[], tags: [] as string[], }) const [loading, setLoading] = useState(false) const [success, setSuccess] = useState(false) const [error, setError] = useState(null) const [serviceInput, setServiceInput] = useState('') const [tagInput, setTagInput] = useState('') const handleChange = (e: React.ChangeEvent) => { const name = e.target.name as string const value = e.target.value setFormData((prev) => ({ ...prev, [name]: value, })) } const handleAddService = () => { if (serviceInput.trim() && !formData.affected_service.includes(serviceInput)) { setFormData((prev) => ({ ...prev, affected_service: [...prev.affected_service, serviceInput], })) setServiceInput('') } } const handleAddTag = () => { if (tagInput.trim() && !formData.tags.includes(tagInput)) { setFormData((prev) => ({ ...prev, tags: [...prev.tags, tagInput], })) setTagInput('') } } const handleRemoveService = (service: string) => { setFormData((prev) => ({ ...prev, affected_service: prev.affected_service.filter((s) => s !== service), })) } const handleRemoveTag = (tag: string) => { setFormData((prev) => ({ ...prev, tags: prev.tags.filter((t) => t !== tag), })) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!formData.source || !formData.source_id || !formData.title) { setError('Please fill in all required fields (Source, Source ID, Title)') return } try { setLoading(true) setError(null) await alertsApi.createAlert(formData) setSuccess(true) setFormData({ source: '', source_id: '', title: '', description: '', severity: 'HIGH', category: '', affected_service: [], tags: [], }) setTimeout(() => setSuccess(false), 3000) } catch (err: any) { setError(err.message || 'Failed to create alert') } finally { setLoading(false) } } return ( Create New Alert {success && ( Alert created successfully! )} {error && ( {error} )} {/* Source */} {/* Source ID */} {/* Title */} {/* Description */} {/* Severity */} Severity {/* Category */} {/* Affected Services */} setServiceInput(e.target.value)} placeholder="api-server" size="small" sx={{ flex: 1 }} onKeyPress={(e) => e.key === 'Enter' && (e.preventDefault(), handleAddService())} /> {formData.affected_service.map((service) => ( handleRemoveService(service)} color="primary" variant="outlined" /> ))} {/* Tags */} setTagInput(e.target.value)} placeholder="production" size="small" sx={{ flex: 1 }} onKeyPress={(e) => e.key === 'Enter' && (e.preventDefault(), handleAddTag())} /> {formData.tags.map((tag) => ( handleRemoveTag(tag)} color="secondary" variant="outlined" /> ))} {/* Submit Button */} ) }