@@ -2,10 +2,10 @@ import type { ReactElement } from 'react';
22import React from 'react' ;
33import classNames from 'classnames' ;
44import type { BasicSourceMember , Squad } from '../../graphql/sources' ;
5- import { SourcePermissions } from '../../graphql/sources' ;
5+ import { SourceMemberRole , SourcePermissions } from '../../graphql/sources' ;
66import { SquadHeaderBar } from './SquadHeaderBar' ;
77import { SquadImage } from './SquadImage' ;
8- import { FlexCentered , FlexCol } from '../utilities' ;
8+ import { FlexCentered , FlexCol , getRoleName } from '../utilities' ;
99import SharePostBar from './SharePostBar' ;
1010import { verifyPermission } from '../../graphql/squads' ;
1111import { Button , ButtonColor , ButtonVariant } from '../buttons/Button' ;
@@ -57,6 +57,8 @@ export function SquadPageHeader({
5757 ? formatMonthYearOnly ( squad . createdAt )
5858 : null ;
5959 const privilegedLength = squad . privilegedMembers ?. length || 0 ;
60+ const topMembers = squad . topMembers ?? [ ] ;
61+ const topMembersLength = topMembers . length ;
6062 const isMobile = useViewSize ( ViewSize . MobileL ) ;
6163 const listMax = isMobile
6264 ? MAX_VISIBLE_PRIVILEGED_MEMBERS_MOBILE
@@ -164,7 +166,12 @@ export function SquadPageHeader({
164166 </ Typography >
165167 < div className = "mt-2 flex flex-row items-center gap-3" >
166168 { squad . privilegedMembers ?. slice ( 0 , listMax ) . map ( ( member ) => (
167- < PrivilegedMemberItem key = { member . user . id } member = { member } />
169+ < PrivilegedMemberItem
170+ key = { member . user . id }
171+ user = { member . user }
172+ role = { member . role }
173+ badge = { getRoleName ( member . role ) }
174+ />
168175 ) ) }
169176 { privilegedLength > listMax && (
170177 < Button
@@ -181,6 +188,42 @@ export function SquadPageHeader({
181188 </ Button >
182189 ) }
183190 </ div >
191+ { topMembers . length > 0 && (
192+ < >
193+ < Typography
194+ bold
195+ className = "mt-4"
196+ color = { TypographyColor . Tertiary }
197+ tag = { TypographyTag . Span }
198+ type = { TypographyType . Caption1 }
199+ >
200+ Top members
201+ </ Typography >
202+ < div className = "mt-2 flex flex-row items-center gap-3" >
203+ { topMembers . slice ( 0 , listMax ) . map ( ( member ) => (
204+ < PrivilegedMemberItem
205+ key = { member . id }
206+ user = { member }
207+ role = { SourceMemberRole . Member }
208+ />
209+ ) ) }
210+ { topMembersLength > listMax && (
211+ < Button
212+ variant = { ButtonVariant . Tertiary }
213+ className = "aspect-square border border-border-subtlest-tertiary"
214+ onClick = { ( ) =>
215+ openModal ( {
216+ type : LazyModal . TopMembers ,
217+ props : { source : squad } ,
218+ } )
219+ }
220+ >
221+ +{ topMembersLength - listMax }
222+ </ Button >
223+ ) }
224+ </ div >
225+ </ >
226+ ) }
184227 < div className = { classNames ( 'w-full' , MAX_WIDTH ) } >
185228 < SquadStack squad = { squad } />
186229 </ div >
0 commit comments