From ca5bc6ca26f49f8012ca23f25b842fcffb388937 Mon Sep 17 00:00:00 2001 From: Poafs1 Date: Tue, 19 Mar 2024 14:39:10 +0700 Subject: [PATCH 1/4] feat(components): add bonded token changes delegation related transactions table desktop --- .../components/bonded-token-changes/index.tsx | 94 ++++++++++-- .../tables/RelatedTransactionsTable.tsx | 21 --- .../components/tables/index.ts | 2 +- .../RelatedTransactionsTable.tsx | 41 +++++ .../RelatedTransactionsTableHeader.tsx | 21 +++ .../RelatedTransactionsTableRow.tsx | 145 ++++++++++++++++++ .../tables/related-transactions/index.ts | 1 + src/lib/services/validator.ts | 15 +- src/lib/services/validatorService.ts | 10 +- src/lib/types/asset.ts | 1 + src/lib/utils/formatter/token.ts | 15 +- 11 files changed, 323 insertions(+), 43 deletions(-) delete mode 100644 src/lib/pages/validator-details/components/tables/RelatedTransactionsTable.tsx create mode 100644 src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx create mode 100644 src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableHeader.tsx create mode 100644 src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableRow.tsx create mode 100644 src/lib/pages/validator-details/components/tables/related-transactions/index.ts diff --git a/src/lib/pages/validator-details/components/bonded-token-changes/index.tsx b/src/lib/pages/validator-details/components/bonded-token-changes/index.tsx index 5cf7f8200..5ee88388f 100644 --- a/src/lib/pages/validator-details/components/bonded-token-changes/index.tsx +++ b/src/lib/pages/validator-details/components/bonded-token-changes/index.tsx @@ -1,6 +1,11 @@ -import { Flex } from "@chakra-ui/react"; +import { Box, Flex } from "@chakra-ui/react"; -import { RelatedTransactionTable } from "../tables/RelatedTransactionsTable"; +import { RelatedTransactionTable } from "../tables"; +import { useMobile } from "lib/app-provider"; +import { Pagination } from "lib/components/pagination"; +import { usePaginator } from "lib/components/pagination/usePaginator"; +import { TableTitle } from "lib/components/table"; +import { useValidatorDelegationRelatedTxs } from "lib/services/validatorService"; import type { AssetInfos, Option, ValidatorAddr } from "lib/types"; import { VotingPowerChart } from "./VotingPowerChart"; @@ -15,13 +20,78 @@ export const BondedTokenChanges = ({ validatorAddress, singleStakingDenom, assetInfos, -}: BondedTokenChangesProps) => ( - - - - -); +}: BondedTokenChangesProps) => { + const isMobile = useMobile(); + + const { + pagesQuantity, + setTotalData, + currentPage, + setCurrentPage, + pageSize, + setPageSize, + offset, + } = usePaginator({ + initialState: { + pageSize: 10, + currentPage: 1, + isDisabled: false, + }, + }); + + const { data, isLoading } = useValidatorDelegationRelatedTxs( + validatorAddress, + pageSize, + offset, + { + onSuccess: ({ total }) => setTotalData(total), + } + ); + + const tableHeaderId = "relatedTransactionTableHeader"; + + return ( + + + + {isMobile ? ( +
Is Mobile
+ ) : ( + <> + + + + )} + {!!data?.total && data.total > 10 && ( + { + const size = Number(e.target.value); + setPageSize(size); + setCurrentPage(1); + }} + /> + )} +
+
+ ); +}; diff --git a/src/lib/pages/validator-details/components/tables/RelatedTransactionsTable.tsx b/src/lib/pages/validator-details/components/tables/RelatedTransactionsTable.tsx deleted file mode 100644 index 4183138bd..000000000 --- a/src/lib/pages/validator-details/components/tables/RelatedTransactionsTable.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { Flex, Heading, Text } from "@chakra-ui/react"; - -import { useMobile } from "lib/app-provider"; - -export const RelatedTransactionTable = () => { - const isMobile = useMobile(); - return isMobile ? ( - mobile table - ) : ( - - - Delegation-Related Transactions - - - Shows transactions relevant to changes in delegated tokens, excluding - any token reduction due to slashing. - - table - - ); -}; diff --git a/src/lib/pages/validator-details/components/tables/index.ts b/src/lib/pages/validator-details/components/tables/index.ts index 1ce862e1b..112205369 100644 --- a/src/lib/pages/validator-details/components/tables/index.ts +++ b/src/lib/pages/validator-details/components/tables/index.ts @@ -1,3 +1,3 @@ export * from "./ProposedBlocksTable"; -export * from "./RelatedTransactionsTable"; +export * from "./related-transactions"; export * from "./VotedProposalsTable"; diff --git a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx new file mode 100644 index 000000000..cc8004569 --- /dev/null +++ b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx @@ -0,0 +1,41 @@ +import { Box } from "@interchain-ui/react"; + +import { Loading } from "lib/components/Loading"; +import { TableContainer } from "lib/components/table"; +import type { ValidatorDelegationRelatedTxsResponseItem } from "lib/services/validator"; +import type { AssetInfos, Option } from "lib/types"; + +import { RelatedTransactionsTableHeader } from "./RelatedTransactionsTableHeader"; +import { RelatedTransactionsTableRow } from "./RelatedTransactionsTableRow"; + +interface RelatedTransactionTableProps { + delegationRelatedTxs: Option; + isLoading: boolean; + assetInfos: Option; +} + +export const RelatedTransactionTable = ({ + delegationRelatedTxs = [], + isLoading, + assetInfos, +}: RelatedTransactionTableProps) => { + if (isLoading) return ; + + const templateColumns = "1fr 1fr 1fr 1fr 1fr"; + + return ( + + + + {delegationRelatedTxs.map((delegationRelatedTx) => ( + + ))} + + + ); +}; diff --git a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableHeader.tsx b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableHeader.tsx new file mode 100644 index 000000000..b8becd2b2 --- /dev/null +++ b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableHeader.tsx @@ -0,0 +1,21 @@ +import { Grid } from "@chakra-ui/react"; + +import { TableHeader } from "lib/components/table"; + +interface RelatedTransactionsTableHeaderProps { + templateColumns: string; +} + +export const RelatedTransactionsTableHeader = ({ + templateColumns, +}: RelatedTransactionsTableHeaderProps) => ( + + Transaction Hash + Sender + Action + + Bonded Token Changes + + Timestamp + +); diff --git a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableRow.tsx b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableRow.tsx new file mode 100644 index 000000000..1de4c6702 --- /dev/null +++ b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableRow.tsx @@ -0,0 +1,145 @@ +import { Badge, Box, Flex, Grid, Text } from "@chakra-ui/react"; +import type { BigSource } from "big.js"; + +import { ExplorerLink } from "lib/components/ExplorerLink"; +import { TableRow } from "lib/components/table"; +import { TokenImageRender } from "lib/components/token"; +import { getUndefinedTokenIcon } from "lib/pages/pools/utils"; +import type { ValidatorDelegationRelatedTxsResponseItem } from "lib/services/validator"; +import type { AssetInfos, Coin, Option, USD } from "lib/types"; +import { + coinToTokenWithValue, + dateFromNow, + extractMsgType, + formatPrice, + formatUTC, + formatUTokenWithPrecision, +} from "lib/utils"; + +interface RelatedTransactionsBondedTokenChangesProps { + txHash: string; + token: Coin; + assetInfos: Option; +} + +const RelatedTransactionsBondedTokenChanges = ({ + txHash, + token, + assetInfos, +}: RelatedTransactionsBondedTokenChangesProps) => { + const tokenWithValue = coinToTokenWithValue( + token?.denom, + token?.amount, + assetInfos + ); + + const formattedAmount = formatUTokenWithPrecision( + tokenWithValue.amount, + tokenWithValue.precision ?? 0, + false, + 2, + true + ); + + const isPositiveAmount = tokenWithValue.amount.gte(0); + + return ( + + + + + {formattedAmount} + {" "} + {tokenWithValue.symbol} + + + ({formatPrice(tokenWithValue.value?.abs() as USD)}) + + + + + ); +}; + +interface RelatedTransactionsTableRowProps { + delegationRelatedTx: ValidatorDelegationRelatedTxsResponseItem; + templateColumns: string; + assetInfos: Option; +} + +export const RelatedTransactionsTableRow = ({ + delegationRelatedTx, + templateColumns, + assetInfos, +}: RelatedTransactionsTableRowProps) => { + return ( + + + + {delegationRelatedTx.messages.length > 1 && ( + + {delegationRelatedTx.messages.length} + + )} + + + + + + + {delegationRelatedTx.messages.length > 1 + ? `${delegationRelatedTx.messages.length} Messages` + : extractMsgType(delegationRelatedTx.messages[0].type)} + + + + {delegationRelatedTx.tokens.map((token) => ( + + ))} + + + + + {formatUTC(delegationRelatedTx.timestamp)} + + + {`(${dateFromNow(delegationRelatedTx.timestamp)})`} + + + + + ); +}; diff --git a/src/lib/pages/validator-details/components/tables/related-transactions/index.ts b/src/lib/pages/validator-details/components/tables/related-transactions/index.ts new file mode 100644 index 000000000..bc62e3984 --- /dev/null +++ b/src/lib/pages/validator-details/components/tables/related-transactions/index.ts @@ -0,0 +1 @@ +export * from "./RelatedTransactionsTable"; diff --git a/src/lib/services/validator.ts b/src/lib/services/validator.ts index 37a2b8a22..034da15f9 100644 --- a/src/lib/services/validator.ts +++ b/src/lib/services/validator.ts @@ -12,7 +12,12 @@ import { zValidatorAddr, zValidatorData, } from "lib/types"; -import { parseWithError, removeSpecialChars, snakeToCamel } from "lib/utils"; +import { + parseTxHash, + parseWithError, + removeSpecialChars, + snakeToCamel, +} from "lib/utils"; import { zBlocksResponse } from "./block"; import { zProposal } from "./proposal"; @@ -227,7 +232,13 @@ const zValidatorDelegationRelatedTxsResponseItem = z messages: z.array(zValidatorDelegationRelatedTxsResponseMessage), sender: zValidatorAddr, }) - .transform(snakeToCamel); + .transform((val) => ({ + ...snakeToCamel(val), + txHash: parseTxHash(val.tx_hash), + })); +export type ValidatorDelegationRelatedTxsResponseItem = z.infer< + typeof zValidatorDelegationRelatedTxsResponseItem +>; const zValidatorDelegationRelatedTxsResponse = z.object({ items: z.array(zValidatorDelegationRelatedTxsResponseItem), diff --git a/src/lib/services/validatorService.ts b/src/lib/services/validatorService.ts index c390dbea3..2ee12ce50 100644 --- a/src/lib/services/validatorService.ts +++ b/src/lib/services/validatorService.ts @@ -168,7 +168,11 @@ export const useValidatorUptime = ( export const useValidatorDelegationRelatedTxs = ( validatorAddress: ValidatorAddr, limit: number, - offset: number + offset: number, + options: Pick< + UseQueryOptions, + "onSuccess" + > = {} ) => { const endpoint = useBaseApiRoute("validators"); @@ -177,6 +181,8 @@ export const useValidatorDelegationRelatedTxs = ( CELATONE_QUERY_KEYS.VALIDATOR_DELEGATION_RELATED_TXS, endpoint, validatorAddress, + limit, + offset, ], async () => getValidatorDelegationRelatedTxs( @@ -185,7 +191,7 @@ export const useValidatorDelegationRelatedTxs = ( limit, offset ), - { retry: 1 } + { retry: 1, ...options } ); }; diff --git a/src/lib/types/asset.ts b/src/lib/types/asset.ts index 6cfe6690b..0d649602b 100644 --- a/src/lib/types/asset.ts +++ b/src/lib/types/asset.ts @@ -7,6 +7,7 @@ export const zCoin = z.object({ denom: z.string(), amount: z.string(), }); +export type Coin = z.infer; export const zAssetInfo = z.object({ coingecko: z.string(), diff --git a/src/lib/utils/formatter/token.ts b/src/lib/utils/formatter/token.ts index e6eb779b0..01b02271c 100644 --- a/src/lib/utils/formatter/token.ts +++ b/src/lib/utils/formatter/token.ts @@ -53,7 +53,7 @@ export const toToken = ( ): Token => { try { const value = big(uAmount).div(big(10).pow(precision)); - return (value.gte(0) ? value : big(0)) as Token; + return value as Token; } catch { return big(0) as Token; } @@ -68,18 +68,23 @@ export const formatUTokenWithPrecision = ( amount: U>, precision: number, isSuffix = true, - decimalPoints?: number + decimalPoints?: number, + allowNegativeValue = false ): string => { const token = toToken(amount, precision); + if (isSuffix) { if (token.gte(B)) return `${d2Formatter(token.div(B), "0.00")}B`; if (token.gte(M)) return `${d2Formatter(token.div(M), "0.00")}M`; if (token.gte(K)) return `${d2Formatter(token, "0.00")}`; } - const lowestThreshold = big(10).pow(-(decimalPoints ?? precision)); - if (!token.eq(0) && token.lt(lowestThreshold)) { - return `<${lowestThreshold.toFixed()}`; + if (!allowNegativeValue) { + const lowestThreshold = big(10).pow(-(decimalPoints ?? precision)); + + if (!token.eq(0) && token.lt(lowestThreshold)) { + return `<${lowestThreshold.toFixed()}`; + } } return formatDecimal({ From 0a0ae17c042d628a74609c6c99b4b0364b620b1e Mon Sep 17 00:00:00 2001 From: Poafs1 Date: Tue, 19 Mar 2024 14:43:07 +0700 Subject: [PATCH 2/4] feat: update changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d5bab402..e8f6fa427 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Features +- [#832](https://github.com/alleslabs/celatone-frontend/pull/832) Add bonded token changes delegation related transactions - [#831](https://github.com/alleslabs/celatone-frontend/pull/831) Update zod schema to apply with new validator delegation related txs api spec - [#828](https://github.com/alleslabs/celatone-frontend/pull/828) Add validator detail voting power overview section with data from APIs - [#819](https://github.com/alleslabs/celatone-frontend/pull/819) Add validator detail overview section with data from APIs From 3d0fc9b29ee99f413e601b92049321123d9eccc3 Mon Sep 17 00:00:00 2001 From: Poafs1 Date: Tue, 19 Mar 2024 15:35:21 +0700 Subject: [PATCH 3/4] feat(components): delegation related transactions mobile card view --- .../components/bonded-token-changes/index.tsx | 11 ++- .../RelatedTransactionsBondedTokenChanges.tsx | 71 ++++++++++++++ .../RelatedTransactionsMobileCard.tsx | 96 +++++++++++++++++++ .../RelatedTransactionsTable.tsx | 26 +++-- .../RelatedTransactionsTableRow.tsx | 76 +-------------- .../tables/related-transactions/index.ts | 1 + src/lib/services/validator.ts | 10 +- 7 files changed, 197 insertions(+), 94 deletions(-) create mode 100644 src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsBondedTokenChanges.tsx create mode 100644 src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsMobileCard.tsx diff --git a/src/lib/pages/validator-details/components/bonded-token-changes/index.tsx b/src/lib/pages/validator-details/components/bonded-token-changes/index.tsx index 5ee88388f..e5d6c62c5 100644 --- a/src/lib/pages/validator-details/components/bonded-token-changes/index.tsx +++ b/src/lib/pages/validator-details/components/bonded-token-changes/index.tsx @@ -1,6 +1,9 @@ import { Box, Flex } from "@chakra-ui/react"; -import { RelatedTransactionTable } from "../tables"; +import { + RelatedTransactionsMobileCard, + RelatedTransactionTable, +} from "../tables"; import { useMobile } from "lib/app-provider"; import { Pagination } from "lib/components/pagination"; import { usePaginator } from "lib/components/pagination/usePaginator"; @@ -59,7 +62,11 @@ export const BondedTokenChanges = ({ /> {isMobile ? ( -
Is Mobile
+ ) : ( <> ; +} + +export const RelatedTransactionsBondedTokenChanges = ({ + txHash, + token, + assetInfos, +}: RelatedTransactionsBondedTokenChangesProps) => { + const tokenWithValue = coinToTokenWithValue( + token?.denom, + token?.amount, + assetInfos + ); + + const formattedAmount = formatUTokenWithPrecision( + tokenWithValue.amount, + tokenWithValue.precision ?? 0, + false, + 2, + true + ); + + const isPositiveAmount = tokenWithValue.amount.gte(0); + + return ( + + + + + {formattedAmount} + {" "} + {tokenWithValue.symbol} + + + ({formatPrice(tokenWithValue.value?.abs() as USD)}) + + + + + ); +}; diff --git a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsMobileCard.tsx b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsMobileCard.tsx new file mode 100644 index 000000000..b2c8e7719 --- /dev/null +++ b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsMobileCard.tsx @@ -0,0 +1,96 @@ +import { Badge, Box, Flex, Grid, GridItem, Text } from "@chakra-ui/react"; + +import { ExplorerLink } from "lib/components/ExplorerLink"; +import { Loading } from "lib/components/Loading"; +import { MobileCardTemplate, MobileTableContainer } from "lib/components/table"; +import type { ValidatorDelegationRelatedTxsResponseItem } from "lib/services/validator"; +import type { AssetInfos, Option } from "lib/types"; +import { dateFromNow, extractMsgType, formatUTC } from "lib/utils"; + +import { RelatedTransactionsBondedTokenChanges } from "./RelatedTransactionsBondedTokenChanges"; + +interface RelatedTransactionsMobileCardProps { + delegationRelatedTxs: Option; + isLoading: boolean; + assetInfos: Option; +} + +export const RelatedTransactionsMobileCard = ({ + delegationRelatedTxs, + isLoading, + assetInfos, +}: RelatedTransactionsMobileCardProps) => { + if (isLoading) return ; + + return ( + + {delegationRelatedTxs?.map((delegationRelatedTx) => ( + + + + + Transaction Hash + + + {delegationRelatedTx.messages.length > 1 && ( + + {delegationRelatedTx.messages.length} + + )} + + + + Sender + + + + + + + Action + + + {delegationRelatedTx.messages.length > 1 + ? `${delegationRelatedTx.messages.length} Messages` + : extractMsgType(delegationRelatedTx.messages[0].type)} + + + + + Bonded Token Changes + + {delegationRelatedTx.tokens.map((token) => ( + + ))} + + + } + bottomContent={ + + + {formatUTC(delegationRelatedTx.timestamp)} + + + {`(${dateFromNow(delegationRelatedTx.timestamp)})`} + + + } + /> + ))} + + ); +}; diff --git a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx index cc8004569..106e114f6 100644 --- a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx +++ b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx @@ -1,5 +1,3 @@ -import { Box } from "@interchain-ui/react"; - import { Loading } from "lib/components/Loading"; import { TableContainer } from "lib/components/table"; import type { ValidatorDelegationRelatedTxsResponseItem } from "lib/services/validator"; @@ -24,18 +22,16 @@ export const RelatedTransactionTable = ({ const templateColumns = "1fr 1fr 1fr 1fr 1fr"; return ( - - - - {delegationRelatedTxs.map((delegationRelatedTx) => ( - - ))} - - + + + {delegationRelatedTxs.map((delegationRelatedTx) => ( + + ))} + ); }; diff --git a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableRow.tsx b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableRow.tsx index 1de4c6702..01bfa5933 100644 --- a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableRow.tsx +++ b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTableRow.tsx @@ -1,80 +1,12 @@ -import { Badge, Box, Flex, Grid, Text } from "@chakra-ui/react"; -import type { BigSource } from "big.js"; +import { Badge, Box, Grid, Text } from "@chakra-ui/react"; import { ExplorerLink } from "lib/components/ExplorerLink"; import { TableRow } from "lib/components/table"; -import { TokenImageRender } from "lib/components/token"; -import { getUndefinedTokenIcon } from "lib/pages/pools/utils"; import type { ValidatorDelegationRelatedTxsResponseItem } from "lib/services/validator"; -import type { AssetInfos, Coin, Option, USD } from "lib/types"; -import { - coinToTokenWithValue, - dateFromNow, - extractMsgType, - formatPrice, - formatUTC, - formatUTokenWithPrecision, -} from "lib/utils"; +import type { AssetInfos, Option } from "lib/types"; +import { dateFromNow, extractMsgType, formatUTC } from "lib/utils"; -interface RelatedTransactionsBondedTokenChangesProps { - txHash: string; - token: Coin; - assetInfos: Option; -} - -const RelatedTransactionsBondedTokenChanges = ({ - txHash, - token, - assetInfos, -}: RelatedTransactionsBondedTokenChangesProps) => { - const tokenWithValue = coinToTokenWithValue( - token?.denom, - token?.amount, - assetInfos - ); - - const formattedAmount = formatUTokenWithPrecision( - tokenWithValue.amount, - tokenWithValue.precision ?? 0, - false, - 2, - true - ); - - const isPositiveAmount = tokenWithValue.amount.gte(0); - - return ( - - - - - {formattedAmount} - {" "} - {tokenWithValue.symbol} - - - ({formatPrice(tokenWithValue.value?.abs() as USD)}) - - - - - ); -}; +import { RelatedTransactionsBondedTokenChanges } from "./RelatedTransactionsBondedTokenChanges"; interface RelatedTransactionsTableRowProps { delegationRelatedTx: ValidatorDelegationRelatedTxsResponseItem; diff --git a/src/lib/pages/validator-details/components/tables/related-transactions/index.ts b/src/lib/pages/validator-details/components/tables/related-transactions/index.ts index bc62e3984..510db6bb2 100644 --- a/src/lib/pages/validator-details/components/tables/related-transactions/index.ts +++ b/src/lib/pages/validator-details/components/tables/related-transactions/index.ts @@ -1 +1,2 @@ export * from "./RelatedTransactionsTable"; +export * from "./RelatedTransactionsMobileCard"; diff --git a/src/lib/services/validator.ts b/src/lib/services/validator.ts index 034da15f9..fb014df1f 100644 --- a/src/lib/services/validator.ts +++ b/src/lib/services/validator.ts @@ -219,17 +219,17 @@ export const getValidatorUptime = async ( }) .then(({ data }) => parseWithError(zValidatorUptimeResponse, data)); -const zValidatorDelegationRelatedTxsResponseMessage = z.object({ - type: z.string(), -}); - const zValidatorDelegationRelatedTxsResponseItem = z .object({ tx_hash: z.string(), height: z.number().positive(), tokens: zCoin.array(), timestamp: zUtcDate, - messages: z.array(zValidatorDelegationRelatedTxsResponseMessage), + messages: z.array( + z.object({ + type: z.string(), + }) + ), sender: zValidatorAddr, }) .transform((val) => ({ From 3fe242930cf1b60ad4d9cf4d6ff77e00f2eb1dd3 Mon Sep 17 00:00:00 2001 From: Poafs1 Date: Tue, 19 Mar 2024 15:47:59 +0700 Subject: [PATCH 4/4] feat(components): update related transactions table fraction --- .../tables/related-transactions/RelatedTransactionsTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx index 106e114f6..322dc666b 100644 --- a/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx +++ b/src/lib/pages/validator-details/components/tables/related-transactions/RelatedTransactionsTable.tsx @@ -19,7 +19,7 @@ export const RelatedTransactionTable = ({ }: RelatedTransactionTableProps) => { if (isLoading) return ; - const templateColumns = "1fr 1fr 1fr 1fr 1fr"; + const templateColumns = "max(180px) max(180px) max(180px) 1fr max(280px)"; return (