use std::rc::Rc;
use vertigo::render::collection::{Collection, CollectionKey};
use vertigo::{Value, transaction};
#[derive(Clone, PartialEq, Debug, Default)]
struct Item {
id: i32,
value: i32,
}
struct ItemKey;
impl CollectionKey for ItemKey {
type Key = i32;
type Value = Item;
fn get_key(val: &Item) -> i32 {
val.id
}
}
#[test]
fn test_collection_new_in_refresh() {
let val = Value::new(1);
let comp = val.to_computed().map(|v| {
println!("Computing map for {}", v);
let list = Rc::new(vec![Item { id: v, value: 10 }]);
let _col: Collection<ItemKey> = Collection::new(list);
v
});
let _sub = comp.subscribe(|_| {});
println!("Triggering update...");
transaction(|_| {
val.set(2);
});
println!("Update triggered.");
}
#[test]
fn test_duplicate_keys_in_refresh() {
let val = Value::new(1);
let comp = val.to_computed().map(|v| {
println!("Computing map for {}", v);
let list = Rc::new(vec![
Item { id: 100, value: 1 },
Item { id: 100, value: 2 }, ]);
let _col: Collection<ItemKey> = Collection::new(list);
v
});
let _sub = comp.subscribe(|_| {});
println!("Triggering update...");
transaction(|_| {
val.set(2);
});
println!("Update triggered.");
}