Skip to content

Commit

Permalink
Merge pull request #177 from HimankPatidar/feature_branch
Browse files Browse the repository at this point in the history
Make description box functionable and responsive #100
  • Loading branch information
mohitparmar1 authored May 21, 2024
2 parents 49771d5 + dabb161 commit f20b726
Show file tree
Hide file tree
Showing 11 changed files with 294 additions and 61 deletions.
15 changes: 14 additions & 1 deletion src/App.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import Shop from "./Pages/Shop";
import ShopCategory from "./Pages/ShopCategory";
import Saved from "./Pages/WishList"
import About from "./Pages/About";

import CheckNow from "./Components/CheckNow";
import "./index.css";
import Signup from "./Pages/Signup";
import NotFound from "./Pages/NotFound";
Expand All @@ -34,9 +34,15 @@ const App = () => {
<Route path="/cart" element={<CartWithFooter />} />
<Route path="/wishlist" element={<WishlistWithFooter />} />
<Route path="/about" element={<About/>} />

<Route path="/checknow" element={<CheckNowWithFooter />} />



<Route path="*" element={<NotFound/>} />
<Route path="/user/paymentsuccess" element={<PaymentSuccess/>} />
<Route path="/user/paymentfail" element={<PaymentFail/>} />

</Routes>
</Router>
);
Expand Down Expand Up @@ -88,4 +94,11 @@ const WishlistWithFooter=()=>(

);

const CheckNowWithFooter = () => (
<>
<CheckNow />
<Footer />
</>
);

export default App;
59 changes: 59 additions & 0 deletions src/Components/CheckNow.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import React from 'react';
import { Link } from 'react-router-dom';
import Slider from 'react-slick';
import 'slick-carousel/slick/slick.css';
import 'slick-carousel/slick/slick-theme.css';
import all_product from '../assets/all_product';
import Item from './Item';
import Hero from "../assets/D-1.0-UHP-16052024-mainbanner-z1-p1-iconicsale-4080HP Desktop.avif"
import img2 from "../assets/D-1.0-UHP-16052024-MainBannerDailyChanging-Z1-P7-AX-SuperDry-min40-extra750.avif"
import img3 from "../assets/50504080326686.webp"
import img4 from "../assets/D-1.0-UHP-16052024-MainBannerDailyChanging-Z1-P1-BrandDay-DNMX-Flat60.avif"

const CheckNow = () => {
const sortedProducts = all_product.slice().sort((a, b) => b.old_price - b.new_price - (a.old_price - a.new_price));

const settings = {
dots: true,
infinite: true,
speed: 500,
slidesToShow: 1,
slidesToScroll: 1,
autoplay: true,
autoplaySpeed: 5000,
pauseOnHover: true,
adaptiveHeight: true,
};

return (
<div className="w-full z-10 relative">
<Slider {...settings}>
<div>
<img src={Hero} alt="image" className="w-full object-cover h-auto" />
</div>
<div>
<img src={img2} alt="image" className="w-full object-cover h-auto" />
</div>
<div>
<img src={img3} alt="image" className="w-full object-cover h-auto" />
</div>
<div>
<img src={img4} alt="image" className="w-full object-cover h-auto" />
</div>
</Slider>

<div className="grid grid-cols-1 sm:grid-cols-2 md:grid-cols-3 lg:grid-cols-4 gap-6">
{sortedProducts.map(product => (
<Link key={product.id} to={`/product/${product.id}`} className="focus:outline-none">
<div className="bg-white rounded-md shadow-md p-4 transition duration-300 ease-in-out transform hover:-translate-y-1 hover:shadow-lg hover:border-transparent">
<Item data={product} />
</div>
</Link>
))}
</div>
</div>
);
}

export default CheckNow;

78 changes: 78 additions & 0 deletions src/Components/Comment.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
import React, { useState } from "react";

const CommentBox = ({ onCommentSubmit, onRatingSubmit, onImageUpload }) => {
const [comment, setComment] = useState("");
const [rating, setRating] = useState(0);
const [image, setImage] = useState(null);

const handleCommentChange = (e) => {
setComment(e.target.value);
};

const handleRatingChange = (value) => {
setRating(value);
onRatingSubmit(value);
};

const handleImageChange = (e) => {
const file = e.target.files[0];
setImage(file);
onImageUpload(file);
};

const handleSubmit = (e) => {
e.preventDefault();
if (comment.trim() !== "") {
onCommentSubmit(comment);
setComment("");
}
};

return (
<div className="flex flex-col space-y-4">
<textarea
value={comment}
onChange={handleCommentChange}
placeholder="Write your comment..."
rows="4"
className="border p-2 resize-none"
></textarea>
<div className="flex items-center">
<input
type="file"
accept="image/*"
onChange={handleImageChange}
className="hidden"
id="image-upload"
/>
<label htmlFor="image-upload" className="cursor-pointer bg-blue-500 text-white py-2 px-4 rounded hover:bg-blue-600">
Upload Image
</label>
</div>
<div className="flex items-center">
<p className="mr-4">Rate this product:</p>
<div className="flex space-x-1">
{[...Array(5)].map((_, index) => (
<button
key={index}
className={`${
rating >= index + 1 ? "text-yellow-500" : "text-gray-300"
}`}
onClick={() => handleRatingChange(index + 1)}
>
&#9733;
</button>
))}
</div>
</div>
<button
onClick={handleSubmit}
className="bg-blue-500 text-white py-2 px-4 rounded hover:bg-blue-600"
>
Submit
</button>
</div>
);
};

export default CommentBox;
109 changes: 88 additions & 21 deletions src/Components/DescriptionBox.jsx
Original file line number Diff line number Diff line change
@@ -1,28 +1,95 @@
import React from "react";
import React, { useState } from "react";
import CommentBox from "./Comment";
import StarRating from "./StarRating";

