import FilterSearchDropdown from "@/components/FilterSearchDropdown"; import LinkCard from "@/components/LinkCard"; import SortLinkDropdown from "@/components/SortLinkDropdown"; 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 { ChangeEvent, useEffect, useState } from "react"; type SearchFilter = { name: boolean; url: boolean; title: 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, title: true, collection: true, tags: true, }); const [filterDropdown, setFilterDropdown] = useState(false); const [sortDropdown, setSortDropdown] = useState(false); const [sortBy, setSortBy] = useState(Sort.NameAZ); const [sortedLinks, setSortedLinks] = useState(links); const handleSortChange = (e: Sort) => { setSortBy(e); }; useEffect(() => { const linksArray = [ ...links.filter((link) => { if ( (searchFilter.name && link.name.toLowerCase().includes(routeQuery)) || (searchFilter.url && link.url.toLowerCase().includes(routeQuery)) || (searchFilter.title && link.title.toLowerCase().includes(routeQuery)) || (searchFilter.collection && link.collection.name.toLowerCase().includes(routeQuery)) || (searchFilter.tags && link.tags.some((tag) => tag.name.toLowerCase().includes(routeQuery) )) ) return true; }), ]; if (sortBy === Sort.NameAZ) setSortedLinks(linksArray.sort((a, b) => a.name.localeCompare(b.name))); else if (sortBy === Sort.TitleAZ) setSortedLinks(linksArray.sort((a, b) => a.title.localeCompare(b.title))); else if (sortBy === Sort.NameZA) setSortedLinks(linksArray.sort((a, b) => b.name.localeCompare(a.name))); else if (sortBy === Sort.TitleZA) setSortedLinks(linksArray.sort((a, b) => b.title.localeCompare(a.title))); else if (sortBy === Sort.DateNewestFirst) setSortedLinks( linksArray.sort( (a, b) => new Date(b.createdAt as string).getTime() - new Date(a.createdAt as string).getTime() ) ); else if (sortBy === Sort.DateOldestFirst) setSortedLinks( linksArray.sort( (a, b) => new Date(a.createdAt as string).getTime() - new Date(b.createdAt as string).getTime() ) ); }, [links, searchFilter, sortBy, 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}
{sortedLinks[0] ? ( sortedLinks.map((e, i) => { return ; }) ) : (

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

)}
); }