diff --git a/packages/page-accounts/src/Accounts/Account.tsx b/packages/page-accounts/src/Accounts/Account.tsx index f3bcca73f6..e8e2982c49 100644 --- a/packages/page-accounts/src/Accounts/Account.tsx +++ b/packages/page-accounts/src/Accounts/Account.tsx @@ -93,7 +93,7 @@ function Account ({ account: { address, meta }, className = '', delegation, filt const api = useApi(); const { getLedger } = useLedger(); const bestNumber = useBestNumber(); - const balancesAll = useCall(api.api.derive.balances.all, [address]); + const balancesAll = useCall(api.api.derive.balances?.all, [address]); const democracyLocks = useCall(api.api.derive.democracy?.locks, [address]); const recoveryInfo = useCall(api.api.query.recovery?.recoverable, [address], transformRecovery); const multiInfos = useMultisigApprovals(address); diff --git a/packages/page-accounts/src/modals/InputValidateAmount.tsx b/packages/page-accounts/src/modals/InputValidateAmount.tsx index 73619f85f1..752735fbc8 100644 --- a/packages/page-accounts/src/modals/InputValidateAmount.tsx +++ b/packages/page-accounts/src/modals/InputValidateAmount.tsx @@ -22,7 +22,7 @@ interface Props { function ValidateAmount ({ amount, delegatingAccount, onError }: Props): React.ReactElement | null { const { t } = useTranslation(); const { api } = useApi(); - const delegatingAccountBalance = useCall(api.derive.balances.all, [delegatingAccount]); + const delegatingAccountBalance = useCall(api.derive.balances?.all, [delegatingAccount]); const [{ error, warning }, setResult] = useState({ error: null, warning: null }); useEffect((): void => { diff --git a/packages/page-accounts/src/modals/Transfer.tsx b/packages/page-accounts/src/modals/Transfer.tsx index 28d9fb82cd..f36652184b 100644 --- a/packages/page-accounts/src/modals/Transfer.tsx +++ b/packages/page-accounts/src/modals/Transfer.tsx @@ -51,7 +51,7 @@ function Transfer ({ className = '', onClose, recipientId: propRecipientId, send const [recipientId, setRecipientId] = useState(null); const [senderId, setSenderId] = useState(null); const [[, recipientPhish], setPhishing] = useState<[string | null, string | null]>([null, null]); - const balances = useCall(api.derive.balances.all, [propSenderId || senderId]); + const balances = useCall(api.derive.balances?.all, [propSenderId || senderId]); const accountInfo = useCall(api.query.system.account, [propSenderId || senderId]); useEffect((): void => { diff --git a/packages/page-addresses/src/Contacts/Address.tsx b/packages/page-addresses/src/Contacts/Address.tsx index f2bd8573cb..ae3bd047b9 100644 --- a/packages/page-addresses/src/Contacts/Address.tsx +++ b/packages/page-addresses/src/Contacts/Address.tsx @@ -34,7 +34,7 @@ function Address ({ address, className = '', filter, isFavorite, toggleFavorite const { theme } = useContext(ThemeContext); const api = useApi(); const info = useCall(api.api.derive.accounts.info, [address]); - const balancesAll = useCall(api.api.derive.balances.all, [address]); + const balancesAll = useCall(api.api.derive.balances?.all, [address]); const [tags, setTags] = useState([]); const [accName, setAccName] = useState(''); const [current, setCurrent] = useState(null); diff --git a/packages/page-bounties/src/hooks/useBalance.ts b/packages/page-bounties/src/hooks/useBalance.ts index a9943a6b10..b459bd61bc 100644 --- a/packages/page-bounties/src/hooks/useBalance.ts +++ b/packages/page-bounties/src/hooks/useBalance.ts @@ -9,5 +9,5 @@ import { useApi, useCall } from '@polkadot/react-hooks'; export function useBalance (accountId: string | null): Balance | undefined { const { api } = useApi(); - return useCall(api.derive.balances.all, [accountId])?.availableBalance; + return useCall(api.derive.balances?.all, [accountId])?.availableBalance; } diff --git a/packages/page-democracy/src/Overview/Referendum.tsx b/packages/page-democracy/src/Overview/Referendum.tsx index c2942303b2..af7b994cef 100644 --- a/packages/page-democracy/src/Overview/Referendum.tsx +++ b/packages/page-democracy/src/Overview/Referendum.tsx @@ -41,7 +41,7 @@ function Referendum ({ className = '', value: { allAye, allNay, image, imageHash const { api } = useApi(); const { allAccounts } = useAccounts(); const bestNumber = useBestNumber(); - const totalIssuance = useCall(api.query.balances.totalIssuance); + const totalIssuance = useCall(api.query.balances?.totalIssuance); const { changeAye, changeNay } = useChangeCalc(status.threshold, votedAye, votedNay, votedTotal); const threshold = useMemo( () => status.threshold.type.toString().replace('majority', ' majority '), diff --git a/packages/page-explorer/src/BlockInfo/ByHash.tsx b/packages/page-explorer/src/BlockInfo/ByHash.tsx index d3e7e736bc..b6d6f0112c 100644 --- a/packages/page-explorer/src/BlockInfo/ByHash.tsx +++ b/packages/page-explorer/src/BlockInfo/ByHash.tsx @@ -5,7 +5,7 @@ import type { HeaderExtended } from '@polkadot/api-derive/types'; import type { KeyedEvent } from '@polkadot/react-query/types'; import type { EventRecord, SignedBlock } from '@polkadot/types/interfaces'; -import React, { useEffect, useState } from 'react'; +import React, { useEffect, useMemo, useState } from 'react'; import { Link } from 'react-router-dom'; import { AddressSmall, Columar, LinkExternal, Table } from '@polkadot/react-components'; @@ -24,6 +24,8 @@ interface Props { value?: string | null; } +const EMPTY_HEADER = [['...', 'start', 6]]; + function transformResult ([events, getBlock, getHeader]: [EventRecord[], SignedBlock, HeaderExtended?]): [KeyedEvent[], SignedBlock, HeaderExtended?] { return [ events.map((record, index) => ({ @@ -58,6 +60,20 @@ function BlockByHash ({ className = '', error, value }: Props): React.ReactEleme }); }, [api, mountedRef, value]); + const header = useMemo( + () => getHeader + ? [ + [formatNumber(getHeader.number.unwrap()), 'start', 1], + [t('hash'), 'start'], + [t('parent'), 'start'], + [t('extrinsics'), 'start'], + [t('state'), 'start'], + [undefined, 'media--1200'] + ] + : EMPTY_HEADER, + [getHeader, t] + ); + const blockNumber = getHeader?.number.unwrap(); const parentHash = getHeader?.parentHash.toHex(); const hasParent = !getHeader?.parentHash.isEmpty; @@ -65,23 +81,12 @@ function BlockByHash ({ className = '', error, value }: Props): React.ReactEleme return (
{myError ? - : getBlock && !getBlock.isEmpty && getHeader && !getHeader.isEmpty && ( + : getBlock && getHeader && !getBlock.isEmpty && !getHeader.isEmpty && (
{t('Unable to retrieve the specified block details. {{error}}', { replace: { error: myError.message } })}
{getHeader.author && ( diff --git a/packages/page-extrinsics/src/Balance.tsx b/packages/page-extrinsics/src/Balance.tsx index 33a68dad19..3f3c3fa836 100644 --- a/packages/page-extrinsics/src/Balance.tsx +++ b/packages/page-extrinsics/src/Balance.tsx @@ -16,7 +16,7 @@ interface Props { function BalanceDisplay ({ className = '', label, params }: Props): React.ReactElement { const { api } = useApi(); - const allBalances = useCall(api.derive.balances.all, [params]); + const allBalances = useCall(api.derive.balances?.all, [params]); return ( (api.query.balances.totalIssuance); + const totalIssuance = useCall(api.query.balances?.totalIssuance); return ( diff --git a/packages/page-poll/src/index.tsx b/packages/page-poll/src/index.tsx index cc31abb433..2d5432eca9 100644 --- a/packages/page-poll/src/index.tsx +++ b/packages/page-poll/src/index.tsx @@ -37,7 +37,7 @@ function PollApp ({ basePath, className }: Props): React.ReactElement { const { api } = useApi(); const bestNumber = useBestNumber(); const [totalIssuance, totals] = useCallMulti([ - api.query.balances.totalIssuance, + api.query.balances?.totalIssuance, api.query.poll.totals ], optMulti); const [accountId, setAccountId] = useState(null); diff --git a/packages/page-staking/src/Actions/Account/BondExtra.tsx b/packages/page-staking/src/Actions/Account/BondExtra.tsx index 5da93ef8b0..b9aac55a9c 100644 --- a/packages/page-staking/src/Actions/Account/BondExtra.tsx +++ b/packages/page-staking/src/Actions/Account/BondExtra.tsx @@ -42,7 +42,7 @@ function BondExtra ({ controllerId, onClose, stakingInfo, stashId }: Props): Rea const { api } = useApi(); const [amountError, setAmountError] = useState(null); const [maxAdditional, setMaxAdditional] = useState(); - const stashBalance = useCall(api.derive.balances.all, [stashId]); + const stashBalance = useCall(api.derive.balances?.all, [stashId]); const currentAmount = useMemo( () => stakingInfo && stakingInfo.stakingLedger?.active.unwrap(), [stakingInfo] diff --git a/packages/page-staking/src/Actions/Account/InputValidateAmount.tsx b/packages/page-staking/src/Actions/Account/InputValidateAmount.tsx index 0aed2aa7cd..ffd495b3e5 100644 --- a/packages/page-staking/src/Actions/Account/InputValidateAmount.tsx +++ b/packages/page-staking/src/Actions/Account/InputValidateAmount.tsx @@ -42,7 +42,7 @@ function formatExistential (value: BN): string { function ValidateAmount ({ currentAmount, isNominating, minNomination, onError, stashId, value }: Props): React.ReactElement | null { const { t } = useTranslation(); const { api } = useApi(); - const stashBalance = useCall(api.derive.balances.all, [stashId]); + const stashBalance = useCall(api.derive.balances?.all, [stashId]); const [{ error, warning }, setResult] = useState({ error: null, warning: null }); useEffect((): void => { diff --git a/packages/page-staking/src/Actions/Account/InputValidationController.tsx b/packages/page-staking/src/Actions/Account/InputValidationController.tsx index 5b7bdba7ae..03ab80d553 100644 --- a/packages/page-staking/src/Actions/Account/InputValidationController.tsx +++ b/packages/page-staking/src/Actions/Account/InputValidationController.tsx @@ -43,7 +43,7 @@ function ValidateController ({ accountId, controllerId, defaultController, onErr const { api } = useApi(); const bondedId = useCall(controllerId ? api.query.staking.bonded : null, [controllerId], transformBonded); const stashId = useCall(controllerId ? api.query.staking.ledger : null, [controllerId], transformStash); - const allBalances = useCall(controllerId ? api.derive.balances.all : null, [controllerId]); + const allBalances = useCall(controllerId ? api.derive.balances?.all : null, [controllerId]); const [{ error, isFatal }, setError] = useState({ error: null, isFatal: false }); useEffect((): void => { diff --git a/packages/page-staking/src/Actions/Account/SetRewardDestination.tsx b/packages/page-staking/src/Actions/Account/SetRewardDestination.tsx index cc17c6b42f..79ab3ebbd7 100644 --- a/packages/page-staking/src/Actions/Account/SetRewardDestination.tsx +++ b/packages/page-staking/src/Actions/Account/SetRewardDestination.tsx @@ -25,7 +25,7 @@ function SetRewardDestination ({ controllerId, defaultDestination, onClose, stas const { api } = useApi(); const [destination, setDestination] = useState(() => ((defaultDestination?.isAccount ? 'Account' : defaultDestination?.toString()) || 'Staked') as 'Staked'); const [destAccount, setDestAccount] = useState(() => defaultDestination?.isAccount ? defaultDestination.asAccount.toString() : null); - const destBalance = useCall(api.derive.balances.all, [destAccount]); + const destBalance = useCall(api.derive.balances?.all, [destAccount]); const options = useMemo( () => createDestCurr(t), diff --git a/packages/page-staking/src/Actions/Account/index.tsx b/packages/page-staking/src/Actions/Account/index.tsx index 6ef8ee328e..e23cc49300 100644 --- a/packages/page-staking/src/Actions/Account/index.tsx +++ b/packages/page-staking/src/Actions/Account/index.tsx @@ -60,7 +60,7 @@ const transformSpan = { function useStashCalls (api: ApiPromise, stashId: string) { const params = useMemo(() => [stashId], [stashId]); - const balancesAll = useCall(api.derive.balances.all, params); + const balancesAll = useCall(api.derive.balances?.all, params); const spanCount = useCall(api.query.staking.slashingSpans, params, transformSpan); const stakingAccount = useCall(api.derive.staking.account, params); diff --git a/packages/page-staking/src/Actions/partials/Bond.tsx b/packages/page-staking/src/Actions/partials/Bond.tsx index 9431d1d631..48a344e872 100644 --- a/packages/page-staking/src/Actions/partials/Bond.tsx +++ b/packages/page-staking/src/Actions/partials/Bond.tsx @@ -45,8 +45,8 @@ function Bond ({ className = '', isNominating, minNomination, onChange }: Props) const [destAccount, setDestAccount] = useState(null); const [stashId, setStashId] = useState(null); const [startBalance, setStartBalance] = useState(null); - const stashBalance = useCall(api.derive.balances.all, [stashId]); - const destBalance = useCall(api.derive.balances.all, [destAccount]); + const stashBalance = useCall(api.derive.balances?.all, [stashId]); + const destBalance = useCall(api.derive.balances?.all, [destAccount]); const bondedBlocks = useUnbondDuration(); const options = useMemo( diff --git a/packages/page-staking/src/useSortedTargets.ts b/packages/page-staking/src/useSortedTargets.ts index b4614e1467..a52d4a094e 100644 --- a/packages/page-staking/src/useSortedTargets.ts +++ b/packages/page-staking/src/useSortedTargets.ts @@ -236,7 +236,7 @@ export default function useSortedTargets (favorites: string[], withLedger: boole const { api } = useApi(); const { allAccounts } = useAccounts(); const historyDepth = useCall(api.query.staking.historyDepth); - const totalIssuance = useCall(api.query.balances.totalIssuance); + const totalIssuance = useCall(api.query.balances?.totalIssuance); const electedInfo = useCall(api.derive.staking.electedInfo, [{ ...DEFAULT_FLAGS_ELECTED, withLedger }]); const waitingInfo = useCall(api.derive.staking.waitingInfo, [{ ...DEFAULT_FLAGS_WAITING, withLedger }]); const lastEraInfo = useCall(api.derive.session.info, undefined, transformEra); diff --git a/packages/page-storage/src/Selection/Modules.tsx b/packages/page-storage/src/Selection/Modules.tsx index 08f2d7cd8d..bedb34cb2b 100644 --- a/packages/page-storage/src/Selection/Modules.tsx +++ b/packages/page-storage/src/Selection/Modules.tsx @@ -102,7 +102,7 @@ function expandKey (api: ApiPromise, key: QueryableStorageEntry<'promise'>): Key function Modules ({ onAdd }: Props): React.ReactElement { const { t } = useTranslation(); const { api } = useApi(); - const [{ defaultValues, isIterable, key, params }, setKey] = useState({ defaultValues: undefined, isIterable: false, key: api.query.timestamp.now, params: [] }); + const [{ defaultValues, isIterable, key, params }, setKey] = useState({ defaultValues: undefined, isIterable: false, key: api.query.timestamp?.now || api.query.system.events, params: [] }); const [{ isValid, values }, setValues] = useState({ isValid: true, values: [] }); const _onAdd = useCallback( @@ -138,7 +138,7 @@ function Modules ({ onAdd }: Props): React.ReactElement {
('selected state query')} onChange={_onChangeKey} diff --git a/packages/react-components/src/VoteValue.tsx b/packages/react-components/src/VoteValue.tsx index 63315e50d4..9472975046 100644 --- a/packages/react-components/src/VoteValue.tsx +++ b/packages/react-components/src/VoteValue.tsx @@ -44,7 +44,7 @@ function getValues (selectedId: string | null | undefined, isCouncil: boolean | function VoteValue ({ accountId, autoFocus, isCouncil, onChange }: Props): React.ReactElement | null { const { t } = useTranslation(); const { api } = useApi(); - const allBalances = useCall(api.derive.balances.all, [accountId]); + const allBalances = useCall(api.derive.balances?.all, [accountId]); const [{ maxValue, selectedId, value }, setValue] = useState({ maxValue: BN_ZERO, value: BN_ZERO }); useEffect((): void => { diff --git a/packages/react-hooks/src/useInflation.ts b/packages/react-hooks/src/useInflation.ts index 5611c8c437..14821a7e27 100644 --- a/packages/react-hooks/src/useInflation.ts +++ b/packages/react-hooks/src/useInflation.ts @@ -37,7 +37,7 @@ export function calcInflation (api: ApiPromise, totalStaked: BN, totalIssuance: export function useInflation (totalStaked?: BN): Inflation { const { api } = useApi(); - const totalIssuance = useCall(api.query.balances.totalIssuance); + const totalIssuance = useCall(api.query.balances?.totalIssuance); const [state, setState] = useState(EMPTY); useEffect((): void => { diff --git a/packages/react-hooks/src/useTreasury.ts b/packages/react-hooks/src/useTreasury.ts index 963475b415..d58c44f0df 100644 --- a/packages/react-hooks/src/useTreasury.ts +++ b/packages/react-hooks/src/useTreasury.ts @@ -27,7 +27,7 @@ export function useTreasury (): Result { : BN_ZERO }); - const treasuryBalance = useCall(api.derive.balances.account, [TREASURY_ACCOUNT]); + const treasuryBalance = useCall(api.derive.balances?.account, [TREASURY_ACCOUNT]); useEffect(() => { if (!api.consts.treasury) { diff --git a/packages/react-query/src/Available.tsx b/packages/react-query/src/Available.tsx index 7cd877bb56..e436b40742 100644 --- a/packages/react-query/src/Available.tsx +++ b/packages/react-query/src/Available.tsx @@ -19,7 +19,7 @@ interface Props { function AvailableDisplay ({ children, className = '', label, params }: Props): React.ReactElement { const { api } = useApi(); - const allBalances = useCall(api.derive.balances.all, [params]); + const allBalances = useCall(api.derive.balances?.all, [params]); return ( { const { api } = useApi(); - const allBalances = useCall(api.derive.balances.all, [params]); + const allBalances = useCall(api.derive.balances?.all, [params]); return ( { const { api } = useApi(); - const allBalances = useCall(api.derive.balances.all, [params]); + const allBalances = useCall(api.derive.balances?.all, [params]); return ( { const { api } = useApi(); - const allBalances = useCall(api.derive.balances.all, [params]); + const allBalances = useCall(api.derive.balances?.all, [params]); return ( { const { api } = useApi(); - const allBalances = useCall(api.derive.balances.all, [params]); + const allBalances = useCall(api.derive.balances?.all, [params]); return (
diff --git a/packages/react-query/src/TimeNow.tsx b/packages/react-query/src/TimeNow.tsx index fcd35512d4..99a814fbb5 100644 --- a/packages/react-query/src/TimeNow.tsx +++ b/packages/react-query/src/TimeNow.tsx @@ -17,15 +17,19 @@ interface Props { value?: Moment; } -function TimeNow ({ children, className = '', label, value }: Props): React.ReactElement { +function TimeNow ({ children, className = '', label, value }: Props): React.ReactElement | null { const { api } = useApi(); - const timestamp = useCall(!value && api.query.timestamp.now); + const timestamp = useCall(!value && api.query.timestamp?.now); const [now, setNow] = useState(); useEffect((): void => { setNow(value || timestamp); }, [timestamp, value]); + if (!now) { + return null; + } + return (
{label || ''} diff --git a/packages/react-signer/src/PaymentInfo.tsx b/packages/react-signer/src/PaymentInfo.tsx index ae341b67ea..be2dce92d3 100644 --- a/packages/react-signer/src/PaymentInfo.tsx +++ b/packages/react-signer/src/PaymentInfo.tsx @@ -28,7 +28,7 @@ function PaymentInfo ({ accountId, className = '', extrinsic }: Props): React.Re const { t } = useTranslation(); const { api } = useApi(); const [dispatchInfo, setDispatchInfo] = useState(null); - const balances = useCall(api.derive.balances.all, [accountId]); + const balances = useCall(api.derive.balances?.all, [accountId]); const mountedRef = useIsMountedRef(); useEffect((): void => {