website refactor
This commit is contained in:
48
apps/website/lib/utilities/roster-utils.ts
Normal file
48
apps/website/lib/utilities/roster-utils.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import type { TeamMemberRole } from '@/components/teams/TeamRoster';
|
||||
|
||||
interface TeamMember {
|
||||
driver: {
|
||||
id: string;
|
||||
name: string;
|
||||
country: string;
|
||||
};
|
||||
role: TeamMemberRole;
|
||||
joinedAt: string;
|
||||
rating: number | null;
|
||||
overallRank: number | null;
|
||||
}
|
||||
|
||||
export function sortMembers(members: TeamMember[], sortBy: string) {
|
||||
function getRoleOrder(role: TeamMemberRole): number {
|
||||
switch (role) {
|
||||
case 'owner':
|
||||
return 0;
|
||||
case 'manager':
|
||||
return 1;
|
||||
case 'member':
|
||||
return 2;
|
||||
default:
|
||||
return 3;
|
||||
}
|
||||
}
|
||||
|
||||
const list = [...members];
|
||||
list.sort((a, b) => {
|
||||
switch (sortBy) {
|
||||
case 'rating': {
|
||||
const ratingA = a.rating ?? 0;
|
||||
const ratingB = b.rating ?? 0;
|
||||
return ratingB - ratingA;
|
||||
}
|
||||
case 'role': {
|
||||
return getRoleOrder(a.role) - getRoleOrder(b.role);
|
||||
}
|
||||
case 'name': {
|
||||
return a.driver.name.localeCompare(b.driver.name);
|
||||
}
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
});
|
||||
return list;
|
||||
}
|
||||
Reference in New Issue
Block a user