import clsx from 'clsx'; import { DispatchInfo, Extrinsic as DotExtrinsic } from '@polkadot/types/interfaces'; import commonStyles from '@/pages/explorer/explorer.module.scss'; import { FormattedMessageQueuedData } from '../../types'; import { IdeaEvent } from '../../idea-event'; import { Method, Section } from '../../consts'; import { Extrinsic } from '../extrinsic'; import { BlockEvent } from '../block-event'; import styles from './row.module.scss'; type Props = { extrinsic: DotExtrinsic; events: IdeaEvent[] | undefined; }; const Row = ({ extrinsic, events }: Props) => { // eslint-disable-next-line react/no-array-index-key const getEvents = () => events?.map((event, index) => ); const getInfoEvent = () => events?.find(({ section, method }) => { const isSystem = section === Section.System; const isExtrinsic = method === Method.ExtrinsicFailed || method === Method.ExtrinsicSuccess; return isSystem && isExtrinsic; }); const getDispatchInfo = () => { const infoEvent = getInfoEvent(); if (infoEvent) { const { method, data } = infoEvent; const isSuccess = method === Method.ExtrinsicSuccess; const index = isSuccess ? 0 : 1; return data[index] as DispatchInfo; } }; const { isSigned, signer } = extrinsic; const { weight } = getDispatchInfo() || {}; const formattedSigner = isSigned && (signer.toHuman() as { Id: string }); const formattedWeight = weight && (weight.toHuman() as { refTime: string; proofSize: string }); const rowClassName = clsx(commonStyles.row, styles.row); const signerClassName = clsx(commonStyles.alignRight, styles.signer); // get programId for extrinsics decoding const messageQueued = events?.find(({ method }) => method === Method.MessageQueued); const formattedMessageQueued = messageQueued?.toHuman() as FormattedMessageQueuedData | undefined; return (
{getEvents()}
{formattedWeight && formattedWeight.refTime} {formattedSigner && formattedSigner.Id}
); }; export { Row };