From 76f600722a88907dcbbaecb7e5cba221bf6c34a2 Mon Sep 17 00:00:00 2001 From: David Corbitt Date: Wed, 16 Aug 2023 18:30:27 -0700 Subject: [PATCH] Sort project members by role --- .../projectSettings/MemberTable.tsx | 58 +++++++++++-------- 1 file changed, 34 insertions(+), 24 deletions(-) diff --git a/app/src/components/projectSettings/MemberTable.tsx b/app/src/components/projectSettings/MemberTable.tsx index 707e098..392785d 100644 --- a/app/src/components/projectSettings/MemberTable.tsx +++ b/app/src/components/projectSettings/MemberTable.tsx @@ -1,4 +1,4 @@ -import { useState } from "react"; +import { useMemo, useState } from "react"; import { Table, Thead, @@ -44,6 +44,15 @@ const MemberTable = () => { [selectedProject?.id, cancelInvitationMutation], ); + const sortedMembers = useMemo(() => { + if (!selectedProject?.projectUsers) return []; + return selectedProject.projectUsers.sort((a, b) => { + if (a.role === b.role) return a.createdAt < b.createdAt ? -1 : 1; + // Take advantage of fact that ADMIN is alphabetically before MEMBER + return a.role < b.role ? -1 : 1; + }); + }, [selectedProject?.projectUsers]); + return ( <> @@ -70,30 +79,31 @@ const MemberTable = () => { }, }} > - {selectedProject?.projectUsers.map((member) => { - return ( - - - - - {selectedProject.role === "ADMIN" && ( - + - )} - - ); - })} + + + {selectedProject.role === "ADMIN" && ( + + )} + + ); + })} {selectedProject?.projectUserInvitations?.map((invitation) => { return (
- {member.user.name} - {member.user.email}{member.role} - {member.user.id !== session?.user?.id && - member.user.id !== selectedProject.personalProjectUserId && ( - } - onClick={() => setMemberToRemove(member.user)} - /> - )} + {selectedProject && + sortedMembers.map((member) => { + return ( +
+ {member.user.name}
{member.user.email}{member.role} + {member.user.id !== session?.user?.id && + member.user.id !== selectedProject.personalProjectUserId && ( + } + onClick={() => setMemberToRemove(member.user)} + /> + )} +