Lines
0 %
Functions
Branches
100 %
use std::cell::RefCell;
use std::rc::Rc;
use web_sys::Element;
use super::account::get_input_by_id;
use super::component::{Autocomplete, AutocompleteConfig, attach_autocomplete};
use crate::data_attrs::{AutocompleteAttr, selectors};
use crate::types::TagSuggestion;
pub struct TagNameAutocomplete;
impl TagNameAutocomplete {
#[must_use]
pub fn attach(wrapper: Element) -> Option<()> {
let document = web_sys::window()?.document()?;
let fetch_url = wrapper
.get_attribute(AutocompleteAttr::FetchUrl.as_str())
.unwrap_or_else(|| "/api/tags/transaction/names".to_string());
let display_input_id = wrapper.get_attribute(AutocompleteAttr::DisplayInput.as_str())?;
let hidden_input_id = wrapper.get_attribute(AutocompleteAttr::HiddenInput.as_str());
let display_input = get_input_by_id(&document, &display_input_id)?;
let hidden_input = hidden_input_id.and_then(|id| get_input_by_id(&document, &id));
let container = wrapper
.query_selector(selectors::RESULTS_CONTAINER)
.ok()??;
let autocomplete = Autocomplete::<TagSuggestion>::new(
display_input.clone(),
hidden_input.unwrap_or_else(|| display_input.clone()),
None,
container,
);
let config = AutocompleteConfig::get(fetch_url);
let ac = Rc::new(RefCell::new(autocomplete));
attach_autocomplete(ac, config);
Some(())
}
pub struct TagValueAutocomplete;
impl TagValueAutocomplete {
.unwrap_or_else(|| "/api/tags/transaction/values".to_string());
let depends_on_id = wrapper.get_attribute(AutocompleteAttr::DependsOn.as_str());
let mut config = AutocompleteConfig::get(fetch_url);
if let Some(dep_id) = depends_on_id
&& let Some(dep_input) = get_input_by_id(&document, &dep_id)
{
config = config.with_dependency(dep_input);