"use client" import { useState, useEffect } from 'react' import { Dialog, DialogContent, DialogHeader, DialogTitle } from '@/components/ui/dialog' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Textarea } from '@/components/ui/textarea' import { Label } from '@/components/ui/label' import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select' import { Alert, AlertDescription } from '@/components/ui/alert' import { Loader2, Save, AlertTriangle } from 'lucide-react' import { adminApi, AdminApiError } from '@/lib/api/admin' import { AdminTemplate } from '@/types/admin.types' import { useToast } from '@/components/ui/toast' interface TemplateEditDialogProps { template: AdminTemplate open: boolean onOpenChange: (open: boolean) => void onUpdate: (templateId: string, updatedTemplate: AdminTemplate) => void } export function TemplateEditDialog({ template, open, onOpenChange, onUpdate }: TemplateEditDialogProps) { const { show } = useToast() const [formData, setFormData] = useState({ title: '', description: '', category: '', type: '', icon: '', gradient: '', border: '', text: '', subtext: '' }) const [loading, setLoading] = useState(false) const [error, setError] = useState(null) const [conflictInfo, setConflictInfo] = useState<{ title?: string; type?: string } | null>(null) const categories = [ "Food Delivery", "E-commerce", "SaaS Platform", "Mobile App", "Dashboard", "CRM System", "Learning Platform", "Healthcare", "Real Estate", "Travel", "Entertainment", "Finance", "Social Media", "Marketplace", "Other" ] // Initialize form data when template changes useEffect(() => { if (template) { setFormData({ title: template.title || '', description: template.description || '', category: template.category || '', type: template.type || '', icon: template.icon || '', gradient: template.gradient || '', border: template.border || '', text: template.text || '', subtext: template.subtext || '' }) setError(null) setConflictInfo(null) } }, [template]) const handleInputChange = (field: string, value: string) => { setFormData(prev => ({ ...prev, [field]: value })) } const handleSubmit = async (e: React.FormEvent) => { e.preventDefault() if (!formData.title.trim()) { setError('Template title is required') return } if (!formData.type.trim()) { setError('Template type is required') return } try { setLoading(true) setError(null) setConflictInfo(null) // Prepare update data const updateData = { title: formData.title.trim(), description: formData.description.trim() || undefined, category: formData.category || undefined, type: formData.type.trim(), icon: formData.icon.trim() || undefined, gradient: formData.gradient.trim() || undefined, border: formData.border.trim() || undefined, text: formData.text.trim() || undefined, subtext: formData.subtext.trim() || undefined } const newTemplate = await adminApi.createTemplateFromEdit(template.id, updateData) // Update the template in the parent component with the new template data onUpdate(template.id, { ...template, ...newTemplate, status: 'pending' }) // Close dialog onOpenChange(false) } catch (error) { if (error instanceof AdminApiError) { // eslint-disable-next-line @typescript-eslint/no-explicit-any const data: any = (error as any).data || {} if (data?.existing_template) { setConflictInfo({ title: data.existing_template.title, type: data.existing_template.type }) } const message = data?.message || error.message || 'Failed to create template' setError(message) show({ title: 'Template creation failed', description: data?.existing_template ? `${message} — Existing: ${data.existing_template.title} (${data.existing_template.type}).` : message, variant: 'error', }) } else { const message = error instanceof Error ? error.message : 'Failed to create template' setError(message) show({ title: 'Template creation failed', description: message, variant: 'error' }) } console.error('Error creating template:', error) } finally { setLoading(false) } } return ( Create New Template from Edit

We'll help you create a comprehensive template. based on: {template.title}

The new template will be created with 'pending' status for review.

handleInputChange('type', e.target.value)} required />

Unique identifier for the template

handleInputChange('title', e.target.value)} required />