diff options
author | polwex <polwex@sortug.com> | 2025-06-15 01:44:45 +0700 |
---|---|---|
committer | polwex <polwex@sortug.com> | 2025-06-15 01:44:45 +0700 |
commit | 69312f5133734237edaea6ca29e2de9bf3203050 (patch) | |
tree | 7fee98735e5701cacb4aba87cfd307f0e1fb505a /bs5/universal/native/shared/SearchField.re | |
parent | f13574dc6661dba88a64580942f0c62cd42f63d7 (diff) |
checkpoint here...
Diffstat (limited to 'bs5/universal/native/shared/SearchField.re')
-rw-r--r-- | bs5/universal/native/shared/SearchField.re | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/bs5/universal/native/shared/SearchField.re b/bs5/universal/native/shared/SearchField.re new file mode 100644 index 0000000..5ab888d --- /dev/null +++ b/bs5/universal/native/shared/SearchField.re @@ -0,0 +1,40 @@ +[@warning "-26-27"]; + +open Melange_json.Primitives; + +[@react.client.component] +let make = (~searchText: string, ~selectedId: option(int), ~isEditing: bool) => { + let {navigate, _}: ClientRouter.t = ClientRouter.useRouter(); + let (text, setText) = RR.useStateValue(searchText); + let (isSearching, startSearching) = React.useTransition(); + + let onSubmit = event => { + React.Event.Form.preventDefault(event); + }; + + let%browser_only onChange = event => { + let target = React.Event.Form.target(event); + let nextText = target##value; + setText(nextText); + startSearching(() => + navigate({ + searchText: Some(nextText), + selectedId, + isEditing, + }) + ); + }; + + <form className="search" role="search" onSubmit> + <label className="offscreen mr-4" htmlFor="sidebar-search-input"> + <Text> "Search for a note by title" </Text> + </label> + <InputText + id="sidebar-search-input" + placeholder="Search" + value=text + onChange + /> + <Spinner active=isSearching /> + </form>; +}; |