const DescriptionBox = () => {
const [activeTab, setActiveTab] = useState("description");
const [comments, setComments] = useState([]);
const [rating, setRating] = useState(0);
const [uploadedImage, setUploadedImage] = useState(null);

const handleTabClick = (tab) => {
setActiveTab(tab);
};

const handleCommentSubmit = (comment) => {
setComments([...comments, comment]);
};

const handleRatingSubmit = (value) => {
setRating(value);
};

const handleImageUpload = (file) => {
setUploadedImage(file);
};

return (
<div className="flex flex-col items-center w-3/4 m-auto mt-10 mb-10">
<div className="flex flex-row justify-left w-full my-3 ">
<div className="border-2 p-3">Description</div>
<div className="border-2 p-3">Reviews (120)</div>
</div>
<div className="flex flex-row justify-left w-full mt-3 ">
<p className="border-2 p-3">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed
condimentum, nisl eu molestie viverra, eros nunc faucibus dolor, vel
aliquam nunc quam id nunc. Nullam auctor, elit vitae aliquet aliquet,
lorem elit tincidunt nisi, eget tincidunt urna nunc a neque. Donec
eget nisl non nisl ultricies aliquam. Donec nec diam euismod, aliquet
nisi vitae, lacinia quam. Nulla facilisi. Praesent sed erat tincidunt,
aliquam lectus vitae, consequat risus. Nulla facilisi. Donec auctor,
sem vitae aliquet aliquet, lorem elit tincidunt nisi, eget tincidunt
urna nunc a neque. Donec eget nisl non nisl ultricies aliquam. Donec
nec diam euismod, aliquet nisi vitae, lacinia quam. Nulla facilisi.
Praesent sed erat tincidunt, aliquam lectus vitae, consequat risus.
Nulla facilisi.
</p>
<div className="flex flex-col items-center w-3/4 m-auto mt-10 mb-10">
<div className="flex flex-row justify-left w-full my-3 ">
<div
className={`border-2 p-3 cursor-pointer ${
activeTab === "description" ? "bg-gray-300" : ""
}`}
onClick={() => handleTabClick("description")}
>
Description
</div>
<div
className={`border-2 p-3 cursor-pointer ${
activeTab === "reviews" ? "bg-gray-300" : ""
}`}
onClick={() => handleTabClick("reviews")}
>
Reviews ({comments.length})
</div>
</div>
{activeTab === "description" && (
<div className="flex flex-row justify-left w-full mt-3 ">
<p className="border-2 p-3">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed
condimentum, nisl eu molestie viverra, eros nunc faucibus dolor,
vel aliquam nunc quam id nunc. Nullam auctor, elit vitae aliquet
aliquet, lorem elit tincidunt nisi, eget tincidunt urna nunc a
neque. Donec eget nisl non nisl ultricies aliquam. Donec nec diam
euismod, aliquet nisi vitae, lacinia quam. Nulla facilisi. Praesent
sed erat tincidunt, aliquam lectus vitae, consequat risus. Nulla
facilisi. Donec auctor, sem vitae aliquet aliquet, lorem elit
tincidunt nisi, eget tincidunt urna nunc a neque. Donec eget nisl
non nisl ultricies aliquam. Donec nec diam euismod, aliquet nisi
vitae, lacinia quam. Nulla facilisi. Praesent sed erat tincidunt,
aliquam lectus vitae, consequat risus. Nulla facilisi.
</p>
</div>
)}
{activeTab === "reviews" && (
<div className="flex flex-col w-full h-auto mt-3">
<div className="bg-gray-100 p-4 rounded-md mb-4">
<CommentBox
onCommentSubmit={handleCommentSubmit}
onRatingSubmit={handleRatingSubmit}
onImageUpload={handleImageUpload}
/>
</div>
<div className=" bg-grey-500 p-4 rounded-md">
<StarRating rating={rating }/>
<div>
<h3>Comments:</h3>
<ul>
{comments.map((comment, index) => (
<li key={index}>{comment}</li>
))}
</ul>
</div>
{uploadedImage && (
<div>
<h3>Uploaded Image:</h3>
<img src={URL.createObjectURL(uploadedImage)} alt="Uploaded" />
</div>
)}
</div>
</div>
)}
</div>
);
};
Expand Down
10 changes: 7 additions & 3 deletions src/Components/Offers.jsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,19 @@
import React from "react";
import { Link } from "react-router-dom"; // Import Link from React Router
import ExclusiveImg from "../assets/exclusive_image.png";

const Offers = () => {
return (
<div className="flex flex-row flex-1 w-3/4 px-20 py-0 mx-auto sm:px-36 h-2/4 bg-gradient-to-b from-purple-200 to-blue-300 rounded-3xl">
<div className="flex flex-col justify-center py-10 text-gray-700">
<h1 className="text-5xl font-Poppins">Exclusive</h1>
<h1 className="text-3xl">Offers For You</h1>
<p>Get the best deals on your favourite products</p>
<button className="w-32 h-12 px-2 py-1 my-2 font-semibold text-center text-white transition duration-300 bg-orange-300 rounded-md hover:bg-orange-400 focus:outline-none focus:ring focus:border-blue-300">
Check Now
</button>
<Link to="/checknow">
<button className="w-32 h-12 px-2 py-1 my-2 font-semibold text-center text-white transition duration-300 bg-orange-300 rounded-md hover:bg-orange-400 focus:outline-none focus:ring focus:border-blue-300">
Check Now
</button>
</Link>
</div>
<div className="flex justify-center w-1/2 opacity-0 sm:opacity-100">
<img src={ExclusiveImg} alt="" className="w-2/3" />
Expand Down
Loading

0 comments on commit f20b726

Please sign in to comment.