summaryrefslogtreecommitdiff
path: root/bs5/universal/native/shared/SearchField.re
blob: 5ab888d27fe8a0bb3507c33fcc277477eea19211 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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>;
};