From 5ee21ae27532c62a9143af2edaea302fd76007b9 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Thu, 26 Sep 2019 22:21:16 +0200 Subject: [PATCH] Staking performance updates (#1670) * Staking performance updates * More default on props --- packages/app-123code/src/SummaryBar.tsx | 4 +- packages/app-accounts/src/Overview.tsx | 6 +-- packages/app-council/src/Motions/index.tsx | 4 +- .../app-democracy/src/Overview/Proposals.tsx | 18 ++++---- .../src/Overview/Referendums.tsx | 23 +++++----- .../src/Overview/Parachains.tsx | 12 ++--- packages/app-staking/src/Overview/Summary.tsx | 4 +- packages/app-staking/src/index.tsx | 45 ++++++++++--------- .../app-treasury/src/Overview/Summary.tsx | 5 +-- packages/apps/src/Content/Status.tsx | 6 +-- 10 files changed, 61 insertions(+), 66 deletions(-) diff --git a/packages/app-123code/src/SummaryBar.tsx b/packages/app-123code/src/SummaryBar.tsx index 348b02577d..56191f265a 100644 --- a/packages/app-123code/src/SummaryBar.tsx +++ b/packages/app-123code/src/SummaryBar.tsx @@ -22,7 +22,7 @@ interface Props extends BareProps, I18nProps { staking_intentions?: AccountId[]; } -function SummaryBar ({ balances_totalIssuance, chain_bestNumber, chain_bestNumberLag, staking_intentions = [], session_validators = [] }: Props): React.ReactElement { +function SummaryBar ({ balances_totalIssuance, chain_bestNumber, chain_bestNumberLag, staking_intentions, session_validators }: Props): React.ReactElement { const { api, systemChain, systemName, systemVersion } = useContext(ApiContext); const [nextUp, setNextUp] = useState([]); @@ -52,7 +52,7 @@ function SummaryBar ({ balances_totalIssuance, chain_bestNumber, chain_bestNumbe {formatNumber(chain_bestNumber)} ({formatNumber(chain_bestNumberLag)} lag) { - session_validators.map((accountId, index): React.ReactNode => ( + (session_validators || []).map((accountId, index): React.ReactNode => ( )) } diff --git a/packages/app-accounts/src/Overview.tsx b/packages/app-accounts/src/Overview.tsx index f8ce3b179a..7b3e2d3e9e 100644 --- a/packages/app-accounts/src/Overview.tsx +++ b/packages/app-accounts/src/Overview.tsx @@ -36,11 +36,11 @@ async function queryLedger (): Promise { } } -function Overview ({ accounts = [], onStatusChange, t }: Props): React.ReactElement { +function Overview ({ accounts, onStatusChange, t }: Props): React.ReactElement { const [isCreateOpen, setIsCreateOpen] = useState(false); const [isImportOpen, setIsImportOpen] = useState(false); const [isQrOpen, setIsQrOpen] = useState(false); - const emptyScreen = !(isCreateOpen || isImportOpen || isQrOpen) && (Object.keys(accounts).length === 0); + const emptyScreen = !(isCreateOpen || isImportOpen || isQrOpen) && accounts && (Object.keys(accounts).length === 0); const _toggleCreate = (): void => setIsCreateOpen(!isCreateOpen); const _toggleImport = (): void => setIsImportOpen(!isImportOpen); @@ -105,7 +105,7 @@ function Overview ({ accounts = [], onStatusChange, t }: Props): React.ReactElem onStatusChange={onStatusChange} /> )} - {Object.keys(accounts).map((address): React.ReactNode => ( + {accounts && Object.keys(accounts).map((address): React.ReactNode => ( { +function Proposals ({ council_proposals, t }: Props): React.ReactElement { return ( } > - {council_proposals.map((hash: Hash): React.ReactNode => ( + {council_proposals && council_proposals.map((hash: Hash): React.ReactNode => ( { +function Proposals ({ democracy_publicProps, t }: Props): React.ReactElement { return ( - { - democracy_publicProps.map(([idNumber, proposal]): React.ReactNode => ( - - )) - } + {democracy_publicProps && democracy_publicProps.map(([idNumber, proposal]): React.ReactNode => ( + + ))} ); } diff --git a/packages/app-democracy/src/Overview/Referendums.tsx b/packages/app-democracy/src/Overview/Referendums.tsx index 76eee00335..d96a4ef46d 100644 --- a/packages/app-democracy/src/Overview/Referendums.tsx +++ b/packages/app-democracy/src/Overview/Referendums.tsx @@ -18,23 +18,22 @@ interface Props extends I18nProps { democracy_referendums?: Option[]; } -function Referendums ({ democracy_referendums = [], t }: Props): React.ReactElement { +function Referendums ({ democracy_referendums, t }: Props): React.ReactElement { return ( - { - democracy_referendums - .filter((opt): boolean => opt.isSome) - .map((opt): ReferendumInfoExtended => opt.unwrap()) - .map((referendum): React.ReactNode => ( - - )) + {democracy_referendums && democracy_referendums + .filter((opt): boolean => opt.isSome) + .map((opt): ReferendumInfoExtended => opt.unwrap()) + .map((referendum): React.ReactNode => ( + + )) } ); diff --git a/packages/app-parachains/src/Overview/Parachains.tsx b/packages/app-parachains/src/Overview/Parachains.tsx index e6de63a0fc..44495593ac 100644 --- a/packages/app-parachains/src/Overview/Parachains.tsx +++ b/packages/app-parachains/src/Overview/Parachains.tsx @@ -17,19 +17,15 @@ interface Props extends I18nProps { parachains_parachains?: BN[]; } -function Parachains ({ parachains_parachains = [], t }: Props): React.ReactElement { +function Parachains ({ parachains_parachains, t }: Props): React.ReactElement { return ( - { - parachains_parachains.length - ? parachains_parachains.map((paraId): React.ReactNode => - - ) - : null - } + {parachains_parachains && parachains_parachains.map((paraId): React.ReactNode => + + )} ); } diff --git a/packages/app-staking/src/Overview/Summary.tsx b/packages/app-staking/src/Overview/Summary.tsx index cbe0147f0c..3f41dd7162 100644 --- a/packages/app-staking/src/Overview/Summary.tsx +++ b/packages/app-staking/src/Overview/Summary.tsx @@ -24,9 +24,7 @@ interface Props extends I18nProps { next: string[]; } -function Summary (props: Props): React.ReactElement { - const { className, currentValidators, lastAuthor, lastBlock, next, style, staking_validatorCount, t } = props; - +function Summary ({ className, currentValidators, lastAuthor, lastBlock, next, style, staking_validatorCount, t }: Props): React.ReactElement { return ( ; } -function App ({ allAccounts, allStashesAndControllers = [[], []], bestNumber, className, currentValidatorsControllersV1OrStashesV2 = [], basePath, recentlyOnline: propsRecentlyOnline, t }: Props): React.ReactElement { - const [{ allControllers, allStashes, currentValidators, recentlyOnline }, setState] = useState({ +function App ({ allAccounts, allStashesAndControllers, bestNumber, className, currentValidatorsControllersV1OrStashesV2, basePath, recentlyOnline: propsRecentlyOnline, t }: Props): React.ReactElement { + const [{ allControllers, allStashes, currentValidators }, setState] = useState({ allControllers: [], allStashes: [], - currentValidators: [], - recentlyOnline: {} + currentValidators: [] }); + const [recentlyOnline, setRecentlyOnline] = useState>({}); useEffect((): void => { + const [_stashes, _controllers] = (allStashesAndControllers || [[], []]); + const _validators = currentValidatorsControllersV1OrStashesV2 || []; + setState({ - allControllers: allStashesAndControllers[1] + allControllers: _controllers .filter((optId): boolean => optId.isSome) .map((accountId): string => accountId.unwrap().toString()), - allStashes: allStashesAndControllers[0] + allStashes: _stashes .filter((): boolean => true) .map((accountId): string => accountId.toString()), - currentValidators: currentValidatorsControllersV1OrStashesV2.map((authorityId): string => + currentValidators: _validators.map((authorityId): string => authorityId.toString() - ), - recentlyOnline: { - ...(recentlyOnline || {}), - ...(propsRecentlyOnline || []).reduce( - (result: Record, authorityId): Record => ({ - ...result, - [authorityId.toString()]: bestNumber || createType('BlockNumber', new BN(0)) - }), - {} - ) - } + ) }); - }, [allStashesAndControllers, bestNumber, currentValidatorsControllersV1OrStashesV2]); + }, [allStashesAndControllers, currentValidatorsControllersV1OrStashesV2]); + + useEffect((): void => { + setRecentlyOnline({ + ...(recentlyOnline || {}), + ...(propsRecentlyOnline || []).reduce( + (result: Record, authorityId): Record => ({ + ...result, + [authorityId.toString()]: bestNumber || createType('BlockNumber', new BN(0)) + }), + {} + ) + }); + }, [bestNumber, propsRecentlyOnline]); const _renderComponent = (Component: React.ComponentType): () => React.ReactNode => { // eslint-disable-next-line react/display-name diff --git a/packages/app-treasury/src/Overview/Summary.tsx b/packages/app-treasury/src/Overview/Summary.tsx index 5c1297f519..a5f46f53bc 100644 --- a/packages/app-treasury/src/Overview/Summary.tsx +++ b/packages/app-treasury/src/Overview/Summary.tsx @@ -19,8 +19,7 @@ interface Props extends I18nProps { treasury_pot?: BN; } -function Summary (props: Props): React.ReactElement { - const { treasury_proposalCount = new BN(0), treasury_approvals = [] as BN[], treasury_pot = new BN(0), t } = props; +function Summary ({ treasury_proposalCount, treasury_approvals, treasury_pot, t }: Props): React.ReactElement { const value = treasury_pot ? treasury_pot.toString() : null; @@ -39,7 +38,7 @@ function Summary (props: Props): React.ReactElement { { value - ? `${formatBalance(value, false)}${treasury_pot.gtn(0) ? formatBalance.calcSi(value).value : ''}` + ? `${formatBalance(value, false)}${treasury_pot && treasury_pot.gtn(0) ? formatBalance.calcSi(value).value : ''}` : '-' } diff --git a/packages/apps/src/Content/Status.tsx b/packages/apps/src/Content/Status.tsx index 32095a79b6..7bcd2a0adc 100644 --- a/packages/apps/src/Content/Status.tsx +++ b/packages/apps/src/Content/Status.tsx @@ -27,7 +27,7 @@ interface Props extends I18nProps { let prevEventHash: string; -function Status ({ optionsAll, queueAction, stqueue, system_events = [], t, txqueue }: Props): React.ReactElement { +function Status ({ optionsAll, queueAction, stqueue, system_events, t, txqueue }: Props): React.ReactElement { useEffect((): void => { const eventHash = xxhashAsHex(stringToU8a(JSON.stringify(system_events))); @@ -38,7 +38,7 @@ function Status ({ optionsAll, queueAction, stqueue, system_events = [], t, txqu prevEventHash = eventHash; const addresses = optionsAll.account.map((account): string | null => account.value); - const statusses = system_events + const statusses = system_events && system_events .map(({ event: { data, method, section } }): ActionStatus | null => { if (section === 'balances' && method === 'Transfer') { const account = data[1].toString(); @@ -69,7 +69,7 @@ function Status ({ optionsAll, queueAction, stqueue, system_events = [], t, txqu }) .filter((item): boolean => !!item) as ActionStatus[]; - statusses.length && queueAction(statusses); + statusses && statusses.length && queueAction(statusses); }, [system_events]); return (