1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
// ----------------------------------------------------------------------------
#[derive(PartialEq, Clone, Debug, Default, strum::AsRefStr, strum::EnumIter)]
/// Grouping either by asset categories, or by assignee groups.
pub enum SubTreeGrouping {
    #[default]
    #[strum(serialize = "by Category")]
    ByCategory,
    #[strum(serialize = "by Assignees")]
    ByAssigneeGroup,
}

// ----------------------------------------------------------------------------
pub fn make_assignee_group_node_name(assignees: &Vec<String>, clip: usize) -> String {
    let len = assignees.len();
    match len.cmp(&clip) {
        std::cmp::Ordering::Greater => {
            format!("{} {}", &assignees[..clip].join(", "), "[...]")
        }
        _ => assignees[..len].join(", "),
    }
}

// ----------------------------------------------------------------------------
mod tests {
    // use super::*;
    // #[test]
    // fn make_tree() {
    // 	let trees = AssetCollection::default().make_category_trees("APO");
    // 	eprintln!("{:?}", trees);
    // }
    // #[test]
    // fn make_assignee_group_trees() {
    // 	let asset_coll = AssetCollection::default();
    // 	let results = asset_coll.assignee_group_trees("APO");
    // 	results
    // 		.into_iter()
    // 		.map(|o| {
    // 			eprintln!("{:?}", o);
    // 			o
    // 		})
    // 		.collect::<Vec<AssetTree>>();
    // }
}