From 592dd4b2a34cb89407c602e133fa29d301bd6e56 Mon Sep 17 00:00:00 2001 From: Jaco Greeff Date: Sun, 17 May 2020 10:06:02 +0200 Subject: [PATCH] Links from events to blocks (#2761) --- packages/page-explorer/src/BlockHeader.tsx | 3 +- .../page-explorer/src/BlockInfo/Extrinsic.tsx | 3 +- packages/page-explorer/src/Event.tsx | 8 ++--- packages/page-explorer/src/Events.tsx | 31 ++++++++++++++----- packages/page-explorer/src/types.ts | 2 ++ packages/react-query/src/Events.tsx | 15 ++++++--- 6 files changed, 42 insertions(+), 20 deletions(-) diff --git a/packages/page-explorer/src/BlockHeader.tsx b/packages/page-explorer/src/BlockHeader.tsx index 96ef7674d7..d934ef2be8 100644 --- a/packages/page-explorer/src/BlockHeader.tsx +++ b/packages/page-explorer/src/BlockHeader.tsx @@ -20,12 +20,11 @@ function BlockHeader ({ value }: Props): React.ReactElement | null { } const hashHex = value.hash.toHex(); - const textNumber = formatNumber(value.number); return ( -

{textNumber}

+

{formatNumber(value.number)}

{hashHex} diff --git a/packages/page-explorer/src/BlockInfo/Extrinsic.tsx b/packages/page-explorer/src/BlockInfo/Extrinsic.tsx index 999caf2bb6..14a6be4342 100644 --- a/packages/page-explorer/src/BlockInfo/Extrinsic.tsx +++ b/packages/page-explorer/src/BlockInfo/Extrinsic.tsx @@ -77,9 +77,8 @@ function ExtrinsicDisplay ({ blockNumber, className, events, index, value }: Pro className='top' colSpan={2} > - {thisEvents.map(({ blockNumber, key, record }) => + {thisEvents.map(({ key, record }) => { +function Event ({ className, value: { event } }: Props): React.ReactElement { return ( { +function Events ({ className, emptyLabel, eventClassName, events, label }: Props): React.ReactElement { const { t } = useTranslation(); const header = useMemo(() => [ @@ -26,21 +30,24 @@ function Events ({ emptyLabel, eventClassName, events, label }: Props): React.Re return ( {events && events .filter(({ record: { event: { method, section } } }) => !!method && !!section) - .map(({ blockNumber, key, record }): React.ReactNode => ( + .map(({ blockHash, blockNumber, index, key, record }): React.ReactNode => ( )) @@ -49,4 +56,14 @@ function Events ({ emptyLabel, eventClassName, events, label }: Props): React.Re ); } -export default React.memo(Events); +export default React.memo(styled(Events)` + td.overflow { + position: relative; + + .event-link { + position: absolute; + right: 0.75rem; + top: 0.5rem; + } + } +`); diff --git a/packages/page-explorer/src/types.ts b/packages/page-explorer/src/types.ts index ac34147640..3358d5aac4 100644 --- a/packages/page-explorer/src/types.ts +++ b/packages/page-explorer/src/types.ts @@ -5,7 +5,9 @@ import { BlockNumber, EventRecord } from '@polkadot/types/interfaces'; export interface KeyedEvent { + blockHash?: string; blockNumber?: BlockNumber; + index?: number; key: string; record: EventRecord; } diff --git a/packages/react-query/src/Events.tsx b/packages/react-query/src/Events.tsx index 86e453edfe..eb6b0ce18e 100644 --- a/packages/react-query/src/Events.tsx +++ b/packages/react-query/src/Events.tsx @@ -9,11 +9,15 @@ import { useApi } from '@polkadot/react-hooks'; import { stringToU8a } from '@polkadot/util'; import { xxhashAsHex } from '@polkadot/util-crypto'; -interface KeyedEvent { +interface IndexedEvent { + index: number; + record: EventRecord; +} + +interface KeyedEvent extends IndexedEvent { blockHash: string; blockNumber: BlockNumber; key: string; - record: EventRecord; } type Events = KeyedEvent[]; @@ -37,7 +41,9 @@ function EventsBase ({ children }: Props): React.ReactElement { let prevEventHash: string | null = null; api.query.system.events((records): void => { - const newEvents = records.filter(({ event }) => event.section !== 'system'); + const newEvents: IndexedEvent[] = records + .map((record, index) => ({ index, record })) + .filter(({ record: { event: { section } } }) => section !== 'system'); const newEventHash = xxhashAsHex(stringToU8a(JSON.stringify(newEvents))); if (newEventHash !== prevEventHash && newEvents.length) { @@ -52,9 +58,10 @@ function EventsBase ({ children }: Props): React.ReactElement { prevBlockHash = blockHash; setState((events) => [ - ...newEvents.map((record, index): KeyedEvent => ({ + ...newEvents.map(({ index, record }): KeyedEvent => ({ blockHash, blockNumber, + index, key: `${blockNumber}-${blockHash}-${index}`, record })),
- + + {blockNumber && ( + {formatNumber(blockNumber)}-{index} + )}