import { Search } from "@kobalte/core/search"; import { A, useNavigate } from "@solidjs/router"; import { IconRefresh, IconSearch } from "@tabler/icons-solidjs"; import { image } from "@tauri-apps/api"; import clsx from "clsx"; import Fuse from "fuse.js"; import { For, createEffect, createResource, createSignal } from "solid-js"; import { ImageViewer } from "./components/ImageViewer"; import { getUserImages } from "./network"; type UserImages = Awaited>; function App() { const [searchResults, setSearchResults] = createSignal< UserImages[number]["Text"] >([]); const [images] = createResource(getUserImages); const nav = useNavigate(); let fuze = new Fuse[number]>([], { keys: ["Text.ImageText"], }); // TODO: there's probably a better way? createEffect(() => { const userImages = images(); console.log(userImages); if (userImages == null) { return; } const imageText = userImages.flatMap((i) => i.Text ?? []); fuze = new Fuse(imageText, { keys: ["ImageText"], threshold: 0.3, }); }); const onInputChange = (query: string) => { // TODO: we can migrate this searching to Rust, so we don't abuse the main thread. // But, it's not too bad as is. setSearchResults(fuze.search(query).flatMap((s) => s.item)); }; return (
{ if (item?.ImageID == null) { console.error("ImageID was null"); return; } nav(`/image/${item.ImageID}`); }} optionValue="ID" optionLabel="ImageText" placeholder="Search for stuff..." itemComponent={(props) => ( {props.item.rawValue.ImageText ?? ""} )} > } > e.preventDefault()} > 😬 No emoji found
{/*
Emoji selected: {emoji()?.emoji} {emoji()?.name}
*/}
{/*
*/} {/* {JSON.stringify(images())} */} {(image) => ( )}
footer
); } export default App;