1use gpui2::elements::div;
2use gpui2::style::StyleHelpers;
3use gpui2::{Element, IntoElement, ParentElement, ViewContext};
4
5use crate::{theme, Avatar};
6
7#[derive(Element)]
8pub struct Facepile {
9 players: Vec<Avatar>,
10}
11
12pub fn facepile<P: Iterator<Item = Avatar>>(players: P) -> Facepile {
13 Facepile {
14 players: players.collect(),
15 }
16}
17
18impl Facepile {
19 fn render<V: 'static>(&mut self, _: &mut V, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
20 let theme = theme(cx);
21 let player_count = self.players.len();
22 let player_list = self.players.iter().enumerate().map(|(ix, player)| {
23 let isnt_last = ix < player_count - 1;
24 div()
25 .when(isnt_last, |div| div.neg_mr_1())
26 .child(player.clone())
27 });
28 div().p_1().flex().items_center().children(player_list)
29 }
30}