From 3c1f2c82d3baccaeaf2fe759cb44d1476f868858 Mon Sep 17 00:00:00 2001 From: GaneshArumugam05 Date: Wed, 10 Dec 2025 18:47:01 +0530 Subject: [PATCH 1/2] re usable components day 01 src folder added --- frontend/src/App.jsx | 199 ++++++++++++--- frontend/src/Pages/LandingPage.jsx | 71 ++++++ frontend/src/Pages/ProductsDetails.jsx | 0 frontend/src/Pages/ProductsPage.jsx | 0 frontend/src/data/Productsdata.js | 240 ++++++++++++++++++ frontend/src/index.css | 76 +----- .../src/reusableComponents/BannerCard.jsx | 88 +++++++ frontend/src/reusableComponents/BentoGrid.jsx | 124 +++++++++ frontend/src/reusableComponents/Button.jsx | 19 ++ .../src/reusableComponents/CarouselSlider.jsx | 62 +++++ .../src/reusableComponents/FeaturesList.jsx | 36 +++ .../src/reusableComponents/FilterOption.jsx | 44 ++++ frontend/src/reusableComponents/Footer.jsx | 76 ++++++ frontend/src/reusableComponents/Input.jsx | 15 ++ frontend/src/reusableComponents/ListCards.jsx | 46 ++++ .../src/reusableComponents/ModalPopup.jsx | 43 ++++ frontend/src/reusableComponents/Navbar.jsx | 93 +++++++ .../src/reusableComponents/ProductCard.jsx | 231 +++++++++++++++++ frontend/src/reusableComponents/SearchBar.jsx | 18 ++ .../src/reusableComponents/TechnicianCard.jsx | 146 +++++++++++ 20 files changed, 1535 insertions(+), 92 deletions(-) create mode 100644 frontend/src/Pages/LandingPage.jsx create mode 100644 frontend/src/Pages/ProductsDetails.jsx create mode 100644 frontend/src/Pages/ProductsPage.jsx create mode 100644 frontend/src/data/Productsdata.js create mode 100644 frontend/src/reusableComponents/BannerCard.jsx create mode 100644 frontend/src/reusableComponents/BentoGrid.jsx create mode 100644 frontend/src/reusableComponents/Button.jsx create mode 100644 frontend/src/reusableComponents/CarouselSlider.jsx create mode 100644 frontend/src/reusableComponents/FeaturesList.jsx create mode 100644 frontend/src/reusableComponents/FilterOption.jsx create mode 100644 frontend/src/reusableComponents/Footer.jsx create mode 100644 frontend/src/reusableComponents/Input.jsx create mode 100644 frontend/src/reusableComponents/ListCards.jsx create mode 100644 frontend/src/reusableComponents/ModalPopup.jsx create mode 100644 frontend/src/reusableComponents/Navbar.jsx create mode 100644 frontend/src/reusableComponents/ProductCard.jsx create mode 100644 frontend/src/reusableComponents/SearchBar.jsx create mode 100644 frontend/src/reusableComponents/TechnicianCard.jsx diff --git a/frontend/src/App.jsx b/frontend/src/App.jsx index f67355a..2a4cb67 100644 --- a/frontend/src/App.jsx +++ b/frontend/src/App.jsx @@ -1,35 +1,174 @@ -import { useState } from 'react' -import reactLogo from './assets/react.svg' -import viteLogo from '/vite.svg' -import './App.css' +// src/App.jsx +import React from "react"; +import LandingPage from "./Pages/LandingPage"; function App() { - const [count, setCount] = useState(0) - return ( - <> -
- - Vite logo - - - React logo - -
-

Vite + React

-
- -

- Edit src/App.jsx and save to test HMR -

-
-

- Click on the Vite and React logos to learn more -

