-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
Copy pathSummary.tsx
58 lines (48 loc) · 1.6 KB
/
Summary.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
// Copyright 2017-2023 @polkadot/app-contracts authors & contributors
// SPDX-License-Identifier: Apache-2.0
import type { BN } from '@polkadot/util';
import React, { useEffect, useState } from 'react';
import { CardSummary, SummaryBox } from '@polkadot/react-components';
import { useApi, useCall } from '@polkadot/react-hooks';
import { formatNumber } from '@polkadot/util';
import { useTranslation } from '../translate.js';
interface Props {
trigger: number;
}
function Summary ({ trigger }: Props): React.ReactElement<Props> {
const { t } = useTranslation();
const { api } = useApi();
const accountCounter = useCall<BN>(api.query.contracts.accountCounter);
const [numContracts, setNumContracts] = useState(0);
const [numHashes, setNumHashes] = useState(0);
useEffect((): void => {
accountCounter && api.query.contracts.contractInfoOf
.keys()
.then((arr) => setNumContracts(arr.length))
.catch(console.error);
}, [api, accountCounter]);
useEffect((): void => {
api.query.contracts.codeStorage
.keys()
.then((arr) => setNumHashes(arr.length))
.catch(console.error);
}, [api, trigger]);
return (
<SummaryBox>
<section>
<CardSummary label={t('addresses')}>
{formatNumber(accountCounter)}
</CardSummary>
</section>
<section>
<CardSummary label={t('code hashes')}>
{formatNumber(numHashes)}
</CardSummary>
<CardSummary label={t('contracts')}>
{formatNumber(numContracts)}
</CardSummary>
</section>
</SummaryBox>
);
}
export default React.memo(Summary);