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
1cbb8cd9
Commit
1cbb8cd9
authored
Dec 20, 2023
by
tom
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
migrate address, block and tx pages
parent
17d71792
Changes
29
Hide whitespace changes
Inline
Side-by-side
Showing
29 changed files
with
93 additions
and
117 deletions
+93
-117
AddressCsvExportLink.tsx
ui/address/AddressCsvExportLink.tsx
+3
-3
AddressTokens.tsx
ui/address/AddressTokens.tsx
+2
-4
SolidityscanReport.tsx
ui/address/SolidityscanReport.tsx
+3
-5
ContractExternalLibraries.tsx
ui/address/contract/ContractExternalLibraries.tsx
+3
-5
ContractMethodCallable.tsx
ui/address/contract/ContractMethodCallable.tsx
+3
-3
ContractMethodFieldZeroes.tsx
ui/address/contract/ContractMethodFieldZeroes.tsx
+3
-5
ContractMethodsAccordionItem.tsx
ui/address/contract/ContractMethodsAccordionItem.tsx
+3
-3
AddressFavoriteButton.tsx
ui/address/details/AddressFavoriteButton.tsx
+3
-4
AddressQrCode.tsx
ui/address/details/AddressQrCode.tsx
+2
-3
AddressIntTxsListItem.tsx
ui/address/internals/AddressIntTxsListItem.tsx
+2
-3
AddressIntTxsTableItem.tsx
ui/address/internals/AddressIntTxsTableItem.tsx
+2
-3
TokenSelect.tsx
ui/address/tokenSelect/TokenSelect.tsx
+3
-3
TokenSelectButton.tsx
ui/address/tokenSelect/TokenSelectButton.tsx
+4
-5
TokenSelectMenu.tsx
ui/address/tokenSelect/TokenSelectMenu.tsx
+4
-5
TokenBalancesItem.tsx
ui/address/tokens/TokenBalancesItem.tsx
+3
-3
BlockDetails.tsx
ui/block/BlockDetails.tsx
+3
-5
BlocksListItem.tsx
ui/blocks/BlocksListItem.tsx
+2
-3
BlocksTableItem.tsx
ui/blocks/BlocksTableItem.tsx
+2
-3
RadioButtonGroup.tsx
ui/shared/radioButtonGroup/RadioButtonGroup.tsx
+8
-5
TxDetails.tsx
ui/tx/TxDetails.tsx
+5
-10
TxDetailsAction.tsx
ui/tx/details/TxDetailsAction.tsx
+3
-3
TxDetailsTokenTransfer.tsx
ui/tx/details/TxDetailsTokenTransfer.tsx
+3
-3
TxDetailsTokenTransfers.tsx
ui/tx/details/TxDetailsTokenTransfers.tsx
+3
-3
TxInternalsListItem.tsx
ui/tx/internals/TxInternalsListItem.tsx
+2
-3
TxInternalsTable.tsx
ui/tx/internals/TxInternalsTable.tsx
+4
-4
TxInternalsTableItem.tsx
ui/tx/internals/TxInternalsTableItem.tsx
+2
-3
TxsListItem.tsx
ui/txs/TxsListItem.tsx
+3
-4
TxsTable.tsx
ui/txs/TxsTable.tsx
+6
-6
TxsTableItem.tsx
ui/txs/TxsTableItem.tsx
+4
-5
No files found.
ui/address/AddressCsvExportLink.tsx
View file @
1cbb8cd9
import
{
chakra
,
Icon
,
Tooltip
,
Hide
,
Skeleton
,
Flex
}
from
'
@chakra-ui/react
'
;
import
{
chakra
,
Tooltip
,
Hide
,
Skeleton
,
Flex
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
type
{
CsvExportParams
}
from
'
types/client/address
'
;
...
...
@@ -6,9 +6,9 @@ import type { CsvExportParams } from 'types/client/address';
import
{
route
}
from
'
nextjs-routes
'
;
import
config
from
'
configs/app
'
;
import
svgFileIcon
from
'
icons/files/csv.svg
'
;
import
useIsInitialLoading
from
'
lib/hooks/useIsInitialLoading
'
;
import
useIsMobile
from
'
lib/hooks/useIsMobile
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
LinkInternal
from
'
ui/shared/LinkInternal
'
;
interface
Props
{
...
...
@@ -47,7 +47,7 @@ const AddressCsvExportLink = ({ className, address, params, isLoading }: Props)
href=
{
route
({
pathname
:
'
/csv-export
'
,
query
:
{
...
params
,
address
}
})
}
flexShrink=
{
0
}
>
<
Icon
as=
{
svgFileIcon
}
boxSize=
{
{
base
:
'
30px
'
,
lg
:
6
}
}
/>
<
Icon
Svg
name=
"files/csv"
boxSize=
{
{
base
:
'
30px
'
,
lg
:
6
}
}
/>
<
Hide
ssr=
{
false
}
below=
"lg"
><
chakra
.
span
ml=
{
1
}
>
Download CSV
</
chakra
.
span
></
Hide
>
</
LinkInternal
>
</
Tooltip
>
...
...
ui/address/AddressTokens.tsx
View file @
1cbb8cd9
...
...
@@ -5,8 +5,6 @@ import React from 'react';
import
type
{
NFTTokenType
}
from
'
types/api/token
'
;
import
type
{
PaginationParams
}
from
'
ui/shared/pagination/types
'
;
import
listIcon
from
'
icons/apps.svg
'
;
import
collectionIcon
from
'
icons/collection.svg
'
;
import
{
useAppContext
}
from
'
lib/contexts/app
'
;
import
*
as
cookies
from
'
lib/cookies
'
;
import
getFilterValuesFromQuery
from
'
lib/getFilterValuesFromQuery
'
;
...
...
@@ -125,8 +123,8 @@ const AddressTokens = () => {
defaultValue=
{
nftDisplayType
}
name="type"
options=
{
[
{
title
:
'
By collection
'
,
value
:
'
collection
'
,
icon
:
collectionIcon
,
onlyIcon
:
isMobile
},
{
title
:
'
List
'
,
value
:
'
list
'
,
icon
:
listIcon
,
onlyIcon
:
isMobile
},
{
title
:
'
By collection
'
,
value
:
'
collection
'
,
icon
:
'
collection
'
,
onlyIcon
:
isMobile
},
{
title
:
'
List
'
,
value
:
'
list
'
,
icon
:
'
apps
'
,
onlyIcon
:
isMobile
},
]
}
/
>
);
...
...
ui/address/SolidityscanReport.tsx
View file @
1cbb8cd9
...
...
@@ -4,7 +4,6 @@ import {
Text
,
Grid
,
Button
,
Icon
,
chakra
,
Popover
,
PopoverTrigger
,
...
...
@@ -19,10 +18,9 @@ import React from 'react';
import
{
SolidityscanReport
}
from
'
types/api/contract
'
;
import
scoreNotOkIcon
from
'
icons/score/score-not-ok.svg
'
;
import
scoreOkIcon
from
'
icons/score/score-ok.svg
'
;
import
useApiQuery
from
'
lib/api/useApiQuery
'
;
import
{
SOLIDITYSCAN_REPORT
}
from
'
stubs/contract
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
LinkExternal
from
'
ui/shared/LinkExternal
'
;
type
DistributionItem
=
{
...
...
@@ -125,7 +123,7 @@ const SolidityscanReport = ({ className, hash }: Props) => {
h=
"32px"
flexShrink=
{
0
}
>
<
Icon
as=
{
score
<
80
?
scoreNotOkIcon
:
scoreOkIcon
}
boxSize=
{
5
}
mr=
{
1
}
/>
<
Icon
Svg
name=
{
score
<
80
?
'
score/score-not-ok
'
:
'
score/score-ok
'
}
boxSize=
{
5
}
mr=
{
1
}
/>
{
score
}
</
Button
>
</
Skeleton
>
...
...
@@ -143,7 +141,7 @@ const SolidityscanReport = ({ className, hash }: Props) => {
mr=
{
3
}
>
<
Center
position=
"absolute"
w=
"38px"
h=
"38px"
top=
"5px"
right=
"5px"
bg=
{
popoverBgColor
}
borderRadius=
"20px"
>
<
Icon
as=
{
score
<
80
?
scoreNotOkIcon
:
scoreOkIcon
}
boxSize=
{
5
}
color=
{
scoreColor
}
/>
<
Icon
Svg
name=
{
score
<
80
?
'
score/score-not-ok
'
:
'
score/score-ok
'
}
boxSize=
{
5
}
color=
{
scoreColor
}
/>
</
Center
>
</
Box
>
<
Box
>
...
...
ui/address/contract/ContractExternalLibraries.tsx
View file @
1cbb8cd9
...
...
@@ -4,7 +4,6 @@ import {
Button
,
Flex
,
Heading
,
Icon
,
Modal
,
ModalCloseButton
,
ModalContent
,
...
...
@@ -20,11 +19,10 @@ import React from 'react';
import
type
{
SmartContractExternalLibrary
}
from
'
types/api/contract
'
;
import
arrowIcon
from
'
icons/arrows/east-mini.svg
'
;
import
iconWarning
from
'
icons/status/warning.svg
'
;
import
useIsMobile
from
'
lib/hooks/useIsMobile
'
;
import
{
apos
}
from
'
lib/html-entities
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
interface
Props
{
className
?:
string
;
...
...
@@ -66,8 +64,8 @@ const ContractExternalLibraries = ({ className, data }: Props) => {
aria
-
label=
"View external libraries"
>
<
span
>
{
data
.
length
}
{
data
.
length
>
1
?
'
Libraries
'
:
'
Library
'
}
</
span
>
<
Icon
as=
{
iconWarning
}
boxSize=
{
5
}
color=
"orange.400"
ml=
"2px"
/>
<
Icon
as=
{
arrowIcon
}
transform=
{
isOpen
?
'
rotate(90deg)
'
:
'
rotate(-90deg)
'
}
transitionDuration=
"faster"
boxSize=
{
5
}
ml=
{
2
}
/>
<
Icon
Svg
name=
"status/warning"
boxSize=
{
5
}
color=
"orange.400"
ml=
"2px"
/>
<
Icon
Svg
name=
"arrows/east-mini"
transform=
{
isOpen
?
'
rotate(90deg)
'
:
'
rotate(-90deg)
'
}
transitionDuration=
"faster"
boxSize=
{
5
}
ml=
{
2
}
/>
</
Button
>
);
...
...
ui/address/contract/ContractMethodCallable.tsx
View file @
1cbb8cd9
import
{
Box
,
Button
,
chakra
,
Flex
,
Icon
,
Text
}
from
'
@chakra-ui/react
'
;
import
{
Box
,
Button
,
chakra
,
Flex
,
Text
}
from
'
@chakra-ui/react
'
;
import
_fromPairs
from
'
lodash/fromPairs
'
;
import
React
from
'
react
'
;
import
type
{
SubmitHandler
}
from
'
react-hook-form
'
;
...
...
@@ -7,8 +7,8 @@ import { useForm } from 'react-hook-form';
import
type
{
MethodFormFields
,
ContractMethodCallResult
}
from
'
./types
'
;
import
type
{
SmartContractMethodInput
,
SmartContractMethod
}
from
'
types/api/contract
'
;
import
arrowIcon
from
'
icons/arrows/down-right.svg
'
;
import
*
as
mixpanel
from
'
lib/mixpanel/index
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
ContractMethodField
from
'
./ContractMethodField
'
;
...
...
@@ -157,7 +157,7 @@ const ContractMethodCallable = <T extends SmartContractMethod>({ data, onSubmit,
</
chakra
.
form
>
{
'
outputs
'
in
data
&&
!
isWrite
&&
data
.
outputs
.
length
>
0
&&
(
<
Flex
mt=
{
3
}
>
<
Icon
as=
{
arrowIcon
}
boxSize=
{
5
}
mr=
{
1
}
/>
<
Icon
Svg
name=
"arrows/down-right"
boxSize=
{
5
}
mr=
{
1
}
/>
<
Text
>
{
data
.
outputs
.
map
(({
type
})
=>
type
).
join
(
'
,
'
)
}
</
Text
>
</
Flex
>
)
}
...
...
ui/address/contract/ContractMethodFieldZeroes.tsx
View file @
1cbb8cd9
...
...
@@ -8,15 +8,13 @@ import {
Button
,
List
,
ListItem
,
Icon
,
useDisclosure
,
Input
,
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
iconEastMini
from
'
icons/arrows/east-mini.svg
'
;
import
iconCheck
from
'
icons/check.svg
'
;
import
{
times
}
from
'
lib/html-entities
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
interface
Props
{
onClick
:
(
power
:
number
)
=>
void
;
...
...
@@ -80,7 +78,7 @@ const ContractMethodFieldZeroes = ({ onClick, isDisabled }: Props) => {
onClick=
{
onToggle
}
isDisabled=
{
isDisabled
}
>
<
Icon
as=
{
iconEastMini
}
transform=
{
isOpen
?
'
rotate(90deg)
'
:
'
rotate(-90deg)
'
}
boxSize=
{
6
}
/>
<
Icon
Svg
name=
"arrows/east-mini"
transform=
{
isOpen
?
'
rotate(90deg)
'
:
'
rotate(-90deg)
'
}
boxSize=
{
6
}
/>
</
Button
>
</
PopoverTrigger
>
<
Portal
>
...
...
@@ -99,7 +97,7 @@ const ContractMethodFieldZeroes = ({ onClick, isDisabled }: Props) => {
cursor=
"pointer"
>
<
span
>
10*
{
id
}
</
span
>
{
selectedOption
===
id
&&
<
Icon
as=
{
iconCheck
}
boxSize=
{
6
}
color=
"blue.600"
/>
}
{
selectedOption
===
id
&&
<
Icon
Svg
name=
"check"
boxSize=
{
6
}
color=
"blue.600"
/>
}
</
ListItem
>
))
}
<
ListItem
...
...
ui/address/contract/ContractMethodsAccordionItem.tsx
View file @
1cbb8cd9
import
{
AccordionButton
,
AccordionIcon
,
AccordionItem
,
AccordionPanel
,
Box
,
Icon
,
Tooltip
,
useClipboard
,
useDisclosure
}
from
'
@chakra-ui/react
'
;
import
{
AccordionButton
,
AccordionIcon
,
AccordionItem
,
AccordionPanel
,
Box
,
Tooltip
,
useClipboard
,
useDisclosure
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
{
Element
}
from
'
react-scroll
'
;
...
...
@@ -7,8 +7,8 @@ import type { SmartContractMethod } from 'types/api/contract';
import
{
route
}
from
'
nextjs-routes
'
;
import
config
from
'
configs/app
'
;
import
iconLink
from
'
icons/link.svg
'
;
import
Hint
from
'
ui/shared/Hint
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
interface
Props
<
T
extends
SmartContractMethod
>
{
data
:
T
;
...
...
@@ -57,7 +57,7 @@ const ContractMethodsAccordionItem = <T extends SmartContractMethod>({ data, ind
onMouseEnter=
{
onOpen
}
onMouseLeave=
{
onClose
}
>
<
Icon
as=
{
iconLink
}
boxSize=
{
5
}
/>
<
Icon
Svg
name=
"link"
boxSize=
{
5
}
/>
</
Box
>
</
Tooltip
>
)
}
...
...
ui/address/details/AddressFavoriteButton.tsx
View file @
1cbb8cd9
import
{
Icon
,
chakra
,
Tooltip
,
IconButton
,
useDisclosure
}
from
'
@chakra-ui/react
'
;
import
{
chakra
,
Tooltip
,
IconButton
,
useDisclosure
}
from
'
@chakra-ui/react
'
;
import
{
useQueryClient
}
from
'
@tanstack/react-query
'
;
import
{
useRouter
}
from
'
next/router
'
;
import
React
from
'
react
'
;
import
config
from
'
configs/app
'
;
import
starFilledIcon
from
'
icons/star_filled.svg
'
;
import
starOutlineIcon
from
'
icons/star_outline.svg
'
;
import
{
getResourceKey
}
from
'
lib/api/useApiQuery
'
;
import
useIsAccountActionAllowed
from
'
lib/hooks/useIsAccountActionAllowed
'
;
import
usePreventFocusAfterModalClosing
from
'
lib/hooks/usePreventFocusAfterModalClosing
'
;
import
*
as
mixpanel
from
'
lib/mixpanel/index
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
WatchlistAddModal
from
'
ui/watchlist/AddressModal/AddressModal
'
;
import
DeleteAddressModal
from
'
ui/watchlist/DeleteAddressModal
'
;
...
...
@@ -73,7 +72,7 @@ const AddressFavoriteButton = ({ className, hash, watchListId }: Props) => {
pr=
"6px"
flexShrink=
{
0
}
onClick=
{
handleClick
}
icon=
{
<
Icon
as=
{
watchListId
?
starFilledIcon
:
starOutlineIcon
}
boxSize=
{
5
}
/>
}
icon=
{
<
Icon
Svg
name=
{
watchListId
?
'
star_filled
'
:
'
star_outline
'
}
boxSize=
{
5
}
/>
}
onFocusCapture=
{
onFocusCapture
}
/>
</
Tooltip
>
...
...
ui/address/details/AddressQrCode.tsx
View file @
1cbb8cd9
import
{
chakra
,
Alert
,
Icon
,
Modal
,
ModalBody
,
ModalContent
,
...
...
@@ -22,10 +21,10 @@ import React from 'react';
import
type
{
Address
as
AddressType
}
from
'
types/api/address
'
;
import
qrCodeIcon
from
'
icons/qr_code.svg
'
;
import
getPageType
from
'
lib/mixpanel/getPageType
'
;
import
*
as
mixpanel
from
'
lib/mixpanel/index
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
const
SVG_OPTIONS
=
{
margin
:
0
,
...
...
@@ -78,7 +77,7 @@ const AddressQrCode = ({ address, className, isLoading }: Props) => {
pl=
"6px"
pr=
"6px"
onClick=
{
onOpen
}
icon=
{
<
Icon
as=
{
qrCodeIcon
}
boxSize=
{
5
}
/>
}
icon=
{
<
Icon
Svg
name=
"qr_code"
boxSize=
{
5
}
/>
}
flexShrink=
{
0
}
/>
</
Tooltip
>
...
...
ui/address/internals/AddressIntTxsListItem.tsx
View file @
1cbb8cd9
...
...
@@ -5,13 +5,12 @@ import React from 'react';
import
type
{
InternalTransaction
}
from
'
types/api/internalTransaction
'
;
import
config
from
'
configs/app
'
;
import
eastArrowIcon
from
'
icons/arrows/east.svg
'
;
import
dayjs
from
'
lib/date/dayjs
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
Tag
from
'
ui/shared/chakra/Tag
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
BlockEntity
from
'
ui/shared/entities/block/BlockEntity
'
;
import
TxEntity
from
'
ui/shared/entities/tx/TxEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
InOutTag
from
'
ui/shared/InOutTag
'
;
import
ListItemMobile
from
'
ui/shared/ListItemMobile/ListItemMobile
'
;
import
TxStatus
from
'
ui/shared/statusTag/TxStatus
'
;
...
...
@@ -76,7 +75,7 @@ const TxInternalsListItem = ({
/>
{
(
isIn
||
isOut
)
?
<
InOutTag
isIn=
{
isIn
}
isOut=
{
isOut
}
isLoading=
{
isLoading
}
/>
:
<
Icon
as=
{
eastArrowIcon
}
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
}
{
toData
&&
(
<
AddressEntity
...
...
ui/address/internals/AddressIntTxsTableItem.tsx
View file @
1cbb8cd9
...
...
@@ -5,13 +5,12 @@ import React from 'react';
import
type
{
InternalTransaction
}
from
'
types/api/internalTransaction
'
;
import
config
from
'
configs/app
'
;
import
rightArrowIcon
from
'
icons/arrows/east.svg
'
;
import
useTimeAgoIncrement
from
'
lib/hooks/useTimeAgoIncrement
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
Tag
from
'
ui/shared/chakra/Tag
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
BlockEntity
from
'
ui/shared/entities/block/BlockEntity
'
;
import
TxEntity
from
'
ui/shared/entities/tx/TxEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
InOutTag
from
'
ui/shared/InOutTag
'
;
import
TxStatus
from
'
ui/shared/statusTag/TxStatus
'
;
import
{
TX_INTERNALS_ITEMS
}
from
'
ui/tx/internals/utils
'
;
...
...
@@ -88,7 +87,7 @@ const AddressIntTxsTableItem = ({
<
Td
px=
{
0
}
verticalAlign=
"middle"
>
{
(
isIn
||
isOut
)
?
<
InOutTag
isIn=
{
isIn
}
isOut=
{
isOut
}
isLoading=
{
isLoading
}
w=
"100%"
/>
:
<
Icon
as=
{
rightArrowIcon
}
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
}
</
Td
>
<
Td
verticalAlign=
"middle"
>
...
...
ui/address/tokenSelect/TokenSelect.tsx
View file @
1cbb8cd9
import
{
Box
,
Flex
,
Icon
,
Icon
Button
,
Skeleton
,
Tooltip
}
from
'
@chakra-ui/react
'
;
import
{
Box
,
Flex
,
IconButton
,
Skeleton
,
Tooltip
}
from
'
@chakra-ui/react
'
;
import
{
useQueryClient
,
useIsFetching
}
from
'
@tanstack/react-query
'
;
import
_sumBy
from
'
lodash/sumBy
'
;
import
NextLink
from
'
next/link
'
;
...
...
@@ -7,11 +7,11 @@ import React from 'react';
import
type
{
Address
}
from
'
types/api/address
'
;
import
walletIcon
from
'
icons/wallet.svg
'
;
import
{
getResourceKey
}
from
'
lib/api/useApiQuery
'
;
import
useIsMobile
from
'
lib/hooks/useIsMobile
'
;
import
*
as
mixpanel
from
'
lib/mixpanel/index
'
;
import
getQueryParamString
from
'
lib/router/getQueryParamString
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
useFetchTokens
from
'
../utils/useFetchTokens
'
;
import
TokenSelectDesktop
from
'
./TokenSelectDesktop
'
;
...
...
@@ -69,7 +69,7 @@ const TokenSelect = ({ onClick }: Props) => {
size=
"sm"
pl=
"6px"
pr=
"6px"
icon=
{
<
Icon
as=
{
walletIcon
}
boxSize=
{
5
}
/>
}
icon=
{
<
Icon
Svg
name=
"wallet"
boxSize=
{
5
}
/>
}
as=
"a"
onClick=
{
handleIconButtonClick
}
/>
...
...
ui/address/tokenSelect/TokenSelectButton.tsx
View file @
1cbb8cd9
import
{
Box
,
Button
,
Icon
,
Skeleton
,
Text
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
{
Box
,
Button
,
Skeleton
,
Text
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
type
{
FormattedData
}
from
'
./types
'
;
import
arrowIcon
from
'
icons/arrows/east-mini.svg
'
;
import
tokensIcon
from
'
icons/tokens.svg
'
;
import
*
as
mixpanel
from
'
lib/mixpanel/index
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
{
getTokensTotalInfo
}
from
'
../utils/tokenUtils
'
;
...
...
@@ -41,10 +40,10 @@ const TokenSelectButton = ({ isOpen, isLoading, onClick, data }: Props, ref: Rea
onClick=
{
handleClick
}
aria
-
label=
"Token select"
>
<
Icon
as=
{
tokensIcon
}
boxSize=
{
4
}
mr=
{
2
}
/>
<
Icon
Svg
name=
"tokens"
boxSize=
{
4
}
mr=
{
2
}
/>
<
Text
fontWeight=
{
600
}
>
{
prefix
}{
num
}
</
Text
>
<
Text
whiteSpace=
"pre"
variant=
"secondary"
fontWeight=
{
400
}
>
(
{
prefix
}
$
{
usd
.
toFormat
(
2
)
}
)
</
Text
>
<
Icon
as=
{
arrowIcon
}
transform=
{
isOpen
?
'
rotate(90deg)
'
:
'
rotate(-90deg)
'
}
transitionDuration=
"faster"
boxSize=
{
5
}
ml=
{
3
}
/>
<
Icon
Svg
name=
"arrows/east-mini"
transform=
{
isOpen
?
'
rotate(90deg)
'
:
'
rotate(-90deg)
'
}
transitionDuration=
"faster"
boxSize=
{
5
}
ml=
{
3
}
/>
</
Button
>
{
isLoading
&&
!
isOpen
&&
<
Skeleton
h=
"100%"
w=
"100%"
position=
"absolute"
top=
{
0
}
left=
{
0
}
bgColor=
{
skeletonBgColor
}
/>
}
</
Box
>
...
...
ui/address/tokenSelect/TokenSelectMenu.tsx
View file @
1cbb8cd9
import
{
Icon
,
Text
,
Box
,
Input
,
InputGroup
,
InputLeftElement
,
useColorModeValue
,
Flex
,
Link
}
from
'
@chakra-ui/react
'
;
import
{
Text
,
Box
,
Input
,
InputGroup
,
InputLeftElement
,
useColorModeValue
,
Flex
,
Link
}
from
'
@chakra-ui/react
'
;
import
_sumBy
from
'
lodash/sumBy
'
;
import
type
{
ChangeEvent
}
from
'
react
'
;
import
React
from
'
react
'
;
...
...
@@ -6,8 +6,7 @@ import React from 'react';
import
type
{
FormattedData
}
from
'
./types
'
;
import
type
{
TokenType
}
from
'
types/api/token
'
;
import
arrowIcon
from
'
icons/arrows/east.svg
'
;
import
searchIcon
from
'
icons/search.svg
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
type
{
Sort
}
from
'
../utils/tokenUtils
'
;
import
{
sortTokenGroups
,
sortingFns
}
from
'
../utils/tokenUtils
'
;
...
...
@@ -32,7 +31,7 @@ const TokenSelectMenu = ({ erc20sort, erc1155sort, filteredData, onInputChange,
<>
<
InputGroup
size=
"xs"
mb=
{
5
}
>
<
InputLeftElement
>
<
Icon
as=
{
searchIcon
}
boxSize=
{
4
}
color=
{
searchIconColor
}
/>
<
Icon
Svg
name=
"search"
boxSize=
{
4
}
color=
{
searchIconColor
}
/>
</
InputLeftElement
>
<
Input
paddingInlineStart=
"38px"
...
...
@@ -72,7 +71,7 @@ const TokenSelectMenu = ({ erc20sort, erc1155sort, filteredData, onInputChange,
<
Text
mb=
{
3
}
color=
"gray.500"
fontWeight=
{
600
}
fontSize=
"sm"
>
{
type
}
tokens (
{
numPrefix
}{
tokenInfo
.
items
.
length
}
)
</
Text
>
{
hasSort
&&
(
<
Link
data
-
type=
{
type
}
onClick=
{
onSortClick
}
aria
-
label=
{
`Sort ${ type } tokens`
}
>
<
Icon
as=
{
arrowIcon
}
boxSize=
{
5
}
transform=
{
arrowTransform
}
transitionDuration=
"faster"
/>
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
5
}
transform=
{
arrowTransform
}
transitionDuration=
"faster"
/>
</
Link
>
)
}
</
Flex
>
...
...
ui/address/tokens/TokenBalancesItem.tsx
View file @
1cbb8cd9
import
{
Box
,
Flex
,
Icon
,
Skeleton
,
Text
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
{
Box
,
Flex
,
Skeleton
,
Text
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
walletIcon
from
'
icons/wallet.s
vg
'
;
import
IconSvg
from
'
ui/shared/IconS
vg
'
;
const
TokenBalancesItem
=
({
name
,
value
,
isLoading
}:
{
name
:
string
;
value
:
string
;
isLoading
:
boolean
})
=>
{
...
...
@@ -9,7 +9,7 @@ const TokenBalancesItem = ({ name, value, isLoading }: {name: string; value: str
return
(
<
Flex
p=
{
5
}
bgColor=
{
bgColor
}
borderRadius=
"16px"
alignItems=
"center"
>
<
Icon
as=
{
walletIcon
}
boxSize=
"30px"
mr=
{
3
}
/>
<
Icon
Svg
name=
"wallet"
boxSize=
"30px"
mr=
{
3
}
/>
<
Box
>
<
Text
variant=
"secondary"
fontSize=
"xs"
>
{
name
}
</
Text
>
<
Skeleton
isLoaded=
{
!
isLoading
}
fontWeight=
"500"
>
{
value
}
</
Skeleton
>
...
...
ui/block/BlockDetails.tsx
View file @
1cbb8cd9
...
...
@@ -11,8 +11,6 @@ import type { Block } from 'types/api/block';
import
{
route
}
from
'
nextjs-routes
'
;
import
config
from
'
configs/app
'
;
import
clockIcon
from
'
icons/clock.svg
'
;
import
flameIcon
from
'
icons/flame.svg
'
;
import
type
{
ResourceError
}
from
'
lib/api/resources
'
;
import
getBlockReward
from
'
lib/block/getBlockReward
'
;
import
{
GWEI
,
WEI
,
WEI_IN_GWEI
,
ZERO
}
from
'
lib/consts
'
;
...
...
@@ -20,7 +18,6 @@ import dayjs from 'lib/date/dayjs';
import
{
space
}
from
'
lib/html-entities
'
;
import
getNetworkValidatorTitle
from
'
lib/networks/getNetworkValidatorTitle
'
;
import
getQueryParamString
from
'
lib/router/getQueryParamString
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
CopyToClipboard
from
'
ui/shared/CopyToClipboard
'
;
import
DataFetchAlert
from
'
ui/shared/DataFetchAlert
'
;
import
DetailsInfoItem
from
'
ui/shared/DetailsInfoItem
'
;
...
...
@@ -28,6 +25,7 @@ import DetailsInfoItemDivider from 'ui/shared/DetailsInfoItemDivider';
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
GasUsedToTargetRatio
from
'
ui/shared/GasUsedToTargetRatio
'
;
import
HashStringShortenDynamic
from
'
ui/shared/HashStringShortenDynamic
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
LinkInternal
from
'
ui/shared/LinkInternal
'
;
import
PrevNext
from
'
ui/shared/PrevNext
'
;
import
RawDataSnippet
from
'
ui/shared/RawDataSnippet
'
;
...
...
@@ -169,7 +167,7 @@ const BlockDetails = ({ query }: Props) => {
hint=
"Date & time at which block was produced."
isLoading=
{
isPlaceholderData
}
>
<
Icon
as=
{
clockIcon
}
boxSize=
{
5
}
color=
"gray.500"
isLoading=
{
isPlaceholderData
}
/>
<
Icon
Svg
name=
"clock"
boxSize=
{
5
}
color=
"gray.500"
isLoading=
{
isPlaceholderData
}
/>
<
Skeleton
isLoaded=
{
!
isPlaceholderData
}
ml=
{
1
}
>
{
dayjs
(
data
.
timestamp
).
fromNow
()
}
</
Skeleton
>
...
...
@@ -318,7 +316,7 @@ const BlockDetails = ({ query }: Props) => {
}
isLoading=
{
isPlaceholderData
}
>
<
Icon
as=
{
flameIcon
}
boxSize=
{
5
}
color=
"gray.500"
isLoading=
{
isPlaceholderData
}
/>
<
Icon
Svg
name=
"flame"
boxSize=
{
5
}
color=
"gray.500"
isLoading=
{
isPlaceholderData
}
/>
<
Skeleton
isLoaded=
{
!
isPlaceholderData
}
ml=
{
2
}
>
{
burntFees
.
dividedBy
(
WEI
).
toFixed
()
}
{
config
.
chain
.
currency
.
symbol
}
</
Skeleton
>
...
...
ui/blocks/BlocksListItem.tsx
View file @
1cbb8cd9
...
...
@@ -8,15 +8,14 @@ import type { Block } from 'types/api/block';
import
{
route
}
from
'
nextjs-routes
'
;
import
config
from
'
configs/app
'
;
import
flameIcon
from
'
icons/flame.svg
'
;
import
getBlockTotalReward
from
'
lib/block/getBlockTotalReward
'
;
import
{
WEI
}
from
'
lib/consts
'
;
import
getNetworkValidatorTitle
from
'
lib/networks/getNetworkValidatorTitle
'
;
import
BlockTimestamp
from
'
ui/blocks/BlockTimestamp
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
BlockEntity
from
'
ui/shared/entities/block/BlockEntity
'
;
import
GasUsedToTargetRatio
from
'
ui/shared/GasUsedToTargetRatio
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
LinkInternal
from
'
ui/shared/LinkInternal
'
;
import
ListItemMobile
from
'
ui/shared/ListItemMobile/ListItemMobile
'
;
import
TextSeparator
from
'
ui/shared/TextSeparator
'
;
...
...
@@ -106,7 +105,7 @@ const BlocksListItem = ({ data, isLoading, enableTimeIncrement }: Props) => {
<
Text
fontWeight=
{
500
}
>
Burnt fees
</
Text
>
<
Flex
columnGap=
{
4
}
mt=
{
2
}
>
<
Flex
>
<
Icon
as=
{
flameIcon
}
boxSize=
{
5
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
<
Icon
Svg
name=
"flame"
boxSize=
{
5
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
<
Skeleton
isLoaded=
{
!
isLoading
}
display=
"inline-block"
color=
"text_secondary"
ml=
{
2
}
>
<
span
>
{
burntFees
.
div
(
WEI
).
toFixed
()
}
</
span
>
</
Skeleton
>
...
...
ui/blocks/BlocksTableItem.tsx
View file @
1cbb8cd9
...
...
@@ -8,14 +8,13 @@ import type { Block } from 'types/api/block';
import
{
route
}
from
'
nextjs-routes
'
;
import
config
from
'
configs/app
'
;
import
flameIcon
from
'
icons/flame.svg
'
;
import
getBlockTotalReward
from
'
lib/block/getBlockTotalReward
'
;
import
{
WEI
}
from
'
lib/consts
'
;
import
BlockTimestamp
from
'
ui/blocks/BlockTimestamp
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
BlockEntity
from
'
ui/shared/entities/block/BlockEntity
'
;
import
GasUsedToTargetRatio
from
'
ui/shared/GasUsedToTargetRatio
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
LinkInternal
from
'
ui/shared/LinkInternal
'
;
import
TextSeparator
from
'
ui/shared/TextSeparator
'
;
import
Utilization
from
'
ui/shared/Utilization/Utilization
'
;
...
...
@@ -116,7 +115,7 @@ const BlocksTableItem = ({ data, isLoading, enableTimeIncrement }: Props) => {
{
!
isRollup
&&
!
config
.
UI
.
views
.
block
.
hiddenFields
?.
burnt_fees
&&
(
<
Td
fontSize=
"sm"
>
<
Flex
alignItems=
"center"
columnGap=
{
2
}
>
<
Icon
as=
{
flameIcon
}
boxSize=
{
5
}
color=
{
burntFeesIconColor
}
isLoading=
{
isLoading
}
/>
<
Icon
Svg
name=
"flame"
boxSize=
{
5
}
color=
{
burntFeesIconColor
}
isLoading=
{
isLoading
}
/>
<
Skeleton
isLoaded=
{
!
isLoading
}
display=
"inline-block"
>
{
burntFees
.
dividedBy
(
WEI
).
toFixed
(
8
)
}
</
Skeleton
>
...
...
ui/shared/radioButtonGroup/RadioButtonGroup.tsx
View file @
1cbb8cd9
import
{
ButtonGroup
,
Button
,
Flex
,
Icon
,
useRadio
,
useRadioGroup
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
{
ButtonGroup
,
Button
,
Flex
,
useRadio
,
useRadioGroup
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
type
{
UseRadioProps
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
type
{
IconName
}
from
'
ui/shared/IconSvg
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
type
RadioItemProps
=
{
title
:
string
;
icon
?:
React
.
FC
<
React
.
SVGAttributes
<
SVGElement
>>
;
icon
?:
IconName
;
onlyIcon
:
false
|
undefined
;
}
|
{
title
:
string
;
icon
:
React
.
FC
<
React
.
SVGAttributes
<
SVGElement
>>
;
icon
:
IconName
;
onlyIcon
:
true
;
}
...
...
@@ -50,7 +53,7 @@ const RadioButton = (props: RadioButtonProps) => {
<
Flex
{
...
checkbox
}
>
<
Icon
as
=
{
props
.
icon
}
boxSize=
{
5
}
/>
<
Icon
Svg
name
=
{
props
.
icon
}
boxSize=
{
5
}
/>
</
Flex
>
</
Button
>
);
...
...
@@ -59,7 +62,7 @@ const RadioButton = (props: RadioButtonProps) => {
return
(
<
Button
as=
"label"
leftIcon=
{
props
.
icon
?
<
Icon
as
=
{
props
.
icon
}
boxSize=
{
5
}
mr=
{
-
1
}
/>
:
undefined
}
leftIcon=
{
props
.
icon
?
<
Icon
Svg
name
=
{
props
.
icon
}
boxSize=
{
5
}
mr=
{
-
1
}
/>
:
undefined
}
{
...
styleProps
}
>
<
input
{
...
input
}
/>
...
...
ui/tx/TxDetails.tsx
View file @
1cbb8cd9
...
...
@@ -3,7 +3,6 @@ import {
GridItem
,
Text
,
Box
,
Icon
as
ChakraIcon
,
Link
,
Spinner
,
Flex
,
...
...
@@ -22,15 +21,10 @@ import { ZKEVM_L2_TX_STATUSES } from 'types/api/transaction';
import
{
route
}
from
'
nextjs-routes
'
;
import
config
from
'
configs/app
'
;
import
clockIcon
from
'
icons/clock.svg
'
;
import
flameIcon
from
'
icons/flame.svg
'
;
import
errorIcon
from
'
icons/status/error.svg
'
;
import
successIcon
from
'
icons/status/success.svg
'
;
import
{
WEI
,
WEI_IN_GWEI
}
from
'
lib/consts
'
;
import
dayjs
from
'
lib/date/dayjs
'
;
import
getNetworkValidatorTitle
from
'
lib/networks/getNetworkValidatorTitle
'
;
import
getConfirmationDuration
from
'
lib/tx/getConfirmationDuration
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
Tag
from
'
ui/shared/chakra/Tag
'
;
import
CopyToClipboard
from
'
ui/shared/CopyToClipboard
'
;
import
CurrencyValue
from
'
ui/shared/CurrencyValue
'
;
...
...
@@ -42,6 +36,7 @@ import AddressEntity from 'ui/shared/entities/address/AddressEntity';
import
BlockEntity
from
'
ui/shared/entities/block/BlockEntity
'
;
import
ZkEvmBatchEntityL2
from
'
ui/shared/entities/block/ZkEvmBatchEntityL2
'
;
import
HashStringShortenDynamic
from
'
ui/shared/HashStringShortenDynamic
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
LogDecodedInputData
from
'
ui/shared/logs/LogDecodedInputData
'
;
import
RawInputData
from
'
ui/shared/RawInputData
'
;
import
TxStatus
from
'
ui/shared/statusTag/TxStatus
'
;
...
...
@@ -108,14 +103,14 @@ const TxDetails = () => {
const
executionSuccessBadge
=
toAddress
?.
is_contract
&&
data
.
result
===
'
success
'
?
(
<
Tooltip
label=
"Contract execution completed"
>
<
chakra
.
span
display=
"inline-flex"
ml=
{
2
}
mr=
{
1
}
>
<
ChakraIcon
as=
{
successIcon
}
boxSize=
{
4
}
color=
{
executionSuccessIconColor
}
cursor=
"pointer"
/>
<
IconSvg
name=
"status/success"
boxSize=
{
4
}
color=
{
executionSuccessIconColor
}
cursor=
"pointer"
/>
</
chakra
.
span
>
</
Tooltip
>
)
:
null
;
const
executionFailedBadge
=
toAddress
?.
is_contract
&&
Boolean
(
data
.
status
)
&&
data
.
result
!==
'
success
'
?
(
<
Tooltip
label=
"Error occurred during contract execution"
>
<
chakra
.
span
display=
"inline-flex"
ml=
{
2
}
mr=
{
1
}
>
<
ChakraIcon
as=
{
errorIcon
}
boxSize=
{
4
}
color=
"error"
cursor=
"pointer"
/>
<
IconSvg
name=
"status/error"
boxSize=
{
4
}
color=
"error"
cursor=
"pointer"
/>
</
chakra
.
span
>
</
Tooltip
>
)
:
null
;
...
...
@@ -218,7 +213,7 @@ const TxDetails = () => {
hint=
"Date & time of transaction inclusion, including length of time for confirmation"
isLoading=
{
isPlaceholderData
}
>
<
Icon
as=
{
clockIcon
}
boxSize=
{
5
}
color=
"gray.500"
isLoading=
{
isPlaceholderData
}
/>
<
Icon
Svg
name=
"clock"
boxSize=
{
5
}
color=
"gray.500"
isLoading=
{
isPlaceholderData
}
/>
<
Skeleton
isLoaded=
{
!
isPlaceholderData
}
ml=
{
2
}
>
{
dayjs
(
data
.
timestamp
).
fromNow
()
}
</
Skeleton
>
<
TextSeparator
/>
<
Skeleton
isLoaded=
{
!
isPlaceholderData
}
whiteSpace=
"normal"
>
{
dayjs
(
data
.
timestamp
).
format
(
'
llll
'
)
}
</
Skeleton
>
...
...
@@ -434,7 +429,7 @@ const TxDetails = () => {
title=
"Burnt fees"
hint=
{
`Amount of ${ config.chain.currency.symbol } burned for this transaction. Equals Block Base Fee per Gas * Gas Used`
}
>
<
Icon
as=
{
flameIcon
}
boxSize=
{
5
}
color=
"gray.500"
/>
<
Icon
Svg
name=
"flame"
boxSize=
{
5
}
color=
"gray.500"
/>
<
CurrencyValue
value=
{
String
(
data
.
tx_burnt_fee
)
}
currency=
{
config
.
chain
.
currency
.
symbol
}
...
...
ui/tx/details/TxDetailsAction.tsx
View file @
1cbb8cd9
import
{
Flex
,
Icon
,
chakra
}
from
'
@chakra-ui/react
'
;
import
{
Flex
,
chakra
}
from
'
@chakra-ui/react
'
;
import
BigNumber
from
'
bignumber.js
'
;
import
React
from
'
react
'
;
import
type
{
TxAction
,
TxActionGeneral
}
from
'
types/api/txAction
'
;
import
config
from
'
configs/app
'
;
import
uniswapIcon
from
'
icons/uniswap.svg
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
NftEntity
from
'
ui/shared/entities/nft/NftEntity
'
;
import
TokenEntity
from
'
ui/shared/entities/token/TokenEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
interface
Props
{
action
:
TxAction
;
...
...
@@ -88,7 +88,7 @@ const TxDetailsAction = ({ action }: Props) => {
<
chakra
.
span
color=
"text_secondary"
>
{
text1
}
</
chakra
.
span
>
<
Flex
columnGap=
{
2
}
>
<
Icon
as=
{
uniswapIcon
}
boxSize=
{
5
}
color=
"white"
bgColor=
"#ff007a"
borderRadius=
"full"
p=
"2px"
/>
<
Icon
Svg
name=
"uniswap"
boxSize=
{
5
}
color=
"white"
bgColor=
"#ff007a"
borderRadius=
"full"
p=
"2px"
/>
<
chakra
.
span
>
Uniswap V3
</
chakra
.
span
>
</
Flex
>
</
Flex
>
...
...
ui/tx/details/TxDetailsTokenTransfer.tsx
View file @
1cbb8cd9
import
{
Flex
,
Icon
,
chakra
}
from
'
@chakra-ui/react
'
;
import
{
Flex
,
chakra
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
type
{
TokenTransfer
as
TTokenTransfer
,
Erc20TotalPayload
,
Erc721TotalPayload
,
Erc1155TotalPayload
}
from
'
types/api/tokenTransfer
'
;
import
rightArrowIcon
from
'
icons/arrows/east.svg
'
;
import
getCurrencyValue
from
'
lib/getCurrencyValue
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
TokenEntity
from
'
ui/shared/entities/token/TokenEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
NftTokenTransferSnippet
from
'
ui/tx/NftTokenTransferSnippet
'
;
interface
Props
{
...
...
@@ -77,7 +77,7 @@ const TxDetailsTokenTransfer = ({ data }: Props) => {
>
<
Flex
alignItems=
"center"
fontWeight=
"500"
>
<
AddressEntity
address=
{
data
.
from
}
truncation=
"constant"
noIcon
maxW=
"150px"
/>
<
Icon
as=
{
rightArrowIcon
}
boxSize=
{
5
}
mx=
{
2
}
color=
"gray.500"
/>
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
5
}
mx=
{
2
}
color=
"gray.500"
/>
<
AddressEntity
address=
{
data
.
to
}
truncation=
"constant"
noIcon
maxW=
"150px"
/>
</
Flex
>
<
Flex
flexDir=
"column"
rowGap=
{
5
}
w=
"100%"
overflow=
"hidden"
fontWeight=
{
500
}
>
...
...
ui/tx/details/TxDetailsTokenTransfers.tsx
View file @
1cbb8cd9
import
{
Icon
,
GridItem
,
Show
,
Flex
}
from
'
@chakra-ui/react
'
;
import
{
GridItem
,
Show
,
Flex
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
type
{
TokenTransfer
}
from
'
types/api/tokenTransfer
'
;
import
{
route
}
from
'
nextjs-routes
'
;
import
tokenIcon
from
'
icons/token.svg
'
;
import
DetailsInfoItem
from
'
ui/shared/DetailsInfoItem
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
LinkInternal
from
'
ui/shared/LinkInternal
'
;
import
TxDetailsTokenTransfer
from
'
./TxDetailsTokenTransfer
'
;
...
...
@@ -62,7 +62,7 @@ const TxDetailsTokenTransfers = ({ data, txHash, isOverflow }: Props) => {
<>
<
Show
above=
"lg"
ssr=
{
false
}
><
GridItem
></
GridItem
></
Show
>
<
GridItem
fontSize=
"sm"
alignItems=
"center"
display=
"inline-flex"
pl=
{
{
base
:
'
28px
'
,
lg
:
0
}
}
>
<
Icon
as=
{
tokenIcon
}
boxSize=
{
6
}
/>
<
Icon
Svg
name=
"token"
boxSize=
{
6
}
/>
<
LinkInternal
href=
{
viewAllUrl
}
>
View all
</
LinkInternal
>
...
...
ui/tx/internals/TxInternalsListItem.tsx
View file @
1cbb8cd9
...
...
@@ -5,10 +5,9 @@ import React from 'react';
import
type
{
InternalTransaction
}
from
'
types/api/internalTransaction
'
;
import
config
from
'
configs/app
'
;
import
eastArrowIcon
from
'
icons/arrows/east.svg
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
Tag
from
'
ui/shared/chakra/Tag
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
ListItemMobile
from
'
ui/shared/ListItemMobile/ListItemMobile
'
;
import
TxStatus
from
'
ui/shared/statusTag/TxStatus
'
;
import
{
TX_INTERNALS_ITEMS
}
from
'
ui/tx/internals/utils
'
;
...
...
@@ -31,7 +30,7 @@ const TxInternalsListItem = ({ type, from, to, value, success, error, gas_limit:
isLoading=
{
isLoading
}
width=
"calc((100% - 48px) / 2)"
/>
<
Icon
as=
{
eastArrowIcon
}
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
{
toData
&&
(
<
AddressEntity
address=
{
toData
}
...
...
ui/tx/internals/TxInternalsTable.tsx
View file @
1cbb8cd9
import
{
Table
,
Tbody
,
Tr
,
Th
,
Link
,
Icon
}
from
'
@chakra-ui/react
'
;
import
{
Table
,
Tbody
,
Tr
,
Th
,
Link
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
type
{
InternalTransaction
}
from
'
types/api/internalTransaction
'
;
import
config
from
'
configs/app
'
;
import
arrowIcon
from
'
icons/arrows/east.s
vg
'
;
import
IconSvg
from
'
ui/shared/IconS
vg
'
;
import
{
default
as
Thead
}
from
'
ui/shared/TheadSticky
'
;
import
TxInternalsTableItem
from
'
ui/tx/internals/TxInternalsTableItem
'
;
import
type
{
Sort
,
SortField
}
from
'
ui/tx/internals/utils
'
;
...
...
@@ -30,13 +30,13 @@ const TxInternalsTable = ({ data, sort, onSortToggle, top, isLoading }: Props) =
<
Th
width=
"20%"
>
To
</
Th
>
<
Th
width=
"16%"
isNumeric
>
<
Link
display=
"flex"
alignItems=
"center"
justifyContent=
"flex-end"
onClick=
{
onSortToggle
(
'
value
'
)
}
columnGap=
{
1
}
>
{
sort
?.
includes
(
'
value
'
)
&&
<
Icon
as=
{
arrowIcon
}
boxSize=
{
4
}
transform=
{
sortIconTransform
}
/>
}
{
sort
?.
includes
(
'
value
'
)
&&
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
4
}
transform=
{
sortIconTransform
}
/>
}
Value
{
config
.
chain
.
currency
.
symbol
}
</
Link
>
</
Th
>
<
Th
width=
"16%"
isNumeric
>
<
Link
display=
"flex"
alignItems=
"center"
justifyContent=
"flex-end"
onClick=
{
onSortToggle
(
'
gas-limit
'
)
}
columnGap=
{
1
}
>
{
sort
?.
includes
(
'
gas-limit
'
)
&&
<
Icon
as=
{
arrowIcon
}
boxSize=
{
4
}
transform=
{
sortIconTransform
}
/>
}
{
sort
?.
includes
(
'
gas-limit
'
)
&&
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
4
}
transform=
{
sortIconTransform
}
/>
}
Gas limit
{
config
.
chain
.
currency
.
symbol
}
</
Link
>
</
Th
>
...
...
ui/tx/internals/TxInternalsTableItem.tsx
View file @
1cbb8cd9
...
...
@@ -5,10 +5,9 @@ import React from 'react';
import
type
{
InternalTransaction
}
from
'
types/api/internalTransaction
'
;
import
config
from
'
configs/app
'
;
import
rightArrowIcon
from
'
icons/arrows/east.svg
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
Tag
from
'
ui/shared/chakra/Tag
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
TxStatus
from
'
ui/shared/statusTag/TxStatus
'
;
import
{
TX_INTERNALS_ITEMS
}
from
'
ui/tx/internals/utils
'
;
...
...
@@ -39,7 +38,7 @@ const TxInternalTableItem = ({ type, from, to, value, success, error, gas_limit:
/>
</
Td
>
<
Td
px=
{
0
}
verticalAlign=
"middle"
>
<
Icon
as=
{
rightArrowIcon
}
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
</
Td
>
<
Td
verticalAlign=
"middle"
>
{
toData
&&
(
...
...
ui/txs/TxsListItem.tsx
View file @
1cbb8cd9
...
...
@@ -9,14 +9,13 @@ import React from 'react';
import
type
{
Transaction
}
from
'
types/api/transaction
'
;
import
config
from
'
configs/app
'
;
import
rightArrowIcon
from
'
icons/arrows/east.svg
'
;
import
getValueWithUnit
from
'
lib/getValueWithUnit
'
;
import
useTimeAgoIncrement
from
'
lib/hooks/useTimeAgoIncrement
'
;
import
{
space
}
from
'
lib/html-entities
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
BlockEntity
from
'
ui/shared/entities/block/BlockEntity
'
;
import
TxEntity
from
'
ui/shared/entities/tx/TxEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
InOutTag
from
'
ui/shared/InOutTag
'
;
import
ListItemMobile
from
'
ui/shared/ListItemMobile/ListItemMobile
'
;
import
TxStatus
from
'
ui/shared/statusTag/TxStatus
'
;
...
...
@@ -103,8 +102,8 @@ const TxsListItem = ({ tx, isLoading, showBlockInfo, currentAddress, enableTimeI
{
(
isIn
||
isOut
)
?
<
InOutTag
isIn=
{
isIn
}
isOut=
{
isOut
}
width=
"48px"
mx=
{
2
}
isLoading=
{
isLoading
}
/>
:
(
<
Box
mx=
{
2
}
>
<
Icon
as=
{
rightArrowIcon
}
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
...
...
ui/txs/TxsTable.tsx
View file @
1cbb8cd9
import
{
Link
,
Table
,
Tbody
,
Tr
,
Th
,
Icon
,
Show
,
Hide
}
from
'
@chakra-ui/react
'
;
import
{
Link
,
Table
,
Tbody
,
Tr
,
Th
,
Show
,
Hide
}
from
'
@chakra-ui/react
'
;
import
{
AnimatePresence
}
from
'
framer-motion
'
;
import
React
from
'
react
'
;
import
type
{
Transaction
,
TransactionsSortingField
,
TransactionsSortingValue
}
from
'
types/api/transaction
'
;
import
config
from
'
configs/app
'
;
import
rightArrowIcon
from
'
icons/arrows/east.s
vg
'
;
import
IconSvg
from
'
ui/shared/IconS
vg
'
;
import
*
as
SocketNewItemsNotice
from
'
ui/shared/SocketNewItemsNotice
'
;
import
TheadSticky
from
'
ui/shared/TheadSticky
'
;
...
...
@@ -58,8 +58,8 @@ const TxsTable = ({
{
!
config
.
UI
.
views
.
tx
.
hiddenFields
?.
value
&&
(
<
Th
width=
"20%"
isNumeric
>
<
Link
onClick=
{
sort
(
'
value
'
)
}
display=
"flex"
justifyContent=
"end"
>
{
sorting
===
'
value-asc
'
&&
<
Icon
boxSize=
{
5
}
as=
{
rightArrowIcon
}
transform=
"rotate(-90deg)"
/>
}
{
sorting
===
'
value-desc
'
&&
<
Icon
boxSize=
{
5
}
as=
{
rightArrowIcon
}
transform=
"rotate(90deg)"
/>
}
{
sorting
===
'
value-asc
'
&&
<
Icon
Svg
boxSize=
{
5
}
name=
"arrows/east"
transform=
"rotate(-90deg)"
/>
}
{
sorting
===
'
value-desc
'
&&
<
Icon
Svg
boxSize=
{
5
}
name=
"arrows/east"
transform=
"rotate(90deg)"
/>
}
{
`Value ${ config.chain.currency.symbol }`
}
</
Link
>
</
Th
>
...
...
@@ -67,8 +67,8 @@ const TxsTable = ({
{
!
config
.
UI
.
views
.
tx
.
hiddenFields
?.
tx_fee
&&
(
<
Th
width=
"20%"
isNumeric
pr=
{
5
}
>
<
Link
onClick=
{
sort
(
'
fee
'
)
}
display=
"flex"
justifyContent=
"end"
>
{
sorting
===
'
fee-asc
'
&&
<
Icon
boxSize=
{
5
}
as=
{
rightArrowIcon
}
transform=
"rotate(-90deg)"
/>
}
{
sorting
===
'
fee-desc
'
&&
<
Icon
boxSize=
{
5
}
as=
{
rightArrowIcon
}
transform=
"rotate(90deg)"
/>
}
{
sorting
===
'
fee-asc
'
&&
<
Icon
Svg
boxSize=
{
5
}
name=
"arrows/east"
transform=
"rotate(-90deg)"
/>
}
{
sorting
===
'
fee-desc
'
&&
<
Icon
Svg
boxSize=
{
5
}
name=
"arrows/east"
transform=
"rotate(90deg)"
/>
}
{
`Fee${ config.UI.views.tx.hiddenFields?.fee_currency ? '' : `
$
{
config
.
chain
.
currency
.
symbol
}
` }`
}
</
Link
>
</
Th
>
...
...
ui/txs/TxsTableItem.tsx
View file @
1cbb8cd9
...
...
@@ -14,14 +14,13 @@ import React from 'react';
import
type
{
Transaction
}
from
'
types/api/transaction
'
;
import
config
from
'
configs/app
'
;
import
rightArrowIcon
from
'
icons/arrows/east.svg
'
;
import
useTimeAgoIncrement
from
'
lib/hooks/useTimeAgoIncrement
'
;
import
Icon
from
'
ui/shared/chakra/Icon
'
;
import
Tag
from
'
ui/shared/chakra/Tag
'
;
import
CurrencyValue
from
'
ui/shared/CurrencyValue
'
;
import
AddressEntity
from
'
ui/shared/entities/address/AddressEntity
'
;
import
BlockEntity
from
'
ui/shared/entities/block/BlockEntity
'
;
import
TxEntity
from
'
ui/shared/entities/tx/TxEntity
'
;
import
IconSvg
from
'
ui/shared/IconSvg
'
;
import
InOutTag
from
'
ui/shared/InOutTag
'
;
import
TxStatus
from
'
ui/shared/statusTag/TxStatus
'
;
import
TxFeeStability
from
'
ui/shared/tx/TxFeeStability
'
;
...
...
@@ -129,7 +128,7 @@ const TxsTableItem = ({ tx, showBlockInfo, currentAddress, enableTimeIncrement,
{
(
isIn
||
isOut
)
?
<
InOutTag
isIn=
{
isIn
}
isOut=
{
isOut
}
width=
"48px"
mr=
{
2
}
isLoading=
{
isLoading
}
/>
:
(
<
Box
mx=
"6px"
>
<
Icon
as=
{
rightArrowIcon
}
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
6
}
color=
"gray.500"
isLoading=
{
isLoading
}
/>
</
Box
>
)
}
</
Td
>
...
...
@@ -142,8 +141,8 @@ const TxsTableItem = ({ tx, showBlockInfo, currentAddress, enableTimeIncrement,
<
Flex
alignItems=
"center"
>
{
(
isIn
||
isOut
)
?
<
InOutTag
isIn=
{
isIn
}
isOut=
{
isOut
}
width=
"48px"
isLoading=
{
isLoading
}
/>
:
(
<
Icon
as=
{
rightArrowIcon
}
<
Icon
Svg
name=
"arrows/east"
boxSize=
{
6
}
color=
"gray.500"
transform=
"rotate(90deg)"
...
...
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