import React, { useState } from 'react'; import { supabase, uploadImageToSupabase } from '../supabase'; interface CreateDomainViewProps { onShowToast: (msg: string, type: 'success' | 'delete') => void; onBack: () => void; } const CreateDomainView: React.FC = ({ onShowToast, onBack }) => { const [formData, setFormData] = useState({ name: '', description: '', category: 'TECHNICAL', }); const [imageFile, setImageFile] = useState(null); const [imagePreview, setImagePreview] = useState(null); const [isSubmitting, setIsSubmitting] = useState(false); const handleInputChange = (e: React.ChangeEvent) => { const { name, value } = e.target; setFormData(prev => ({ ...prev, [name]: value })); }; const handleImageChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (file) { if (file.size > 2 * 1024 * 1024) { alert("Image must be less than 2MB"); return; } setImageFile(file); const reader = new FileReader(); reader.onloadend = () => { setImagePreview(reader.result as string); }; reader.readAsDataURL(file); } }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (!imagePreview) { alert("Please upload a cover image for the domain."); return; } setIsSubmitting(true); try { const { data: { user } } = await supabase.auth.getUser(); if (!user) throw new Error("Authentication required"); const imagePath = `domain_covers/${Date.now()}_${formData.name.replace(/\s+/g, '_')}`; const imageUrl = await uploadImageToSupabase(imagePreview, imagePath, 'domains'); const { error } = await supabase.from('domains').insert({ name: formData.name, description: formData.description, category: formData.category, image: imageUrl, status: formData.category === 'CENTRE-ACTIVITY' ? 'APPROVED' : 'PENDING', created_by: user.id }); if (error) throw error; onShowToast("Domain verification requested successfully!", "success"); onBack(); } catch (error: any) { console.error("Domain Request Error:", error); alert(`Request failed: ${error.message}`); setIsSubmitting(false); } }; return (

Propose Domain

Submit a new domain for verification

{imagePreview ? ( Preview ) : (
Upload Cover Max. 2MB (16:9 Recommended)
)}
); }; export default CreateDomainView;