diff --git a/src/app.rs b/src/app.rs index 4cbd394..d865b1c 100644 --- a/src/app.rs +++ b/src/app.rs @@ -547,6 +547,7 @@ pub enum SortKind { fn Browse() -> impl IntoView { let service_types = create_rw_signal(ServiceTypes::new()); provide_context(ServiceTypesSignal(service_types)); + let prev_service_types = create_rw_signal(ServiceTypes::new()); let (resolved, set_resolved) = create_signal(ResolvedServices::new()); let (sort_kind, set_sort_kind) = create_signal(SortKind::HostnameAsc); @@ -645,6 +646,24 @@ fn Browse() -> impl IntoView { async move { browse(input.clone()).await } }); + create_effect(move |_| { + let current = service_types.get(); + let previous = prev_service_types.get(); + + let old_set: HashSet<_> = previous.iter().cloned().collect(); + let new_set: HashSet<_> = current.iter().cloned().collect(); + + let added: Vec<_> = new_set.difference(&old_set).cloned().collect(); + + if !added.is_empty() && browsing.get_untracked() && service_type.get_untracked().is_empty() + { + log::info!("Added services while browsing all: {:?}, browsing", added); + browse_many_action.dispatch(added.clone()); + } + + prev_service_types.set(current.clone()); + }); + let on_browse_click = move |_| { browsing.set(true); let value = service_type.get_untracked();