diff --git a/packages/page-society/src/Overview/Member.tsx b/packages/page-society/src/Overview/Member.tsx index 26c48f84bf..8371e4ac86 100644 --- a/packages/page-society/src/Overview/Member.tsx +++ b/packages/page-society/src/Overview/Member.tsx @@ -47,7 +47,7 @@ function renderJSXPayouts (bestNumber: BN, payouts: [BlockNumber, Balance][]): J )); } -function Member ({ bestNumber, className = '', value: { isCandidateVoter, isFounder, isHead, isSkeptic, member: { accountId, isDefenderVoter, isSuspended, payouts, strikes } } }: Props): React.ReactElement { +function Member ({ bestNumber, className = '', value: { isCandidateVoter, isFounder, isHead, isSkeptic, isWarned, member: { accountId, isDefenderVoter, isSuspended, payouts, strikes } } }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); const canvasRef = useRef(null); @@ -99,6 +99,12 @@ function Member ({ bestNumber, className = '', value: { isCandidateVoter, isFoun label={t('voted')} /> )} + {isWarned && ( + ('strikes')} + /> + )} {isSuspended && ( !info.hasDefender || !member.accountId.eq(info.defender)) .map((member): MapMember => ({ @@ -33,32 +76,13 @@ function getMapMembers (members: DeriveSocietyMember[], skeptics: string[], vote isFounder: info.founder?.eq(member.accountId), isHead: info.head?.eq(member.accountId), isSkeptic: skeptics.includes(member.accountId.toString()), + isWarned: member.strikes.gt(warnStrikes), key: member.accountId.toString(), member })) - .sort((a, b) => b.member.payouts.length - a.member.payouts.length) - .sort((a, b) => - b.isCandidateVoter || b.member.isDefenderVoter - ? 1 - : a.isCandidateVoter || a.member.isDefenderVoter - ? -1 - : 0 - ) - .sort((a, b) => - a.isHead - ? -1 - : b.isHead - ? 1 - : a.isFounder - ? -1 - : b.isFounder - ? 1 - : b.isSkeptic - ? 1 - : a.isSkeptic - ? -1 - : 0 - ); + .sort(({ member: a }, { member: b }) => (b.payouts.length - a.payouts.length) || b.strikes.cmp(a.strikes)) + .sort(secondarySort) + .sort(finalSort); } function SocietyApp ({ basePath, className }: Props): React.ReactElement { @@ -72,9 +96,9 @@ function SocietyApp ({ basePath, className }: Props): React.ReactElement const mapMembers = useMemo( () => members && info && skeptics && voters - ? getMapMembers(members, skeptics, voters, info) + ? getMapMembers(members, skeptics, voters, info, api.consts.society.maxStrikes.mul(BN_TWO).div(BN_THREE)) : undefined, - [info, members, skeptics, voters] + [api, info, members, skeptics, voters] ); const items = useMemo(() => [ diff --git a/packages/page-society/src/types.ts b/packages/page-society/src/types.ts index 37328f60f1..b84a93abc0 100644 --- a/packages/page-society/src/types.ts +++ b/packages/page-society/src/types.ts @@ -9,6 +9,7 @@ export interface MapMember { isFounder?: boolean; isHead?: boolean; isSkeptic?: boolean; + isWarned: boolean; key: string; member: DeriveSocietyMember; }