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
ec4fe4e0
Commit
ec4fe4e0
authored
Apr 12, 2023
by
tom
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
handle add token info
parent
87d1926e
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
107 additions
and
10 deletions
+107
-10
AddressVerificationModal.tsx
ui/addressVerification/AddressVerificationModal.tsx
+5
-3
AddressVerificationStepAddress.tsx
...ressVerification/steps/AddressVerificationStepAddress.tsx
+5
-1
PublicTags.tsx
ui/pages/PublicTags.tsx
+2
-1
VerifiedAddresses.tsx
ui/pages/VerifiedAddresses.tsx
+13
-1
Menu.tsx
ui/shared/AddressActions/Menu.tsx
+4
-4
TokenInfoMenuItem.tsx
ui/shared/AddressActions/TokenInfoMenuItem.tsx
+78
-0
No files found.
ui/addressVerification/AddressVerificationModal.tsx
View file @
ec4fe4e0
...
@@ -16,9 +16,11 @@ interface Props {
...
@@ -16,9 +16,11 @@ interface Props {
onClose
:
()
=>
void
;
onClose
:
()
=>
void
;
onSubmit
:
(
address
:
VerifiedAddress
)
=>
void
;
onSubmit
:
(
address
:
VerifiedAddress
)
=>
void
;
onAddTokenInfoClick
:
(
address
:
string
)
=>
void
;
onAddTokenInfoClick
:
(
address
:
string
)
=>
void
;
onShowListClick
:
()
=>
void
;
defaultAddress
?:
string
;
}
}
const
AddressVerificationModal
=
({
isOpen
,
onClose
,
onSubmit
,
onAddTokenInfo
Click
}:
Props
)
=>
{
const
AddressVerificationModal
=
({
defaultAddress
,
isOpen
,
onClose
,
onSubmit
,
onAddTokenInfoClick
,
onShowList
Click
}:
Props
)
=>
{
const
[
stepIndex
,
setStepIndex
]
=
React
.
useState
(
0
);
const
[
stepIndex
,
setStepIndex
]
=
React
.
useState
(
0
);
const
[
data
,
setData
]
=
React
.
useState
<
AddressVerificationFormFirstStepFields
&
AddressCheckStatusSuccess
>
({
address
:
''
,
signingMessage
:
''
});
const
[
data
,
setData
]
=
React
.
useState
<
AddressVerificationFormFirstStepFields
&
AddressCheckStatusSuccess
>
({
address
:
''
,
signingMessage
:
''
});
...
@@ -50,7 +52,7 @@ const AddressVerificationModal = ({ isOpen, onClose, onSubmit, onAddTokenInfoCli
...
@@ -50,7 +52,7 @@ const AddressVerificationModal = ({ isOpen, onClose, onSubmit, onAddTokenInfoCli
const
steps
=
[
const
steps
=
[
{
{
title
:
'
Verify new address ownership
'
,
title
:
'
Verify new address ownership
'
,
content
:
<
AddressVerificationStepAddress
onContinue=
{
handleGoToSecondStep
}
/>,
content
:
<
AddressVerificationStepAddress
onContinue=
{
handleGoToSecondStep
}
defaultAddress=
{
defaultAddress
}
/>,
},
},
{
{
title
:
'
Copy and sign message
'
,
title
:
'
Copy and sign message
'
,
...
@@ -58,7 +60,7 @@ const AddressVerificationModal = ({ isOpen, onClose, onSubmit, onAddTokenInfoCli
...
@@ -58,7 +60,7 @@ const AddressVerificationModal = ({ isOpen, onClose, onSubmit, onAddTokenInfoCli
},
},
{
{
title
:
'
Congrats! Address is verified.
'
,
title
:
'
Congrats! Address is verified.
'
,
content
:
<
AddressVerificationStepSuccess
onShowListClick=
{
handleClose
}
onAddTokenInfoClick=
{
handleAddTokenInfoClick
}
/>,
content
:
<
AddressVerificationStepSuccess
onShowListClick=
{
onShowListClick
}
onAddTokenInfoClick=
{
handleAddTokenInfoClick
}
/>,
},
},
];
];
const
step
=
steps
[
stepIndex
];
const
step
=
steps
[
stepIndex
];
...
...
ui/addressVerification/steps/AddressVerificationStepAddress.tsx
View file @
ec4fe4e0
...
@@ -21,12 +21,16 @@ import AddressVerificationFieldAddress from '../fields/AddressVerificationFieldA
...
@@ -21,12 +21,16 @@ import AddressVerificationFieldAddress from '../fields/AddressVerificationFieldA
type
Fields
=
RootFields
&
AddressVerificationFormFirstStepFields
;
type
Fields
=
RootFields
&
AddressVerificationFormFirstStepFields
;
interface
Props
{
interface
Props
{
defaultAddress
?:
string
;
onContinue
:
(
data
:
AddressVerificationFormFirstStepFields
&
AddressCheckStatusSuccess
)
=>
void
;
onContinue
:
(
data
:
AddressVerificationFormFirstStepFields
&
AddressCheckStatusSuccess
)
=>
void
;
}
}
const
AddressVerificationStepAddress
=
({
onContinue
}:
Props
)
=>
{
const
AddressVerificationStepAddress
=
({
defaultAddress
,
onContinue
}:
Props
)
=>
{
const
formApi
=
useForm
<
Fields
>
({
const
formApi
=
useForm
<
Fields
>
({
mode
:
'
onBlur
'
,
mode
:
'
onBlur
'
,
defaultValues
:
{
address
:
defaultAddress
,
},
});
});
const
{
handleSubmit
,
formState
,
control
,
setError
,
clearErrors
,
watch
}
=
formApi
;
const
{
handleSubmit
,
formState
,
control
,
setError
,
clearErrors
,
watch
}
=
formApi
;
const
apiFetch
=
useApiFetch
();
const
apiFetch
=
useApiFetch
();
...
...
ui/pages/PublicTags.tsx
View file @
ec4fe4e0
...
@@ -36,7 +36,8 @@ const PublicTagsComponent: React.FC = () => {
...
@@ -36,7 +36,8 @@ const PublicTagsComponent: React.FC = () => {
useRedirectForInvalidAuthToken
();
useRedirectForInvalidAuthToken
();
React
.
useEffect
(()
=>
{
React
.
useEffect
(()
=>
{
router
.
replace
({
pathname
:
'
/account/public_tags_request
'
});
addressHash
&&
router
.
replace
({
pathname
:
'
/account/public_tags_request
'
});
// componentDidMount
// eslint-disable-next-line react-hooks/exhaustive-deps
// eslint-disable-next-line react-hooks/exhaustive-deps
},
[
]);
},
[
]);
...
...
ui/pages/VerifiedAddresses.tsx
View file @
ec4fe4e0
import
{
OrderedList
,
ListItem
,
chakra
,
Button
,
useDisclosure
,
Show
,
Hide
,
Skeleton
,
Box
}
from
'
@chakra-ui/react
'
;
import
{
OrderedList
,
ListItem
,
chakra
,
Button
,
useDisclosure
,
Show
,
Hide
,
Skeleton
,
Box
}
from
'
@chakra-ui/react
'
;
import
{
useQueryClient
}
from
'
@tanstack/react-query
'
;
import
{
useQueryClient
}
from
'
@tanstack/react-query
'
;
import
{
useRouter
}
from
'
next/router
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
import
type
{
VerifiedAddress
,
TokenInfoApplication
,
TokenInfoApplications
,
VerifiedAddressResponse
}
from
'
types/api/account
'
;
import
type
{
VerifiedAddress
,
TokenInfoApplication
,
TokenInfoApplications
,
VerifiedAddressResponse
}
from
'
types/api/account
'
;
...
@@ -7,6 +8,7 @@ import type { VerifiedAddress, TokenInfoApplication, TokenInfoApplications, Veri
...
@@ -7,6 +8,7 @@ import type { VerifiedAddress, TokenInfoApplication, TokenInfoApplications, Veri
import
appConfig
from
'
configs/app/config
'
;
import
appConfig
from
'
configs/app/config
'
;
import
useApiQuery
,
{
getResourceKey
}
from
'
lib/api/useApiQuery
'
;
import
useApiQuery
,
{
getResourceKey
}
from
'
lib/api/useApiQuery
'
;
import
useRedirectForInvalidAuthToken
from
'
lib/hooks/useRedirectForInvalidAuthToken
'
;
import
useRedirectForInvalidAuthToken
from
'
lib/hooks/useRedirectForInvalidAuthToken
'
;
import
getQueryParamString
from
'
lib/router/getQueryParamString
'
;
import
AddressVerificationModal
from
'
ui/addressVerification/AddressVerificationModal
'
;
import
AddressVerificationModal
from
'
ui/addressVerification/AddressVerificationModal
'
;
import
AccountPageDescription
from
'
ui/shared/AccountPageDescription
'
;
import
AccountPageDescription
from
'
ui/shared/AccountPageDescription
'
;
import
DataListDisplay
from
'
ui/shared/DataListDisplay
'
;
import
DataListDisplay
from
'
ui/shared/DataListDisplay
'
;
...
@@ -21,7 +23,16 @@ import VerifiedAddressesTable from 'ui/verifiedAddresses/VerifiedAddressesTable'
...
@@ -21,7 +23,16 @@ import VerifiedAddressesTable from 'ui/verifiedAddresses/VerifiedAddressesTable'
const
VerifiedAddresses
=
()
=>
{
const
VerifiedAddresses
=
()
=>
{
useRedirectForInvalidAuthToken
();
useRedirectForInvalidAuthToken
();
const
[
selectedAddress
,
setSelectedAddress
]
=
React
.
useState
<
string
>
();
const
router
=
useRouter
();
const
addressHash
=
getQueryParamString
(
router
.
query
.
address
);
const
[
selectedAddress
,
setSelectedAddress
]
=
React
.
useState
<
string
|
undefined
>
(
addressHash
);
React
.
useEffect
(()
=>
{
addressHash
&&
router
.
replace
({
pathname
:
'
/account/verified_addresses
'
});
// componentDidMount
// eslint-disable-next-line react-hooks/exhaustive-deps
},
[
]);
const
modalProps
=
useDisclosure
();
const
modalProps
=
useDisclosure
();
const
addressesQuery
=
useApiQuery
(
'
verified_addresses
'
,
{
const
addressesQuery
=
useApiQuery
(
'
verified_addresses
'
,
{
...
@@ -186,6 +197,7 @@ const VerifiedAddresses = () => {
...
@@ -186,6 +197,7 @@ const VerifiedAddresses = () => {
onClose=
{
modalProps
.
onClose
}
onClose=
{
modalProps
.
onClose
}
onSubmit=
{
handleAddressSubmit
}
onSubmit=
{
handleAddressSubmit
}
onAddTokenInfoClick=
{
handleItemAdd
}
onAddTokenInfoClick=
{
handleItemAdd
}
onShowListClick=
{
modalProps
.
onClose
}
/>
/>
</
Page
>
</
Page
>
);
);
...
...
ui/shared/AddressActions/Menu.tsx
View file @
ec4fe4e0
import
{
Button
,
Menu
,
MenuButton
,
Menu
Item
,
Menu
List
,
Icon
,
Flex
}
from
'
@chakra-ui/react
'
;
import
{
Button
,
Menu
,
MenuButton
,
MenuList
,
Icon
,
Flex
}
from
'
@chakra-ui/react
'
;
import
{
useRouter
}
from
'
next/router
'
;
import
{
useRouter
}
from
'
next/router
'
;
import
React
from
'
react
'
;
import
React
from
'
react
'
;
import
appConfig
from
'
configs/app/config
'
;
import
iconArrow
from
'
icons/arrows/east-mini.svg
'
;
import
iconArrow
from
'
icons/arrows/east-mini.svg
'
;
import
getQueryParamString
from
'
lib/router/getQueryParamString
'
;
import
getQueryParamString
from
'
lib/router/getQueryParamString
'
;
import
PrivateTagMenuItem
from
'
./PrivateTagMenuItem
'
;
import
PrivateTagMenuItem
from
'
./PrivateTagMenuItem
'
;
import
PublicTagMenuItem
from
'
./PublicTagMenuItem
'
;
import
PublicTagMenuItem
from
'
./PublicTagMenuItem
'
;
import
TokenInfoMenuItem
from
'
./TokenInfoMenuItem
'
;
const
AddressActions
=
()
=>
{
const
AddressActions
=
()
=>
{
const
router
=
useRouter
();
const
router
=
useRouter
();
...
@@ -27,9 +29,7 @@ const AddressActions = () => {
...
@@ -27,9 +29,7 @@ const AddressActions = () => {
</
Flex
>
</
Flex
>
</
MenuButton
>
</
MenuButton
>
<
MenuList
minWidth=
"180px"
zIndex=
"popover"
>
<
MenuList
minWidth=
"180px"
zIndex=
"popover"
>
<
MenuItem
py=
{
2
}
px=
{
4
}
>
{
appConfig
.
contractInfoApi
.
endpoint
&&
appConfig
.
adminServiceApi
.
endpoint
&&
<
TokenInfoMenuItem
py=
{
2
}
px=
{
4
}
hash=
{
hash
}
/>
}
Add token info
</
MenuItem
>
<
PublicTagMenuItem
py=
{
2
}
px=
{
4
}
hash=
{
hash
}
/>
<
PublicTagMenuItem
py=
{
2
}
px=
{
4
}
hash=
{
hash
}
/>
<
PrivateTagMenuItem
py=
{
2
}
px=
{
4
}
hash=
{
hash
}
/>
<
PrivateTagMenuItem
py=
{
2
}
px=
{
4
}
hash=
{
hash
}
/>
</
MenuList
>
</
MenuList
>
...
...
ui/shared/AddressActions/TokenInfoMenuItem.tsx
0 → 100644
View file @
ec4fe4e0
import
{
MenuItem
,
chakra
,
useDisclosure
}
from
'
@chakra-ui/react
'
;
import
{
useRouter
}
from
'
next/router
'
;
import
React
from
'
react
'
;
import
appConfig
from
'
configs/app/config
'
;
import
useApiQuery
from
'
lib/api/useApiQuery
'
;
import
useRedirectIfNotAuth
from
'
lib/hooks/useRedirectIfNotAuth
'
;
import
AddressVerificationModal
from
'
ui/addressVerification/AddressVerificationModal
'
;
interface
Props
{
className
?:
string
;
hash
:
string
;
}
const
TokenInfoMenuItem
=
({
className
,
hash
}:
Props
)
=>
{
const
router
=
useRouter
();
const
modal
=
useDisclosure
();
const
redirectIfNotAuth
=
useRedirectIfNotAuth
();
const
verifiedAddressesQuery
=
useApiQuery
(
'
verified_addresses
'
,
{
pathParams
:
{
chainId
:
appConfig
.
network
.
id
},
});
const
applicationsQuery
=
useApiQuery
(
'
token_info_applications
'
,
{
pathParams
:
{
chainId
:
appConfig
.
network
.
id
,
id
:
undefined
},
});
const
handleAddAddressClick
=
React
.
useCallback
(()
=>
{
if
(
redirectIfNotAuth
())
{
return
;
}
modal
.
onOpen
();
},
[
modal
,
redirectIfNotAuth
]);
const
handleAddApplicationClick
=
React
.
useCallback
(
async
()
=>
{
router
.
push
({
pathname
:
'
/account/verified_addresses
'
,
query
:
{
address
:
hash
}
});
},
[
hash
,
router
]);
const
handleVerifiedAddressSubmit
=
React
.
useCallback
(
async
()
=>
{
await
verifiedAddressesQuery
.
refetch
();
},
[
verifiedAddressesQuery
]);
const
handleShowMyAddressesClick
=
React
.
useCallback
(
async
()
=>
{
router
.
push
({
pathname
:
'
/account/verified_addresses
'
});
},
[
router
]);
const
content
=
(()
=>
{
if
(
!
verifiedAddressesQuery
.
data
?.
verifiedAddresses
.
find
(({
contractAddress
})
=>
contractAddress
===
hash
))
{
return
(
<
MenuItem
className=
{
className
}
onClick=
{
handleAddAddressClick
}
>
Add token info
</
MenuItem
>
);
}
return
(
<
MenuItem
className=
{
className
}
onClick=
{
handleAddApplicationClick
}
>
{
applicationsQuery
.
data
?.
submissions
.
some
(({
tokenAddress
})
=>
tokenAddress
===
hash
)
?
'
Update token info
'
:
'
Add token info
'
}
</
MenuItem
>
);
})();
return
(
<>
{
content
}
<
AddressVerificationModal
defaultAddress=
{
hash
}
isOpen=
{
modal
.
isOpen
}
onClose=
{
modal
.
onClose
}
onSubmit=
{
handleVerifiedAddressSubmit
}
onAddTokenInfoClick=
{
handleAddApplicationClick
}
onShowListClick=
{
handleShowMyAddressesClick
}
/>
</>
);
};
export
default
React
.
memo
(
chakra
(
TokenInfoMenuItem
));
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