- - ) +
+ +
+ ); } -export default App +export default App; + + + +// // src/App.jsx +// import { useState } from "react"; +// import { motion } from "framer-motion"; +// import Button from "./reusableComponents/Button"; +// import Input from "./reusableComponents/Input"; +// import ProductCard from "./reusableComponents/ProductCard"; +// import Navbar from "./reusableComponents/Navbar"; +// import Footer from "./reusableComponents/Footer"; +// import BentoGrid from "./reusableComponents/BentoGrid"; + +// import FilterOptions from "./reusableComponents/FilterOption"; +// import Modal from "./reusableComponents/ModalPopup"; +// import Carousel from "./reusableComponents/CarouselSlider"; +// import BannerCard from "./reusableComponents/BannerCard"; +// import SearchBar from "./reusableComponents/Searchbar"; + +// const products = [ +// { id: 1, name: "iPhone 15 Pro", price: 999, image: "https://images.unsplash.com/photo-1690489874296-ea89dd0ba3f3?w=300", category: "Electronics" }, +// { id: 2, name: "MacBook Air", price: 1299, image: "https://images.unsplash.com/photo-1517336714731-489689fd1ca8?w=300", category: "Electronics" }, +// { id: 3, name: "Nike Air Max", price: 129, image: "https://images.unsplash.com/photo-1542291026-7eec264c27ff?w=300", category: "Clothing" }, +// { id: 4, name: "Adidas Ultraboost", price: 189, image: "https://images.unsplash.com/photo-1549298916-b41d501d3772?w=300", category: "Clothing" }, +// { id: 5, name: "Coffee Maker", price: 79, image: "https://images.unsplash.com/photo-1495474472287-4d71bcdd2085?w=300", category: "Home" }, +// { id: 6, name: "Yoga Mat", price: 39, image: "https://images.unsplash.com/photo-1588854337236-7947b26e6a62?w=300", category: "Sports" } +// ]; + +// function App() { +// const [cartCount, setCartCount] = useState(3); +// const [isModalOpen, setIsModalOpen] = useState(false); +// const [searchTerm, setSearchTerm] = useState(""); +// const [filters, setFilters] = useState([]); +// const [email, setEmail] = useState(""); + +// const categories = ["Electronics", "Clothing", "Home", "Sports"]; +// const carouselImages = [ +// "https://images.unsplash.com/photo-1523275335684-37898b6baf30?w=1200", +// "https://images.unsplash.com/photo-1441986300917-64674bd600d8?w=1200", +// "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?w=1200" +// ]; + +// const filteredProducts = products.filter(product => +// product.name.toLowerCase().includes(searchTerm.toLowerCase()) && +// (filters.length === 0 || filters.includes(product.category)) +// ); + +// return ( +//
+// {/* Navbar */} +// + +//
+// {/* Hero Carousel */} +// +// +// + +// {/* Search + Filters Row */} +//
+// +// +//
+ +// {/* Banner Cards */} +//
+// setFilters(["Electronics"])} +// /> +// alert("Free shipping on orders over $50!")} +// /> +// setFilters([])} +// /> +//
+ +// {/* Featured Products */} +//
+//

Featured Products

+//
+// {filteredProducts.map(product => ( +// +// ))} +//
+//
+ +// {/* Newsletter Signup */} +// +//

Stay Updated

+//
+// setEmail(e.target.value)} +// /> +// +//
+//
+ +// {/* Bento Grid Demo */} +//
+//

Dashboard Preview

+// +//
+ +// {/* Demo Modal Trigger */} +//
+// +//
+//
+ +// {/* Modal */} +// setIsModalOpen(false)} +// title="iPhone 15 Pro - Quick View" +// > +//
+// iPhone +//

$999

+//

Latest iPhone with A17 Pro chip and titanium design.

