From 3d8e462e629c232a4db0816f1856cd01dc61a2a7 Mon Sep 17 00:00:00 2001 From: abefernan <44572727+abefernan@users.noreply.github.com> Date: Wed, 26 Jul 2023 17:43:30 +0200 Subject: [PATCH] Add parseError instead of lossy --- .../TxMsgExecuteContractDetails.tsx | 34 ++++- .../TxMsgInstantiateContract2Details.tsx | 36 +++++- .../TxMsgInstantiateContractDetails.tsx | 34 ++++- .../TxMsgMigrateContractDetails.tsx | 121 +++++++++++------- 4 files changed, 170 insertions(+), 55 deletions(-) diff --git a/components/dataViews/TransactionInfo/TxMsgExecuteContractDetails.tsx b/components/dataViews/TransactionInfo/TxMsgExecuteContractDetails.tsx index f333334..ea94301 100644 --- a/components/dataViews/TransactionInfo/TxMsgExecuteContractDetails.tsx +++ b/components/dataViews/TransactionInfo/TxMsgExecuteContractDetails.tsx @@ -1,6 +1,8 @@ import { fromUtf8 } from "@cosmjs/encoding"; import { MsgExecuteContract } from "cosmjs-types/cosmwasm/wasm/v1/tx"; import dynamic from "next/dynamic"; +import { useState } from "react"; +import { JSONValue } from "vanilla-jsoneditor"; import { useChains } from "../../../context/ChainsContext"; import { printableCoins } from "../../../lib/displayHelpers"; import HashView from "../HashView"; @@ -13,6 +15,20 @@ interface TxMsgExecuteContractDetailsProps { const TxMsgExecuteContractDetails = ({ msgValue }: TxMsgExecuteContractDetailsProps) => { const { chain } = useChains(); + const [parseError, setParseError] = useState(""); + + const json: JSONValue = (() => { + if (parseError) { + return {}; + } + + try { + return JSON.parse(fromUtf8(msgValue.msg)); + } catch (e) { + setParseError(e instanceof Error ? e.message : "Failed to decode UTF-8 msg"); + return {}; + } + })(); return ( <> @@ -29,9 +45,15 @@ const TxMsgExecuteContractDetails = ({ msgValue }: TxMsgExecuteContractDetailsPr
{printableCoins(msgValue.funds, chain)}
-
  • - -
  • + {parseError ? ( +
  • +

    {parseError}

    +
  • + ) : ( +
  • + +
  • + )} ); diff --git a/components/dataViews/TransactionInfo/TxMsgInstantiateContract2Details.tsx b/components/dataViews/TransactionInfo/TxMsgInstantiateContract2Details.tsx index 00cefe9..c390a8d 100644 --- a/components/dataViews/TransactionInfo/TxMsgInstantiateContract2Details.tsx +++ b/components/dataViews/TransactionInfo/TxMsgInstantiateContract2Details.tsx @@ -1,6 +1,8 @@ -import { fromUtf8 } from "@cosmjs/encoding"; +import { fromUtf8, toHex } from "@cosmjs/encoding"; import { MsgInstantiateContract2 } from "cosmjs-types/cosmwasm/wasm/v1/tx"; import dynamic from "next/dynamic"; +import { useState } from "react"; +import { JSONValue } from "vanilla-jsoneditor"; import { useChains } from "../../../context/ChainsContext"; import { printableCoins } from "../../../lib/displayHelpers"; import HashView from "../HashView"; @@ -13,6 +15,20 @@ interface TxMsgInstantiateContract2DetailsProps { const TxMsgInstantiateContract2Details = ({ msgValue }: TxMsgInstantiateContract2DetailsProps) => { const { chain } = useChains(); + const [parseError, setParseError] = useState(""); + + const json: JSONValue = (() => { + if (parseError) { + return {}; + } + + try { + return JSON.parse(fromUtf8(msgValue.msg)); + } catch (e) { + setParseError(e instanceof Error ? e.message : "Failed to decode UTF-8 msg"); + return {}; + } + })(); return ( <> @@ -45,9 +61,15 @@ const TxMsgInstantiateContract2Details = ({ msgValue }: TxMsgInstantiateContract
    {printableCoins(msgValue.funds, chain)}
    -
  • - -
  • + {parseError ? ( +
  • +

    {parseError}

    +
  • + ) : ( +
  • + +
  • + )} ); diff --git a/components/dataViews/TransactionInfo/TxMsgInstantiateContractDetails.tsx b/components/dataViews/TransactionInfo/TxMsgInstantiateContractDetails.tsx index c50db10..fe6513a 100644 --- a/components/dataViews/TransactionInfo/TxMsgInstantiateContractDetails.tsx +++ b/components/dataViews/TransactionInfo/TxMsgInstantiateContractDetails.tsx @@ -1,6 +1,8 @@ import { fromUtf8 } from "@cosmjs/encoding"; import { MsgInstantiateContract } from "cosmjs-types/cosmwasm/wasm/v1/tx"; import dynamic from "next/dynamic"; +import { useState } from "react"; +import { JSONValue } from "vanilla-jsoneditor"; import { useChains } from "../../../context/ChainsContext"; import { printableCoins } from "../../../lib/displayHelpers"; import HashView from "../HashView"; @@ -13,6 +15,20 @@ interface TxMsgInstantiateContractDetailsProps { const TxMsgInstantiateContractDetails = ({ msgValue }: TxMsgInstantiateContractDetailsProps) => { const { chain } = useChains(); + const [parseError, setParseError] = useState(""); + + const json: JSONValue = (() => { + if (parseError) { + return {}; + } + + try { + return JSON.parse(fromUtf8(msgValue.msg)); + } catch (e) { + setParseError(e instanceof Error ? e.message : "Failed to decode UTF-8 msg"); + return {}; + } + })(); return ( <> @@ -41,9 +57,15 @@ const TxMsgInstantiateContractDetails = ({ msgValue }: TxMsgInstantiateContractD
    {printableCoins(msgValue.funds, chain)}
    -
  • - -
  • + {parseError ? ( +
  • +

    {parseError}

    +
  • + ) : ( +
  • + +
  • + )} ); diff --git a/components/dataViews/TransactionInfo/TxMsgMigrateContractDetails.tsx b/components/dataViews/TransactionInfo/TxMsgMigrateContractDetails.tsx index 09be796..086222e 100644 --- a/components/dataViews/TransactionInfo/TxMsgMigrateContractDetails.tsx +++ b/components/dataViews/TransactionInfo/TxMsgMigrateContractDetails.tsx @@ -1,6 +1,8 @@ import { fromUtf8 } from "@cosmjs/encoding"; import { MsgMigrateContract } from "cosmjs-types/cosmwasm/wasm/v1/tx"; import dynamic from "next/dynamic"; +import { useState } from "react"; +import { JSONValue } from "vanilla-jsoneditor"; import HashView from "../HashView"; const JsonEditor = dynamic(() => import("../../inputs/JsonEditor"), { ssr: false }); @@ -9,50 +11,79 @@ interface TxMsgMigrateContractDetailsProps { readonly msgValue: MsgMigrateContract; } -const TxMsgMigrateContractDetails = ({ msgValue }: TxMsgMigrateContractDetailsProps) => ( - <> -
  • -

    MsgMigrateContract

    -
  • -
  • - -
    - -
    -
  • -
  • - -
    {msgValue.codeId.toString()}
    -
  • -
  • - -
  • - - -); +const TxMsgMigrateContractDetails = ({ msgValue }: TxMsgMigrateContractDetailsProps) => { + const [parseError, setParseError] = useState(""); + + const json: JSONValue = (() => { + if (parseError) { + return {}; + } + + try { + return JSON.parse(fromUtf8(msgValue.msg)); + } catch (e) { + setParseError(e instanceof Error ? e.message : "Failed to decode UTF-8 msg"); + return {}; + } + })(); + + return ( + <> +
  • +

    MsgMigrateContract

    +
  • +
  • + +
    + +
    +
  • +
  • + +
    {msgValue.codeId.toString()}
    +
  • + {parseError ? ( +
  • +

    {parseError}

    +
  • + ) : ( +
  • + +
  • + )} + + + ); +}; export default TxMsgMigrateContractDetails;