(
#[prop()] key: String,
#[prop()] title: K,
#[prop()] tooltip: K1,
#[prop()] mobile: bool,
)
| 738 | #[tracing::instrument(level = "debug", skip(key, title, tooltip, mobile))] |
| 739 | #[component] |
| 740 | pub 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 |
| 746 | where |
| 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; |
nothing calls this directly
no test coverage detected