+//
+// +// +//
+//
+//
+ +// {/* Footer */} +//
+//
+// ); +// } + +// export default App; + diff --git a/frontend/src/Pages/LandingPage.jsx b/frontend/src/Pages/LandingPage.jsx new file mode 100644 index 0000000..13ec2c1 --- /dev/null +++ b/frontend/src/Pages/LandingPage.jsx @@ -0,0 +1,71 @@ +import React from "react"; +import { motion } from "framer-motion"; +import Navbar from "../reusableComponents/Navbar"; +import Carousel from "../reusableComponents/CarouselSlider"; +import ListCards from "../reusableComponents/ListCards"; +import Footer from "../reusableComponents/Footer"; +import ProductCard from "../reusableComponents/ProductCard"; +import FeatureList from "../reusableComponents/FeaturesList"; +import TechnicianCard from "../reusableComponents/TechnicianCard"; +import BentoGrid from "../reusableComponents/BentoGrid"; +import BannerCard from "../reusableComponents/BannerCard"; + +const LandingPage = () => { + return ( +
+ + + {/* Carousel */} + + + + + + + {/* Featured Products */} +
+
+ + Featured Products + + {/* Now renders all featured products internally */} +
+
+ + {/* Service Features */} +
+ +
+ + {/* Technicians Section */} +
+
+ + Our Top Skilled Technicians + + {/* Now renders all technicians internally */} +
+
+ + + +
+
+ ); +}; + +export default LandingPage; diff --git a/frontend/src/Pages/ProductsDetails.jsx b/frontend/src/Pages/ProductsDetails.jsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/Pages/ProductsPage.jsx b/frontend/src/Pages/ProductsPage.jsx new file mode 100644 index 0000000..e69de29 diff --git a/frontend/src/data/Productsdata.js b/frontend/src/data/Productsdata.js new file mode 100644 index 0000000..402cbf1 --- /dev/null +++ b/frontend/src/data/Productsdata.js @@ -0,0 +1,240 @@ + const products = [ + { + id: 1, + name: "Ro Enrich Glory RO+UV+UF Copper Water Purifier", + brand: "Pureit", + rating: 4.6, + reviews: 112, + price: 11999, + mrp: 12599, + discount: "20% Off", + emi: "No-cost EMI from ₹2,084/mo", + image: "https://i.ibb.co/Ln7s2h9/ro1.jpg", + description: + "Getting pure and safe water for daily consumption is easy with the Aqua Fresh Copper 18 ltr Audi alkaline technology India no 01 Ro Water purifier. It uses RO + UV + UF + TDS + Copper purification to deliver 100% safe water. Auto-start and auto shut-off prevents overflow. 18 L tank ideal for medium-size families.", + deliveryText: "Delivery by DD/MM/YYYY. If you order before HH:MM", + offers: [ + "HDFC Bank: 10% Instant Discount", + "SBI Credit Card: 10% Cashback", + "No-cost EMI Available", + ], + specifications: { + filtrationCapacity: "18 L/hr", + purificationCapacity: "2000 L", + purificationProcess: "RO + UV + UF + Copper", + coldWaterCapacity: "0 L", + hotWaterCapacity: "0 L", + uvLight: "Yes, in storage tank", + hotDispenser: "No", + coldDispenser: "No", + digitalDisplay: "Yes", + installationType: "Wall Mount", + stages: "7", + }, + }, + + { + id: 2, + name: "Kent Grand Plus ZWW RO + UV + UF + TDS Controller", + brand: "Kent", + rating: 4.5, + reviews: 240, + price: 15000, + mrp: 16999, + discount: "18% Off", + emi: "EMI starting from ₹2,300/mo", + image: "https://i.ibb.co/8mMXrWb/ro2.jpg", + description: + "Kent Grand Plus comes with RO + UV + UF multistage purification for pure drinking water. TDS controller ensures natural minerals are retained. Suitable for borewell and tanker water.", + deliveryText: "Delivery within 2–3 days", + offers: ["SBI Card: ₹1500 Instant Discount", "Free installation"], + specifications: { + filtrationCapacity: "20 L/hr", + purificationCapacity: "2500 L", + purificationProcess: "RO + UV + UF", + coldWaterCapacity: "0 L", + hotWaterCapacity: "0 L", + uvLight: "Yes", + installationType: "Wall Mount", + stages: "7", + }, + }, + + { + id: 3, + name: "Aquaguard Aura RO+UV+UF with Active Copper", + brand: "Eureka Forbes", + rating: 4.4, + reviews: 198, + price: 13999, + mrp: 15999, + discount: "12% Off", + emi: "EMI from ₹1,899/mo", + image: "https://i.ibb.co/vQyx4hv/ro3.jpg", + description: + "Aquaguard Aura with Active Copper Technology enhances immunity and improves taste. The RO + UV + UF purification ensures water is free from viruses, bacteria, and heavy metals.", + deliveryText: "Delivery in 3–5 days", + offers: ["HDFC: 5% Cashback", "Free Filter Replacement (1 Year)"], + specifications: { + filtrationCapacity: "15 L/hr", + purificationCapacity: "1800 L", + purificationProcess: "RO + UV + UF + Active Copper", + uvLight: "Yes", + installationType: "Wall Mount / Counter Top", + stages: "8", + }, + }, + + { + id: 4, + name: "Livpure Glo RO + UV + Mineralizer", + brand: "Livpure", + rating: 4.3, + reviews: 310, + price: 10499, + mrp: 12999, + discount: "25% Off", + emi: "EMI from ₹1,400/mo", + image: "https://i.ibb.co/PtW4VWG/ro4.jpg", + description: + "Livpure Glo with RO + UV purification and a mineralizer ensures balanced and healthy drinking water. Ideal for all water sources.", + deliveryText: "Delivery in 2 days", + offers: ["Axis Bank 10% Discount", "Free Installation"], + specifications: { + filtrationCapacity: "12 L/hr", + purificationCapacity: "1600 L", + purificationProcess: "RO + UV + Mineralizer", + installationType: "Wall Mount", + stages: "6", + }, + }, + + { + id: 5, + name: "HUL Pureit Classic RO+UV+MF Water Purifier", + brand: "Pureit", + rating: 4.2, + reviews: 180, + price: 9999, + mrp: 10999, + discount: "10% Off", + emi: "EMI from ₹1,299/mo", + image: "https://i.ibb.co/QQcNZk6/ro5.jpg", + description: + "Pureit Classic RO+UV+MF guarantees 100% RO filtered water with multi-stage purification.", + deliveryText: "Delivery within 48 hours", + offers: ["ICICI: 750 Cashback"], + specifications: { + filtrationCapacity: "10 L/hr", + purificationCapacity: "1500 L", + purificationProcess: "RO + UV + MF", + stages: "6", + installationType: "Wall Mount", + }, + }, + + { + id: 6, + name: "Aqua Fresh Swift RO+UV+UF+TDS Controller", + brand: "AquaFresh", + rating: 4.1, + reviews: 105, + price: 8999, + mrp: 12999, + discount: "30% Off", + emi: "EMI from ₹999/mo", + image: "https://i.ibb.co/Y3Bgb7q/ro6.jpg", + description: + "Affordable RO purifier with UV + UF purification and TDS adjustments for borewell water.", + offers: ["Free Pre-Filter Kit"], + specifications: { + filtrationCapacity: "14 L/hr", + purificationCapacity: "1800 L", + purificationProcess: "RO + UV + UF + TDS", + stages: "7", + }, + }, + + { + id: 7, + name: "Blue Star Excella RO+UF 6 L Purifier", + brand: "Blue Star", + rating: 4.3, + reviews: 155, + price: 8499, + mrp: 9990, + discount: "15% Off", + emi: "EMI from ₹1,150/mo", + image: "https://i.ibb.co/CJ0mpc6/ro7.jpg", + description: + "Blue Star’s Excella RO+UF provides pure and great-tasting drinking water with a 6-stage purification system.", + specifications: { + filtrationCapacity: "12 L/hr", + purificationCapacity: "1400 L", + purificationProcess: "RO + UF", + stages: "6", + }, + }, + + { + id: 8, + name: "Faber Galaxy Fresh RO+UV+UF with Copper Guard", + brand: "Faber", + rating: 4.4, + reviews: 167, + price: 12999, + mrp: 14999, + discount: "14% Off", + emi: "EMI from ₹1,799/mo", + image: "https://i.ibb.co/fHbhkXM/ro8.jpg", + description: + "Faber Galaxy uses RO+UV+UF triple purification along with Copper Guard technology to ensure healthy drinking water.", + specifications: { + filtrationCapacity: "13 L/hr", + purificationCapacity: "1800 L", + stages: "7", + }, + }, + + { + id: 9, + name: "AO Smith Z1 UV + UF + Hot Water Purifier", + brand: "AO Smith", + rating: 4.6, + reviews: 198, + price: 15999, + mrp: 18999, + discount: "15% Off", + emi: "EMI from ₹2,200/mo", + image: "https://i.ibb.co/0M4T4mJ/ro9.jpg", + description: + "AO Smith Z1 provides UV purification and hot water at 45°C and 80°C. Ideal for families, offices, and kitchens.", + specifications: { + purificationProcess: "UV + UF", + hotWaterCapacity: "Yes, 45°C and 80°C", + stages: "5", + }, + }, + + { + id: 10, + name: "Havells Max Alkaline RO+UV Water Purifier", + brand: "Havells", + rating: 4.5, + reviews: 220, + price: 14999, + mrp: 16999, + discount: "12% Off", + emi: "EMI from ₹1,999/mo", + image: "https://i.ibb.co/F4WQzC3/ro10.jpg", + description: + "Havells Max Alkaline provides 100% RO purified alkaline water with balanced minerals and antioxidants.", + specifications: { + filtrationCapacity: "15 L/hr", + purificationProcess: "RO + UV + Alkaline", + stages: "8", + }, + }, +]; + +export default products; diff --git a/frontend/src/index.css b/frontend/src/index.css index 08a3ac9..0326a3d 100644 --- a/frontend/src/index.css +++ b/frontend/src/index.css @@ -1,68 +1,20 @@ -:root { - font-family: system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; +/* src/index.css */ +@tailwind base; +@tailwind components; +@tailwind utilities; - color-scheme: light dark; - color: rgba(255, 255, 255, 0.87); - background-color: #242424; - - font-synthesis: none; - text-rendering: optimizeLegibility; - -webkit-font-smoothing: antialiased; - -moz-osx-font-smoothing: grayscale; -} - -a { - font-weight: 500; - color: #646cff; - text-decoration: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - display: flex; - place-items: center; - min-width: 320px; - min-height: 100vh; -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border-radius: 8px; - border: 1px solid transparent; - padding: 0.6em 1.2em; - font-size: 1em; - font-weight: 500; - font-family: inherit; - background-color: #1a1a1a; - cursor: pointer; - transition: border-color 0.25s; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; +@layer base { + html { + scroll-behavior: smooth; + } } -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; +@layer components { + .btn-primary { + @apply bg-primary-600 hover:bg-primary-700 text-white font-medium py-2 px-4 rounded-lg transition-all duration-200 flex items-center gap-2 shadow-md hover:shadow-lg; } - button { - background-color: #f9f9f9; + + .product-card-hover { + @apply hover:shadow-xl hover:-translate-y-2 transition-all duration-300; } } diff --git a/frontend/src/reusableComponents/BannerCard.jsx b/frontend/src/reusableComponents/BannerCard.jsx new file mode 100644 index 0000000..1683241 --- /dev/null +++ b/frontend/src/reusableComponents/BannerCard.jsx @@ -0,0 +1,88 @@ +import { motion } from "framer-motion"; + +export default function BannerCard() { + const bannerData = { + image: "https://images.unsplash.com/photo-1615484473812-66b5c0b8c63f?auto=format&fit=crop&w=1200&q=80", + title: "Exchange Your Old RO", + subtitle: "Get instant value for your old purifier. Upgrade to a new model with advanced filtration and smart design.", + ctaText: "Explore Exchange Offers" + }; + + return ( + + {/* Background RO Purifier Image - Right Corner */} +
+ RO Purifier +
+
+ + {/* Content Section - Full Width */} +
+
+ + {bannerData.title} + + + + {bannerData.subtitle} + + + + + {bannerData.ctaText} + + + + +
+ +
+
+ + {/* RO Purifier Accent - Bottom Right Corner */} + + RO Purifier Accent + + + {/* Decorative particles */} +
+
+ + ); +} diff --git a/frontend/src/reusableComponents/BentoGrid.jsx b/frontend/src/reusableComponents/BentoGrid.jsx new file mode 100644 index 0000000..b550d6d --- /dev/null +++ b/frontend/src/reusableComponents/BentoGrid.jsx @@ -0,0 +1,124 @@ +import { motion } from "framer-motion"; + +export default function BentoGrid() { + return ( +
+
+ {/* 1️⃣ LEFT TALL CARD - Exchange Offer */} + +
+ +
+

Exchange Your Old Purifier

+

+ Save up to 30% when you trade in your old RO system. Keep your + home healthy with the latest models. +

+ + +
+
+ + {/* 2️⃣ TOP MIDDLE - Freshness */} + +
+ +
+

Experience the Freshness

+

This Season, Stay Hydrated & Save Big!

+ + +
+
+ + {/* 3️⃣ RIGHT TALL - Latest RO Purifiers */} + +
+ +
+

+ Discover Our Latest RO Purifiers +

+

+ Energy-efficient, compact, and stylish. Designed for modern homes. +

+ + +
+
+ + {/* 4️⃣ BOTTOM MIDDLE - Service Booking */} + +
+ +
+

Book a Technician

+

+ Certified technicians at your doorstep — fast & reliable service. +

+ + +
+
+
+
+ ); +} diff --git a/frontend/src/reusableComponents/Button.jsx b/frontend/src/reusableComponents/Button.jsx new file mode 100644 index 0000000..7d94861 --- /dev/null +++ b/frontend/src/reusableComponents/Button.jsx @@ -0,0 +1,19 @@ +// Button.jsx +export default function Button({ children, variant="primary", size="md", onClick, disabled, className="" }) { + const base = "px-4 py-2 rounded-lg font-medium transition-all duration-200 flex items-center gap-2"; + const variants = { + primary: "bg-blue-600 text-white hover:bg-blue-700", + secondary: "bg-gray-200 text-gray-800 hover:bg-gray-300", + outline: "border-2 border-blue-600 text-blue-600 hover:bg-blue-50" + }; + const sizes = { sm: "px-3 py-1.5 text-sm", md: "px-4 py-2", lg: "px-6 py-3 text-lg" }; + + return ( + + ); +} diff --git a/frontend/src/reusableComponents/CarouselSlider.jsx b/frontend/src/reusableComponents/CarouselSlider.jsx new file mode 100644 index 0000000..18e8aeb --- /dev/null +++ b/frontend/src/reusableComponents/CarouselSlider.jsx @@ -0,0 +1,62 @@ +import { useState, useEffect } from "react"; +import { motion, AnimatePresence } from "framer-motion"; + +export default function Carousel({ autoPlay = true }) { + const [current, setCurrent] = useState(0); + + const images = [ + "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=1200&q=80", + "https://images.unsplash.com/photo-1441986300917-64674bd600d8?auto=format&fit=crop&w=1200&q=80", + "https://images.unsplash.com/photo-1507003211169-0a1dd7228f2d?auto=format&fit=crop&w=1200&q=80", + ]; + + useEffect(() => { + if (autoPlay) { + const interval = setInterval(() => { + setCurrent((current + 1) % images.length); + }, 4000); + return () => clearInterval(interval); + } + }, [current, autoPlay]); + + return ( +
+ + + + + + + +
+ {images.map((_, idx) => ( +
+
+ ); +} diff --git a/frontend/src/reusableComponents/FeaturesList.jsx b/frontend/src/reusableComponents/FeaturesList.jsx new file mode 100644 index 0000000..8e63d9f --- /dev/null +++ b/frontend/src/reusableComponents/FeaturesList.jsx @@ -0,0 +1,36 @@ +import React from "react"; +import { motion } from "framer-motion"; // ✅ Added missing import +import { FaNetworkWired, FaUndoAlt, FaCheckCircle, FaGift } from "react-icons/fa"; + +export default function FeatureList() { + const serviceFeatures = [ + { icon: FaNetworkWired, name: "Wide Service Network" }, + { icon: FaUndoAlt, name: "Easy Return" }, + { icon: FaCheckCircle, name: "Trusted Brand" }, + { icon: FaGift, name: "Free 1 Year Warranty" }, + ]; + + return ( +
+
+ {serviceFeatures.map((feature, index) => ( + +
+ +
+

+ {feature.name} +

+
+ ))} +
+
+ ); +} diff --git a/frontend/src/reusableComponents/FilterOption.jsx b/frontend/src/reusableComponents/FilterOption.jsx new file mode 100644 index 0000000..42640c3 --- /dev/null +++ b/frontend/src/reusableComponents/FilterOption.jsx @@ -0,0 +1,44 @@ +// FilterOptions.jsx +import { useState } from "react"; + +export default function FilterOptions({ categories, onFilterChange }) { + const [selected, setSelected] = useState([]); + + const toggleFilter = (category) => { + const newSelected = selected.includes(category) + ? selected.filter((c) => c !== category) + : [...selected, category]; + setSelected(newSelected); + onFilterChange(newSelected); + }; + + return ( +
+

