MCPcopy Create free account
hub / github.com/Moosync/Moosync / DropdownPref

Function DropdownPref

src/components/prefs/components.rs:740–831  ·  view source on GitHub ↗
(
    #[prop()] key: String,
    #[prop()] title: K,
    #[prop()] tooltip: K1,
    #[prop()] mobile: bool,
)

Source from the content-addressed store, hash-verified

738#[tracing::instrument(level = "debug", skip(key, title, tooltip, mobile))]
739#[component]
740pub fn DropdownPref<K, H, K1, H1>(
741 #[prop()] key: String,
742 #[prop()] title: K,
743 #[prop()] tooltip: K1,
744 #[prop()] mobile: bool,
745) -> impl IntoView
746where
747 K: Fn() -> H + Send + Sync + 'static,
748 H: IntoView + Copy + 'static,
749 K1: Fn() -> H1 + Send + Sync + 'static,
750 H1: IntoView + Copy + 'static,
751{
752 let ui_store = expect_context::<RwSignal<UiStore>>();
753 let is_mobile = create_read_slice(ui_store, |u| u.get_is_mobile()).get();
754 if is_mobile && !mobile {
755 return ().into_any();
756 }
757
758 let should_write = RwSignal::new(false);
759 let pref_value = RwSignal::<Vec<CheckboxPreference>>::new(Default::default());
760 let pref_key = key;
761 load_selective(pref_key.clone(), pref_value.write_only());
762
763 Effect::new(move || {
764 let value = pref_value.get();
765 if !should_write.get_untracked() {
766 untrack(|| should_write.set(true));
767 return;
768 }
769
770 save_selective(pref_key.clone(), value.clone());
771 });
772
773 let selected = create_read_slice(pref_value, |v| {
774 v.iter().find(|i| i.enabled).map(|v| v.key.clone())
775 });
776
777 view! {
778 <div class="container-fluid mt-4">
779 <div class="row no-gutters">
780 <div class="col-auto align-self-center title d-flex preference-title">
781 {title()}
782 </div>
783 <div class="col-auto ml-2">
784 <Tooltip>{tooltip()}</Tooltip>
785 </div>
786 </div>
787
788 <div class="row no-gutters">
789 <div class="col-auto">
790 <select
791 class="dropdown-list"
792 on:change=move |ev| {
793 let value = event_target_value(&ev);
794 pref_value
795 .update(|v| {
796 for item in v {
797 item.enabled = item.key == value;

Callers

nothing calls this directly

Calls 6

load_selectiveFunction · 0.85
save_selectiveFunction · 0.85
getMethod · 0.80
get_is_mobileMethod · 0.80
cloneMethod · 0.80
setMethod · 0.80

Tested by

no test coverage detected