import { IconSearch } from "@tabler/icons-solidjs"; import clsx from "clsx"; import Fuse from "fuse.js"; import { For, createEffect, createResource, createSignal } from "solid-js"; import { SearchCardEvent } from "./components/search-card/SearchCardEvent"; import { SearchCardLocation } from "./components/search-card/SearchCardLocation"; import { UserImage, getUserImages } from "./network"; import { getCardSize } from "./utils/getCardSize"; const getCardComponent = (item: UserImage) => { switch (item.type) { case "location": return ; case "event": return ; // case "Contact": // return ; // case "Website": // return ; // case "Note": // return ; // case "Receipt": // return ; default: return null; } }; function App() { const [searchResults, setSearchResults] = createSignal([]); const [searchQuery, setSearchQuery] = createSignal(""); const [selectedItem, setSelectedItem] = createSignal( null, ); const [data] = createResource(getUserImages); let fuze = new Fuse(data() ?? [], { keys: [{ name: "title", weight: 2 }, "data"], threshold: 0.4, }); createEffect(() => { fuze = new Fuse(data() ?? [], { keys: [{ name: "data.Name", weight: 2 }], threshold: 0.4, }); }); const onInputChange = (event: InputEvent) => { const query = (event.target as HTMLInputElement).value; setSearchQuery(query); setSearchResults(fuze.search(query).map((s) => s.item)); }; return ( <>
{searchResults().length > 0 ? (
{(item) => (
setSelectedItem(item) } onKeyDown={(e) => { if (e.key === "Enter") { setSelectedItem(item); } }} class={clsx( "h-[144px] border relative border-neutral-200 cursor-pointer overflow-hidden rounded-xl", { "col-span-3": getCardSize( item.type, ) === "1/1", "col-span-6": getCardSize( item.type, ) === "2/1", }, )} > {item.data.Name} {getCardComponent(item)}
)}
) : searchQuery() !== "" ? (
No results found
) : null}
footer
); } export default App;