import FilterSearchDropdown from "@/components/FilterSearchDropdown"; import LinkCard from "@/components/LinkCard"; import SortDropdown from "@/components/SortDropdown"; import useSort from "@/hooks/useSort"; import MainLayout from "@/layouts/MainLayout"; import useLinkStore from "@/store/links"; import { Sort } from "@/types/global"; import { faFilter, faSearch, faSort } from "@fortawesome/free-solid-svg-icons"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { useRouter } from "next/router"; import { useEffect, useState } from "react"; type SearchFilter = { name: boolean; url: boolean; description: boolean; collection: boolean; tags: boolean; }; export default function Links() { const { links } = useLinkStore(); const router = useRouter(); const routeQuery = decodeURIComponent( router.query.query as string ).toLowerCase(); const [searchFilter, setSearchFilter] = useState({ name: true, url: true, description: true, collection: true, tags: true, }); const [filterDropdown, setFilterDropdown] = useState(false); const [sortDropdown, setSortDropdown] = useState(false); const [sortBy, setSortBy] = useState(Sort.NameAZ); const [filteredLinks, setFilteredLinks] = useState(links); const [sortedLinks, setSortedLinks] = useState(filteredLinks); useSort({ sortBy, setData: setSortedLinks, data: links }); useEffect(() => { setFilteredLinks([ ...sortedLinks.filter((link) => { if ( (searchFilter.name && link.name.toLowerCase().includes(routeQuery)) || (searchFilter.url && link.url.toLowerCase().includes(routeQuery)) || (searchFilter.description && link.description.toLowerCase().includes(routeQuery)) || (searchFilter.collection && link.collection.name.toLowerCase().includes(routeQuery)) || (searchFilter.tags && link.tags.some((tag) => tag.name.toLowerCase().includes(routeQuery) )) ) return true; }), ]); }, [searchFilter, sortedLinks, router]); return (

Search Results

setFilterDropdown(!filterDropdown)} id="filter-dropdown" className="inline-flex rounded-md cursor-pointer hover:bg-slate-200 duration-100 p-1" >
{filterDropdown ? ( ) : null}
setSortDropdown(!sortDropdown)} id="sort-dropdown" className="inline-flex rounded-md cursor-pointer hover:bg-slate-200 duration-100 p-1" >
{sortDropdown ? ( setSortDropdown(!sortDropdown)} /> ) : null}
{filteredLinks[0] ? ( filteredLinks.map((e, i) => { return ; }) ) : (

Nothing found.{" "} ¯\_(ツ)_/¯

)}
); }