@@ -2,8 +2,8 @@ use crate::utils::fetch;
22use 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 } ;
77use serde:: Serialize ;
88use std:: cmp:: Reverse ;
99use 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