"use client" import { Input } from "@/components/ui/input" import { BASE_URL } from "@/constants" import type { IconSearchProps, IconWithName } from "@/types/icons" import { Search } from "lucide-react" import Image from "next/image" import Link from "next/link" import { useState } from "react" export function IconSearch({ icons, initialQuery = "" }: IconSearchProps) { const [searchQuery, setSearchQuery] = useState(initialQuery) const [filteredIcons, setFilteredIcons] = useState(() => { if (!initialQuery.trim()) return icons const q = initialQuery.toLowerCase() return icons.filter(({ name, data }) => { if (name.toLowerCase().includes(q)) return true if (data.aliases.some((alias) => alias.toLowerCase().includes(q))) return true if (data.categories.some((category) => category.toLowerCase().includes(q))) return true return false }) }) const handleSearch = (query: string) => { setSearchQuery(query) if (!query.trim()) { setFilteredIcons(icons) return } const q = query.toLowerCase() const filtered = icons.filter(({ name, data }) => { if (name.toLowerCase().includes(q)) return true if (data.aliases.some((alias) => alias.toLowerCase().includes(q))) return true if (data.categories.some((category) => category.toLowerCase().includes(q))) return true return false }) setFilteredIcons(filtered) } return ( <>
handleSearch(e.target.value)} />
{filteredIcons.length === 0 ? (

No icons found

Try a different search term.

) : (
{filteredIcons.map(({ name, data }) => (
{`${name}
{name.replace(/-/g, " ")} ))}
)} ) }