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