Filters

+
+ {categories.map((category) => ( + + ))} +
+ {selected.length > 0 && ( + + )} +
+ ); +} diff --git a/frontend/src/reusableComponents/Footer.jsx b/frontend/src/reusableComponents/Footer.jsx new file mode 100644 index 0000000..bc4c32a --- /dev/null +++ b/frontend/src/reusableComponents/Footer.jsx @@ -0,0 +1,76 @@ +export default function Footer() { + return ( +
+ + {/* Main Footer Grid */} +
+ + {/* Company Info */} +
+

RO Purifier

+

+ Pure Water. Pure Trust. + Delivering clean and safe drinking water for every home. +

+
+ + {/* Quick Links */} +
+

Quick Links

+ +
+ + {/* Information */} + + + {/* Newsletter */} +
+

Stay Connected

+

+ Get updates, maintenance tips, and exclusive offers. +

+ +
+ + +
+
+
+ + {/* Divider */} +
+
+
+ + {/* Copyright */} +
+ © {new Date().getFullYear()} PureFlow RO — All Rights Reserved. +
+ +
+ ); +} diff --git a/frontend/src/reusableComponents/Input.jsx b/frontend/src/reusableComponents/Input.jsx new file mode 100644 index 0000000..c0a88ed --- /dev/null +++ b/frontend/src/reusableComponents/Input.jsx @@ -0,0 +1,15 @@ +// Input.jsx +export default function Input({ label, type="text", value, onChange, error, className="" }) { + return ( +
+ {label && } + + {error &&

{error}

} +
+ ); +} diff --git a/frontend/src/reusableComponents/ListCards.jsx b/frontend/src/reusableComponents/ListCards.jsx new file mode 100644 index 0000000..972e42d --- /dev/null +++ b/frontend/src/reusableComponents/ListCards.jsx @@ -0,0 +1,46 @@ +import React from "react"; +import { FaMapMarkerAlt, FaExchangeAlt } from "react-icons/fa"; +import { MdCompareArrows } from "react-icons/md"; + +export default function ListCards() { + const cards = [ + { + icon: FaMapMarkerAlt, + title: "Track Location", + content: "Track your product delivery in real-time.", + }, + { + icon: MdCompareArrows, + title: "Compare Product", + content: "Compare features between multiple products.", + }, + { + icon: FaExchangeAlt, + title: "Xchange Product", + content: "Exchange your products quickly and easily.", + }, + ]; + + return ( +
+ {cards.map((card, index) => ( +
+
+ +
+
+

+ {card.title} +

+

+ {card.content} +

+
+
+ ))} +
+ ); +} diff --git a/frontend/src/reusableComponents/ModalPopup.jsx b/frontend/src/reusableComponents/ModalPopup.jsx new file mode 100644 index 0000000..c414365 --- /dev/null +++ b/frontend/src/reusableComponents/ModalPopup.jsx @@ -0,0 +1,43 @@ +// Modal.jsx +import { motion, AnimatePresence } from "framer-motion"; + +export default function Modal({ isOpen, onClose, children, title }) { + return ( + + {isOpen && ( + <> + + + e.stopPropagation()} + > +
+

