123456789101112131415161718192021222324252627282930313233343536 |
- // Copyright 2017-2020 @polkadot/react-hooks authors & contributors
- // This software may be modified and distributed under the terms
- // of the Apache-2.0 license. See the LICENSE file for details.
- import { Call } from '@polkadot/types/interfaces';
- import BN from 'bn.js';
- import { useEffect, useState } from 'react';
- import { BN_ZERO } from '@polkadot/util';
- import useApi from './useApi';
- import useIsMountedRef from './useIsMountedRef';
- // a random address that we are using for our queries
- const ZERO_ACCOUNT = '5CAUdnwecHGxxyr5vABevAfZ34Fi4AaraDRMwfDQXQ52PXqg';
- const EMPTY_STATE: [BN, number] = [BN_ZERO, 0];
- // for a given call, calculate the weight
- export default function useWeight (call?: Call | null): [BN, number] {
- const { api } = useApi();
- const mountedRef = useIsMountedRef();
- const [state, setState] = useState(EMPTY_STATE);
- useEffect((): void => {
- if (call) {
- api.tx(call)
- .paymentInfo(ZERO_ACCOUNT)
- .then(({ weight }) => mountedRef.current && setState([weight, call.encodedLength]))
- .catch(console.error);
- } else {
- setState(EMPTY_STATE);
- }
- }, [api, call, mountedRef]);
- return state;
- }
|