Skip to content

Commit 7b67efe

Browse files
committed
rating star project
1 parent 951a2b7 commit 7b67efe

File tree

2 files changed

+41
-5
lines changed

2 files changed

+41
-5
lines changed

src/App.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import Header from "@/layouts/header";
66
import Home from "@/pages/Home";
77
import NotFound from "@/pages/404";
88
import Accordion from "@/pages/accordion/accordion";
9-
import RandomColor from "@/pages/RandomColor"
9+
import RandomColor from "@/pages/RandomColor";
1010
import StarRating from "@/pages/starRating";
1111

1212
function App() {
@@ -15,10 +15,10 @@ function App() {
1515
<Header />
1616
<Routes>
1717
<Route path="React-Project">
18-
<Route index element={<Home />} />
18+
<Route index element={<Home />} />
1919
{/* Accordion component */}
2020
<Route path="accordion" element={<Accordion />} />
21-
{/* Random color generator */}
21+
{/* Random color generator */}
2222
<Route path="color-generator" element={<RandomColor />} />
2323
{/* Star Rating */}
2424
<Route path="star-rating" element={<StarRating />} />

src/pages/starRating.jsx

Lines changed: 38 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,45 @@
1-
export default function StarRating() {
1+
import PropTypes from "prop-types";
2+
import { useState } from "react";
3+
import { FaStar } from "react-icons/fa"; // Correct import for FaStar
4+
5+
function StarRating({ numOfStars = 5 }) {
6+
const [rating, setRating] = useState(0);
7+
const [hover, setHover] = useState(0);
8+
9+
function handleClick(getCurrentLIndex) {
10+
setRating(getCurrentLIndex)
11+
}
12+
function handleMouseEnter(getCurrentLIndex) {
13+
setHover(getCurrentLIndex)
14+
}
15+
function handleMouseLeave() {
16+
setHover(rating)
17+
}
18+
219
return (
320
<div
4-
className={`container flex flex-1 flex-col items-center justify-start gap-8 my-10 w-full h-screen`}
21+
className={`container flex flex-1 items-center justify-center gap-8 my-10 w-full h-screen`}
522
>
23+
{[...Array(numOfStars)].map((_, index) => {
24+
index += 1;
625

26+
return (
27+
<FaStar
28+
key={index}
29+
className={index <= (hover || rating) ? 'active text-primary' : 'inactive text-white'}
30+
onClick={() => handleClick(index)}
31+
onMouseMove={() => handleMouseEnter(index)}
32+
onMouseLeave={() => handleMouseLeave(index)}
33+
size={40}
34+
/>
35+
);
36+
})}
737
</div>
838
);
939
}
40+
41+
StarRating.propTypes = {
42+
numOfStars: PropTypes.number,
43+
};
44+
45+
export default StarRating

0 commit comments

Comments
 (0)