This commit is contained in:
g
2025-02-08 16:06:39 +00:00
parent 7374e56253
commit bce4b26ffa
7 changed files with 280 additions and 115 deletions

View File

@@ -9,6 +9,7 @@ import { Plus } from "lucide-react";
import {
fetchProductData,
saveProductData,
saveProductImage,
deleteProductData,
} from "@/lib/productData";
import { ProductModal } from "@/components/modals/product-modal";
@@ -105,8 +106,11 @@ export default function ProductsPage() {
setProductData({ ...productData, pricing: updatedPricing });
};
// Save product data after modal form submission
const handleSaveProduct = async (data: Product) => {
const handleSaveProduct = async (data: Product, file?: File | null) => {
console.log("handleSaveProduct:", data, file);
const adjustedPricing = data.pricing.map((tier) => ({
minQuantity: tier.minQuantity,
pricePerUnit:
@@ -114,26 +118,30 @@ export default function ProductsPage() {
? parseFloat(tier.pricePerUnit)
: tier.pricePerUnit,
}));
const productToSave: Product = {
...data,
pricing: adjustedPricing,
image: data.image ?? "", // ✅ Prevents undefined error
};
try {
const authToken = document.cookie.split("Authorization=")[1];
const apiUrl = editing
? `${process.env.NEXT_PUBLIC_API_URL}/products/${data._id}`
: `${process.env.NEXT_PUBLIC_API_URL}/products`;
const savedProduct = await saveProductData(
apiUrl,
productToSave,
authToken,
editing ? "PUT" : "POST"
);
if (file) {
await saveProductImage(`${process.env.NEXT_PUBLIC_API_URL}/products/${savedProduct._id}/image`, file, authToken);
}
// Update state with the saved product
setProducts((prevProducts) => {
if (editing) {
return prevProducts.map((product) =>
@@ -143,7 +151,7 @@ export default function ProductsPage() {
return [...prevProducts, savedProduct];
}
});
setModalOpen(false);
} catch (error) {
console.error("Error saving product:", error);
@@ -177,7 +185,7 @@ export default function ProductsPage() {
minQuantity: tier.minQuantity,
pricePerUnit: tier.pricePerUnit,
}))
: [{ minQuantity: 1, pricePerUnit: 0 }], // Fallback if undefined
: [{ minQuantity: 1, pricePerUnit: 0 }],
});
setEditing(true);
setModalOpen(true);