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
8e4d22b4
Commit
8e4d22b4
authored
Oct 05, 2022
by
tom
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
log tab
parent
0ad366ce
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
136 additions
and
55 deletions
+136
-55
txLogs.ts
data/txLogs.ts
+0
-20
logs.ts
pages/api/transactions/[id]/logs.ts
+11
-0
TxLogs.tsx
ui/tx/TxLogs.tsx
+37
-3
TxLogItem.tsx
ui/tx/logs/TxLogItem.tsx
+18
-16
TxLogSkeleton.tsx
ui/tx/logs/TxLogSkeleton.tsx
+58
-0
TxLogTopic.tsx
ui/tx/logs/TxLogTopic.tsx
+12
-16
No files found.
data/txLogs.ts
deleted
100644 → 0
View file @
0ad366ce
export
const
data
=
[
{
address
:
'
0x12E80C27BfFBB76b4A8d26FF2bfd3C9f310FFA01
'
,
topics
:
[
{
hex
:
'
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
'
},
{
hex
:
'
0x000000000000000000000000def171fe48cf0115b1d80b88dc8eab59176fee57
'
},
{
hex
:
'
0x000000000000000000000000c465c0a16228ef6fe1bf29c04fdb04bb797fd537
'
},
],
data
:
'
0x000000000000000000000000000000000000000000000000019faae14eb88000
'
,
},
{
address
:
'
0x73968b9a57c6e53d41345fd57a6e6ae27d6cdb2f
'
,
topics
:
[
{
hex
:
'
0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef
'
},
{
hex
:
'
0x000000000000000000000000c465c0a16228ef6fe1bf29c04fdb04bb797fd537
'
},
{
hex
:
'
0x0000000000000000000000008453d9385af5f49edad9905345cd2411b5c5831b
'
},
],
data
:
'
0x000000000000000000000000000000000000000000000013b6ee62022c95ced4
'
,
},
];
pages/api/transactions/[id]/logs.ts
0 → 100644
View file @
8e4d22b4
import
type
{
NextApiRequest
}
from
'
next
'
;
import
handler
from
'
lib/api/handler
'
;
const
getUrl
=
(
req
:
NextApiRequest
)
=>
{
return
`/v2/transactions/
${
req
.
query
.
id
}
/logs`
;
};
const
requestHandler
=
handler
(
getUrl
,
[
'
GET
'
]);
export
default
requestHandler
;
ui/tx/TxLogs.tsx
View file @
8e4d22b4
import
{
Box
}
from
'
@chakra-ui/react
'
;
import
{
Box
,
Alert
}
from
'
@chakra-ui/react
'
;
import
{
useQuery
}
from
'
@tanstack/react-query
'
;
import
{
useRouter
}
from
'
next/router
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
import
{
data
}
from
'
data/txLogs
'
;
import
type
{
LogsResponse
}
from
'
types/api/log
'
;
import
useFetch
from
'
lib/hooks/useFetch
'
;
import
DataFetchAlert
from
'
ui/shared/DataFetchAlert
'
;
import
TxLogItem
from
'
ui/tx/logs/TxLogItem
'
;
import
TxLogItem
from
'
ui/tx/logs/TxLogItem
'
;
import
TxLogSkeleton
from
'
ui/tx/logs/TxLogSkeleton
'
;
const
TxLogs
=
()
=>
{
const
TxLogs
=
()
=>
{
const
router
=
useRouter
();
const
fetch
=
useFetch
();
const
{
data
,
isLoading
,
isError
}
=
useQuery
<
unknown
,
unknown
,
LogsResponse
>
(
[
'
tx
'
,
router
.
query
.
id
],
async
()
=>
await
fetch
(
`/api/transactions/
${
router
.
query
.
id
}
/logs`
),
{
enabled
:
Boolean
(
router
.
query
.
id
),
},
);
if
(
isError
)
{
return
<
DataFetchAlert
/>;
}
if
(
isLoading
)
{
return
(
<
Box
>
<
TxLogSkeleton
/>
<
TxLogSkeleton
/>
</
Box
>
);
}
if
(
data
.
items
.
length
===
0
)
{
return
<
Alert
>
There are no logs for this transaction.
</
Alert
>;
}
return
(
return
(
<
Box
>
<
Box
>
{
data
.
map
((
item
,
index
)
=>
<
TxLogItem
key=
{
index
}
{
...
item
}
index=
{
index
}
/>)
}
{
data
.
items
.
map
((
item
,
index
)
=>
<
TxLogItem
key=
{
index
}
{
...
item
}
/>)
}
</
Box
>
</
Box
>
);
);
};
};
...
...
ui/tx/logs/TxLogItem.tsx
View file @
8e4d22b4
import
{
Text
,
Grid
,
GridItem
,
Link
,
Tooltip
,
Button
,
Icon
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
{
Text
,
Grid
,
GridItem
,
Link
,
Tooltip
,
Button
,
Icon
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
import
type
{
Log
}
from
'
types/api/log
'
;
import
searchIcon
from
'
icons/search.svg
'
;
import
searchIcon
from
'
icons/search.svg
'
;
import
Address
from
'
ui/shared/address/Address
'
;
import
Address
from
'
ui/shared/address/Address
'
;
import
AddressIcon
from
'
ui/shared/address/AddressIcon
'
;
import
AddressIcon
from
'
ui/shared/address/AddressIcon
'
;
...
@@ -8,12 +10,7 @@ import AddressLink from 'ui/shared/address/AddressLink';
...
@@ -8,12 +10,7 @@ import AddressLink from 'ui/shared/address/AddressLink';
import
TxLogTopic
from
'
ui/tx/logs/TxLogTopic
'
;
import
TxLogTopic
from
'
ui/tx/logs/TxLogTopic
'
;
import
DecodedInputData
from
'
ui/tx/TxDecodedInputData
'
;
import
DecodedInputData
from
'
ui/tx/TxDecodedInputData
'
;
interface
Props
{
type
Props
=
Log
;
address
:
string
;
topics
:
Array
<
{
hex
:
string
}
>
;
data
:
string
;
index
:
number
;
}
const
RowHeader
=
({
children
}:
{
children
:
React
.
ReactNode
})
=>
(
const
RowHeader
=
({
children
}:
{
children
:
React
.
ReactNode
})
=>
(
<
GridItem
_notFirst=
{
{
my
:
{
base
:
4
,
lg
:
0
}
}
}
>
<
GridItem
_notFirst=
{
{
my
:
{
base
:
4
,
lg
:
0
}
}
}
>
...
@@ -21,7 +18,8 @@ const RowHeader = ({ children }: { children: React.ReactNode }) => (
...
@@ -21,7 +18,8 @@ const RowHeader = ({ children }: { children: React.ReactNode }) => (
</
GridItem
>
</
GridItem
>
);
);
const
TxLogItem
=
({
address
,
index
,
topics
,
data
}:
Props
)
=>
{
const
TxLogItem
=
({
address
,
index
,
topics
,
data
,
decoded
}:
Props
)
=>
{
const
borderColor
=
useColorModeValue
(
'
blackAlpha.200
'
,
'
whiteAlpha.200
'
);
const
borderColor
=
useColorModeValue
(
'
blackAlpha.200
'
,
'
whiteAlpha.200
'
);
const
dataBgColor
=
useColorModeValue
(
'
blackAlpha.50
'
,
'
whiteAlpha.50
'
);
const
dataBgColor
=
useColorModeValue
(
'
blackAlpha.50
'
,
'
whiteAlpha.50
'
);
...
@@ -41,27 +39,31 @@ const TxLogItem = ({ address, index, topics, data }: Props) => {
...
@@ -41,27 +39,31 @@ const TxLogItem = ({ address, index, topics, data }: Props) => {
<
RowHeader
>
Address
</
RowHeader
>
<
RowHeader
>
Address
</
RowHeader
>
<
GridItem
display=
"flex"
alignItems=
"center"
>
<
GridItem
display=
"flex"
alignItems=
"center"
>
<
Address
>
<
Address
>
<
AddressIcon
hash=
{
address
}
/>
<
AddressIcon
hash=
{
address
.
hash
}
/>
<
AddressLink
hash=
{
address
}
ml=
{
2
}
/>
<
AddressLink
hash=
{
address
.
hash
}
alias=
{
address
.
name
}
ml=
{
2
}
/>
</
Address
>
</
Address
>
<
Tooltip
label=
"Find matches topic"
>
<
Tooltip
label=
"Find matches topic"
>
<
Link
ml=
{
2
}
display=
"inline-flex"
>
<
Link
ml=
{
2
}
mr=
{
{
base
:
9
,
lg
:
0
}
}
display=
"inline-flex"
>
<
Icon
as=
{
searchIcon
}
boxSize=
{
5
}
/>
<
Icon
as=
{
searchIcon
}
boxSize=
{
5
}
/>
</
Link
>
</
Link
>
</
Tooltip
>
</
Tooltip
>
<
Tooltip
label=
"Log index"
>
<
Tooltip
label=
"Log index"
>
<
Button
variant=
"outline"
colorScheme=
"gray"
isActive
ml=
{
{
base
:
9
,
lg
:
'
auto
'
}
}
size=
"sm"
fontWeight=
{
400
}
>
<
Button
variant=
"outline"
colorScheme=
"gray"
isActive
ml=
"auto"
size=
"sm"
fontWeight=
{
400
}
>
{
index
}
{
index
}
</
Button
>
</
Button
>
</
Tooltip
>
</
Tooltip
>
</
GridItem
>
</
GridItem
>
<
RowHeader
>
Decode input data
</
RowHeader
>
{
decoded
&&
(
<
GridItem
>
<>
<
DecodedInputData
/>
<
RowHeader
>
Decode input data
</
RowHeader
>
</
GridItem
>
<
GridItem
>
<
DecodedInputData
data=
{
decoded
}
/>
</
GridItem
>
</>
)
}
<
RowHeader
>
Topics
</
RowHeader
>
<
RowHeader
>
Topics
</
RowHeader
>
<
GridItem
>
<
GridItem
>
{
topics
.
map
((
item
,
index
)
=>
<
TxLogTopic
key=
{
index
}
{
...
item
}
index=
{
index
}
/>)
}
{
topics
.
filter
(
Boolean
).
map
((
item
,
index
)
=>
<
TxLogTopic
key=
{
index
}
hex=
{
item
}
index=
{
index
}
/>)
}
</
GridItem
>
</
GridItem
>
<
RowHeader
>
Data
</
RowHeader
>
<
RowHeader
>
Data
</
RowHeader
>
<
GridItem
p=
{
4
}
fontSize=
"sm"
borderRadius=
"md"
bgColor=
{
dataBgColor
}
>
<
GridItem
p=
{
4
}
fontSize=
"sm"
borderRadius=
"md"
bgColor=
{
dataBgColor
}
>
...
...
ui/tx/logs/TxLogSkeleton.tsx
0 → 100644
View file @
8e4d22b4
import
{
Flex
,
Grid
,
GridItem
,
Skeleton
,
SkeletonCircle
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
const
RowHeader
=
()
=>
(
<
GridItem
_notFirst=
{
{
my
:
{
base
:
4
,
lg
:
0
}
}
}
_first=
{
{
alignSelf
:
'
center
'
}
}
>
<
Skeleton
h=
{
6
}
borderRadius=
"full"
w=
"150px"
/>
</
GridItem
>
);
const
TopicRow
=
()
=>
(
<
Flex
columnGap=
{
3
}
>
<
SkeletonCircle
size=
"6"
/>
<
Skeleton
h=
{
6
}
w=
"70px"
borderRadius=
"full"
/>
<
Skeleton
h=
{
6
}
flexGrow=
{
1
}
borderRadius=
"full"
/>
</
Flex
>
);
const
TxLogSkeleton
=
()
=>
{
const
borderColor
=
useColorModeValue
(
'
blackAlpha.200
'
,
'
whiteAlpha.200
'
);
return
(
<
Grid
gap=
{
{
base
:
2
,
lg
:
8
}
}
templateColumns=
{
{
base
:
'
1fr
'
,
lg
:
'
200px 1fr
'
}
}
py=
{
8
}
_notFirst=
{
{
borderTopWidth
:
'
1px
'
,
borderTopColor
:
borderColor
,
}
}
_first=
{
{
pt
:
0
,
}
}
>
<
RowHeader
/>
<
GridItem
display=
"flex"
alignItems=
"center"
>
<
SkeletonCircle
size=
"6"
/>
<
Skeleton
h=
{
6
}
flexGrow=
{
1
}
borderRadius=
"full"
ml=
{
2
}
mr=
{
9
}
/>
<
Skeleton
h=
{
8
}
w=
{
8
}
borderRadius=
"base"
/>
</
GridItem
>
<
RowHeader
/>
<
GridItem
>
<
Skeleton
h=
"150px"
w=
"100%"
borderRadius=
"base"
/>
</
GridItem
>
<
RowHeader
/>
<
GridItem
display=
"flex"
flexDir=
"column"
rowGap=
{
3
}
>
<
TopicRow
/>
<
TopicRow
/>
<
TopicRow
/>
</
GridItem
>
<
RowHeader
/>
<
GridItem
>
<
Skeleton
h=
"60px"
w=
"100%"
borderRadius=
"base"
/>
</
GridItem
>
</
Grid
>
);
};
export
default
TxLogSkeleton
;
ui/tx/logs/TxLogTopic.tsx
View file @
8e4d22b4
...
@@ -23,22 +23,18 @@ const TxLogTopic = ({ hex, index }: Props) => {
...
@@ -23,22 +23,18 @@ const TxLogTopic = ({ hex, index }: Props) => {
<
Button
variant=
"outline"
colorScheme=
"gray"
isActive
size=
"xs"
fontWeight=
{
400
}
mr=
{
3
}
w=
{
6
}
>
<
Button
variant=
"outline"
colorScheme=
"gray"
isActive
size=
"xs"
fontWeight=
{
400
}
mr=
{
3
}
w=
{
6
}
>
{
index
}
{
index
}
</
Button
>
</
Button
>
{
/* temporary condition juse to show different states of the component */
}
<
Select
{
/* delete when ther will be real data */
}
size=
"sm"
{
index
>
0
&&
(
borderRadius=
"base"
<
Select
value=
{
selectedDataType
}
size=
"sm"
onChange=
{
handleSelectChange
}
borderRadius=
"base"
focusBorderColor=
"none"
value=
{
selectedDataType
}
w=
"75px"
onChange=
{
handleSelectChange
}
mr=
{
3
}
focusBorderColor=
"none"
flexShrink=
{
0
}
w=
"75px"
>
mr=
{
3
}
{
OPTIONS
.
map
((
option
)
=>
<
option
key=
{
option
}
value=
{
option
}
>
{
option
}
</
option
>)
}
flexShrink=
{
0
}
</
Select
>
>
{
OPTIONS
.
map
((
option
)
=>
<
option
key=
{
option
}
value=
{
option
}
>
{
option
}
</
option
>)
}
</
Select
>
)
}
<
Box
overflow=
"hidden"
whiteSpace=
"nowrap"
>
<
Box
overflow=
"hidden"
whiteSpace=
"nowrap"
>
<
HashStringShortenDynamic
hash=
{
hex
}
/>
<
HashStringShortenDynamic
hash=
{
hex
}
/>
</
Box
>
</
Box
>
...
...
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