Fix element list updates #21

Closed
Vectornaut wants to merge 2 commits from outline-update-fix into main
3 changed files with 16 additions and 7 deletions

View File

@ -148,6 +148,9 @@ pub fn AddRemove() -> View {
assembly.elements_by_id.update(|elts_by_id| elts_by_id.clear());
state.selection.update(|sel| sel.clear());
// increment assembly serial number
state.assembly_serial.set_fn_silent(|serial| serial.wrapping_add(1));
// load assembly
match name.as_str() {
"general" => load_gen_assemb(assembly),

View File

@ -15,6 +15,7 @@ use outline::Outline;
#[derive(Clone)]
struct AppState {
assembly: Assembly,
assembly_serial: Signal<u32>,
selection: Signal<FxHashSet<ElementKey>>
}
@ -22,6 +23,7 @@ impl AppState {
fn new() -> AppState {
AppState {
assembly: Assembly::new(),
assembly_serial: create_signal(0),
selection: create_signal(FxHashSet::default())
}
}

View File

@ -180,11 +180,15 @@ pub fn Outline() -> View {
// list the elements alphabetically by ID
let element_list = state.assembly.elements.map(
|elts| elts
.clone()
.into_iter()
.sorted_by_key(|(_, elt)| elt.id.clone())
.collect()
move |elts| {
let asm_serial = state.assembly_serial.get_untracked();
elts
.clone()
.into_iter()
.sorted_by_key(|(_, elt)| elt.id.clone())
.map(|(key, elt)| (asm_serial, key, elt))
.collect()
}
);
view! {
@ -197,10 +201,10 @@ pub fn Outline() -> View {
) {
Keyed(
list=element_list,
view=|(key, elt)| view! {
view=|(_, key, elt)| view! {
ElementOutlineItem(key=key, element=elt)
},
key=|(key, _)| key.clone()
key=|(asm_serial, key, _)| (asm_serial.clone(), key.clone())
)
}
}