diff --git a/CHANGELOG.md b/CHANGELOG.md index c2e6e668..8935e9eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +- [Updated transactions table props](https://github.com/multiversx/mx-sdk-dapp-core-ui/pull/25) + ## [[0.0.0-alpha.2](https://github.com/multiversx/mx-sdk-dapp-core-ui/pull/24)] - 2025-01-27 - [Fixed generic modal event warning](https://github.com/multiversx/mx-sdk-dapp-core-ui/pull/23) diff --git a/src/components.d.ts b/src/components.d.ts index 6b543661..5ce0dd47 100644 --- a/src/components.d.ts +++ b/src/components.d.ts @@ -151,7 +151,7 @@ export namespace Components { "wrapperId"?: string; } interface TransactionsTable { - "transactions": ITransactionsTableRow[]; + "data": string; } interface WalletConnectModal { "data": IWalletConnectModalData; @@ -583,7 +583,7 @@ declare namespace LocalJSX { "wrapperId"?: string; } interface TransactionsTable { - "transactions"?: ITransactionsTableRow[]; + "data"?: string; } interface WalletConnectModal { "data"?: IWalletConnectModalData; diff --git a/src/components/transactions-table/components/transaction-hash/tests/transaction-hash.spec.tsx b/src/components/transactions-table/components/transaction-hash/tests/transaction-hash.spec.tsx index 95f53d20..8daf6ff7 100644 --- a/src/components/transactions-table/components/transaction-hash/tests/transaction-hash.spec.tsx +++ b/src/components/transactions-table/components/transaction-hash/tests/transaction-hash.spec.tsx @@ -2,9 +2,9 @@ import { newSpecPage } from '@stencil/core/testing'; import { h } from '@stencil/core'; import { TransactionHash } from '../transaction-hash'; import { DataTestIdsEnum } from 'constants/dataTestIds.enum'; -import { ITransactionsTableRow } from '../../../transactions-table.type'; import { faCircleInfo } from '@fortawesome/free-solid-svg-icons/faCircleInfo'; import { faCircleCheck } from '@fortawesome/free-solid-svg-icons/faCircleCheck'; +import { ITransactionsTableRow } from '../../../transactions-table.type'; describe('TransactionHash', () => { it('renders with transaction data', async () => { @@ -31,7 +31,7 @@ describe('TransactionHash', () => {
- +
@@ -39,7 +39,7 @@ describe('TransactionHash', () => { }); it('updates when transaction prop changes', async () => { - const initialTransaction = { + const initialTransactionData: ITransactionsTableRow = { age: { timeAgo: '1h', tooltip: '1 hour ago', @@ -54,7 +54,7 @@ describe('TransactionHash', () => { const page = await newSpecPage({ components: [TransactionHash], - template: () => , + template: () => , }); expect(page.root).toEqualHtml(` @@ -62,13 +62,13 @@ describe('TransactionHash', () => {
- +
`); - const updatedTransaction = { + const updatedTransactionData: ITransactionsTableRow = { age: { timeAgo: '1h', tooltip: '1 hour ago', @@ -81,7 +81,7 @@ describe('TransactionHash', () => { txHash: '0xUpdatedHash', }; - page.root.transaction = updatedTransaction; + page.root.transaction = updatedTransactionData; await page.waitForChanges(); expect(page.root).toEqualHtml(` @@ -89,10 +89,23 @@ describe('TransactionHash', () => {
- +
`); }); + + it('renders null when transaction is not provided', async () => { + const page = await newSpecPage({ + components: [TransactionHash], + template: () => , + }); + + expect(page.root).toEqualHtml(` + + + + `); + }); }); diff --git a/src/components/transactions-table/components/transaction-hash/transaction-hash.tsx b/src/components/transactions-table/components/transaction-hash/transaction-hash.tsx index 7591cfe7..8555f7f1 100644 --- a/src/components/transactions-table/components/transaction-hash/transaction-hash.tsx +++ b/src/components/transactions-table/components/transaction-hash/transaction-hash.tsx @@ -11,9 +11,13 @@ export class TransactionHash { @Prop() transaction: ITransactionsTableRow; render() { + if (!this.transaction) { + return null; + } + return (
- +
); diff --git a/src/components/transactions-table/components/transaction-icon/transaction-icon.tsx b/src/components/transactions-table/components/transaction-icon/transaction-icon.tsx index f1a7088d..e8aa76f5 100644 --- a/src/components/transactions-table/components/transaction-icon/transaction-icon.tsx +++ b/src/components/transactions-table/components/transaction-icon/transaction-icon.tsx @@ -13,6 +13,10 @@ export class TransactionIcon { @Prop() iconInfo: ITransactionIconInfo; render() { + if (!this.iconInfo) { + return null; + } + const iconHtml = getIconHtmlFromIconDefinition(this.iconInfo.icon); return ( diff --git a/src/components/transactions-table/readme.md b/src/components/transactions-table/readme.md index 0f7db50f..764b3984 100644 --- a/src/components/transactions-table/readme.md +++ b/src/components/transactions-table/readme.md @@ -7,9 +7,9 @@ ## Properties -| Property | Attribute | Description | Type | Default | -| -------------- | --------- | ----------- | ------------------------- | ----------- | -| `transactions` | -- | | `ITransactionsTableRow[]` | `undefined` | +| Property | Attribute | Description | Type | Default | +| -------- | --------- | ----------- | -------- | ----------- | +| `data` | `data` | | `string` | `undefined` | ## Dependencies diff --git a/src/components/transactions-table/transactions-table.tsx b/src/components/transactions-table/transactions-table.tsx index c4952186..0d69c015 100644 --- a/src/components/transactions-table/transactions-table.tsx +++ b/src/components/transactions-table/transactions-table.tsx @@ -9,9 +9,11 @@ const COLUMNS = ['TxHash', 'Age', 'Shard', 'From', 'To', 'Method', 'Value']; shadow: true, }) export class TransactionsTable { - @Prop() transactions: ITransactionsTableRow[]; + @Prop() data: string; render() { + const transactions: ITransactionsTableRow[] = JSON.parse(this.data); + return ( @@ -24,7 +26,7 @@ export class TransactionsTable { - {this.transactions.map(transaction => ( + {transactions.map(transaction => ( ))} diff --git a/src/utils/icons/getIconHtmlFromIconDefinition.ts b/src/utils/icons/getIconHtmlFromIconDefinition.ts index 73a8804f..3eea6580 100644 --- a/src/utils/icons/getIconHtmlFromIconDefinition.ts +++ b/src/utils/icons/getIconHtmlFromIconDefinition.ts @@ -1,6 +1,10 @@ import { library, icon, IconDefinition, Icon } from '@fortawesome/fontawesome-svg-core'; export function getIconHtmlFromIconDefinition(iconDefinition: IconDefinition): string | null { + if (!iconDefinition) { + return null; + } + let faIcon: Icon; library.add(iconDefinition); faIcon = icon(iconDefinition);