{title}

+ +
+
{children}
+
+
+ + )} +
+ ); +} diff --git a/frontend/src/reusableComponents/Navbar.jsx b/frontend/src/reusableComponents/Navbar.jsx new file mode 100644 index 0000000..cc68b08 --- /dev/null +++ b/frontend/src/reusableComponents/Navbar.jsx @@ -0,0 +1,93 @@ +import { useState } from "react"; +import { FaShoppingCart, FaUserCircle, FaSearch, FaTimes } from "react-icons/fa"; +import Button from './Button'; + + +export default function Navbar({ cartCount }) { + const [isSearchOpen, setSearchOpen] = useState(false); + const [searchTerm, setSearchTerm] = useState(""); + + return ( + + ); +} diff --git a/frontend/src/reusableComponents/ProductCard.jsx b/frontend/src/reusableComponents/ProductCard.jsx new file mode 100644 index 0000000..da325da --- /dev/null +++ b/frontend/src/reusableComponents/ProductCard.jsx @@ -0,0 +1,231 @@ +import { motion } from "framer-motion"; +import { FiEye, FiCheck, FiStar, FiCreditCard } from "react-icons/fi"; +import { TbBasket } from "react-icons/tb"; +import Button from "./Button"; + +export default function ProductCard() { + const featuredProducts = [ + { + id: 0, + isPromo: true, + brand: "Latest", + name: "New Products", + image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=500&q=80", + features: ["Latest Arrivals", "Best Deals"], + }, + { + id: 1, + brand: "Pureit", + name: "Ro Enrich Glory RO+UV+UF Copper Water Purifier", + price: 11999, + originalPrice: 12599, + image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=500&q=80", + isNew: true, + features: ["5 Year Free Service", "Free Delivery"], + rating: 4.6, + reviews: "98", + emi: 2084, + }, + { + id: 2, + brand: "Aquaguard", + name: "Enhance RO+UV Water Purifier", + price: 8999, + originalPrice: 10999, + image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=500&q=80", + features: ["3 Year Warranty", "Free Installation"], + rating: 4.4, + reviews: "156", + emi: 1673, + }, + { + id: 3, + brand: "Kent", + name: "Grand Plus RO Water Purifier", + price: 14999, + image: "https://images.unsplash.com/photo-1523275335684-37898b6baf30?auto=format&fit=crop&w=500&q=80", + isNew: true, + features: ["10 Year Free Service", "Free Delivery"], + rating: 4.8, + reviews: "234", + emi: 2499, + }, + ]; + + return ( +
+ {featuredProducts.map((product, index) => ( + + ))} +
+ ); +} + +function SingleProductCard({ product, index }) { + if (!product) { + return ( +
+ Product data missing +
+ ); + } + + const discount = product.originalPrice + ? Math.round(((product.originalPrice - product.price) / product.originalPrice) * 100) + : 0; + + return ( + + {/* PROMO CARD */} + {product.isPromo ? ( +
+
+ Promo +
+
+ +
+ + SPECIAL PROMOTION + +
+ +
+

+ {product.promoTitle || "Exclusive New Arrivals"} +

+

+ {product.promoSubtitle || "Find the best new products curated just for you."} +

+
+ +
+ + Shop Now + +
+
+ ) : ( + /* NORMAL PRODUCT CARD */ + <> +
+ + {product.isNew && ( + + NEW + + )} + {discount > 0 && ( + + {discount}% OFF + + )} +
+ +
+
+ + {product.brand} + +

+ {product.name} +

+
+
+ +
+ {product.features?.slice(0, 3).map((feature, idx) => ( + + + {feature} + + ))} +
+
+ +
+
+
+ + ₹{product.price?.toLocaleString()} + + {product.originalPrice && ( + + ₹{product.originalPrice.toLocaleString()} + + )} +
+ + {product.rating && ( +
+ {product.rating} +
+ )} +
+
+
+ + {product.emi && ( +
+
+
+ + No Cost EMI ₹{product.emi}/mo +
+
+
+
+ )} + +
+
+ + + Add to Cart + + + + + +
+
+
+ + )} + + ); +} diff --git a/frontend/src/reusableComponents/SearchBar.jsx b/frontend/src/reusableComponents/SearchBar.jsx new file mode 100644 index 0000000..b837293 --- /dev/null +++ b/frontend/src/reusableComponents/SearchBar.jsx @@ -0,0 +1,18 @@ +// SearchBar.jsx +export default function SearchBar({ onSearch }) { + return ( +
+
+ onSearch(e.target.value)} + /> + + + +
+
+ ); +} diff --git a/frontend/src/reusableComponents/TechnicianCard.jsx b/frontend/src/reusableComponents/TechnicianCard.jsx new file mode 100644 index 0000000..5d3e3ec --- /dev/null +++ b/frontend/src/reusableComponents/TechnicianCard.jsx @@ -0,0 +1,146 @@ +import { motion } from "framer-motion"; +import { FiEye, FiStar } from "react-icons/fi"; +import { TbCalendarCheck } from "react-icons/tb"; + +export default function TechnicianCard() { + const technicians = [ + { + id: 1, + name: "Rajesh Kumar", + image: "https://randomuser.me/api/portraits/men/32.jpg", + rating: 4.8, + reviews: 220, + experience: 6, + location: "Chennai", + services: ["Leakage Repair", "Filter Change"], + startingPrice: 499, + availableToday: true, + }, + { + id: 2, + name: "Suresh Reddy", + image: "https://randomuser.me/api/portraits/men/45.jpg", + rating: 4.5, + reviews: 180, + experience: 5, + location: "Bangalore", + services: ["Pipe Replacement", "RO Servicing"], + startingPrice: 599, + availableToday: false, + }, + { + id: 3, + name: "Anita Sharma", + image: "https://randomuser.me/api/portraits/women/65.jpg", + rating: 4.7, + reviews: 150, + experience: 7, + location: "Mumbai", + services: ["Filter Change", "RO Installation"], + startingPrice: 549, + availableToday: true, + }, + { + id: 4, + name: "Vikram Singh", + image: "https://randomuser.me/api/portraits/men/78.jpg", + rating: 4.6, + reviews: 200, + experience: 6, + location: "Delhi", + services: ["Leakage Repair", "Pipe Replacement"], + startingPrice: 499, + availableToday: false, + }, + ]; + + return ( +
+ {technicians.map((tech, index) => ( + + ))} +
+ ); +} + +function SingleTechnicianCard({ technician, index }) { + if (!technician) { + return ( +
+ Technician data missing +
+ ); + } + + return ( + +
+ {technician.name} + {technician.availableToday && ( + + Available Today + + )} +
+ +
+
+

{technician.name}

+
+
+ + {technician.rating} ({technician.reviews}) +
+ • {technician.experience} yrs +
+
{technician.location}
+
+ +
+ {technician.services?.map((service, idx) => ( + + {service} + + ))} +
+ +
+ ₹{technician.startingPrice} onwards +
+ +
+ + + View Profile + + + + Book Now + +
+
+
+ ); +} From dac45a41324d3d6f7d441a127157795866c808c2 Mon Sep 17 00:00:00 2001 From: GaneshArumugam05 Date: Wed, 10 Dec 2025 18:51:52 +0530 Subject: [PATCH 2/2] missing file added product details file added --- frontend/src/Pages/ProductsDetails.jsx | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/frontend/src/Pages/ProductsDetails.jsx b/frontend/src/Pages/ProductsDetails.jsx index e69de29..90ff424 100644 --- a/frontend/src/Pages/ProductsDetails.jsx +++ b/frontend/src/Pages/ProductsDetails.jsx @@ -0,0 +1,9 @@ +import React from 'react' + +const ProductsDetails = () => { + return ( +
ProductsDetails
+ ) +} + +export default ProductsDetails \ No newline at end of file