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
55c46fa4
Commit
55c46fa4
authored
May 02, 2024
by
Max Alekseenko
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
improve action button, add real data
parent
2cc75359
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
61 additions
and
36 deletions
+61
-36
parseMetaPayload.ts
lib/address/parseMetaPayload.ts
+18
-9
addressMetadata.ts
types/client/addressMetadata.ts
+7
-0
ActionButton.tsx
ui/shared/ActionButton/ActionButton.tsx
+25
-27
useActionData.tsx
ui/shared/ActionButton/useActionData.tsx
+11
-0
No files found.
lib/address/parseMetaPayload.ts
View file @
55c46fa4
import
type
{
AddressMetadataTag
}
from
'
types/api/addressMetadata
'
;
import
type
{
AddressMetadataTag
}
from
'
types/api/addressMetadata
'
;
import
type
{
AddressMetadataTagFormatted
}
from
'
types/client/addressMetadata
'
;
import
type
{
AddressMetadataTagFormatted
}
from
'
types/client/addressMetadata
'
;
type
MetaParsed
=
NonNullable
<
AddressMetadataTagFormatted
[
'
meta
'
]
>
;
export
default
function
parseMetaPayload
(
meta
:
AddressMetadataTag
[
'
meta
'
]):
AddressMetadataTagFormatted
[
'
meta
'
]
{
export
default
function
parseMetaPayload
(
meta
:
AddressMetadataTag
[
'
meta
'
]):
AddressMetadataTagFormatted
[
'
meta
'
]
{
try
{
try
{
const
parsedMeta
=
JSON
.
parse
(
meta
||
''
);
const
parsedMeta
=
JSON
.
parse
(
meta
||
''
);
...
@@ -11,16 +13,23 @@ export default function parseMetaPayload(meta: AddressMetadataTag['meta']): Addr
...
@@ -11,16 +13,23 @@ export default function parseMetaPayload(meta: AddressMetadataTag['meta']): Addr
const
result
:
AddressMetadataTagFormatted
[
'
meta
'
]
=
{};
const
result
:
AddressMetadataTagFormatted
[
'
meta
'
]
=
{};
if
(
'
textColor
'
in
parsedMeta
&&
typeof
parsedMeta
.
textColor
===
'
string
'
)
{
const
stringFields
:
Array
<
keyof
MetaParsed
>
=
[
result
.
textColor
=
parsedMeta
.
textColor
;
'
textColor
'
,
}
'
bgColor
'
,
'
actionURL
'
,
if
(
'
bgColor
'
in
parsedMeta
&&
typeof
parsedMeta
.
bgColor
===
'
string
'
)
{
'
appID
'
,
result
.
bgColor
=
parsedMeta
.
bgColor
;
'
logoURL
'
,
}
'
text
'
,
'
tooltipIcon
'
,
'
tooltipTitle
'
,
'
tooltipDescription
'
,
'
tooltipUrl
'
,
];
if
(
'
actionURL
'
in
parsedMeta
&&
typeof
parsedMeta
.
actionURL
===
'
string
'
)
{
for
(
const
stringField
of
stringFields
)
{
result
.
actionURL
=
parsedMeta
.
actionURL
;
if
(
stringField
in
parsedMeta
&&
typeof
parsedMeta
[
stringField
as
keyof
typeof
parsedMeta
]
===
'
string
'
)
{
result
[
stringField
]
=
parsedMeta
[
stringField
as
keyof
typeof
parsedMeta
];
}
}
}
return
result
;
return
result
;
...
...
types/client/addressMetadata.ts
View file @
55c46fa4
...
@@ -16,5 +16,12 @@ export interface AddressMetadataTagFormatted {
...
@@ -16,5 +16,12 @@ export interface AddressMetadataTagFormatted {
textColor
?:
string
;
textColor
?:
string
;
bgColor
?:
string
;
bgColor
?:
string
;
actionURL
?:
string
;
actionURL
?:
string
;
appID
?:
string
;
logoURL
?:
string
;
text
?:
string
;
tooltipIcon
?:
string
;
tooltipTitle
?:
string
;
tooltipDescription
?:
string
;
tooltipUrl
?:
string
;
}
|
null
;
}
|
null
;
}
}
ui/shared/ActionButton.tsx
→
ui/shared/ActionButton
/ActionButton
.tsx
View file @
55c46fa4
import
{
Button
,
Image
,
Text
,
useColorModeValue
}
from
'
@chakra-ui/react
'
;
import
{
Button
,
Image
,
Text
,
useColorModeValue
,
chakra
}
from
'
@chakra-ui/react
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
import
type
{
AddressMetadataTagFormatted
}
from
'
types/client/addressMetadata
'
;
import
{
route
}
from
'
nextjs-routes
'
;
import
{
route
}
from
'
nextjs-routes
'
;
import
LinkExternal
from
'
./LinkExternal
'
;
import
config
from
'
configs/app
'
;
import
LinkExternal
from
'
../LinkExternal
'
;
type
Props
=
{
type
Props
=
{
data
?:
{
data
?:
AddressMetadataTagFormatted
[
'
meta
'
];
appId
?:
string
;
className
?:
string
;
actionUrl
:
string
;
txHash
?:
string
;
textColor
:
string
;
bgColor
:
string
;
text
:
string
;
logoUrl
:
string
;
};
}
}
const
mockData
=
{
const
ActionButton
=
({
data
,
className
,
txHash
}:
Props
)
=>
{
appId
:
'
uniswap
'
,
actionUrl
:
'
https://app.uniswap.org/swap?inputCurrency=ETH&outputCurrency=0x6B175474E89094C44Da98b954EedeAC495271d0F
'
,
textColor
:
'
#E2E8F0
'
,
bgColor
:
'
#9747FF
'
,
text
:
'
Mint NFT
'
,
logoUrl
:
'
https://i.ibb.co/PGZ0y9r/tg-image-883021928.jpg
'
,
};
const
ActionButton
=
({
data
=
mockData
}:
Props
)
=>
{
const
{
appId
,
actionUrl
,
textColor
,
bgColor
,
text
,
logoUrl
}
=
data
;
const
defaultTextColor
=
useColorModeValue
(
'
blue.600
'
,
'
blue.300
'
);
const
defaultTextColor
=
useColorModeValue
(
'
blue.600
'
,
'
blue.300
'
);
const
defaultBg
=
useColorModeValue
(
'
gray.100
'
,
'
gray.700
'
);
const
defaultBg
=
useColorModeValue
(
'
gray.100
'
,
'
gray.700
'
);
if
(
!
data
)
{
return
null
;
}
const
{
appID
,
textColor
,
bgColor
,
text
,
logoURL
}
=
data
;
const
actionURL
=
data
.
actionURL
?.
replace
(
'
{chainId}
'
,
config
.
chain
.
id
||
''
).
replace
(
'
{txHash}
'
,
txHash
||
''
);
const
content
=
(
const
content
=
(
<>
<>
<
Image
<
Image
src=
{
logoU
rl
}
src=
{
logoU
RL
}
alt=
{
`${ text } button`
}
alt=
{
`${ text } button`
}
boxSize=
{
5
}
boxSize=
{
5
}
borderRadius=
"sm"
borderRadius=
"sm"
...
@@ -46,10 +42,11 @@ const ActionButton = ({ data = mockData }: Props) => {
...
@@ -46,10 +42,11 @@ const ActionButton = ({ data = mockData }: Props) => {
</>
</>
);
);
return
appI
d
?
(
return
appI
D
?
(
<
Button
<
Button
className=
{
className
}
as=
"a"
as=
"a"
href=
{
route
({
pathname
:
'
/apps/[id]
'
,
query
:
{
id
:
appI
d
,
action
:
'
connect
'
,
url
:
actionUrl
}
})
}
href=
{
route
({
pathname
:
'
/apps/[id]
'
,
query
:
{
id
:
appI
D
,
action
:
'
connect
'
,
...(
actionURL
?
{
url
:
actionURL
}
:
{})
}
})
}
display=
"flex"
display=
"flex"
size=
"sm"
size=
"sm"
px=
{
2
}
px=
{
2
}
...
@@ -62,7 +59,8 @@ const ActionButton = ({ data = mockData }: Props) => {
...
@@ -62,7 +59,8 @@ const ActionButton = ({ data = mockData }: Props) => {
</
Button
>
</
Button
>
)
:
(
)
:
(
<
LinkExternal
<
LinkExternal
href=
{
actionUrl
}
className=
{
className
}
href=
{
actionURL
}
variant=
"subtle"
variant=
"subtle"
display=
"flex"
display=
"flex"
px=
{
2
}
px=
{
2
}
...
@@ -76,4 +74,4 @@ const ActionButton = ({ data = mockData }: Props) => {
...
@@ -76,4 +74,4 @@ const ActionButton = ({ data = mockData }: Props) => {
);
);
};
};
export
default
ActionButton
;
export
default
chakra
(
ActionButton
)
;
ui/shared/ActionButton/useActionData.tsx
0 → 100644
View file @
55c46fa4
import
useAddressMetadataInfoQuery
from
'
lib/address/useAddressMetadataInfoQuery
'
;
export
default
function
useActionData
(
address
:
string
|
undefined
=
''
)
{
const
{
data
}
=
useAddressMetadataInfoQuery
([
address
]);
const
metadata
=
data
?.
addresses
[
address
?.
toLowerCase
()];
const
tag
=
metadata
?.
tags
?.
find
(({
tagType
})
=>
tagType
===
'
protocol
'
);
if
(
tag
?.
meta
?.
actionURL
||
tag
?.
meta
?.
appID
)
{
return
tag
.
meta
;
}
return
null
;
}
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