Skip to content

Commit 80682fd

Browse files
committed
Sort team members on the website
1 parent 871bada commit 80682fd

File tree

1 file changed

+39
-3
lines changed

1 file changed

+39
-3
lines changed

src/teams.rs

Lines changed: 39 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ use crate::utils::fetch;
22
use handlebars::{
33
Context, Handlebars, Helper, HelperResult, Output, RenderContext, RenderErrorReason,
44
};
5-
use percent_encoding::{AsciiSet, NON_ALPHANUMERIC, utf8_percent_encode};
6-
use rust_team_data::v1::{BASE_URL, Team, TeamKind, TeamMember, Teams};
5+
use percent_encoding::{utf8_percent_encode, AsciiSet, NON_ALPHANUMERIC};
6+
use rust_team_data::v1::{Team, TeamKind, TeamMember, Teams, BASE_URL};
77
use serde::Serialize;
88
use std::cmp::Reverse;
99
use std::collections::HashMap;
@@ -90,7 +90,7 @@ impl RustTeams {
9090
let teams = self.teams.clone();
9191

9292
// Find the main team first
93-
let main_team = teams
93+
let mut main_team = teams
9494
.iter()
9595
.filter(|team| {
9696
team.website_data.as_ref().map(|ws| ws.page.as_str()) == Some(team_page_name)
@@ -181,6 +181,42 @@ impl RustTeams {
181181
}
182182
}
183183

184+
fn sort_members(members: &mut [TeamMember]) {
185+
members.sort_by_key(|member| member.github.to_lowercase());
186+
members.sort_by(|a, b| {
187+
// First, sort by lead status (lead before non-lead)
188+
if a.is_lead != b.is_lead {
189+
b.is_lead.cmp(&a.is_lead)
190+
}
191+
else if a.roles.len() != b.roles.len() {
192+
// Then by role count (more roles before less roles)
193+
b.roles.cmp(&a.roles)
194+
} else {
195+
// Then by the role contents
196+
// If there is no role, will return equal, and thus use the original GitHub username
197+
// ordering
198+
a.roles.cmp(&b.roles)
199+
}
200+
});
201+
}
202+
203+
fn sort_team_members(team: &mut Team) {
204+
sort_members(&mut team.members);
205+
sort_members(&mut team.alumni);
206+
}
207+
208+
fn sort_teams(teams: &mut [Team]) {
209+
for team in teams {
210+
sort_team_members(team);
211+
}
212+
}
213+
214+
sort_team_members(&mut main_team);
215+
sort_teams(&mut subteams);
216+
sort_teams(&mut wgs);
217+
sort_teams(&mut project_groups);
218+
sort_teams(&mut other_teams);
219+
184220
Ok(PageData {
185221
team: main_team,
186222
zulip_domain: crate::ZULIP_DOMAIN,

0 commit comments

Comments
 (0)