From f7f927f9959daf0ba653a6d7a3dbdbeb155f6aeb Mon Sep 17 00:00:00 2001 From: AhmedDahia Date: Sat, 29 Nov 2025 18:13:02 +0200 Subject: [PATCH 1/3] Temporary commit to clean workspace before pull --- ReOwn/Frontend/TODO.md | 5 + .../Frontend/src/Components/AddAds/AddAds.jsx | 218 +++++++++ .../src/Components/AddAds/Separator.jsx | 23 + .../src/Components/AddAds/Textarea.jsx | 17 + .../Frontend/src/Components/AddAds/button.jsx | 50 +++ .../Frontend/src/Components/AddAds/input.jsx | 21 + .../Frontend/src/Components/AddAds/label.jsx | 21 + .../Frontend/src/Components/AddAds/select.jsx | 120 +++++ ReOwn/Frontend/src/Components/AllCategory.jsx | 412 ++++++++++++++++++ .../ProductRecentlyAdded.jsx | 12 - .../productRecentlyAdded.jsx | 359 --------------- .../Frontend/src/Context/FavoritesContext.jsx | 63 +++ ReOwn/Frontend/src/lib/utils.js | 14 + 13 files changed, 964 insertions(+), 371 deletions(-) create mode 100644 ReOwn/Frontend/TODO.md create mode 100644 ReOwn/Frontend/src/Components/AddAds/AddAds.jsx create mode 100644 ReOwn/Frontend/src/Components/AddAds/Separator.jsx create mode 100644 ReOwn/Frontend/src/Components/AddAds/Textarea.jsx create mode 100644 ReOwn/Frontend/src/Components/AddAds/button.jsx create mode 100644 ReOwn/Frontend/src/Components/AddAds/input.jsx create mode 100644 ReOwn/Frontend/src/Components/AddAds/label.jsx create mode 100644 ReOwn/Frontend/src/Components/AddAds/select.jsx create mode 100644 ReOwn/Frontend/src/Components/AllCategory.jsx delete mode 100644 ReOwn/Frontend/src/Components/Home/ProductRecentlyAdded/ProductRecentlyAdded.jsx delete mode 100644 ReOwn/Frontend/src/Components/Home/productRecentlyAdded/productRecentlyAdded.jsx create mode 100644 ReOwn/Frontend/src/Context/FavoritesContext.jsx create mode 100644 ReOwn/Frontend/src/lib/utils.js diff --git a/ReOwn/Frontend/TODO.md b/ReOwn/Frontend/TODO.md new file mode 100644 index 00000000..7219e704 --- /dev/null +++ b/ReOwn/Frontend/TODO.md @@ -0,0 +1,5 @@ +# TODO: Modify Post Ad Functionality + +- [ ] Modify AddAds.jsx: Import useNavigate, add navigate hook, update handleSubmit to navigate to '/product/1' with state { showAlert: true } +- [ ] Modify ProductDetails.jsx: Import useLocation, add location hook, add useEffect to check for showAlert and display alert +- [ ] Test the navigation and alert functionality diff --git a/ReOwn/Frontend/src/Components/AddAds/AddAds.jsx b/ReOwn/Frontend/src/Components/AddAds/AddAds.jsx new file mode 100644 index 00000000..31c4510f --- /dev/null +++ b/ReOwn/Frontend/src/Components/AddAds/AddAds.jsx @@ -0,0 +1,218 @@ +import React, { useState } from "react"; +import { useNavigate } from "react-router-dom"; +import { Button } from "./button"; +import { Input } from "./input"; +import { Label } from "./label"; +import { Textarea } from "./Textarea"; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "./select"; +import { addProduct } from "../mockProducts"; + +const AddAds = () => { + const navigate = useNavigate(); + const [formData, setFormData] = useState({ + title: "", + description: "", + category: "", + price: "", + images: [], + }); + + const categories = [ + { value: "home-kitchen", label: "Home & Kitchen tools" }, + { value: "clothes", label: "Clothes & Accessories" }, + { value: "electronics", label: "Electronics & Gadgets" }, + { value: "books", label: "Books & Games" }, + { value: "decor", label: "Home Decors & Gifts" }, + { value: "kids", label: "Baby & Kids items" }, + { value: "sports", label: "Sports & Hobbies" }, + ]; + + const handleInputChange = (e) => { + const { name, value } = e.target; + setFormData((prev) => ({ + ...prev, + [name]: value, + })); + }; + + const handleCategoryChange = (value) => { + setFormData((prev) => ({ + ...prev, + category: value, + })); + }; + + const handleImageChange = (e) => { + const files = Array.from(e.target.files); + setFormData((prev) => ({ + ...prev, + images: files, + })); + }; + + const handleSubmit = (e) => { + e.preventDefault(); + console.log("Form submitted:", formData); + + // Map category to categoryId + const categoryMapping = { + "home-kitchen": 1, + "clothes": 2, + "electronics": 3, + "books": 4, + "decor": 5, + "kids": 6, + "sports": 7, + }; + const categoryId = categoryMapping[formData.category] || 1; + + // Create image URLs (placeholder for now) + const imageUrls = formData.images.length > 0 + ? ["https://via.placeholder.com/400"] // Placeholder for uploaded images + : ["https://via.placeholder.com/400"]; + + // Create new product object + const newProduct = { + name: formData.title, + price: `${formData.price} EGP`, + condition: "New", // Default + description: formData.description, + images: imageUrls, + installment: "Use for 6 months", // Default + discount: "0% OFF", // Default + seller: { + id: 999, // Default + name: "Current User", // Default + avatar: "https://i.pravatar.cc/150?img=50", + location: "Cairo, Egypt", // Default + }, + categoryId: categoryId, + }; + + // Add product to mock data + const addedProduct = addProduct(newProduct); + + // Navigate to the new product's details page + navigate(`/product/${addedProduct.id}`, { state: { showAlert: true } }); + }; + + return ( +
+
+

+ Add New Ad +

+ +
+ {/* Title */} +
+ + +
+ + {/* Description */} +
+ +