From 7ccbc57918a9734d64276dcf28dea2ec2ae7a669 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sun, 11 Oct 2020 14:50:22 +0200 Subject: [PATCH] Add overall contracts summary, bump API (#3852) --- package.json | 6 +- packages/page-contracts/package.json | 2 +- packages/page-contracts/src/Summary.tsx | 56 +++++++++ packages/page-contracts/src/index.tsx | 4 +- packages/page-contracts/src/store.ts | 2 +- packages/page-contracts/src/useAbi.ts | 3 +- packages/react-api/package.json | 2 +- .../src/util/getContractAbi.ts | 5 +- yarn.lock | 112 +++++++++--------- 9 files changed, 124 insertions(+), 68 deletions(-) create mode 100644 packages/page-contracts/src/Summary.tsx diff --git a/package.json b/package.json index 2df3f139ab..14d5a83beb 100644 --- a/package.json +++ b/package.json @@ -33,10 +33,10 @@ "afterSign": "electron-builder-notarize" }, "resolutions": { - "@polkadot/api": "^2.1.2-18", - "@polkadot/api-contract": "^2.1.2-18", + "@polkadot/api": "^2.1.2-19", + "@polkadot/api-contract": "^2.1.2-19", "@polkadot/keyring": "^3.5.1", - "@polkadot/types": "^2.1.2-18", + "@polkadot/types": "^2.1.2-19", "@polkadot/util": "^3.5.1", "@polkadot/util-crypto": "^3.5.1", "@polkadot/wasm-crypto": "^1.4.1", diff --git a/packages/page-contracts/package.json b/packages/page-contracts/package.json index 2fcc2e68ca..b7d005e940 100644 --- a/packages/page-contracts/package.json +++ b/packages/page-contracts/package.json @@ -12,6 +12,6 @@ "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.11.2", - "@polkadot/api-contract": "^2.1.2-18" + "@polkadot/api-contract": "^2.1.2-19" } } diff --git a/packages/page-contracts/src/Summary.tsx b/packages/page-contracts/src/Summary.tsx new file mode 100644 index 0000000000..84976ca71c --- /dev/null +++ b/packages/page-contracts/src/Summary.tsx @@ -0,0 +1,56 @@ +// Copyright 2017-2020 @polkadot/app-contracts authors & contributors +// SPDX-License-Identifier: Apache-2.0 + +import BN from 'bn.js'; +import React, { useEffect, useState } from 'react'; +import { SummaryBox, CardSummary } from '@polkadot/react-components'; +import { useApi, useCall } from '@polkadot/react-hooks'; +import { formatNumber } from '@polkadot/util'; + +import { useTranslation } from './translate'; + +interface Props { + trigger: number; +} + +function Summary ({ trigger }: Props): React.ReactElement { + const { t } = useTranslation(); + const { api } = useApi(); + const accountCounter = useCall(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 ( + +
+ ('addresses')}> + {formatNumber(accountCounter)} + +
+
+ ('code hashes')}> + {formatNumber(numHashes)} + + ('contracts')}> + {formatNumber(numContracts)} + +
+
+ ); +} + +export default React.memo(Summary); diff --git a/packages/page-contracts/src/index.tsx b/packages/page-contracts/src/index.tsx index 436fd214b1..522110188c 100644 --- a/packages/page-contracts/src/index.tsx +++ b/packages/page-contracts/src/index.tsx @@ -17,6 +17,7 @@ import CodeAdd from './Codes/Add'; import CodeUpload from './Codes/Upload'; import Deploy from './Deploy'; import Ink3Banner from './Ink3Banner'; +import Summary from './Summary'; import { useTranslation } from './translate'; function ContractsApp ({ basePath, className = '' }: Props): React.ReactElement { @@ -28,7 +29,7 @@ function ContractsApp ({ basePath, className = '' }: Props): React.ReactElement< const [isDeployOpen, toggleDeploy, setIsDeployOpen] = useToggle(); const [isHashOpen, toggleHash] = useToggle(); const [isUploadOpen, toggleUpload] = useToggle(); - const [updated, setUpdated] = useState(0); + const [updated, setUpdated] = useState(Date.now()); const [allCodes, setAllCodes] = useState(store.getAllCode()); const itemsRef = useRef([ @@ -81,6 +82,7 @@ function ContractsApp ({ basePath, className = '' }: Props): React.ReactElement< items={itemsRef.current} /> +