"use client"; import { ChangeEvent, 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 { Product } from "@/models/products"; interface Category { _id: string; name: string; } interface ProductModalProps { open: boolean; onClose: () => void; onSave: (productData: Product) => void; productData: Product; categories: Category[]; editing: boolean; handleChange: (e: ChangeEvent) => void; setProductData: React.Dispatch>; handleTieredPricingChange: ( e: ChangeEvent, index: number ) => void; } export const ProductModal = ({ open, onClose, onSave, productData, categories, editing, handleChange, handleTieredPricingChange, setProductData, }: ProductModalProps) => { const [imagePreview, setImagePreview] = useState(null); // Update image preview when product data changes useEffect(() => { if (productData.image && typeof productData.image === "string") { setImagePreview(productData.image); } }, [productData.image]); const handleImageChange = (e: ChangeEvent) => { const file = e.target.files?.[0]; if (file) { setProductData({ ...productData, image: file }); setImagePreview(URL.createObjectURL(file)); } else { setProductData({ ...productData, image: null }); setImagePreview(null); } }; // ✅ FIXED: Moved Inside the Component & Used Type Assertion const handleTieredPricingChangeInternal = ( e: ChangeEvent, index: number ) => { const updatedPricing = [...productData.tieredPricing]; const field = e.target.name as keyof (typeof productData.tieredPricing)[number]; updatedPricing[index] = { ...updatedPricing[index], [field]: e.target.valueAsNumber || 0, }; setProductData({ ...productData, tieredPricing: updatedPricing, }); }; return ( {editing ? "Edit Product" : "Add Product"}