Skip to content

Commit

Permalink
fix: regression tests
Browse files Browse the repository at this point in the history
fix AddTokenScreen
fix pending transactions duplicates
fix token dups
Co-authored-by: delaaxe <[email protected]>
  • Loading branch information
janek26 committed Jan 28, 2022
1 parent 5e03751 commit 2e6f3a8
Show file tree
Hide file tree
Showing 7 changed files with 44 additions and 31 deletions.
9 changes: 4 additions & 5 deletions packages/extension/src/background/trackTransactions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,12 @@ export class TransactionTracker {
// add transactions that were added while we were fetching
this.transactions = [
...transactionStatuses,
...this.transactions.filter((transactionStatus) => {
return Boolean(
transactionStatuses.find(
...this.transactions.filter(
(transactionStatus) =>
!transactionStatuses.find(
({ hash }) => hash === transactionStatus.hash,
),
)
}),
),
]
this.listeners.forEach((listener) => {
listener(this.transactions)
Expand Down
2 changes: 1 addition & 1 deletion packages/extension/src/manifest.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "Argent X StarkNet Wallet",
"description": "The security of Ethereum with the scale of StarkNet",
"version": "2.0.0",
"version": "2.1.0",
"manifest_version": 2,
"browser_action": {
"default_icon": {
Expand Down
13 changes: 11 additions & 2 deletions packages/extension/src/ui/components/Header.tsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,17 @@
import styled from "styled-components"
import styled, { css } from "styled-components"

export const Header = styled.header`
export const Header = styled.header<{
hide?: boolean
}>`
display: flex;
padding: 16px;
align-items: center;
justify-content: space-between;
${({ hide }) =>
hide &&
css`
visibility: hidden;
user-select: none;
`}
`
1 change: 1 addition & 0 deletions packages/extension/src/ui/screens/ActionScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ export const ActionScreen: FC = () => {
return (
<AddTokenScreen
defaultToken={action.payload}
hideBackButton
onSubmit={async () => {
await approve(action)
if (isPopup && isLastAction) {
Expand Down
43 changes: 22 additions & 21 deletions packages/extension/src/ui/screens/AddTokenScreen.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ import { Button, ButtonGroupVertical } from "../components/Button"
import { Header } from "../components/Header"
import { InputText } from "../components/Input"
import { Spinner } from "../components/Spinner"
import { H2 } from "../components/Typography"
import { FormError, H2 } from "../components/Typography"
import { routes } from "../routes"
import { useAccount } from "../states/account"
import { useAppState } from "../states/app"
import { TokenDetails, addToken } from "../states/tokens"
Expand Down Expand Up @@ -53,12 +54,14 @@ function addressFormat64Byte(address: number.BigNumberish): string {

interface AddTokenScreenProps {
defaultToken?: AddToken
hideBackButton?: boolean
onSubmit?: () => void
onReject?: () => void
}

export const AddTokenScreen: FC<AddTokenScreenProps> = ({
defaultToken,
hideBackButton,
onSubmit,
onReject,
}) => {
Expand All @@ -72,6 +75,7 @@ export const AddTokenScreen: FC<AddTokenScreenProps> = ({
defaultToken?.decimals || "0",
)
const [loading, setLoading] = useState(false)
const [error, setError] = useState("")
const [tokenDetails, setTokenDetails] = useState<TokenDetails>()
const prevValidAddress = useRef("")

Expand Down Expand Up @@ -123,7 +127,7 @@ export const AddTokenScreen: FC<AddTokenScreenProps> = ({

return (
<>
<Header>
<Header hide={hideBackButton}>
<BackButton />
</Header>

Expand All @@ -133,16 +137,21 @@ export const AddTokenScreen: FC<AddTokenScreenProps> = ({
<form
onSubmit={(e: React.FormEvent) => {
e.preventDefault()
compiledData.address = addressFormat64Byte(compiledData.address)
if (isDataComplete(compiledData)) {
addToken({
address: compiledData.address,
decimals: compiledData.decimals,
name: compiledData.name,
symbol: compiledData.symbol,
networkId: compiledData.networkId,
})
onSubmit?.()
navigate(-1)
try {
addToken({
address: compiledData.address,
decimals: compiledData.decimals,
name: compiledData.name,
symbol: compiledData.symbol,
networkId: compiledData.networkId,
})
onSubmit?.()
navigate(routes.account)
} catch (e) {
setError("Token already exists")
}
}
}}
>
Expand All @@ -155,15 +164,6 @@ export const AddTokenScreen: FC<AddTokenScreenProps> = ({
onChange={(e: any) => {
setTokenAddress(e.target.value?.toLowerCase())
}}
onBlur={() => {
try {
if (tokenAddress) {
setTokenAddress(addressFormat64Byte(tokenAddress))
}
} catch {
// pass
}
}}
/>
{!loading && (
<>
Expand Down Expand Up @@ -197,6 +197,7 @@ export const AddTokenScreen: FC<AddTokenScreenProps> = ({
}
}}
/>
{error && <FormError>{error}</FormError>}
<ButtonGroupVertical>
{onReject && (
<Button onClick={onReject} type="button">
Expand All @@ -209,7 +210,7 @@ export const AddTokenScreen: FC<AddTokenScreenProps> = ({
</ButtonGroupVertical>
</>
)}
{loading && <Spinner size={64} />}
{loading && <Spinner size={64} style={{ marginTop: 50 }} />}
</form>
</AddTokenScreenWrapper>
</>
Expand Down
5 changes: 4 additions & 1 deletion packages/extension/src/ui/states/tokens.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,15 @@ interface TokenState {

export const useTokens = create<TokenState>(
persist(
(set, _) => ({
(set, get) => ({
tokens: parsedDefaultErc20Tokens,
addToken: (token: TokenDetails) => {
if (!isValidAddress(token.address)) {
throw Error("token address malformed")
}
if (get().tokens.find((t) => equalToken(t, token))) {
throw Error("token already added")
}
set((state) => ({ tokens: [...state.tokens, token] }))
},
removeToken: (token: TokenDetails) => {
Expand Down
2 changes: 1 addition & 1 deletion packages/extension/src/ui/utils/addresses.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { encode } from "starknet"

export const isValidAddress = (address: string): boolean =>
/^0x[0-9a-f]{64}$/.test(address)
/^0x[0-9a-f]{1,64}$/.test(address)

export const formatAddress = (address: string) =>
encode.addHexPrefix(encode.removeHexPrefix(address).padStart(64, "0"))
Expand Down

0 comments on commit 2e6f3a8

Please sign in to comment.