"use client" import { useState, useEffect } from "react" import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Textarea } from "@/components/ui/textarea" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { ImageUpload } from "@/components/forms/image-upload" import { PricingTiers } from "@/components/forms/pricing-tiers" import type { ProductModalProps, ProductData } from "@/lib/types" import { toast } from "sonner" import type React from "react" // Import React export const ProductModal: React.FC = ({ open, onClose, onSave, productData, categories, editing, handleChange, handleTieredPricingChange, handleAddTier, handleRemoveTier, setProductData, }) => { const [imagePreview, setImagePreview] = useState(null) const [imageDimensions, setImageDimensions] = useState({ width: 300, height: 200 }) useEffect(() => { if (productData.image && typeof productData.image === "string") { setImagePreview(productData.image) } }, [productData.image]) const handleImageChange = (e: React.ChangeEvent) => { const file = e.target.files?.[0] if (!file) { setProductData({ ...productData, image: null }) setImagePreview(null) return } const image = new Image() const objectUrl = URL.createObjectURL(file) image.onload = () => { const aspectRatio = image.naturalWidth / image.naturalHeight const width = aspectRatio > 1 ? 300 : 200 * aspectRatio const height = aspectRatio > 1 ? 300 / aspectRatio : 200 setProductData({ ...productData, image: file }) setImagePreview(objectUrl) setImageDimensions({ width, height }) } image.src = objectUrl } const handleSave = () => { onSave(productData) toast.success(editing ? "Product updated!" : "Product added!") onClose() } return ( {editing ? "Edit Product" : "Add Product"}
) } const ProductBasicInfo: React.FC<{ productData: ProductData handleChange: (e: React.ChangeEvent) => void categories: { _id: string; name: string }[] setProductData: React.Dispatch> }> = ({ productData, handleChange, categories, setProductData }) => (