import type { Component, JSX } from "solid-js"; import { createEffect } from "solid-js"; import { search, setSearch, count } from "@stores/searchStore"; import * as utils from "@utils/history"; import "./SearchInput.scss"; type UiStringsType = { "input.search": string }; type SearchInputProps = { i18n: UiStringsType }; 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.trim().toLocaleLowerCase(); 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 (
{count()}
); }; export default SearchInput;