MCPcopy Create free account
hub / github.com/DioxusLabs/dioxus-components / SelectMulti

Function SelectMulti

primitives/src/select/components/select.rs:301–347  ·  view source on GitHub ↗
(props: SelectMultiProps<T>)

Source from the content-addressed store, hash-verified

299/// - `data-state`: Indicates the current state of the select. Values are `open` or `closed`.
300#[component]
301pub fn SelectMulti<T: Clone + PartialEq + 'static>(props: SelectMultiProps<T>) -> Element {
302 let (multi_values, set_multi_internal) =
303 use_controlled(props.values, props.default_values, props.on_values_change);
304
305 let values = use_memo(move || {
306 multi_values()
307 .into_iter()
308 .map(RcPartialEqValue::new)
309 .collect()
310 });
311 let set_value = use_callback(move |value: RcPartialEqValue| {
312 let value_t = value
313 .as_ref::<T>()
314 .unwrap_or_else(|| panic!("The values of select and all options must match types"))
315 .clone();
316 let mut current = multi_values();
317 if let Some(pos) = current.iter().position(|v| v == &value_t) {
318 current.remove(pos);
319 } else {
320 current.push(value_t);
321 }
322 set_multi_internal.call(current);
323 });
324
325 let open = use_select_root(
326 values,
327 set_value,
328 SelectionMode::Multiple,
329 props.disabled,
330 props.roving_loop,
331 Controlled {
332 value: props.open,
333 default: props.default_open,
334 on_change: props.on_open_change,
335 },
336 props.typeahead_timeout,
337 );
338
339 rsx! {
340 div {
341 "data-state": if open() { "open" } else { "closed" },
342 "data-disabled": (props.disabled)(),
343 ..props.attributes,
344 {props.children}
345 }
346 }
347}

Callers

nothing calls this directly

Calls 4

use_controlledFunction · 0.85
use_select_rootFunction · 0.85
iterMethod · 0.80
removeMethod · 0.45

Tested by

no test coverage detected