diff --git a/.123trigger b/.123trigger index 68be96ebb4..c1bdaca889 100644 --- a/.123trigger +++ b/.123trigger @@ -1,3 +1,3 @@ -18 +19 0.45.2 0.71.2 diff --git a/packages/page-society/src/Overview/Bid.tsx b/packages/page-society/src/Candidates/Bid.tsx similarity index 100% rename from packages/page-society/src/Overview/Bid.tsx rename to packages/page-society/src/Candidates/Bid.tsx diff --git a/packages/page-society/src/Overview/BidNew.tsx b/packages/page-society/src/Candidates/BidNew.tsx similarity index 100% rename from packages/page-society/src/Overview/BidNew.tsx rename to packages/page-society/src/Candidates/BidNew.tsx diff --git a/packages/page-society/src/Overview/Bids.tsx b/packages/page-society/src/Candidates/Bids.tsx similarity index 100% rename from packages/page-society/src/Overview/Bids.tsx rename to packages/page-society/src/Candidates/Bids.tsx diff --git a/packages/page-society/src/Overview/Candidate.tsx b/packages/page-society/src/Candidates/Candidate.tsx similarity index 97% rename from packages/page-society/src/Overview/Candidate.tsx rename to packages/page-society/src/Candidates/Candidate.tsx index 204178a795..f5d8abcf13 100644 --- a/packages/page-society/src/Overview/Candidate.tsx +++ b/packages/page-society/src/Candidates/Candidate.tsx @@ -12,8 +12,8 @@ import { AddressSmall } from '@polkadot/react-components'; import { useApi, useCall } from '@polkadot/react-hooks'; import { FormatBalance } from '@polkadot/react-query'; +import Votes from '../Overview/Votes'; import CandidateVoting from './CandidateVoting'; -import Votes from './Votes'; interface Props { allMembers: string[]; diff --git a/packages/page-society/src/Overview/CandidateVoting.tsx b/packages/page-society/src/Candidates/CandidateVoting.tsx similarity index 100% rename from packages/page-society/src/Overview/CandidateVoting.tsx rename to packages/page-society/src/Candidates/CandidateVoting.tsx diff --git a/packages/page-society/src/Overview/Candidates.tsx b/packages/page-society/src/Candidates/Candidates.tsx similarity index 100% rename from packages/page-society/src/Overview/Candidates.tsx rename to packages/page-society/src/Candidates/Candidates.tsx diff --git a/packages/page-society/src/Candidates/index.tsx b/packages/page-society/src/Candidates/index.tsx new file mode 100644 index 0000000000..62e5aa106c --- /dev/null +++ b/packages/page-society/src/Candidates/index.tsx @@ -0,0 +1,47 @@ +// Copyright 2017-2021 @polkadot/app-society authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import React from 'react'; + +import { Button } from '@polkadot/react-components'; +import { useToggle } from '@polkadot/react-hooks'; + +import { useTranslation } from '../translate'; +import BidNew from './BidNew'; +import Bids from './Bids'; +import AllCandidates from './Candidates'; + +interface Props { + allMembers: string[]; + className?: string; + isMember: boolean; + ownMembers: string[]; +} + +function Candidates ({ allMembers, className = '', isMember, ownMembers }: Props): React.ReactElement { + const { t } = useTranslation(); + const [isBidOpen, toggleBidOpen] = useToggle(); + + return ( +
+ +
+ ); +} + +export default React.memo(Candidates); diff --git a/packages/page-society/src/Overview/Members.tsx b/packages/page-society/src/Overview/Members.tsx index 5695694961..6f5ae6a0f7 100644 --- a/packages/page-society/src/Overview/Members.tsx +++ b/packages/page-society/src/Overview/Members.tsx @@ -28,19 +28,29 @@ function Members ({ className = '', info }: Props): React.ReactElement { ]); const filtered = useMemo( - () => (members || []).filter((member) => !info || !info.hasDefender || !member.accountId.eq(info.defender)), + () => members && info + ? members + .filter((member) => !info.hasDefender || !member.accountId.eq(info.defender)) + .sort((a, b) => + !info.head?.eq(a.accountId) + ? 1 + : !info.head?.eq(b.accountId) + ? -1 + : 0 + ) + : undefined, [info, members] ); return ( ('No active members')} + empty={info && filtered && t('No active members')} header={headerRef.current} > - {filtered.map((member): React.ReactNode => ( + {info && filtered && filtered.map((member): React.ReactNode => ( diff --git a/packages/page-society/src/Overview/index.tsx b/packages/page-society/src/Overview/index.tsx index 4e9d290b0e..6edc6218b6 100644 --- a/packages/page-society/src/Overview/index.tsx +++ b/packages/page-society/src/Overview/index.tsx @@ -6,54 +6,31 @@ import type { DeriveSociety } from '@polkadot/api-derive/types'; import React from 'react'; import styled from 'styled-components'; -import { Button } from '@polkadot/react-components'; -import { useApi, useCall, useToggle } from '@polkadot/react-hooks'; +import { useApi, useCall } from '@polkadot/react-hooks'; -import { useTranslation } from '../translate'; -import useMembers from '../useMembers'; -import BidNew from './BidNew'; -import Bids from './Bids'; -import Candidates from './Candidates'; import Defender from './Defender'; import Members from './Members'; import Summary from './Summary'; interface Props { className?: string; + isMember: boolean; + ownMembers: string[]; } -function Overview ({ className }: Props): React.ReactElement { - const { t } = useTranslation(); +function Overview ({ className, isMember, ownMembers }: Props): React.ReactElement { const { api } = useApi(); const info = useCall(api.derive.society.info); - const { allMembers, isMember, ownMembers } = useMembers(); - const [isBidOpen, toggleBidOpen] = useToggle(); return (
- -
); } diff --git a/packages/page-society/src/index.tsx b/packages/page-society/src/index.tsx index 292cc1aaea..25192aa8ef 100644 --- a/packages/page-society/src/index.tsx +++ b/packages/page-society/src/index.tsx @@ -1,14 +1,16 @@ // Copyright 2017-2021 @polkadot/app-society authors & contributors // SPDX-License-Identifier: Apache-2.0 -import React, { useRef } from 'react'; +import React, { useMemo } from 'react'; import { Route, Switch } from 'react-router'; import { Tabs } from '@polkadot/react-components'; +import Candidates from './Candidates'; import Overview from './Overview'; import { useTranslation } from './translate'; import useCounter from './useCounter'; +import useMembers from './useMembers'; interface Props { basePath: string; @@ -19,25 +21,44 @@ export { useCounter }; function SocietyApp ({ basePath, className }: Props): React.ReactElement { const { t } = useTranslation(); + const candidateCount = useCounter(); + const { allMembers, isMember, ownMembers } = useMembers(); - const itemsRef = useRef([ + const items = useMemo(() => [ { isRoot: true, name: 'overview', text: t('Society overview') + }, + { + count: candidateCount, + name: 'candidates', + text: t('Candidates') } - ]); + ], [candidateCount, t]); return (
- + + + + + +
);