import type { Component, JSX } from "solid-js"; import { createEffect } from "solid-js"; import { search, setSearch } from "@stores/searchStore"; import * as utils from "@utils/history"; import "./SearchInput.scss"; type SearchInputProps = { count: number; placeholder?: string | undefined; }; const SearchInput: Component = (props) => { /** * Reset state and delete `search` param from url */ const resetSearch = () => { const url = utils.deleteParamFromUrl("search"); setSearch(""); history.replaceState(null, "", url); }; /** * Update state and set url param */ const onSearch: JSX.EventHandler = (e) => { const value = e.currentTarget.value; if (value.trim().length === 0) { resetSearch(); return; } const url = utils.setParamToUrl("search", value.trim()); history.replaceState(null, "", `${location.pathname}?${url}`); setSearch(value); }; /** * Set the signal state by reading the `search` parameter from the URL. */ createEffect(() => { const param = new URLSearchParams(location.search).get("search"); if (!param) { resetSearch(); return; } setSearch(param); }); return (
{props.count}
); }; export default SearchInput;