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
1ca78283
Commit
1ca78283
authored
Oct 26, 2022
by
isstuev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
new version of sticky, probably final
parent
1a974c78
Changes
20
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
422 additions
and
380 deletions
+422
-380
useScrollDirection.ts
lib/hooks/useScrollDirection.ts
+3
-1
Table.ts
theme/components/Table.ts
+8
-5
ScrollDirectionContext.tsx
ui/ScrollDirectionContext.tsx
+5
-0
ApiKeyTable.tsx
ui/apiKey/ApiKeyTable/ApiKeyTable.tsx
+18
-21
BlocksTable.tsx
ui/blocks/BlocksTable.tsx
+20
-22
CustomAbiTable.tsx
ui/customAbi/CustomAbiTable/CustomAbiTable.tsx
+18
-21
AddressTagTable.tsx
ui/privateTags/AddressTagTable/AddressTagTable.tsx
+19
-22
TransactionTagTable.tsx
ui/privateTags/TransactionTagTable/TransactionTagTable.tsx
+19
-22
PublicTagTable.tsx
ui/publicTags/PublicTagTable/PublicTagTable.tsx
+20
-23
Page.tsx
ui/shared/Page/Page.tsx
+12
-6
TheadSticky.tsx
ui/shared/TheadSticky.tsx
+48
-0
Header.tsx
ui/snippets/header/Header.tsx
+44
-44
SearchBar.tsx
ui/snippets/searchBar/SearchBar.tsx
+2
-2
SearchBarMobile.tsx
ui/snippets/searchBar/SearchBarMobile.tsx
+42
-40
TxInternalsTable.tsx
ui/tx/internals/TxInternalsTable.tsx
+26
-28
TxStateTable.tsx
ui/tx/state/TxStateTable.tsx
+15
-18
TxsContent.tsx
ui/txs/TxsContent.tsx
+1
-5
TxsHeader.tsx
ui/txs/TxsHeader.tsx
+44
-38
TxsTable.tsx
ui/txs/TxsTable.tsx
+38
-39
WatchlistTable.tsx
ui/watchlist/WatchlistTable/WatchlistTable.tsx
+20
-23
No files found.
lib/hooks/useScrollDirection.ts
View file @
1ca78283
...
@@ -16,7 +16,9 @@ export default function useScrollDirection() {
...
@@ -16,7 +16,9 @@ export default function useScrollDirection() {
const
currentScrollPosition
=
clamp
(
window
.
pageYOffset
,
0
,
window
.
document
.
body
.
scrollHeight
-
window
.
innerHeight
);
const
currentScrollPosition
=
clamp
(
window
.
pageYOffset
,
0
,
window
.
document
.
body
.
scrollHeight
-
window
.
innerHeight
);
const
scrollDiff
=
currentScrollPosition
-
prevScrollPosition
.
current
;
const
scrollDiff
=
currentScrollPosition
-
prevScrollPosition
.
current
;
if
(
Math
.
abs
(
scrollDiff
)
>
SCROLL_DIFF_THRESHOLD
)
{
if
(
window
.
pageYOffset
===
0
)
{
setDirection
(
undefined
);
}
else
if
(
Math
.
abs
(
scrollDiff
)
>
SCROLL_DIFF_THRESHOLD
)
{
setDirection
(
scrollDiff
<
0
?
'
up
'
:
'
down
'
);
setDirection
(
scrollDiff
<
0
?
'
up
'
:
'
down
'
);
}
}
...
...
theme/components/Table.ts
View file @
1ca78283
...
@@ -16,10 +16,10 @@ const variantSimple = definePartsStyle((props) => {
...
@@ -16,10 +16,10 @@ const variantSimple = definePartsStyle((props) => {
th
:
{
th
:
{
border
:
0
,
border
:
0
,
color
:
mode
(
'
gray.600
'
,
'
whiteAlpha.700
'
)(
props
),
color
:
mode
(
'
gray.600
'
,
'
whiteAlpha.700
'
)(
props
),
backgroundColor
:
mode
(
'
blackAlpha.100
'
,
'
whiteAlpha.200
'
)(
props
),
...
transitionProps
,
...
transitionProps
,
},
},
thead
:
{
thead
:
{
backgroundColor
:
mode
(
'
blackAlpha.100
'
,
'
whiteAlpha.200
'
)(
props
),
...
transitionProps
,
...
transitionProps
,
},
},
td
:
{
td
:
{
...
@@ -73,9 +73,6 @@ const variants = {
...
@@ -73,9 +73,6 @@ const variants = {
};
};
const
baseStyle
=
definePartsStyle
({
const
baseStyle
=
definePartsStyle
({
thead
:
{
backgroundColor
:
'
gray.50
'
,
},
th
:
{
th
:
{
textTransform
:
'
none
'
,
textTransform
:
'
none
'
,
fontFamily
:
'
body
'
,
fontFamily
:
'
body
'
,
...
@@ -83,6 +80,12 @@ const baseStyle = definePartsStyle({
...
@@ -83,6 +80,12 @@ const baseStyle = definePartsStyle({
overflow
:
'
hidden
'
,
overflow
:
'
hidden
'
,
color
:
'
gray.500
'
,
color
:
'
gray.500
'
,
letterSpacing
:
'
none
'
,
letterSpacing
:
'
none
'
,
_first
:
{
borderTopLeftRadius
:
'
8px
'
,
},
_last
:
{
borderTopRightRadius
:
'
8px
'
,
},
},
},
td
:
{
td
:
{
fontSize
:
'
md
'
,
fontSize
:
'
md
'
,
...
@@ -92,7 +95,7 @@ const baseStyle = definePartsStyle({
...
@@ -92,7 +95,7 @@ const baseStyle = definePartsStyle({
tableLayout
:
'
fixed
'
,
tableLayout
:
'
fixed
'
,
borderTopLeftRadius
:
'
base
'
,
borderTopLeftRadius
:
'
base
'
,
borderTopRightRadius
:
'
base
'
,
borderTopRightRadius
:
'
base
'
,
overflow
:
'
hidden
'
,
overflow
:
'
unset
'
,
fontVariant
:
'
normal
'
,
fontVariant
:
'
normal
'
,
},
},
});
});
...
...
ui/ScrollDirectionContext.tsx
0 → 100644
View file @
1ca78283
import
React
from
'
react
'
;
const
ScrollDirectionContext
=
React
.
createContext
<
'
up
'
|
'
down
'
|
undefined
>
(
undefined
);
export
default
ScrollDirectionContext
;
ui/apiKey/ApiKeyTable/ApiKeyTable.tsx
View file @
1ca78283
...
@@ -4,7 +4,6 @@ import {
...
@@ -4,7 +4,6 @@ import {
Tbody
,
Tbody
,
Tr
,
Tr
,
Th
,
Th
,
TableContainer
,
}
from
'
@chakra-ui/react
'
;
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -21,7 +20,6 @@ interface Props {
...
@@ -21,7 +20,6 @@ interface Props {
const
ApiKeyTable
=
({
data
,
onDeleteClick
,
onEditClick
,
limit
}:
Props
)
=>
{
const
ApiKeyTable
=
({
data
,
onDeleteClick
,
onEditClick
,
limit
}:
Props
)
=>
{
return
(
return
(
<
TableContainer
width=
"100%"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
...
@@ -40,7 +38,6 @@ const ApiKeyTable = ({ data, onDeleteClick, onEditClick, limit }: Props) => {
...
@@ -40,7 +38,6 @@ const ApiKeyTable = ({ data, onDeleteClick, onEditClick, limit }: Props) => {
))
}
))
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
ui/blocks/BlocksTable.tsx
View file @
1ca78283
import
{
Table
,
Thead
,
Tbody
,
Tr
,
Th
,
TableContainer
}
from
'
@chakra-ui/react
'
;
import
{
Table
,
Thead
,
Tbody
,
Tr
,
Th
}
from
'
@chakra-ui/react
'
;
import
{
AnimatePresence
}
from
'
framer-motion
'
;
import
{
AnimatePresence
}
from
'
framer-motion
'
;
import
capitalize
from
'
lodash/capitalize
'
;
import
capitalize
from
'
lodash/capitalize
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -16,8 +16,7 @@ interface Props {
...
@@ -16,8 +16,7 @@ interface Props {
const
BlocksTable
=
({
data
}:
Props
)
=>
{
const
BlocksTable
=
({
data
}:
Props
)
=>
{
return
(
return
(
<
TableContainer
width=
"100%"
mt=
{
8
}
>
<
Table
variant=
"simple"
minWidth=
"1040px"
size=
"md"
fontWeight=
{
500
}
mt=
{
8
}
>
<
Table
variant=
"simple"
minWidth=
"1040px"
size=
"md"
fontWeight=
{
500
}
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
<
Th
width=
"125px"
>
Block
</
Th
>
<
Th
width=
"125px"
>
Block
</
Th
>
...
@@ -36,7 +35,6 @@ const BlocksTable = ({ data }: Props) => {
...
@@ -36,7 +35,6 @@ const BlocksTable = ({ data }: Props) => {
</
AnimatePresence
>
</
AnimatePresence
>
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
ui/customAbi/CustomAbiTable/CustomAbiTable.tsx
View file @
1ca78283
...
@@ -4,7 +4,6 @@ import {
...
@@ -4,7 +4,6 @@ import {
Tbody
,
Tbody
,
Tr
,
Tr
,
Th
,
Th
,
TableContainer
,
}
from
'
@chakra-ui/react
'
;
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -20,7 +19,6 @@ interface Props {
...
@@ -20,7 +19,6 @@ interface Props {
const
CustomAbiTable
=
({
data
,
onDeleteClick
,
onEditClick
}:
Props
)
=>
{
const
CustomAbiTable
=
({
data
,
onDeleteClick
,
onEditClick
}:
Props
)
=>
{
return
(
return
(
<
TableContainer
width=
"100%"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
...
@@ -39,7 +37,6 @@ const CustomAbiTable = ({ data, onDeleteClick, onEditClick }: Props) => {
...
@@ -39,7 +37,6 @@ const CustomAbiTable = ({ data, onDeleteClick, onEditClick }: Props) => {
))
}
))
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
ui/privateTags/AddressTagTable/AddressTagTable.tsx
View file @
1ca78283
...
@@ -4,7 +4,6 @@ import {
...
@@ -4,7 +4,6 @@ import {
Tbody
,
Tbody
,
Tr
,
Tr
,
Th
,
Th
,
TableContainer
,
}
from
'
@chakra-ui/react
'
;
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -20,7 +19,6 @@ interface Props {
...
@@ -20,7 +19,6 @@ interface Props {
const
AddressTagTable
=
({
data
,
onDeleteClick
,
onEditClick
}:
Props
)
=>
{
const
AddressTagTable
=
({
data
,
onDeleteClick
,
onEditClick
}:
Props
)
=>
{
return
(
return
(
<
TableContainer
width=
"100%"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
...
@@ -40,7 +38,6 @@ const AddressTagTable = ({ data, onDeleteClick, onEditClick }: Props) => {
...
@@ -40,7 +38,6 @@ const AddressTagTable = ({ data, onDeleteClick, onEditClick }: Props) => {
))
}
))
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
ui/privateTags/TransactionTagTable/TransactionTagTable.tsx
View file @
1ca78283
...
@@ -4,7 +4,6 @@ import {
...
@@ -4,7 +4,6 @@ import {
Tbody
,
Tbody
,
Tr
,
Tr
,
Th
,
Th
,
TableContainer
,
}
from
'
@chakra-ui/react
'
;
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -20,7 +19,6 @@ interface Props {
...
@@ -20,7 +19,6 @@ interface Props {
const
AddressTagTable
=
({
data
,
onDeleteClick
,
onEditClick
}:
Props
)
=>
{
const
AddressTagTable
=
({
data
,
onDeleteClick
,
onEditClick
}:
Props
)
=>
{
return
(
return
(
<
TableContainer
width=
"100%"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
...
@@ -40,7 +38,6 @@ const AddressTagTable = ({ data, onDeleteClick, onEditClick }: Props) => {
...
@@ -40,7 +38,6 @@ const AddressTagTable = ({ data, onDeleteClick, onEditClick }: Props) => {
))
}
))
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
ui/publicTags/PublicTagTable/PublicTagTable.tsx
View file @
1ca78283
...
@@ -4,7 +4,6 @@ import {
...
@@ -4,7 +4,6 @@ import {
Tbody
,
Tbody
,
Tr
,
Tr
,
Th
,
Th
,
TableContainer
,
}
from
'
@chakra-ui/react
'
;
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -20,7 +19,6 @@ interface Props {
...
@@ -20,7 +19,6 @@ interface Props {
const
PublicTagTable
=
({
data
,
onEditClick
,
onDeleteClick
}:
Props
)
=>
{
const
PublicTagTable
=
({
data
,
onEditClick
,
onDeleteClick
}:
Props
)
=>
{
return
(
return
(
<
TableContainer
width=
"100%"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
...
@@ -41,7 +39,6 @@ const PublicTagTable = ({ data, onEditClick, onDeleteClick }: Props) => {
...
@@ -41,7 +39,6 @@ const PublicTagTable = ({ data, onEditClick, onDeleteClick }: Props) => {
))
}
))
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
ui/shared/Page/Page.tsx
View file @
1ca78283
...
@@ -6,6 +6,8 @@ import { QueryKeys } from 'types/client/queries';
...
@@ -6,6 +6,8 @@ import { QueryKeys } from 'types/client/queries';
import
*
as
cookies
from
'
lib/cookies
'
;
import
*
as
cookies
from
'
lib/cookies
'
;
import
useFetch
from
'
lib/hooks/useFetch
'
;
import
useFetch
from
'
lib/hooks/useFetch
'
;
import
useScrollDirection
from
'
lib/hooks/useScrollDirection
'
;
import
ScrollDirectionContext
from
'
ui/ScrollDirectionContext
'
;
import
PageContent
from
'
ui/shared/Page/PageContent
'
;
import
PageContent
from
'
ui/shared/Page/PageContent
'
;
import
Header
from
'
ui/snippets/header/Header
'
;
import
Header
from
'
ui/snippets/header/Header
'
;
import
NavigationDesktop
from
'
ui/snippets/navigation/NavigationDesktop
'
;
import
NavigationDesktop
from
'
ui/snippets/navigation/NavigationDesktop
'
;
...
@@ -23,11 +25,14 @@ const Page = ({ children, wrapChildren = true, hideMobileHeaderOnScrollDown }: P
...
@@ -23,11 +25,14 @@ const Page = ({ children, wrapChildren = true, hideMobileHeaderOnScrollDown }: P
enabled
:
Boolean
(
cookies
.
get
(
cookies
.
NAMES
.
API_TOKEN
)),
enabled
:
Boolean
(
cookies
.
get
(
cookies
.
NAMES
.
API_TOKEN
)),
});
});
const
directionContext
=
useScrollDirection
();
const
renderedChildren
=
wrapChildren
?
(
const
renderedChildren
=
wrapChildren
?
(
<
PageContent
>
{
children
}
</
PageContent
>
<
PageContent
>
{
children
}
</
PageContent
>
)
:
children
;
)
:
children
;
return
(
return
(
<
ScrollDirectionContext
.
Provider
value=
{
directionContext
}
>
<
Flex
w=
"100%"
minH=
"100vh"
alignItems=
"stretch"
>
<
Flex
w=
"100%"
minH=
"100vh"
alignItems=
"stretch"
>
<
NavigationDesktop
/>
<
NavigationDesktop
/>
<
Flex
flexDir=
"column"
width=
"100%"
>
<
Flex
flexDir=
"column"
width=
"100%"
>
...
@@ -35,6 +40,7 @@ const Page = ({ children, wrapChildren = true, hideMobileHeaderOnScrollDown }: P
...
@@ -35,6 +40,7 @@ const Page = ({ children, wrapChildren = true, hideMobileHeaderOnScrollDown }: P
{
renderedChildren
}
{
renderedChildren
}
</
Flex
>
</
Flex
>
</
Flex
>
</
Flex
>
</
ScrollDirectionContext
.
Provider
>
);
);
};
};
...
...
ui/shared/TheadSticky.tsx
0 → 100644
View file @
1ca78283
import
{
Thead
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
type
{
TableHeadProps
,
PositionProps
}
from
'
@chakra-ui/react
'
;
import
throttle
from
'
lodash/throttle
'
;
import
React
from
'
react
'
;
interface
Props
extends
TableHeadProps
{
top
?:
number
;
children
?:
React
.
ReactNode
;
}
const
TheadSticky
=
({
top
,
children
,
...
restProps
}:
Props
)
=>
{
const
ref
=
React
.
useRef
<
HTMLTableSectionElement
>
(
null
);
const
[
isSticky
,
setIsSticky
]
=
React
.
useState
(
false
);
const
handleScroll
=
React
.
useCallback
(()
=>
{
if
(
Number
(
ref
.
current
?.
getBoundingClientRect
().
y
)
<=
(
top
||
0
))
{
setIsSticky
(
true
);
}
else
{
setIsSticky
(
false
);
}
},
[
top
]);
React
.
useEffect
(()
=>
{
const
throttledHandleScroll
=
throttle
(
handleScroll
,
300
);
window
.
addEventListener
(
'
scroll
'
,
throttledHandleScroll
);
return
()
=>
{
window
.
removeEventListener
(
'
scroll
'
,
throttledHandleScroll
);
};
},
[
handleScroll
]);
const
props
=
{
...
restProps
,
position
:
'
sticky
'
as
PositionProps
[
'
position
'
],
top
:
`
${
top
}
px`
||
0
,
backgroundColor
:
useColorModeValue
(
'
white
'
,
'
black
'
),
boxShadow
:
isSticky
?
'
md
'
:
'
none
'
,
};
return
(
<
Thead
{
...
props
}
ref=
{
ref
}
>
{
children
}
</
Thead
>
);
};
export
default
TheadSticky
;
ui/snippets/header/Header.tsx
View file @
1ca78283
import
{
HStack
,
Box
,
Flex
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
{
HStack
,
Box
,
Flex
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
import
useScrollDirection
from
'
lib/hooks/useScrollDirection
'
;
import
ScrollDirectionContext
from
'
ui/ScrollDirectionContext
'
;
import
NetworkLogo
from
'
ui/snippets/networkMenu/NetworkLogo
'
;
import
NetworkLogo
from
'
ui/snippets/networkMenu/NetworkLogo
'
;
import
ProfileMenuDesktop
from
'
ui/snippets/profileMenu/ProfileMenuDesktop
'
;
import
ProfileMenuDesktop
from
'
ui/snippets/profileMenu/ProfileMenuDesktop
'
;
import
ProfileMenuMobile
from
'
ui/snippets/profileMenu/ProfileMenuMobile
'
;
import
ProfileMenuMobile
from
'
ui/snippets/profileMenu/ProfileMenuMobile
'
;
...
@@ -11,11 +11,11 @@ import Burger from './Burger';
...
@@ -11,11 +11,11 @@ import Burger from './Burger';
import
ColorModeToggler
from
'
./ColorModeToggler
'
;
import
ColorModeToggler
from
'
./ColorModeToggler
'
;
const
Header
=
({
hideOnScrollDown
}:
{
hideOnScrollDown
?:
boolean
})
=>
{
const
Header
=
({
hideOnScrollDown
}:
{
hideOnScrollDown
?:
boolean
})
=>
{
const
scrollDirection
=
useScrollDirection
();
const
bgColor
=
useColorModeValue
(
'
white
'
,
'
black
'
);
const
bgColor
=
useColorModeValue
(
'
white
'
,
'
black
'
);
const
transform
=
hideOnScrollDown
&&
scrollDirection
===
'
down
'
?
'
translateY(-60px)
'
:
'
translateY(0)
'
;
return
(
return
(
<
ScrollDirectionContext
.
Consumer
>
{
(
scrollDirection
)
=>
(
<>
<>
<
Box
bgColor=
{
bgColor
}
display=
{
{
base
:
'
block
'
,
lg
:
'
none
'
}
}
>
<
Box
bgColor=
{
bgColor
}
display=
{
{
base
:
'
block
'
,
lg
:
'
none
'
}
}
>
<
Flex
<
Flex
...
@@ -30,18 +30,16 @@ const Header = ({ hideOnScrollDown }: {hideOnScrollDown?: boolean}) => {
...
@@ -30,18 +30,16 @@ const Header = ({ hideOnScrollDown }: {hideOnScrollDown?: boolean}) => {
alignItems=
"center"
alignItems=
"center"
justifyContent=
"space-between"
justifyContent=
"space-between"
zIndex=
"sticky2"
zIndex=
"sticky2"
transform=
{
transform
}
transitionProperty=
"box-shadow"
transitionProperty=
"transform,box-shadow"
transitionDuration=
"slow"
transitionDuration=
"slow"
boxShadow=
{
scrollDirection
===
'
down
'
?
'
md
'
:
'
none
'
}
boxShadow=
{
!
hideOnScrollDown
&&
scrollDirection
===
'
down
'
?
'
md
'
:
'
none
'
}
>
>
<
Burger
/>
<
Burger
/>
<
NetworkLogo
/>
<
NetworkLogo
/>
<
ProfileMenuMobile
/>
<
ProfileMenuMobile
/>
</
Flex
>
</
Flex
>
<
SearchBar
/>
<
SearchBar
withShadow=
{
!
hideOnScrollDown
}
/>
</
Box
>
</
Box
><
HStack
<
HStack
as=
"header"
as=
"header"
width=
"100%"
width=
"100%"
alignItems=
"center"
alignItems=
"center"
...
@@ -57,6 +55,8 @@ const Header = ({ hideOnScrollDown }: {hideOnScrollDown?: boolean}) => {
...
@@ -57,6 +55,8 @@ const Header = ({ hideOnScrollDown }: {hideOnScrollDown?: boolean}) => {
<
ProfileMenuDesktop
/>
<
ProfileMenuDesktop
/>
</
HStack
>
</
HStack
>
</>
</>
)
}
</
ScrollDirectionContext
.
Consumer
>
);
);
};
};
...
...
ui/snippets/searchBar/SearchBar.tsx
View file @
1ca78283
...
@@ -6,7 +6,7 @@ import link from 'lib/link/link';
...
@@ -6,7 +6,7 @@ import link from 'lib/link/link';
import
SearchBarDesktop
from
'
./SearchBarDesktop
'
;
import
SearchBarDesktop
from
'
./SearchBarDesktop
'
;
import
SearchBarMobile
from
'
./SearchBarMobile
'
;
import
SearchBarMobile
from
'
./SearchBarMobile
'
;
const
SearchBar
=
()
=>
{
const
SearchBar
=
(
{
withShadow
}:
{
withShadow
?:
boolean
}
)
=>
{
const
[
value
,
setValue
]
=
React
.
useState
(
''
);
const
[
value
,
setValue
]
=
React
.
useState
(
''
);
const
handleChange
=
React
.
useCallback
((
event
:
ChangeEvent
<
HTMLInputElement
>
)
=>
{
const
handleChange
=
React
.
useCallback
((
event
:
ChangeEvent
<
HTMLInputElement
>
)
=>
{
...
@@ -22,7 +22,7 @@ const SearchBar = () => {
...
@@ -22,7 +22,7 @@ const SearchBar = () => {
return
(
return
(
<>
<>
<
SearchBarDesktop
onChange=
{
handleChange
}
onSubmit=
{
handleSubmit
}
/>
<
SearchBarDesktop
onChange=
{
handleChange
}
onSubmit=
{
handleSubmit
}
/>
<
SearchBarMobile
onChange=
{
handleChange
}
onSubmit=
{
handleSubmit
}
/>
<
SearchBarMobile
onChange=
{
handleChange
}
onSubmit=
{
handleSubmit
}
withShadow=
{
withShadow
}
/>
</>
</>
);
);
};
};
...
...
ui/snippets/searchBar/SearchBarMobile.tsx
View file @
1ca78283
...
@@ -4,29 +4,27 @@ import React from 'react';
...
@@ -4,29 +4,27 @@ import React from 'react';
import
type
{
ChangeEvent
,
FormEvent
}
from
'
react
'
;
import
type
{
ChangeEvent
,
FormEvent
}
from
'
react
'
;
import
searchIcon
from
'
icons/search.svg
'
;
import
searchIcon
from
'
icons/search.svg
'
;
import
useScrollDirection
from
'
lib/hooks/useScrollDirection
'
;
import
ScrollDirectionContext
from
'
ui/ScrollDirectionContext
'
;
const
TOP
=
55
;
const
TOP
=
55
;
interface
Props
{
interface
Props
{
onChange
:
(
event
:
ChangeEvent
<
HTMLInputElement
>
)
=>
void
;
onChange
:
(
event
:
ChangeEvent
<
HTMLInputElement
>
)
=>
void
;
onSubmit
:
(
event
:
FormEvent
<
HTMLFormElement
>
)
=>
void
;
onSubmit
:
(
event
:
FormEvent
<
HTMLFormElement
>
)
=>
void
;
withShadow
?:
boolean
;
}
}
const
SearchBarMobile
=
({
onChange
,
onSubmit
}:
Props
)
=>
{
const
SearchBarMobile
=
({
onChange
,
onSubmit
,
withShadow
}:
Props
)
=>
{
const
scrollDirection
=
useScrollDirection
();
const
isVisible
=
!
scrollDirection
||
scrollDirection
===
'
up
'
;
const
[
isSticky
,
setIsSticky
]
=
React
.
useState
(
false
);
const
[
isSticky
,
setIsSticky
]
=
React
.
useState
(
false
);
const
handleScroll
=
React
.
useCallback
(()
=>
{
const
handleScroll
=
React
.
useCallback
(()
=>
{
if
(
window
.
pageYOffset
===
0
||
!
isVisible
)
{
if
(
window
.
pageYOffset
!==
0
)
{
setIsSticky
(
false
);
}
else
{
setIsSticky
(
true
);
setIsSticky
(
true
);
}
else
{
setIsSticky
(
false
);
}
}
},
[
isVisible
]);
},
[]);
React
.
useEffect
(()
=>
{
React
.
useEffect
(()
=>
{
const
throttledHandleScroll
=
throttle
(
handleScroll
,
300
);
const
throttledHandleScroll
=
throttle
(
handleScroll
,
300
);
...
@@ -45,6 +43,8 @@ const SearchBarMobile = ({ onChange, onSubmit }: Props) => {
...
@@ -45,6 +43,8 @@ const SearchBarMobile = ({ onChange, onSubmit }: Props) => {
const
bgColor
=
useColorModeValue
(
'
white
'
,
'
black
'
);
const
bgColor
=
useColorModeValue
(
'
white
'
,
'
black
'
);
return
(
return
(
<
ScrollDirectionContext
.
Consumer
>
{
(
scrollDirection
)
=>
(
<
chakra
.
form
<
chakra
.
form
noValidate
noValidate
onSubmit=
{
onSubmit
}
onSubmit=
{
onSubmit
}
...
@@ -56,12 +56,12 @@ const SearchBarMobile = ({ onChange, onSubmit }: Props) => {
...
@@ -56,12 +56,12 @@ const SearchBarMobile = ({ onChange, onSubmit }: Props) => {
left=
"0"
left=
"0"
zIndex=
"sticky1"
zIndex=
"sticky1"
bgColor=
{
bgColor
}
bgColor=
{
bgColor
}
transform=
{
isVisible
?
'
translateY(0)
'
:
'
translateY(-112px
)
'
}
transform=
{
scrollDirection
!==
'
down
'
?
'
translateY(0)
'
:
'
translateY(-100%
)
'
}
transitionProperty=
"transform,box-shadow"
transitionProperty=
"transform,box-shadow"
transitionDuration=
"slow"
transitionDuration=
"slow"
display=
{
{
base
:
'
block
'
,
lg
:
'
none
'
}
}
display=
{
{
base
:
'
block
'
,
lg
:
'
none
'
}
}
w=
"100%"
w=
"100%"
boxShadow=
{
isVisible
&&
isSticky
?
'
md
'
:
'
none
'
}
boxShadow=
{
withShadow
&&
scrollDirection
!==
'
down
'
&&
isSticky
?
'
md
'
:
'
none
'
}
>
>
<
InputGroup
size=
"sm"
>
<
InputGroup
size=
"sm"
>
<
InputLeftElement
>
<
InputLeftElement
>
...
@@ -76,6 +76,8 @@ const SearchBarMobile = ({ onChange, onSubmit }: Props) => {
...
@@ -76,6 +76,8 @@ const SearchBarMobile = ({ onChange, onSubmit }: Props) => {
/>
/>
</
InputGroup
>
</
InputGroup
>
</
chakra
.
form
>
</
chakra
.
form
>
)
}
</
ScrollDirectionContext
.
Consumer
>
);
);
};
};
...
...
ui/tx/internals/TxInternalsTable.tsx
View file @
1ca78283
import
{
Table
,
Thead
,
Tbody
,
Tr
,
Th
,
TableContainer
,
Link
,
Icon
}
from
'
@chakra-ui/react
'
;
import
{
Table
,
Thead
,
Tbody
,
Tr
,
Th
,
Link
,
Icon
}
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
'
;
...
@@ -18,8 +18,7 @@ const TxInternalsTable = ({ data, sort, onSortToggle }: Props) => {
...
@@ -18,8 +18,7 @@ const TxInternalsTable = ({ data, sort, onSortToggle }: Props) => {
const
sortIconTransform
=
sort
?.
includes
(
'
asc
'
)
?
'
rotate(-90deg)
'
:
'
rotate(90deg)
'
;
const
sortIconTransform
=
sort
?.
includes
(
'
asc
'
)
?
'
rotate(-90deg)
'
:
'
rotate(90deg)
'
;
return
(
return
(
<
TableContainer
width=
"100%"
mt=
{
6
}
>
<
Table
variant=
"simple"
size=
"sm"
mt=
{
6
}
>
<
Table
variant=
"simple"
size=
"sm"
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
<
Th
width=
"28%"
>
Type
</
Th
>
<
Th
width=
"28%"
>
Type
</
Th
>
...
@@ -46,7 +45,6 @@ const TxInternalsTable = ({ data, sort, onSortToggle }: Props) => {
...
@@ -46,7 +45,6 @@ const TxInternalsTable = ({ data, sort, onSortToggle }: Props) => {
))
}
))
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
ui/tx/state/TxStateTable.tsx
View file @
1ca78283
...
@@ -4,7 +4,6 @@ import {
...
@@ -4,7 +4,6 @@ import {
Tbody
,
Tbody
,
Tr
,
Tr
,
Th
,
Th
,
TableContainer
,
}
from
'
@chakra-ui/react
'
;
}
from
'
@chakra-ui/react
'
;
import
capitalize
from
'
lodash/capitalize
'
;
import
capitalize
from
'
lodash/capitalize
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -16,8 +15,7 @@ import TxStateTableItem from 'ui/tx/state/TxStateTableItem';
...
@@ -16,8 +15,7 @@ import TxStateTableItem from 'ui/tx/state/TxStateTableItem';
const
TxStateTable
=
()
=>
{
const
TxStateTable
=
()
=>
{
return
(
return
(
<
TableContainer
width=
"100%"
mt=
{
6
}
>
<
Table
variant=
"simple"
minWidth=
"950px"
size=
"sm"
w=
"auto"
mt=
{
6
}
>
<
Table
variant=
"simple"
minWidth=
"950px"
size=
"sm"
w=
"auto"
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
<
Th
width=
"92px"
>
Storage
</
Th
>
<
Th
width=
"92px"
>
Storage
</
Th
>
...
@@ -32,7 +30,6 @@ const TxStateTable = () => {
...
@@ -32,7 +30,6 @@ const TxStateTable = () => {
{
data
.
map
((
item
,
index
)
=>
<
TxStateTableItem
txStateItem=
{
item
}
key=
{
index
}
/>)
}
{
data
.
map
((
item
,
index
)
=>
<
TxStateTableItem
txStateItem=
{
item
}
key=
{
index
}
/>)
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
ui/txs/TxsContent.tsx
View file @
1ca78283
...
@@ -6,15 +6,11 @@ import type { QueryKeys } from 'types/client/queries';
...
@@ -6,15 +6,11 @@ import type { QueryKeys } from 'types/client/queries';
import
type
{
Sort
}
from
'
types/client/txs-sort
'
;
import
type
{
Sort
}
from
'
types/client/txs-sort
'
;
import
*
as
cookies
from
'
lib/cookies
'
;
import
*
as
cookies
from
'
lib/cookies
'
;
import
useIsMobile
from
'
lib/hooks/useIsMobile
'
;
import
DataFetchAlert
from
'
ui/shared/DataFetchAlert
'
;
import
DataFetchAlert
from
'
ui/shared/DataFetchAlert
'
;
// import FilterInput from 'ui/shared/FilterInput';
import
Pagination
from
'
ui/shared/Pagination
'
;
import
TxsHeader
from
'
./TxsHeader
'
;
import
TxsHeader
from
'
./TxsHeader
'
;
import
TxsSkeletonDesktop
from
'
./TxsSkeletonDesktop
'
;
import
TxsSkeletonDesktop
from
'
./TxsSkeletonDesktop
'
;
import
TxsSkeletonMobile
from
'
./TxsSkeletonMobile
'
;
import
TxsSkeletonMobile
from
'
./TxsSkeletonMobile
'
;
import
TxsSorting
from
'
./TxsSorting
'
;
import
TxsWithSort
from
'
./TxsWithSort
'
;
import
TxsWithSort
from
'
./TxsWithSort
'
;
import
useQueryWithPages
from
'
./useQueryWithPages
'
;
import
useQueryWithPages
from
'
./useQueryWithPages
'
;
...
@@ -91,7 +87,7 @@ const TxsContent = ({
...
@@ -91,7 +87,7 @@ const TxsContent = ({
const
paginationProps
=
{
const
paginationProps
=
{
...
pagination
,
...
pagination
,
hasNextPage
:
data
?.
next_page_params
!==
undefined
&&
Object
.
keys
(
data
?.
next_page_params
).
length
>
0
,
hasNextPage
:
data
?.
next_page_params
!==
undefined
&&
data
?.
next_page_params
!==
null
&&
Object
.
keys
(
data
?.
next_page_params
).
length
>
0
,
};
};
return
(
return
(
...
...
ui/txs/TxsHeader.tsx
View file @
1ca78283
...
@@ -6,7 +6,7 @@ import type { Sort } from 'types/client/txs-sort';
...
@@ -6,7 +6,7 @@ import type { Sort } from 'types/client/txs-sort';
import
useIsMobile
from
'
lib/hooks/useIsMobile
'
;
import
useIsMobile
from
'
lib/hooks/useIsMobile
'
;
// import FilterInput from 'ui/shared/FilterInput';
// import FilterInput from 'ui/shared/FilterInput';
import
useScrollDirection
from
'
lib/hooks/useScrollDirection
'
;
import
ScrollDirectionContext
from
'
ui/ScrollDirectionContext
'
;
import
Pagination
from
'
ui/shared/Pagination
'
;
import
Pagination
from
'
ui/shared/Pagination
'
;
import
type
{
Props
as
PaginationProps
}
from
'
ui/shared/Pagination
'
;
import
type
{
Props
as
PaginationProps
}
from
'
ui/shared/Pagination
'
;
import
SortButton
from
'
ui/shared/SortButton
'
;
import
SortButton
from
'
ui/shared/SortButton
'
;
...
@@ -22,7 +22,6 @@ const TOP_UP = 106;
...
@@ -22,7 +22,6 @@ const TOP_UP = 106;
const
TOP_DOWN
=
0
;
const
TOP_DOWN
=
0
;
const
TxsHeader
=
({
sorting
,
paginationProps
}:
Props
)
=>
{
const
TxsHeader
=
({
sorting
,
paginationProps
}:
Props
)
=>
{
const
scrollDirection
=
useScrollDirection
();
const
[
isSticky
,
setIsSticky
]
=
React
.
useState
(
false
);
const
[
isSticky
,
setIsSticky
]
=
React
.
useState
(
false
);
const
ref
=
React
.
useRef
<
HTMLDivElement
>
(
null
);
const
ref
=
React
.
useRef
<
HTMLDivElement
>
(
null
);
...
@@ -30,14 +29,13 @@ const TxsHeader = ({ sorting, paginationProps }: Props) => {
...
@@ -30,14 +29,13 @@ const TxsHeader = ({ sorting, paginationProps }: Props) => {
const
handleScroll
=
useCallback
(()
=>
{
const
handleScroll
=
useCallback
(()
=>
{
if
(
if
(
Number
(
ref
.
current
?.
getBoundingClientRect
().
y
)
<=
TOP_DOWN
||
Number
(
ref
.
current
?.
getBoundingClientRect
().
y
)
<
TOP_UP
+
5
(
scrollDirection
===
'
up
'
&&
Number
(
ref
.
current
?.
getBoundingClientRect
().
y
)
<=
TOP_UP
)
)
{
)
{
setIsSticky
(
true
);
setIsSticky
(
true
);
}
else
{
}
else
{
setIsSticky
(
false
);
setIsSticky
(
false
);
}
}
},
[
scrollDirection
]);
},
[
]);
React
.
useEffect
(()
=>
{
React
.
useEffect
(()
=>
{
const
throttledHandleScroll
=
throttle
(
handleScroll
,
300
);
const
throttledHandleScroll
=
throttle
(
handleScroll
,
300
);
...
@@ -47,11 +45,17 @@ const TxsHeader = ({ sorting, paginationProps }: Props) => {
...
@@ -47,11 +45,17 @@ const TxsHeader = ({ sorting, paginationProps }: Props) => {
return
()
=>
{
return
()
=>
{
window
.
removeEventListener
(
'
scroll
'
,
throttledHandleScroll
);
window
.
removeEventListener
(
'
scroll
'
,
throttledHandleScroll
);
};
};
},
[
handleScroll
]);
// replicate componentDidMount
// eslint-disable-next-line react-hooks/exhaustive-deps
},
[
]);
const
bgColor
=
useColorModeValue
(
'
white
'
,
'
black
'
);
return
(
return
(
<
ScrollDirectionContext
.
Consumer
>
{
(
scrollDirection
)
=>
(
<
Flex
<
Flex
backgroundColor=
{
useColorModeValue
(
'
white
'
,
'
black
'
)
}
backgroundColor=
{
bgColor
}
mt=
{
-
6
}
mt=
{
-
6
}
pt=
{
6
}
pt=
{
6
}
pb=
{
6
}
pb=
{
6
}
...
@@ -61,7 +65,7 @@ const TxsHeader = ({ sorting, paginationProps }: Props) => {
...
@@ -61,7 +65,7 @@ const TxsHeader = ({ sorting, paginationProps }: Props) => {
width=
{
{
base
:
'
100vw
'
,
lg
:
'
unset
'
}
}
width=
{
{
base
:
'
100vw
'
,
lg
:
'
unset
'
}
}
position=
"sticky"
position=
"sticky"
top=
{
{
base
:
scrollDirection
===
'
down
'
?
`${ TOP_DOWN }px`
:
`${ TOP_UP }px`
,
lg
:
0
}
}
top=
{
{
base
:
scrollDirection
===
'
down
'
?
`${ TOP_DOWN }px`
:
`${ TOP_UP }px`
,
lg
:
0
}
}
transitionProperty=
"top
"
transitionProperty=
"top,box-shadow
"
transitionDuration=
"slow"
transitionDuration=
"slow"
zIndex=
{
{
base
:
'
sticky2
'
,
lg
:
'
docked
'
}
}
zIndex=
{
{
base
:
'
sticky2
'
,
lg
:
'
docked
'
}
}
boxShadow=
{
{
base
:
isSticky
?
'
md
'
:
'
none
'
,
lg
:
'
none
'
}
}
boxShadow=
{
{
base
:
isSticky
?
'
md
'
:
'
none
'
,
lg
:
'
none
'
}
}
...
@@ -92,6 +96,8 @@ const TxsHeader = ({ sorting, paginationProps }: Props) => {
...
@@ -92,6 +96,8 @@ const TxsHeader = ({ sorting, paginationProps }: Props) => {
</
HStack
>
</
HStack
>
<
Pagination
{
...
paginationProps
}
/>
<
Pagination
{
...
paginationProps
}
/>
</
Flex
>
</
Flex
>
)
}
</
ScrollDirectionContext
.
Consumer
>
);
);
};
};
...
...
ui/txs/TxsTable.tsx
View file @
1ca78283
import
{
Link
,
Table
,
T
head
,
Tbody
,
Tr
,
Th
,
TableContainer
,
Icon
}
from
'
@chakra-ui/react
'
;
import
{
Link
,
Table
,
T
body
,
Tr
,
Th
,
Icon
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
import
type
{
Transaction
}
from
'
types/api/transaction
'
;
import
type
{
Transaction
}
from
'
types/api/transaction
'
;
...
@@ -6,6 +6,7 @@ import type { Sort } from 'types/client/txs-sort';
...
@@ -6,6 +6,7 @@ import type { Sort } from 'types/client/txs-sort';
import
appConfig
from
'
configs/app/config
'
;
import
appConfig
from
'
configs/app/config
'
;
import
rightArrowIcon
from
'
icons/arrows/east.svg
'
;
import
rightArrowIcon
from
'
icons/arrows/east.svg
'
;
import
TheadSticky
from
'
ui/shared/TheadSticky
'
;
import
TxsTableItem
from
'
./TxsTableItem
'
;
import
TxsTableItem
from
'
./TxsTableItem
'
;
...
@@ -17,9 +18,8 @@ type Props = {
...
@@ -17,9 +18,8 @@ type Props = {
const
TxsTable
=
({
txs
,
sort
,
sorting
}:
Props
)
=>
{
const
TxsTable
=
({
txs
,
sort
,
sorting
}:
Props
)
=>
{
return
(
return
(
<
TableContainer
width=
"100%"
>
<
Table
variant=
"simple"
minWidth=
"810px"
size=
"xs"
>
<
Table
variant=
"simple"
minWidth=
"810px"
size=
"xs"
>
<
Thead
>
<
TheadSticky
top=
{
80
}
>
<
Tr
>
<
Tr
>
<
Th
width=
"54px"
></
Th
>
<
Th
width=
"54px"
></
Th
>
<
Th
width=
"20%"
>
Type
</
Th
>
<
Th
width=
"20%"
>
Type
</
Th
>
...
@@ -44,7 +44,7 @@ const TxsTable = ({ txs, sort, sorting }: Props) => {
...
@@ -44,7 +44,7 @@ const TxsTable = ({ txs, sort, sorting }: Props) => {
</
Link
>
</
Link
>
</
Th
>
</
Th
>
</
Tr
>
</
Tr
>
</
Thead
>
</
TheadSticky
>
<
Tbody
>
<
Tbody
>
{
txs
.
map
((
item
)
=>
(
{
txs
.
map
((
item
)
=>
(
<
TxsTableItem
<
TxsTableItem
...
@@ -54,7 +54,6 @@ const TxsTable = ({ txs, sort, sorting }: Props) => {
...
@@ -54,7 +54,6 @@ const TxsTable = ({ txs, sort, sorting }: Props) => {
))
}
))
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
ui/watchlist/WatchlistTable/WatchlistTable.tsx
View file @
1ca78283
...
@@ -4,7 +4,6 @@ import {
...
@@ -4,7 +4,6 @@ import {
Tbody
,
Tbody
,
Tr
,
Tr
,
Th
,
Th
,
TableContainer
,
}
from
'
@chakra-ui/react
'
;
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
...
@@ -20,7 +19,6 @@ interface Props {
...
@@ -20,7 +19,6 @@ interface Props {
const
WatchlistTable
=
({
data
,
onDeleteClick
,
onEditClick
}:
Props
)
=>
{
const
WatchlistTable
=
({
data
,
onDeleteClick
,
onEditClick
}:
Props
)
=>
{
return
(
return
(
<
TableContainer
width=
"100%"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Table
variant=
"simple"
minWidth=
"600px"
>
<
Thead
>
<
Thead
>
<
Tr
>
<
Tr
>
...
@@ -41,7 +39,6 @@ const WatchlistTable = ({ data, onDeleteClick, onEditClick }: Props) => {
...
@@ -41,7 +39,6 @@ const WatchlistTable = ({ data, onDeleteClick, onEditClick }: Props) => {
))
}
))
}
</
Tbody
>
</
Tbody
>
</
Table
>
</
Table
>
</
TableContainer
>
);
);
};
};
...
...
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