Skip to content

Commit 033cebe

Browse files
committed
add exam serch in home page
1 parent 8ebf991 commit 033cebe

File tree

2 files changed

+40
-20
lines changed

2 files changed

+40
-20
lines changed

app/page.tsx

Lines changed: 35 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,50 @@
1+
"use client";
2+
3+
import { useState } from "react";
14
import type { NextPage } from "next";
25
import NameLink from "@azure-fundamentals/components/NameLink";
36
import exams from "@azure-fundamentals/lib/exams.json";
47

58
const Home: NextPage = () => {
9+
const [searchTerm, setSearchTerm] = useState("");
10+
11+
const handleSearchChange = (event: React.ChangeEvent<HTMLInputElement>) => {
12+
setSearchTerm(event.target.value);
13+
};
14+
15+
const filteredExams = exams.filter((exam) =>
16+
exam.name.toLowerCase().includes(searchTerm.toLowerCase()),
17+
);
18+
619
return (
720
<div className="mx-auto mb-6 w-full lg:w-[70vw] 2xl:w-[45%] text-center">
8-
<h2 className="text-white text-5xl text-leading font-bold uppercase md:mt-14">
21+
<h2 className="text-white text-5xl font-bold uppercase md:mt-14">
922
Welcome!
1023
</h2>
1124
<p className="text-white text-lg mt-4 mb-14 px-5 leading-6">
12-
Select an exam from the list bellow.
25+
Select an exam from the list below.
1326
</p>
27+
<input
28+
type="text"
29+
value={searchTerm}
30+
onChange={handleSearchChange}
31+
placeholder="Search exams"
32+
className="mb-5 px-4 py-2 border border-gray-300 rounded-md w-3/4 lg:w-1/2"
33+
/>
1434
<div className="grid grid-cols-1 sm:grid-cols-2 gap-x-10 gap-y-5 mx-5 lg:mx-0">
15-
{exams.map((exam) => {
16-
return (
17-
<NameLink
18-
key={exam.name}
19-
href={{
20-
pathname: "/modes",
21-
query: { url: exam.url, name: exam.name },
22-
}}
23-
heading={exam.name}
24-
paragraph={exam.subtitle}
25-
wrapperClassNames="hover:bg-[#C7D2E2]"
26-
headingClassNames="group-hover:from-[#fff] group-hover:to-[#fff]"
27-
/>
28-
);
29-
})}
35+
{filteredExams.map((exam) => (
36+
<NameLink
37+
key={exam.name}
38+
href={{
39+
pathname: "/modes",
40+
query: { url: exam.url, name: exam.name },
41+
}}
42+
heading={exam.name}
43+
paragraph={exam.subtitle}
44+
wrapperClassNames="hover:bg-[#C7D2E2]"
45+
headingClassNames="group-hover:from-[#fff] group-hover:to-[#fff]"
46+
/>
47+
))}
3048
</div>
3149
</div>
3250
);

components/QuizForm.tsx

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ const QuizForm: FC<Props> = ({
4343
} | null>(null);
4444

4545
useEffect(() => {
46-
const handleEsc = (event) => {
46+
const handleEsc = (event: KeyboardEvent) => {
4747
if (event.key === "Escape") {
4848
setSelectedImage(null);
4949
}
@@ -54,7 +54,9 @@ const QuizForm: FC<Props> = ({
5454
};
5555
}, [setSelectedImage]);
5656

57-
const handleClickOutside = (event) => {
57+
const handleClickOutside = (
58+
event: React.MouseEvent<HTMLDivElement, MouseEvent>,
59+
) => {
5860
if (event.target === event.currentTarget) {
5961
setSelectedImage(null);
6062
}
@@ -309,7 +311,7 @@ const QuizForm: FC<Props> = ({
309311
isOptionChecked(option.text) ||
310312
isOptionCheckedWithoutReveal(option.text)
311313
}
312-
handleChange={(e) => {
314+
handleChange={(e: any) => {
313315
handleRadioCheckboxClick(e, noOfAnswers > 1);
314316
}}
315317
/>

0 commit comments

Comments
 (0)