From 06de92e354a0ceaf1a1c64f3a9838b636a4668eb Mon Sep 17 00:00:00 2001 From: josemarinas <36479864+josemarinas@users.noreply.github.com> Date: Mon, 10 Jul 2023 17:23:32 +0200 Subject: [PATCH] Fix: Token not showing on proposals with underlying token (#249) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * fix parseToken function * update version * add parseToken tests * Updating the changelog --------- Co-authored-by: Jør∂¡ <4456749+brickpop@users.noreply.github.com> --- modules/client/CHANGELOG.md | 4 + modules/client/package.json | 2 +- .../client/src/tokenVoting/internal/utils.ts | 26 ++++++- modules/client/src/tokenVoting/types.ts | 1 + .../utils.test.ts" | 78 +++++++++++++++++++ 5 files changed, 107 insertions(+), 4 deletions(-) create mode 100644 "modules/client/test/unit/tokenVoting-client\302\240 /utils.test.ts" diff --git a/modules/client/CHANGELOG.md b/modules/client/CHANGELOG.md index 7ad8f3fe8..2cda9be2e 100644 --- a/modules/client/CHANGELOG.md +++ b/modules/client/CHANGELOG.md @@ -18,6 +18,10 @@ TEMPLATE: ## [UPCOMING] ### Changed +- Amended an issue that would prevent details from the underlying token to be returned in `parseToken()` + +## [1.9.5] +### Changed - Added a timeout to `getDaos()` and `getProposals()`, so that an individual lengthy fetch doesn't block everything indefinitely - Improve the PR template diff --git a/modules/client/package.json b/modules/client/package.json index 4712ca370..83c767c7f 100644 --- a/modules/client/package.json +++ b/modules/client/package.json @@ -1,7 +1,7 @@ { "name": "@aragon/sdk-client", "author": "Aragon Association", - "version": "1.9.5", + "version": "1.9.6", "license": "MIT", "main": "dist/index.js", "module": "dist/sdk-client.esm.js", diff --git a/modules/client/src/tokenVoting/internal/utils.ts b/modules/client/src/tokenVoting/internal/utils.ts index 36071d796..a6409c7ff 100644 --- a/modules/client/src/tokenVoting/internal/utils.ts +++ b/modules/client/src/tokenVoting/internal/utils.ts @@ -7,6 +7,7 @@ import { } from "../../client-common"; import { Erc20TokenDetails, + Erc20WrapperTokenDetails, Erc721TokenDetails, MintTokenParams, TokenVotingMember, @@ -19,6 +20,7 @@ import { ContractTokenVotingInitParams, SubgraphContractType, SubgraphErc20Token, + SubgraphErc20WrapperToken, SubgraphErc721Token, SubgraphTokenVotingMember, SubgraphTokenVotingProposal, @@ -213,10 +215,13 @@ export function tokenVotingInitParamsToContract( ]; } -function parseToken( - subgraphToken: SubgraphErc20Token | SubgraphErc721Token, +export function parseToken( + subgraphToken: + | SubgraphErc20Token + | SubgraphErc721Token + | SubgraphErc20WrapperToken, ): Erc20TokenDetails | Erc721TokenDetails | null { - let token: Erc721TokenDetails | Erc20TokenDetails | null = null; + let token: Erc721TokenDetails | Erc20TokenDetails| Erc20WrapperTokenDetails | null = null; if (subgraphToken.__typename === SubgraphContractType.ERC20) { token = { address: subgraphToken.id, @@ -232,6 +237,21 @@ function parseToken( name: subgraphToken.name, type: TokenType.ERC721, }; + } else if (subgraphToken.__typename === SubgraphContractType.ERC20_WRAPPER) { + token = { + address: subgraphToken.id, + symbol: subgraphToken.symbol, + name: subgraphToken.name, + decimals: subgraphToken.decimals, + type: TokenType.ERC20, + underlyingToken: { + address: subgraphToken.underlyingToken.id, + symbol: subgraphToken.underlyingToken.symbol, + name: subgraphToken.underlyingToken.name, + decimals: subgraphToken.underlyingToken.decimals, + type: TokenType.ERC20, + }, + }; } return token; } diff --git a/modules/client/src/tokenVoting/types.ts b/modules/client/src/tokenVoting/types.ts index ebb5c8f69..f9419affb 100644 --- a/modules/client/src/tokenVoting/types.ts +++ b/modules/client/src/tokenVoting/types.ts @@ -64,6 +64,7 @@ export type Erc20TokenDetails = TokenBaseDetails & { decimals: number; type: TokenType.ERC20; }; + export type Erc721TokenDetails = TokenBaseDetails & { type: TokenType.ERC721; }; diff --git "a/modules/client/test/unit/tokenVoting-client\302\240 /utils.test.ts" "b/modules/client/test/unit/tokenVoting-client\302\240 /utils.test.ts" new file mode 100644 index 000000000..202958b0b --- /dev/null +++ "b/modules/client/test/unit/tokenVoting-client\302\240 /utils.test.ts" @@ -0,0 +1,78 @@ +import { TokenType } from "@aragon/sdk-client-common"; +import { SubgraphContractType } from "../../../src/tokenVoting/internal/types"; +import { parseToken } from "../../../src/tokenVoting/internal/utils"; + +describe("tokenVoting-client utils", () => { + describe("parseToken", () => { + it("should return ERC721", () => { + const token = parseToken({ + __typename: SubgraphContractType.ERC721, + id: "0x1234567890123456789012345678901234567890", + name: "TestToken", + symbol: "TT", + }); + expect(token).toEqual({ + address: "0x1234567890123456789012345678901234567890", + name: "TestToken", + symbol: "TT", + type: TokenType.ERC721, + }); + }); + it("should return ERC20", () => { + const token = parseToken({ + __typename: SubgraphContractType.ERC20, + id: "0x1234567890123456789012345678901234567890", + name: "TestToken", + symbol: "TT", + decimals: 18, + }); + expect(token).toEqual({ + address: "0x1234567890123456789012345678901234567890", + name: "TestToken", + symbol: "TT", + decimals: 18, + type: TokenType.ERC20, + }); + }); + it("should return ERC20Wrapper", () => { + const token = parseToken({ + __typename: SubgraphContractType.ERC20_WRAPPER, + id: "0x1234567890123456789012345678901234567890", + name: "TestToken", + symbol: "TT", + decimals: 18, + underlyingToken: { + __typename: SubgraphContractType.ERC20, + id: "0x1234567890123456789012345678901234567890", + name: "TestToken", + symbol: "TT", + decimals: 18, + }, + }); + expect(token).toEqual({ + address: "0x1234567890123456789012345678901234567890", + name: "TestToken", + symbol: "TT", + decimals: 18, + type: TokenType.ERC20, + underlyingToken: { + address: "0x1234567890123456789012345678901234567890", + name: "TestToken", + symbol: "TT", + decimals: 18, + type: TokenType.ERC20, + }, + }); + }); + it("should return null", () => { + const token = parseToken({ + // @ts-ignore + __typename: "Other", + id: "0x1234567890123456789012345678901234567890", + name: "TestToken", + symbol: "TT", + }); + expect(token).toEqual(null); + }); + }); +});