From fee32b2cd56bb577186c171bc1f0b797a52a0b1d Mon Sep 17 00:00:00 2001 From: kwingram25 Date: Fri, 12 Jul 2019 15:11:34 +0100 Subject: [PATCH] Mortal/immortal extrinsics (#1393) * show mortality * NodeInfo * NodeInfo --- .../app-explorer/src/BlockInfo/ByHash.tsx | 5 ++- .../app-explorer/src/BlockInfo/Extrinsics.tsx | 23 ++++++++++-- packages/app-explorer/src/NodeInfo/index.tsx | 6 ++-- packages/app-explorer/src/NodeInfo/types.ts | 3 +- packages/ui-app/src/Call.tsx | 35 +++++++++++++++---- 5 files changed, 60 insertions(+), 12 deletions(-) diff --git a/packages/app-explorer/src/BlockInfo/ByHash.tsx b/packages/app-explorer/src/BlockInfo/ByHash.tsx index b17fe7b5fc..ee23986bd6 100644 --- a/packages/app-explorer/src/BlockInfo/ByHash.tsx +++ b/packages/app-explorer/src/BlockInfo/ByHash.tsx @@ -41,7 +41,10 @@ class BlockByHash extends React.PureComponent { /> - + diff --git a/packages/app-explorer/src/BlockInfo/Extrinsics.tsx b/packages/app-explorer/src/BlockInfo/Extrinsics.tsx index f4c4c19b31..5685c0c612 100644 --- a/packages/app-explorer/src/BlockInfo/Extrinsics.tsx +++ b/packages/app-explorer/src/BlockInfo/Extrinsics.tsx @@ -8,11 +8,12 @@ import React from 'react'; import styled from 'styled-components'; import { AddressMini, Call, Column, LinkPolkascan } from '@polkadot/ui-app'; import { formatNumber } from '@polkadot/util'; -import { Extrinsic, Method } from '@polkadot/types'; +import { BlockNumber, Extrinsic, Method } from '@polkadot/types'; import translate from '../translate'; type Props = I18nProps & { + blockNumber?: BlockNumber, label?: React.ReactNode, value?: Array | null }; @@ -40,8 +41,14 @@ class Extrinsics extends React.PureComponent { // FIXME This is _very_ similar to what we have in democracy/Item private renderExtrinsic = (extrinsic: Extrinsic, index: number) => { + const { blockNumber, t } = this.props; const { meta, method, section } = Method.findFunction(extrinsic.callIndex); + let eraEnd; + if (extrinsic.signature.era.isMortalEra) { + eraEnd = extrinsic.signature.era.asMortalEra.death((blockNumber || new BlockNumber(0)).toNumber()); + } + return (
@@ -54,10 +61,22 @@ class Extrinsics extends React.PureComponent { { meta && meta.documentation ? meta.documentation.join(' ') - : 'Details' + : t('Details') } diff --git a/packages/app-explorer/src/NodeInfo/index.tsx b/packages/app-explorer/src/NodeInfo/index.tsx index 0bc03fad25..dbcb6ce24e 100644 --- a/packages/app-explorer/src/NodeInfo/index.tsx +++ b/packages/app-explorer/src/NodeInfo/index.tsx @@ -61,6 +61,7 @@ class App extends React.PureComponent { /> @@ -84,13 +85,14 @@ class App extends React.PureComponent { const { api } = this.props; try { - const [health, peers, extrinsics] = await Promise.all([ + const [blockNumber, health, peers, extrinsics] = await Promise.all([ + api.derive.chain.bestNumber(), api.rpc.system.health(), api.rpc.system.peers>(), api.rpc.author.pendingExtrinsics() ]); - this.setInfo({ extrinsics, health, peers }); + this.setInfo({ blockNumber, extrinsics, health, peers }); } catch (error) { this.setInfo(); } diff --git a/packages/app-explorer/src/NodeInfo/types.ts b/packages/app-explorer/src/NodeInfo/types.ts index c441ba25cb..4a0970de8e 100644 --- a/packages/app-explorer/src/NodeInfo/types.ts +++ b/packages/app-explorer/src/NodeInfo/types.ts @@ -2,9 +2,10 @@ // This software may be modified and distributed under the terms // of the Apache-2.0 license. See the LICENSE file for details. -import { Health, PeerInfo, PendingExtrinsics } from '@polkadot/types'; +import { BlockNumber, Health, PeerInfo, PendingExtrinsics } from '@polkadot/types'; export type Info = { + blockNumber?: BlockNumber, health?: Health | null, peers?: Array | null, extrinsics?: PendingExtrinsics | null diff --git a/packages/ui-app/src/Call.tsx b/packages/ui-app/src/Call.tsx index 6ab2c28462..d0d6f42762 100644 --- a/packages/ui-app/src/Call.tsx +++ b/packages/ui-app/src/Call.tsx @@ -3,7 +3,7 @@ // of the Apache-2.0 license. See the LICENSE file for details. import { IExtrinsic, IMethod } from '@polkadot/types/types'; -import { BareProps } from './types'; +import { BareProps, I18nProps } from './types'; import React from 'react'; import styled from 'styled-components'; @@ -12,11 +12,13 @@ import Params from '@polkadot/ui-params'; import Static from './Static'; import { classes } from './util'; +import translate from './translate'; -export type Props = BareProps & { +export type Props = I18nProps & BareProps & { children?: React.ReactNode, value: IExtrinsic | IMethod, - withHash?: boolean + withHash?: boolean, + mortality?: string }; const Wrapper = styled.div` @@ -28,9 +30,9 @@ const Wrapper = styled.div` } `; -export default class Call extends React.PureComponent { +class Call extends React.PureComponent { render () { - const { children, className, style, value, withHash } = this.props; + const { children, className, style, mortality, value, withHash, t } = this.props; const params = Method.filterOrigin(value.meta).map(({ name, type }) => ({ name: name.toString(), type: getTypeDef(type) @@ -51,7 +53,26 @@ export default class Call extends React.PureComponent { {children} { hash - ? {hash.toHex()} + ? ( + + {hash.toHex()} + + ) + : null + } + { + mortality + ? ( + + {mortality} + + ) : null } { ); } } + +export default translate(Call);