1
1
import { Loader , Text } from "@stellar/design-system" ;
2
- import { scValToNative , xdr } from "@stellar/stellar-sdk" ;
3
- import { stringify } from "lossless-json" ;
4
2
5
3
import { ErrorText } from "@/components/ErrorText" ;
6
4
import { Box } from "@/components/layout/Box" ;
7
5
import { DataTable } from "@/components/DataTable" ;
6
+ import { ScValPrettyJson } from "@/components/ScValPrettyJson" ;
8
7
9
8
import { useSEContractStorage } from "@/query/external/useSEContracStorage" ;
10
9
import { formatEpochToDate } from "@/helpers/formatEpochToDate" ;
11
10
import { formatNumber } from "@/helpers/formatNumber" ;
12
11
import { capitalizeString } from "@/helpers/capitalizeString" ;
13
12
13
+ import { useIsXdrInit } from "@/hooks/useIsXdrInit" ;
14
+
14
15
import { ContractStorageResponseItem , NetworkType } from "@/types/types" ;
15
16
16
17
export const ContractStorage = ( {
@@ -24,6 +25,8 @@ export const ContractStorage = ({
24
25
networkId : NetworkType ;
25
26
totalEntriesCount : number | undefined ;
26
27
} ) => {
28
+ const isXdrInit = useIsXdrInit ( ) ;
29
+
27
30
const {
28
31
data : storageData ,
29
32
error : storageError ,
@@ -35,6 +38,7 @@ export const ContractStorage = ({
35
38
contractId,
36
39
totalEntriesCount,
37
40
} ) ;
41
+
38
42
// Loading, error, and no data states
39
43
if ( isStorageLoading || isStorageFetching ) {
40
44
return (
@@ -51,32 +55,14 @@ export const ContractStorage = ({
51
55
if ( ! storageData || storageData . length === 0 ) {
52
56
return (
53
57
< Text as = "div" size = "sm" >
54
- No version history
58
+ No contract storage
55
59
</ Text >
56
60
) ;
57
61
}
58
62
59
- const formatScv = ( xdrString : string ) => {
60
- // TODO: handle formatting
61
- try {
62
- const scv = xdr . ScVal . fromXDR ( xdrString , "base64" ) ;
63
-
64
- // TODO: handle instance
65
- const res = scValToNative ( scv ) ;
66
-
67
- if ( typeof res === "object" ) {
68
- return stringify ( res ) ;
69
- }
70
-
71
- return res ;
72
- } catch ( e : any ) {
73
- return xdrString ;
74
- }
75
- } ;
76
-
77
63
return (
78
64
< DataTable
79
- tableId = "contract-version-history "
65
+ tableId = "contract-storage "
80
66
tableData = { storageData }
81
67
tableHeaders = { [
82
68
{ id : "key" , value : "Key" , isSortable : false } ,
@@ -86,8 +72,20 @@ export const ContractStorage = ({
86
72
{ id : "updated" , value : "Updated" , isSortable : true } ,
87
73
] }
88
74
formatDataRow = { ( vh : ContractStorageResponseItem ) => [
89
- { value : < div > { formatScv ( vh . key ) } </ div > } ,
90
- { value : < div > { formatScv ( vh . value ) } </ div > } ,
75
+ {
76
+ value : (
77
+ < div className = "CodeBox" >
78
+ < ScValPrettyJson xdrString = { vh . key } isReady = { isXdrInit } />
79
+ </ div >
80
+ ) ,
81
+ } ,
82
+ {
83
+ value : (
84
+ < div className = "CodeBox" >
85
+ < ScValPrettyJson xdrString = { vh . value } isReady = { isXdrInit } />
86
+ </ div >
87
+ ) ,
88
+ } ,
91
89
{ value : capitalizeString ( vh . durability ) } ,
92
90
{ value : formatNumber ( vh . ttl ) } ,
93
91
{ value : formatEpochToDate ( vh . updated , "short" ) || "-" } ,
0 commit comments