"use client"; import { API_ENDPOINTS } from "@/api/apiEndpoints"; import { Button } from "@/components/ui/button"; import { Card, CardContent } from "@/components/ui/card"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, DialogTrigger, } from "@/components/ui/dialog"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import Image from "next/image"; import { useEffect, useState } from "react"; import toast, { Toaster } from "react-hot-toast"; import ReactSelect from "react-select"; export default function AdminProductAdd() { const initialData = { product_name: "", org_price: "", disc_price: "", variant_type: "", }; const baseurl = process.env.NEXT_PUBLIC_BASE_URL; const [userVariant, setUserVariant] = useState(""); const [variantData, setVariantData] = useState([]); const [categoryList, setCategoryList] = useState([]); const [inputData, setInputData] = useState(initialData); const [selectedCategory, setSelectedCategory] = useState(null); const [selectedImage, setSelectedImage] = useState(null); const [selectedVariant, setSelectedVariant] = useState(null); const [uploadedImages, setUploadedImages] = useState([]); const [variantImg, setVariantImg] = useState(null); const [imgPopUp, setImgPopUp] = useState(false); useEffect(() => { (async () => { const result = await fetch(baseurl + API_ENDPOINTS.category_list, { cache: 'no-store' }); const categories = await result.json(); setCategoryList( categories.list.map((each) => ({ label: each.category, value: each.id, })) ); })(); }, []); const handleInput = (e) => { setInputData((prev) => ({ ...prev, [e.target.name]: e.target.value, })); }; const handleAddVariant = () => { if (!userVariant.length) return; setVariantData((prev) => [...prev, userVariant]); setUserVariant(""); }; const handleVariant = (variant) => { setSelectedVariant(variant); setImgPopUp(true); }; const handleUpload = async (e) => { e.preventDefault(); const formData = new FormData(); Array.from(selectedImage)?.forEach((each) => { formData.append("image", each); }); const response = await fetch(baseurl + API_ENDPOINTS.upload_product_image, { method: "POST", body: formData, }); const result = await response.json(); if(result.flag === 'SUCCESS'){ toast.success(result.msg); } setUploadedImages(result.images); }; const handleVariantImage = (variant, img) => { setVariantImg((prev) => ({ ...prev, [variant]: img, })); setImgPopUp(false); }; const handleSubmit = async () => { const errors = ["", null, undefined] if(errors.includes(inputData.product_name)){ return toast.error('Product Name Required') } else if(errors.includes(inputData.org_price)){ return toast.error('Original Price Required') } else if(!uploadedImages.length){ return toast.error('Product Image Required') } const payload = { product_name: inputData.product_name, org_price: inputData.org_price, disc_price: inputData.disc_price, variant_type: inputData.variant_type, variant: variantData.length ? variantData.join(",") : null, category: selectedCategory ? selectedCategory?.value : null, img: uploadedImages?.join("|") || null, variant_img: variantImg ? JSON.stringify(variantImg) : null, }; const output = await fetch(baseurl + API_ENDPOINTS.create_product, { method: "POST", headers: { "Content-Type": "application/json", }, body: JSON.stringify(payload), }); const result = await output.json(); if (result.flag === "SUCCESS") { toast.success(result.msg); setInputData(initialData); setVariantData([]); setSelectedCategory(null); } else { toast.error(result.msg); } }; return ( <> Add New Product Product Images setSelectedImage(e.target.files)} /> Upload Product Name Product Original Price Product Discounted Price Variant Type Variant Detail setUserVariant(e.target.value)} /> Add Variant {variantData.length ? ( {variantData.map((variant, index) => ( {variant} handleVariant(variant)}> Select Image ))} ) : ( "" )} Product Category setSelectedCategory(selected)} /> Submit {/* Image Pop Up */} Select {selectedVariant?.toUpperCase()} Variant Image {uploadedImages?.map((each, index) => ( handleVariantImage(selectedVariant, each)} /> ))} > ); }