Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
F
frontend
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
vicotor
frontend
Commits
40109a61
Commit
40109a61
authored
May 25, 2023
by
tom
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
skeletons for internal txs
parent
c0834be6
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
108 additions
and
49 deletions
+108
-49
AddressInternalTxs.tsx
ui/address/AddressInternalTxs.tsx
+23
-7
AddressIntTxsList.tsx
ui/address/internals/AddressIntTxsList.tsx
+10
-2
AddressIntTxsListItem.tsx
ui/address/internals/AddressIntTxsListItem.tsx
+28
-21
AddressIntTxsTable.tsx
ui/address/internals/AddressIntTxsTable.tsx
+9
-3
AddressIntTxsTableItem.tsx
ui/address/internals/AddressIntTxsTableItem.tsx
+38
-16
No files found.
ui/address/AddressInternalTxs.tsx
View file @
40109a61
...
@@ -9,6 +9,8 @@ import getFilterValueFromQuery from 'lib/getFilterValueFromQuery';
...
@@ -9,6 +9,8 @@ import getFilterValueFromQuery from 'lib/getFilterValueFromQuery';
import
useQueryWithPages
from
'
lib/hooks/useQueryWithPages
'
;
import
useQueryWithPages
from
'
lib/hooks/useQueryWithPages
'
;
import
{
apos
}
from
'
lib/html-entities
'
;
import
{
apos
}
from
'
lib/html-entities
'
;
import
getQueryParamString
from
'
lib/router/getQueryParamString
'
;
import
getQueryParamString
from
'
lib/router/getQueryParamString
'
;
import
{
INTERNAL_TX
}
from
'
stubs/internalTx
'
;
import
{
generateListStub
}
from
'
stubs/utils
'
;
import
AddressIntTxsTable
from
'
ui/address/internals/AddressIntTxsTable
'
;
import
AddressIntTxsTable
from
'
ui/address/internals/AddressIntTxsTable
'
;
import
ActionBar
from
'
ui/shared/ActionBar
'
;
import
ActionBar
from
'
ui/shared/ActionBar
'
;
import
DataListDisplay
from
'
ui/shared/DataListDisplay
'
;
import
DataListDisplay
from
'
ui/shared/DataListDisplay
'
;
...
@@ -26,15 +28,28 @@ const AddressInternalTxs = ({ scrollRef }: {scrollRef?: React.RefObject<HTMLDivE
...
@@ -26,15 +28,28 @@ const AddressInternalTxs = ({ scrollRef }: {scrollRef?: React.RefObject<HTMLDivE
const
hash
=
getQueryParamString
(
router
.
query
.
hash
);
const
hash
=
getQueryParamString
(
router
.
query
.
hash
);
const
{
data
,
is
Loading
,
isError
,
pagination
,
onFilterChange
,
isPaginationVisible
}
=
useQueryWithPages
({
const
{
data
,
is
PlaceholderData
,
isError
,
pagination
,
onFilterChange
,
isPaginationVisible
}
=
useQueryWithPages
({
resourceName
:
'
address_internal_txs
'
,
resourceName
:
'
address_internal_txs
'
,
pathParams
:
{
hash
},
pathParams
:
{
hash
},
filters
:
{
filter
:
filterValue
},
filters
:
{
filter
:
filterValue
},
scrollRef
,
scrollRef
,
options
:
{
placeholderData
:
generateListStub
<
'
address_internal_txs
'
>
(
INTERNAL_TX
,
50
,
{
next_page_params
:
{
block_number
:
8987561
,
index
:
2
,
items_count
:
50
,
transaction_index
:
67
,
},
},
),
},
});
});
const
handleFilterChange
=
React
.
useCallback
((
val
:
string
|
Array
<
string
>
)
=>
{
const
handleFilterChange
=
React
.
useCallback
((
val
:
string
|
Array
<
string
>
)
=>
{
const
newVal
=
getFilterValue
(
val
);
const
newVal
=
getFilterValue
(
val
);
setFilterValue
(
newVal
);
setFilterValue
(
newVal
);
onFilterChange
({
filter
:
newVal
});
onFilterChange
({
filter
:
newVal
});
...
@@ -43,22 +58,23 @@ const AddressInternalTxs = ({ scrollRef }: {scrollRef?: React.RefObject<HTMLDivE
...
@@ -43,22 +58,23 @@ const AddressInternalTxs = ({ scrollRef }: {scrollRef?: React.RefObject<HTMLDivE
const
content
=
data
?.
items
?
(
const
content
=
data
?.
items
?
(
<>
<>
<
Show
below=
"lg"
ssr=
{
false
}
>
<
Show
below=
"lg"
ssr=
{
false
}
>
<
AddressIntTxsList
data=
{
data
.
items
}
currentAddress=
{
hash
}
/>
<
AddressIntTxsList
data=
{
data
.
items
}
currentAddress=
{
hash
}
isLoading=
{
isPlaceholderData
}
/>
</
Show
>
</
Show
>
<
Hide
below=
"lg"
ssr=
{
false
}
>
<
Hide
below=
"lg"
ssr=
{
false
}
>
<
AddressIntTxsTable
data=
{
data
.
items
}
currentAddress=
{
hash
}
/>
<
AddressIntTxsTable
data=
{
data
.
items
}
currentAddress=
{
hash
}
isLoading=
{
isPlaceholderData
}
/>
</
Hide
>
</
Hide
>
</>
</>
)
:
null
;
)
:
null
;
const
actionBar
=
(
const
actionBar
=
(
<
ActionBar
mt=
{
-
6
}
justifyContent=
"left"
showShadow=
{
isLoading
}
>
<
ActionBar
mt=
{
-
6
}
justifyContent=
"left"
>
<
AddressTxsFilter
<
AddressTxsFilter
defaultFilter=
{
filterValue
}
defaultFilter=
{
filterValue
}
onFilterChange=
{
handleFilterChange
}
onFilterChange=
{
handleFilterChange
}
isActive=
{
Boolean
(
filterValue
)
}
isActive=
{
Boolean
(
filterValue
)
}
isLoading=
{
pagination
.
isLoading
}
/>
/>
<
AddressCsvExportLink
address=
{
hash
}
type=
"internal-transactions"
ml=
{
{
base
:
2
,
lg
:
'
auto
'
}
}
/>
<
AddressCsvExportLink
address=
{
hash
}
isLoading=
{
pagination
.
isLoading
}
type=
"internal-transactions"
ml=
{
{
base
:
2
,
lg
:
'
auto
'
}
}
/>
{
isPaginationVisible
&&
<
Pagination
ml=
{
{
base
:
'
auto
'
,
lg
:
8
}
}
{
...
pagination
}
/>
}
{
isPaginationVisible
&&
<
Pagination
ml=
{
{
base
:
'
auto
'
,
lg
:
8
}
}
{
...
pagination
}
/>
}
</
ActionBar
>
</
ActionBar
>
);
);
...
@@ -66,7 +82,7 @@ const AddressInternalTxs = ({ scrollRef }: {scrollRef?: React.RefObject<HTMLDivE
...
@@ -66,7 +82,7 @@ const AddressInternalTxs = ({ scrollRef }: {scrollRef?: React.RefObject<HTMLDivE
return
(
return
(
<
DataListDisplay
<
DataListDisplay
isError=
{
isError
}
isError=
{
isError
}
isLoading=
{
isLoading
}
isLoading=
{
false
}
items=
{
data
?.
items
}
items=
{
data
?.
items
}
skeletonProps=
{
{
isLongSkeleton
:
true
,
skeletonDesktopColumns
:
[
'
15%
'
,
'
15%
'
,
'
10%
'
,
'
20%
'
,
'
20%
'
,
'
20%
'
]
}
}
skeletonProps=
{
{
isLongSkeleton
:
true
,
skeletonDesktopColumns
:
[
'
15%
'
,
'
15%
'
,
'
10%
'
,
'
20%
'
,
'
20%
'
,
'
20%
'
]
}
}
filterProps=
{
{
emptyFilteredText
:
`Couldn${ apos }t find any transaction that matches your query.`
,
hasActiveFilters
:
Boolean
(
filterValue
)
}
}
filterProps=
{
{
emptyFilteredText
:
`Couldn${ apos }t find any transaction that matches your query.`
,
hasActiveFilters
:
Boolean
(
filterValue
)
}
}
...
...
ui/address/internals/AddressIntTxsList.tsx
View file @
40109a61
...
@@ -8,12 +8,20 @@ import AddressIntTxsListItem from 'ui/address/internals/AddressIntTxsListItem';
...
@@ -8,12 +8,20 @@ import AddressIntTxsListItem from 'ui/address/internals/AddressIntTxsListItem';
type
Props
=
{
type
Props
=
{
data
:
Array
<
InternalTransaction
>
;
data
:
Array
<
InternalTransaction
>
;
currentAddress
:
string
;
currentAddress
:
string
;
isLoading
?:
boolean
;
}
}
const
AddressIntTxsList
=
({
data
,
currentAddress
}:
Props
)
=>
{
const
AddressIntTxsList
=
({
data
,
currentAddress
,
isLoading
}:
Props
)
=>
{
return
(
return
(
<
Box
>
<
Box
>
{
data
.
map
((
item
)
=>
<
AddressIntTxsListItem
key=
{
item
.
transaction_hash
}
{
...
item
}
currentAddress=
{
currentAddress
}
/>)
}
{
data
.
map
((
item
,
index
)
=>
(
<
AddressIntTxsListItem
key=
{
item
.
transaction_hash
+
'
_
'
+
index
}
{
...
item
}
currentAddress=
{
currentAddress
}
isLoading=
{
isLoading
}
/>
))
}
</
Box
>
</
Box
>
);
);
};
};
...
...
ui/address/internals/AddressIntTxsListItem.tsx
View file @
40109a61
import
{
Flex
,
Tag
,
Icon
,
Box
,
HStack
,
Text
}
from
'
@chakra-ui/react
'
;
import
{
Flex
,
Box
,
HStack
,
Skeleton
}
from
'
@chakra-ui/react
'
;
import
BigNumber
from
'
bignumber.js
'
;
import
BigNumber
from
'
bignumber.js
'
;
import
{
route
}
from
'
nextjs-routes
'
;
import
{
route
}
from
'
nextjs-routes
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -11,6 +11,8 @@ import dayjs from 'lib/date/dayjs';
...
@@ -11,6 +11,8 @@ import dayjs from 'lib/date/dayjs';
import
Address
from
'
ui/shared/address/Address
'
;
import
Address
from
'
ui/shared/address/Address
'
;
import
AddressIcon
from
'
ui/shared/address/AddressIcon
'
;
import
AddressIcon
from
'
ui/shared/address/AddressIcon
'
;
import
AddressLink
from
'
ui/shared/address/AddressLink
'
;
import
AddressLink
from
'
ui/shared/address/AddressLink
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
Tag
from
'
ui/shared/chakra/Tag
'
;
import
CopyToClipboard
from
'
ui/shared/CopyToClipboard
'
;
import
CopyToClipboard
from
'
ui/shared/CopyToClipboard
'
;
import
InOutTag
from
'
ui/shared/InOutTag
'
;
import
InOutTag
from
'
ui/shared/InOutTag
'
;
import
LinkInternal
from
'
ui/shared/LinkInternal
'
;
import
LinkInternal
from
'
ui/shared/LinkInternal
'
;
...
@@ -18,7 +20,7 @@ import ListItemMobile from 'ui/shared/ListItemMobile/ListItemMobile';
...
@@ -18,7 +20,7 @@ import ListItemMobile from 'ui/shared/ListItemMobile/ListItemMobile';
import
TxStatus
from
'
ui/shared/TxStatus
'
;
import
TxStatus
from
'
ui/shared/TxStatus
'
;
import
{
TX_INTERNALS_ITEMS
}
from
'
ui/tx/internals/utils
'
;
import
{
TX_INTERNALS_ITEMS
}
from
'
ui/tx/internals/utils
'
;
type
Props
=
InternalTransaction
&
{
currentAddress
:
string
};
type
Props
=
InternalTransaction
&
{
currentAddress
:
string
;
isLoading
?:
boolean
};
const
TxInternalsListItem
=
({
const
TxInternalsListItem
=
({
type
,
type
,
...
@@ -32,6 +34,7 @@ const TxInternalsListItem = ({
...
@@ -32,6 +34,7 @@ const TxInternalsListItem = ({
block
,
block
,
timestamp
,
timestamp
,
currentAddress
,
currentAddress
,
isLoading
,
}:
Props
)
=>
{
}:
Props
)
=>
{
const
typeTitle
=
TX_INTERNALS_ITEMS
.
find
(({
id
})
=>
id
===
type
)?.
title
;
const
typeTitle
=
TX_INTERNALS_ITEMS
.
find
(({
id
})
=>
id
===
type
)?.
title
;
const
toData
=
to
?
to
:
createdContract
;
const
toData
=
to
?
to
:
createdContract
;
...
@@ -41,41 +44,45 @@ const TxInternalsListItem = ({
...
@@ -41,41 +44,45 @@ const TxInternalsListItem = ({
return
(
return
(
<
ListItemMobile
rowGap=
{
3
}
>
<
ListItemMobile
rowGap=
{
3
}
>
<
Flex
>
<
Flex
columnGap=
{
2
}
>
{
typeTitle
&&
<
Tag
colorScheme=
"cyan"
mr=
{
2
}
>
{
typeTitle
}
</
Tag
>
}
{
typeTitle
&&
<
Tag
colorScheme=
"cyan"
isLoading=
{
isLoading
}
>
{
typeTitle
}
</
Tag
>
}
<
TxStatus
status=
{
success
?
'
ok
'
:
'
error
'
}
errorText=
{
error
}
/>
<
TxStatus
status=
{
success
?
'
ok
'
:
'
error
'
}
errorText=
{
error
}
isLoading=
{
isLoading
}
/>
</
Flex
>
</
Flex
>
<
Flex
justifyContent=
"space-between"
width=
"100%"
>
<
Flex
justifyContent=
"space-between"
width=
"100%"
>
<
AddressLink
fontWeight=
"700"
hash=
{
txnHash
}
truncation=
"constant"
type=
"transaction"
/>
<
AddressLink
fontWeight=
"700"
hash=
{
txnHash
}
truncation=
"constant"
type=
"transaction"
isLoading=
{
isLoading
}
/>
<
Text
variant=
"secondary"
fontWeight=
"400"
fontSize=
"sm"
>
{
dayjs
(
timestamp
).
fromNow
()
}
</
Text
>
<
Skeleton
isLoaded=
{
!
isLoading
}
color=
"text_secondary"
fontWeight=
"400"
fontSize=
"sm"
>
<
span
>
{
dayjs
(
timestamp
).
fromNow
()
}
</
span
>
</
Skeleton
>
</
Flex
>
</
Flex
>
<
HStack
spacing=
{
1
}
>
<
HStack
spacing=
{
1
}
>
<
Text
fontSize=
"sm"
fontWeight=
{
500
}
>
Block
</
Text
>
<
Skeleton
isLoaded=
{
!
isLoading
}
fontSize=
"sm"
fontWeight=
{
500
}
>
Block
</
Skeleton
>
<
LinkInternal
href=
{
route
({
pathname
:
'
/block/[height]
'
,
query
:
{
height
:
block
.
toString
()
}
})
}
>
{
block
}
</
LinkInternal
>
<
Skeleton
isLoaded=
{
!
isLoading
}
>
<
LinkInternal
href=
{
route
({
pathname
:
'
/block/[height]
'
,
query
:
{
height
:
block
.
toString
()
}
})
}
>
{
block
}
</
LinkInternal
>
</
Skeleton
>
</
HStack
>
</
HStack
>
<
Box
w=
"100%"
display=
"flex"
columnGap=
{
3
}
>
<
Box
w=
"100%"
display=
"flex"
columnGap=
{
3
}
>
<
Address
width=
"calc((100% - 48px) / 2)"
>
<
Address
width=
"calc((100% - 48px) / 2)"
>
<
AddressIcon
address=
{
from
}
/>
<
AddressIcon
address=
{
from
}
isLoading=
{
isLoading
}
/>
<
AddressLink
type=
"address"
ml=
{
2
}
fontWeight=
"500"
hash=
{
from
.
hash
}
isDisabled=
{
isOut
}
/>
<
AddressLink
type=
"address"
ml=
{
2
}
fontWeight=
"500"
hash=
{
from
.
hash
}
isDisabled=
{
isOut
}
isLoading=
{
isLoading
}
/>
{
isIn
&&
<
CopyToClipboard
text=
{
from
.
hash
}
/>
}
{
isIn
&&
<
CopyToClipboard
text=
{
from
.
hash
}
isLoading=
{
isLoading
}
/>
}
</
Address
>
</
Address
>
{
(
isIn
||
isOut
)
?
{
(
isIn
||
isOut
)
?
<
InOutTag
isIn=
{
isIn
}
isOut=
{
isOut
}
/>
:
<
InOutTag
isIn=
{
isIn
}
isOut=
{
isOut
}
isLoading=
{
isLoading
}
/>
:
<
Icon
as=
{
eastArrowIcon
}
boxSize=
{
6
}
color=
"gray.500"
/>
<
Icon
as=
{
eastArrowIcon
}
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
}
}
{
toData
&&
(
{
toData
&&
(
<
Address
width=
"calc((100% - 48px) / 2)"
>
<
Address
width=
"calc((100% - 48px) / 2)"
>
<
AddressIcon
address=
{
toData
}
/>
<
AddressIcon
address=
{
toData
}
isLoading=
{
isLoading
}
/>
<
AddressLink
type=
"address"
ml=
{
2
}
fontWeight=
"500"
hash=
{
toData
.
hash
}
isDisabled=
{
isIn
}
/>
<
AddressLink
type=
"address"
ml=
{
2
}
fontWeight=
"500"
hash=
{
toData
.
hash
}
isDisabled=
{
isIn
}
isLoading=
{
isLoading
}
/>
{
isOut
&&
<
CopyToClipboard
text=
{
toData
.
hash
}
/>
}
{
isOut
&&
<
CopyToClipboard
text=
{
toData
.
hash
}
isLoading=
{
isLoading
}
/>
}
</
Address
>
</
Address
>
)
}
)
}
</
Box
>
</
Box
>
<
HStack
spacing=
{
3
}
>
<
HStack
spacing=
{
3
}
>
<
Text
fontSize=
"sm"
fontWeight=
{
500
}
>
Value
{
appConfig
.
network
.
currency
.
symbol
}
</
Text
>
<
Skeleton
isLoaded=
{
!
isLoading
}
fontSize=
"sm"
fontWeight=
{
500
}
>
Value
{
appConfig
.
network
.
currency
.
symbol
}
</
Skeleton
>
<
Text
fontSize=
"sm"
variant=
"secondary"
>
<
Skeleton
isLoaded=
{
!
isLoading
}
fontSize=
"sm"
color=
"text_secondary"
minW=
{
6
}
>
{
BigNumber
(
value
).
div
(
BigNumber
(
10
**
appConfig
.
network
.
currency
.
decimals
)).
toFormat
()
}
<
span
>
{
BigNumber
(
value
).
div
(
BigNumber
(
10
**
appConfig
.
network
.
currency
.
decimals
)).
toFormat
()
}
</
span
>
</
Text
>
</
Skeleton
>
</
HStack
>
</
HStack
>
</
ListItemMobile
>
</
ListItemMobile
>
);
);
...
...
ui/address/internals/AddressIntTxsTable.tsx
View file @
40109a61
...
@@ -11,9 +11,10 @@ import AddressIntTxsTableItem from './AddressIntTxsTableItem';
...
@@ -11,9 +11,10 @@ import AddressIntTxsTableItem from './AddressIntTxsTableItem';
interface
Props
{
interface
Props
{
data
:
Array
<
InternalTransaction
>
;
data
:
Array
<
InternalTransaction
>
;
currentAddress
:
string
;
currentAddress
:
string
;
isLoading
?:
boolean
;
}
}
const
AddressIntTxsTable
=
({
data
,
currentAddress
}:
Props
)
=>
{
const
AddressIntTxsTable
=
({
data
,
currentAddress
,
isLoading
}:
Props
)
=>
{
return
(
return
(
<
Table
variant=
"simple"
size=
"sm"
>
<
Table
variant=
"simple"
size=
"sm"
>
<
Thead
top=
{
80
}
>
<
Thead
top=
{
80
}
>
...
@@ -30,8 +31,13 @@ const AddressIntTxsTable = ({ data, currentAddress }: Props) => {
...
@@ -30,8 +31,13 @@ const AddressIntTxsTable = ({ data, currentAddress }: Props) => {
</
Tr
>
</
Tr
>
</
Thead
>
</
Thead
>
<
Tbody
>
<
Tbody
>
{
data
.
map
((
item
)
=>
(
{
data
.
map
((
item
,
index
)
=>
(
<
AddressIntTxsTableItem
key=
{
item
.
transaction_hash
}
{
...
item
}
currentAddress=
{
currentAddress
}
/>
<
AddressIntTxsTableItem
key=
{
item
.
transaction_hash
+
'
_
'
+
index
}
{
...
item
}
currentAddress=
{
currentAddress
}
isLoading=
{
isLoading
}
/>
))
}
))
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
...
...
ui/address/internals/AddressIntTxsTableItem.tsx
View file @
40109a61
import
{
Tr
,
Td
,
Tag
,
Icon
,
Box
,
Flex
,
Text
}
from
'
@chakra-ui/react
'
;
import
{
Tr
,
Td
,
Box
,
Flex
,
Skeleton
}
from
'
@chakra-ui/react
'
;
import
BigNumber
from
'
bignumber.js
'
;
import
BigNumber
from
'
bignumber.js
'
;
import
{
route
}
from
'
nextjs-routes
'
;
import
{
route
}
from
'
nextjs-routes
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -11,13 +11,15 @@ import useTimeAgoIncrement from 'lib/hooks/useTimeAgoIncrement';
...
@@ -11,13 +11,15 @@ import useTimeAgoIncrement from 'lib/hooks/useTimeAgoIncrement';
import
Address
from
'
ui/shared/address/Address
'
;
import
Address
from
'
ui/shared/address/Address
'
;
import
AddressIcon
from
'
ui/shared/address/AddressIcon
'
;
import
AddressIcon
from
'
ui/shared/address/AddressIcon
'
;
import
AddressLink
from
'
ui/shared/address/AddressLink
'
;
import
AddressLink
from
'
ui/shared/address/AddressLink
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
Tag
from
'
ui/shared/chakra/Tag
'
;
import
CopyToClipboard
from
'
ui/shared/CopyToClipboard
'
;
import
CopyToClipboard
from
'
ui/shared/CopyToClipboard
'
;
import
InOutTag
from
'
ui/shared/InOutTag
'
;
import
InOutTag
from
'
ui/shared/InOutTag
'
;
import
LinkInternal
from
'
ui/shared/LinkInternal
'
;
import
LinkInternal
from
'
ui/shared/LinkInternal
'
;
import
TxStatus
from
'
ui/shared/TxStatus
'
;
import
TxStatus
from
'
ui/shared/TxStatus
'
;
import
{
TX_INTERNALS_ITEMS
}
from
'
ui/tx/internals/utils
'
;
import
{
TX_INTERNALS_ITEMS
}
from
'
ui/tx/internals/utils
'
;
type
Props
=
InternalTransaction
&
{
currentAddress
:
string
}
type
Props
=
InternalTransaction
&
{
currentAddress
:
string
;
isLoading
?:
boolean
}
const
AddressIntTxsTableItem
=
({
const
AddressIntTxsTableItem
=
({
type
,
type
,
...
@@ -31,6 +33,7 @@ const AddressIntTxsTableItem = ({
...
@@ -31,6 +33,7 @@ const AddressIntTxsTableItem = ({
block
,
block
,
timestamp
,
timestamp
,
currentAddress
,
currentAddress
,
isLoading
,
}:
Props
)
=>
{
}:
Props
)
=>
{
const
typeTitle
=
TX_INTERNALS_ITEMS
.
find
(({
id
})
=>
id
===
type
)?.
title
;
const
typeTitle
=
TX_INTERNALS_ITEMS
.
find
(({
id
})
=>
id
===
type
)?.
title
;
const
toData
=
to
?
to
:
createdContract
;
const
toData
=
to
?
to
:
createdContract
;
...
@@ -44,47 +47,66 @@ const AddressIntTxsTableItem = ({
...
@@ -44,47 +47,66 @@ const AddressIntTxsTableItem = ({
<
Tr
alignItems=
"top"
>
<
Tr
alignItems=
"top"
>
<
Td
verticalAlign=
"middle"
>
<
Td
verticalAlign=
"middle"
>
<
Flex
rowGap=
{
3
}
flexWrap=
"wrap"
>
<
Flex
rowGap=
{
3
}
flexWrap=
"wrap"
>
<
AddressLink
fontWeight=
"700"
hash=
{
txnHash
}
type=
"transaction"
/>
<
AddressLink
fontWeight=
"700"
hash=
{
txnHash
}
type=
"transaction"
isLoading=
{
isLoading
}
/>
{
timestamp
&&
<
Text
variant=
"secondary"
fontWeight=
"400"
fontSize=
"sm"
>
{
timeAgo
}
</
Text
>
}
{
timestamp
&&
(
<
Skeleton
isLoaded=
{
!
isLoading
}
color=
"text_secondary"
fontWeight=
"400"
fontSize=
"sm"
>
<
span
>
{
timeAgo
}
</
span
>
</
Skeleton
>
)
}
</
Flex
>
</
Flex
>
</
Td
>
</
Td
>
<
Td
verticalAlign=
"middle"
>
<
Td
verticalAlign=
"middle"
>
<
Flex
rowGap=
{
2
}
flexWrap=
"wrap"
>
<
Flex
rowGap=
{
2
}
flexWrap=
"wrap"
>
{
typeTitle
&&
(
{
typeTitle
&&
(
<
Box
w=
"126px"
display=
"inline-block"
>
<
Box
w=
"126px"
display=
"inline-block"
>
<
Tag
colorScheme=
"cyan"
mr=
{
5
}
>
{
typeTitle
}
</
Tag
>
<
Tag
colorScheme=
"cyan"
mr=
{
5
}
isLoading=
{
isLoading
}
>
{
typeTitle
}
</
Tag
>
</
Box
>
</
Box
>
)
}
)
}
<
TxStatus
status=
{
success
?
'
ok
'
:
'
error
'
}
errorText=
{
error
}
/>
<
TxStatus
status=
{
success
?
'
ok
'
:
'
error
'
}
errorText=
{
error
}
isLoading=
{
isLoading
}
/>
</
Flex
>
</
Flex
>
</
Td
>
</
Td
>
<
Td
verticalAlign=
"middle"
>
<
Td
verticalAlign=
"middle"
>
<
LinkInternal
href=
{
route
({
pathname
:
'
/block/[height]
'
,
query
:
{
height
:
block
.
toString
()
}
})
}
>
{
block
}
</
LinkInternal
>
<
Skeleton
isLoaded=
{
!
isLoading
}
display=
"inline-block"
>
<
LinkInternal
href=
{
route
({
pathname
:
'
/block/[height]
'
,
query
:
{
height
:
block
.
toString
()
}
})
}
>
{
block
}
</
LinkInternal
>
</
Skeleton
>
</
Td
>
</
Td
>
<
Td
verticalAlign=
"middle"
>
<
Td
verticalAlign=
"middle"
>
<
Address
display=
"inline-flex"
maxW=
"100%"
>
<
Address
display=
"inline-flex"
maxW=
"100%"
>
<
AddressIcon
address=
{
from
}
/>
<
AddressIcon
address=
{
from
}
isLoading=
{
isLoading
}
/>
<
AddressLink
type=
"address"
ml=
{
2
}
fontWeight=
"500"
hash=
{
from
.
hash
}
alias=
{
from
.
name
}
flexGrow=
{
1
}
isDisabled=
{
isOut
}
/>
<
AddressLink
{
isIn
&&
<
CopyToClipboard
text=
{
from
.
hash
}
/>
}
type=
"address"
ml=
{
2
}
fontWeight=
"500"
hash=
{
from
.
hash
}
alias=
{
from
.
name
}
flexGrow=
{
1
}
isDisabled=
{
isOut
}
isLoading=
{
isLoading
}
/>
{
isIn
&&
<
CopyToClipboard
text=
{
from
.
hash
}
isLoading=
{
isLoading
}
/>
}
</
Address
>
</
Address
>
</
Td
>
</
Td
>
<
Td
px=
{
0
}
verticalAlign=
"middle"
>
<
Td
px=
{
0
}
verticalAlign=
"middle"
>
{
(
isIn
||
isOut
)
?
{
(
isIn
||
isOut
)
?
<
InOutTag
isIn=
{
isIn
}
isOut=
{
isOut
}
/>
:
<
InOutTag
isIn=
{
isIn
}
isOut=
{
isOut
}
isLoading=
{
isLoading
}
/>
:
<
Icon
as=
{
rightArrowIcon
}
boxSize=
{
6
}
color=
"gray.500"
/>
<
Icon
as=
{
rightArrowIcon
}
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
}
}
</
Td
>
</
Td
>
<
Td
verticalAlign=
"middle"
>
<
Td
verticalAlign=
"middle"
>
{
toData
&&
(
{
toData
&&
(
<
Address
display=
"inline-flex"
maxW=
"100%"
>
<
Address
display=
"inline-flex"
maxW=
"100%"
>
<
AddressIcon
address=
{
toData
}
/>
<
AddressIcon
address=
{
toData
}
isLoading=
{
isLoading
}
/>
<
AddressLink
type=
"address"
hash=
{
toData
.
hash
}
alias=
{
toData
.
name
}
fontWeight=
"500"
ml=
{
2
}
isDisabled=
{
isIn
}
/>
<
AddressLink
type=
"address"
hash=
{
toData
.
hash
}
alias=
{
toData
.
name
}
fontWeight=
"500"
ml=
{
2
}
isDisabled=
{
isIn
}
isLoading=
{
isLoading
}
/>
{
isOut
&&
<
CopyToClipboard
text=
{
toData
.
hash
}
/>
}
{
isOut
&&
<
CopyToClipboard
text=
{
toData
.
hash
}
isLoading=
{
isLoading
}
/>
}
</
Address
>
</
Address
>
)
}
)
}
</
Td
>
</
Td
>
<
Td
isNumeric
verticalAlign=
"middle"
>
<
Td
isNumeric
verticalAlign=
"middle"
>
{
BigNumber
(
value
).
div
(
BigNumber
(
10
**
appConfig
.
network
.
currency
.
decimals
)).
toFormat
()
}
<
Skeleton
isLoaded=
{
!
isLoading
}
display=
"inline-block"
minW=
{
6
}
>
{
BigNumber
(
value
).
div
(
BigNumber
(
10
**
appConfig
.
network
.
currency
.
decimals
)).
toFormat
()
}
</
Skeleton
>
</
Td
>
</
Td
>
</
Tr
>
</
Tr
>
);
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment