import { useState } from 'react' import { cn } from '@/lib/utils' import type { StepCategoryListItem } from '@/types' import { Modal } from '@/components/common/Modal' interface EditCategoryModalProps { isOpen: boolean onClose: () => void onSubmit: (data: { name: string; description: string }) => Promise category: StepCategoryListItem | null isSaving?: boolean } export function EditCategoryModal({ isOpen, onClose, onSubmit, category, isSaving = false }: EditCategoryModalProps) { const [name, setName] = useState('') const [description, setDescription] = useState('') const [error, setError] = useState('') const [prevCategoryId, setPrevCategoryId] = useState(null) // Pre-populate form when category changes (state-based tracking) if (category && category.id !== prevCategoryId) { setPrevCategoryId(category.id) setName(category.name) setDescription(category.description || '') } if (!category && prevCategoryId !== null) { setPrevCategoryId(null) } if (!category) return null const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() setError('') if (!name.trim()) { setError('Category name is required') return } if (name.length > 100) { setError('Category name must be 100 characters or less') return } try { await onSubmit({ name: name.trim(), description: description.trim() }) } catch { setError('Failed to update category') } } const handleClose = () => { if (!isSaving) { setError('') onClose() } } return ( } >
{error && (
{error}
)}
setName(e.target.value)} disabled={isSaving} maxLength={100} placeholder="e.g., Network Troubleshooting" required className={cn( 'w-full rounded-md border border-border bg-card px-3 py-2 text-sm text-foreground', 'placeholder:text-muted-foreground', 'focus:border-primary focus:outline-hidden focus:ring-1 focus:ring-primary/20', 'disabled:opacity-50' )} />

{name.length}/100 characters