use dioxus::prelude::*;
#[derive(Copy, Clone, PartialEq)]
pub struct UseStreams {
pub ids: Signal<Vec<u32>>,
pub add: Callback<(), u32>,
pub remove: Callback<u32>,
}
pub fn use_streams() -> UseStreams {
let mut next_id = use_signal(|| 0u32);
let mut ids = use_signal(Vec::<u32>::new);
let add = use_callback(move |()| {
let id = *next_id.peek();
next_id.set(id + 1);
ids.write().push(id);
id
});
let remove = use_callback(move |id: u32| {
ids.write().retain(|other| *other != id);
});
UseStreams { ids, add, remove }
}