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
use super::{ListClass, ListItemClass};
use crate::{
    view::View,
    views::{
        self, container, Decorators, VirtualDirection, VirtualItemSize, VirtualList, VirtualVector,
    },
};
use std::hash::Hash;

pub fn virtual_list<T, IF, I, KF, K, VF, V>(
    direction: VirtualDirection,
    item_size: VirtualItemSize<T>,
    each_fn: IF,
    key_fn: KF,
    view_fn: VF,
) -> VirtualList<T>
where
    T: 'static,
    IF: Fn() -> I + 'static,
    I: VirtualVector<T>,
    KF: Fn(&T) -> K + 'static,
    K: Eq + Hash + 'static,
    VF: Fn(T) -> V + 'static,
    V: View + 'static,
{
    views::virtual_list(direction, item_size, each_fn, key_fn, move |e| {
        container(view_fn(e))
            .class(ListItemClass)
            .style(move |s| match direction {
                VirtualDirection::Horizontal => s.flex_row(),
                VirtualDirection::Vertical => s.flex_col(),
            })
    })
    .class(ListClass)
}