1use crate::prelude::*;
2use crate::{Avatar, Player};
3
4#[derive(RenderOnce)]
5pub struct Facepile {
6 players: Vec<Player>,
7}
8
9impl Component for Facepile {
10 type Rendered = Div;
11
12 fn render(self, cx: &mut WindowContext) -> Self::Rendered {
13 let player_count = self.players.len();
14 let player_list = self.players.iter().enumerate().map(|(ix, player)| {
15 let isnt_last = ix < player_count - 1;
16
17 div()
18 .when(isnt_last, |div| div.neg_mr_1())
19 .child(Avatar::new(player.avatar_src().to_string()))
20 });
21 div().p_1().flex().items_center().children(player_list)
22 }
23}
24
25impl Facepile {
26 pub fn new<P: Iterator<Item = Player>>(players: P) -> Self {
27 Self {
28 players: players.collect(),
29 }
30 }
31}
32
33use gpui::{Div, RenderOnce};