From 9fcaf037342c7c305244b4be1b96939a039602a5 Mon Sep 17 00:00:00 2001 From: naderbennour Date: Wed, 15 Jan 2025 10:11:12 +0100 Subject: [PATCH] added search functionality --- app/(icons)/icons/FloatingBar.tsx | 20 +++++++++++++++++--- app/(icons)/icons/Footer.tsx | 18 +++++++++++------- app/(icons)/icons/Header.tsx | 19 +++++++++++++++++-- app/(icons)/icons/Search.tsx | 14 +++++++------- app/(icons)/icons/page.tsx | 20 +++++++++++++++++--- 5 files changed, 69 insertions(+), 22 deletions(-) diff --git a/app/(icons)/icons/FloatingBar.tsx b/app/(icons)/icons/FloatingBar.tsx index e03b33be..54a2ed97 100644 --- a/app/(icons)/icons/FloatingBar.tsx +++ b/app/(icons)/icons/FloatingBar.tsx @@ -4,7 +4,18 @@ import { useState } from "react"; import { GTPIcon } from "@/components/layout/GTPIcon"; import { GTPIconName } from "@/icons/gtp-icon-names"; -export default function FloatingBar({}) { +// Accept searchQuery, setSearchQuery, and iconsCount from props +interface FloatingBarProps { + searchQuery: string; + setSearchQuery: (value: string) => void; + iconsCount: number; +} + +export default function FloatingBar({ + searchQuery, + setSearchQuery, + iconsCount, +}: FloatingBarProps) { const [selectedFormat, setSelectedFormat] = useState<"SVG" | "PNG" | null>(null); return ( @@ -88,9 +99,12 @@ export default function FloatingBar({}) { {/* Search Bar */}
- +
- ); } diff --git a/app/(icons)/icons/Footer.tsx b/app/(icons)/icons/Footer.tsx index 320433aa..e725e4ea 100644 --- a/app/(icons)/icons/Footer.tsx +++ b/app/(icons)/icons/Footer.tsx @@ -74,14 +74,18 @@ export default function Footer({ }) { {/* Right Side Share Button */} -
+
+
+
+
+
-
- +
+
Share
diff --git a/app/(icons)/icons/Header.tsx b/app/(icons)/icons/Header.tsx index b1ab9205..a99a1682 100644 --- a/app/(icons)/icons/Header.tsx +++ b/app/(icons)/icons/Header.tsx @@ -5,7 +5,18 @@ import { useUIContext } from "@/contexts/UIContext"; import FloatingBar from "./FloatingBar"; import { LogoIcon } from "./Icons"; -export default function Header({}) { +// Add optional props for search query & icons count +interface HeaderProps { + searchQuery?: string; + setSearchQuery?: (value: string) => void; + iconsCount?: number; +} + +export default function Header({ + searchQuery = "", + setSearchQuery = () => {}, + iconsCount = 0, +}: HeaderProps) { const { isMobile } = useUIContext(); return (
@@ -43,7 +54,11 @@ export default function Header({}) { {!isMobile && ( - + )}
diff --git a/app/(icons)/icons/Search.tsx b/app/(icons)/icons/Search.tsx index 45c37a43..41576c64 100644 --- a/app/(icons)/icons/Search.tsx +++ b/app/(icons)/icons/Search.tsx @@ -1,17 +1,17 @@ "use client"; -import { useState } from "react"; - import { GTPIcon } from "@/components/layout/GTPIcon"; import { GTPIconName } from "@/icons/gtp-icon-names"; import { CloseIcon } from "./Icons"; -export default function Search() { - const [query, setQuery] = useState(""); - - // Example count of icons - const iconsCount = 89; +// Receive everything via props: query, setQuery, iconsCount +interface SearchProps { + query: string; + setQuery: (value: string) => void; + iconsCount: number; +} +export default function Search({ query, setQuery, iconsCount }: SearchProps) { const handleInputChange = (e: React.ChangeEvent) => { setQuery(e.target.value); }; diff --git a/app/(icons)/icons/page.tsx b/app/(icons)/icons/page.tsx index 9263e510..886015fe 100644 --- a/app/(icons)/icons/page.tsx +++ b/app/(icons)/icons/page.tsx @@ -1,15 +1,29 @@ "use client"; +import { useState } from "react"; import Header from "../../(icons)/icons/Header"; import Footer from "../../(icons)/icons/Footer"; import { GTPIcon } from "@/components/layout/GTPIcon"; import { iconNames, GTPIconName } from "@/icons/gtp-icon-names"; const IconsPage = () => { + // 1) Lifted search state + const [searchQuery, setSearchQuery] = useState(""); + + // 2) Filter icon list based on user input + const filteredIcons = iconNames.filter((iconName) => + iconName.toLowerCase().includes(searchQuery.toLowerCase()) + ); + return (
{/* Header*/} -
+ {/* Pass query-related props and count of filtered icons */} +
{/* Scrollable Container*/}
{
- {/* Icon Cards */} + {/* Icon Cards - only show filtered icons */}
- {iconNames.map((iconName) => ( + {filteredIcons.map((iconName) => ( ))}