1
mod account;
2
mod commodity;
3
mod component;
4
mod factory;
5
mod suggestion;
6
mod tag;
7

            
8
pub use account::AccountAutocomplete;
9
pub use commodity::CommodityAutocomplete;
10
pub use component::{Autocomplete, AutocompleteConfig, FetchMethod, build_cache_key};
11
pub use factory::create_autocomplete;
12
pub use suggestion::Suggestion;
13
pub use tag::{TagNameAutocomplete, TagValueAutocomplete};
14

            
15
use crate::data_attrs::AutocompleteAttr;
16
use wasm_bindgen::JsCast;
17

            
18
/// Initializes all autocomplete components that haven't been initialized yet.
19
pub fn init_all() {
20
    let Some(document) = web_sys::window().and_then(|w| w.document()) else {
21
        return;
22
    };
23

            
24
    let selector = format!(
25
        "[{}]:not([{}])",
26
        AutocompleteAttr::Type.as_str(),
27
        AutocompleteAttr::Initialized.as_str()
28
    );
29

            
30
    let Ok(wrappers) = document.query_selector_all(&selector) else {
31
        return;
32
    };
33

            
34
    for i in 0..wrappers.length() {
35
        let Some(wrapper) = wrappers.get(i) else {
36
            continue;
37
        };
38
        let Ok(element) = wrapper.dyn_into::<web_sys::Element>() else {
39
            continue;
40
        };
41

            
42
        let _ = create_autocomplete(&element);
43
        let _ = element.set_attribute(AutocompleteAttr::Initialized.as_str(), "true");
44
    }
45
}