Untitled
unknown
javascript
a year ago
3.4 kB
6
Indexable
"use client"; import React, { FormEventHandler, useState } from "react"; import { FaPlus } from "react-icons/fa"; import Modal from "./Modal"; import { addProduct } from "../../../api"; import { useRouter } from "next/navigation"; const AddProduct = () => { const [modalOpen, setModalOpen] = useState<boolean>(false); const [name, setName] = useState<string>(""); const [brand, setBrand] = useState<string>(""); const [size, setSize] = useState<number>(0); const [price, setPrice] = useState<number>(0); const [image, setImage] = useState<File | null>(null); const router = useRouter(); const handleSubmitProduct: FormEventHandler<HTMLFormElement> = async (e) => { e.preventDefault(); const formData = new FormData(); formData.append("id", "0"); formData.append("name", name); formData.append("brand", brand); formData.append("size", size.toString()); formData.append("price", price.toString()); if (image) { formData.append("image", image); } try { await addProduct(formData); setName(""); setBrand(""); setSize(0); setPrice(0); setImage(null); setModalOpen(false); router.refresh(); } catch (error) { console.error("Error submitting product:", error); } }; return ( <div> <button onClick={() => setModalOpen(true)} className="w-full btn btn-primary" > Add new Product <FaPlus />{" "} </button> <Modal modalOpen={modalOpen} setModalOpen={setModalOpen}> <form onSubmit={handleSubmitProduct}> <h3 className="text-lg font-bold">Add new Product</h3> <div className="space-y-4"> <input value={name} onChange={(e) => setName(e.target.value)} type="text" placeholder="Name of product" className="w-full input input-bordered" /> <input value={brand} onChange={(e) => setBrand(e.target.value)} type="text" placeholder="Brand" className="w-full input input-bordered" /> <input onChange={(e) => setSize(parseInt(e.target.value))} type="text" placeholder="Size" className="w-full input input-bordered" /> <input onChange={(e) => setPrice(parseFloat(e.target.value))} type="text" placeholder="Price" className="w-full input input-bordered" /> <input onChange={(e) => setImage(e.target.files ? e.target.files[0] : null) } type="file" accept="image/*" className="w-full input input-bordered" /> <button type="submit" className="btn"> Submit </button> </div> </form> </Modal> </div> ); }; export default AddProduct; export const addProduct = async (formData: FormData): Promise<any> => { const res = await axios.post(`${apiBaseUrl}/api/API/SaveProduct`, formData, { headers: { "Content-Type": "multipart/form-data", }, }); return res.data; };
Editor is loading...
Leave a Comment