mirror of
https://github.com/luxfi/explore.git
synced 2026-09-24 00:28:18 +00:00
* envs and feature setup * home page layout * cross-chain txs page * cross-chain transfers page * cross-chain transfers on tx page * cross-chain messages on tx page * cross-chain tx page * cross-chain tx details token transfers * stats and counters for lists * migrate to new API version * add swagger * mobile lists * placeholder views on address page * tests * fix adaptive tabs initial state when there is only one tab in the list * tweaks * bug fixes * fix tests * update screenshots * migrate to new api version * add chain label tooltip, copy button to txs in lists and same address highlight * list views on address page * fix tests * fix links to current address in the list views * update tooltips * update tables layout * review fixes * fix spelling * update screenshots * update screenshot
62 lines
1.8 KiB
TypeScript
62 lines
1.8 KiB
TypeScript
import React from 'react';
|
|
|
|
import type { InterchainMessage } from '@blockscout/interchain-indexer-types';
|
|
|
|
import useApiQuery from 'lib/api/useApiQuery';
|
|
import { INTERCHAIN_MESSAGE } from 'stubs/interchainIndexer';
|
|
import { generateListStub } from 'stubs/utils';
|
|
import { CollapsibleList } from 'toolkit/chakra/collapsible';
|
|
import * as DetailedInfo from 'ui/shared/DetailedInfo/DetailedInfo';
|
|
|
|
import TxDetailsCrossChainMessage from './TxDetailsCrossChainMessage';
|
|
|
|
interface Props {
|
|
hash: string;
|
|
isLoading: boolean;
|
|
}
|
|
|
|
const TxDetailsCrossChainMessages = ({ hash, isLoading: isLoadingProp }: Props) => {
|
|
|
|
const { data, isPlaceholderData } = useApiQuery('interchainIndexer:tx_messages', {
|
|
pathParams: { hash },
|
|
queryOptions: {
|
|
placeholderData: generateListStub<'interchainIndexer:tx_messages'>(INTERCHAIN_MESSAGE, 1, { next_page_params: undefined }),
|
|
},
|
|
});
|
|
|
|
const isLoading = isLoadingProp || isPlaceholderData;
|
|
|
|
const renderItem = React.useCallback((item: InterchainMessage) => {
|
|
return (
|
|
<TxDetailsCrossChainMessage key={ item.message_id } data={ item } isLoading={ isLoading }/>
|
|
);
|
|
}, [ isLoading ]);
|
|
|
|
if ((!isPlaceholderData && (!data || !data.items.length))) {
|
|
return null;
|
|
}
|
|
|
|
return (
|
|
<>
|
|
<DetailedInfo.ItemLabel
|
|
hint="Cross-chain messages in this transaction"
|
|
isLoading={ isLoading }
|
|
>
|
|
Cross-chain message{ (data?.items ?? []).length > 1 ? 's' : '' }
|
|
</DetailedInfo.ItemLabel>
|
|
<DetailedInfo.ItemValue>
|
|
<CollapsibleList
|
|
items={ data?.items ?? [] }
|
|
renderItem={ renderItem }
|
|
cutLength={ 5 }
|
|
text={ [ 'View all messages', 'Hide all messages' ] }
|
|
py={ 1 }
|
|
rowGap="14px"
|
|
/>
|
|
</DetailedInfo.ItemValue>
|
|
</>
|
|
);
|
|
};
|
|
|
|
export default React.memo(TxDetailsCrossChainMessages);
|