Skip to content

Commit 4bea9bc

Browse files
committed
FX
1 parent 06f24c3 commit 4bea9bc

File tree

1 file changed

+29
-3
lines changed
  • krokiet/src/model_operations

1 file changed

+29
-3
lines changed

krokiet/src/model_operations/mod.rs

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -101,10 +101,9 @@ pub struct CheckedGroupItemsInfo {
101101
pub number_of_groups_with_all_items_checked: u64,
102102
}
103103

104-
// TODO - this will be broken for models with reference folders
105104
fn get_checked_group_info_from_model(model: &ModelRc<MainListModel>) -> CheckedItemsInfo {
106105
if model.iter().next().is_none() {
107-
// Here I could panic, but i think that it is still possbile to go here, without doing anything wrong
106+
// Here I could panic, but i think that it is still possible to go here, without doing anything wrong
108107
return CheckedItemsInfo {
109108
checked_items_number: 0,
110109
groups_with_checked_items: None,
@@ -118,11 +117,13 @@ fn get_checked_group_info_from_model(model: &ModelRc<MainListModel>) -> CheckedI
118117
let mut current_group_all_checked = true;
119118
let mut group_with_selected_item = false;
120119

121-
// TODO Maybe a little useless, check if really needed
120+
// TODO Maybe collecting is a little useless, check if really needed
122121
let model_collected = model.iter().collect::<Vec<_>>();
123122
assert!(model_collected[0].header_row);
124123
assert!(!model_collected.last().expect("Is not empty").header_row);
125124

125+
let is_reference_folder = model_collected[0].filled_header_row;
126+
126127
for item in model_collected.iter().skip(1) {
127128
if item.header_row {
128129
if current_group_all_checked {
@@ -150,6 +151,11 @@ fn get_checked_group_info_from_model(model: &ModelRc<MainListModel>) -> CheckedI
150151
groups_with_checked_items += 1;
151152
}
152153
}
154+
if is_reference_folder {
155+
// In reference folders, this warning is not needed, because it only would make
156+
// sense, when also header would be available to be checked, which is not possible
157+
number_of_groups_with_all_items_checked = 0;
158+
}
153159

154160
CheckedItemsInfo {
155161
checked_items_number,
@@ -311,5 +317,25 @@ mod tests {
311317
assert_eq!(result.checked_items_number, 3);
312318
assert_eq!(groups_info.groups_with_checked_items, 2);
313319
assert_eq!(groups_info.number_of_groups_with_all_items_checked, 1);
320+
321+
let mut items = get_model_vec(8);
322+
items[0].header_row = true;
323+
items[0].filled_header_row = true;
324+
items[1].checked = true;
325+
items[2].checked = true;
326+
items[3].checked = false;
327+
items[4].header_row = true;
328+
items[4].filled_header_row = true;
329+
items[5].checked = true;
330+
items[6].header_row = true;
331+
items[6].filled_header_row = true;
332+
items[7].checked = false;
333+
334+
let model = ModelRc::new(VecModel::from(items));
335+
let result = get_checked_group_info_from_model(&model);
336+
let groups_info = result.groups_with_checked_items.unwrap();
337+
assert_eq!(result.checked_items_number, 3);
338+
assert_eq!(groups_info.groups_with_checked_items, 2);
339+
assert_eq!(groups_info.number_of_groups_with_all_items_checked, 0);
314340
}
315341
}

0 commit comments

Comments
 (0)