From eb0d7df50b23af325edaecd7a7cccb269d7c8f88 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Thu, 18 Jan 2018 14:27:12 +0800 Subject: Fix balance page copy to refer to the Wrap ETH tab instead of a "convert" button --- packages/website/ts/components/token_balances.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'packages/website') diff --git a/packages/website/ts/components/token_balances.tsx b/packages/website/ts/components/token_balances.tsx index 112b3fe60..01e69d4b2 100644 --- a/packages/website/ts/components/token_balances.tsx +++ b/packages/website/ts/components/token_balances.tsx @@ -169,7 +169,7 @@ export class TokenBalances extends React.Component -- cgit v1.2.3 From 996e9e9102dc3f7ebcd6328c59593410c397c779 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Thu, 18 Jan 2018 15:02:36 +0800 Subject: Add missing onError callbacks --- packages/website/ts/blockchain.ts | 6 +++++- packages/website/ts/web3_wrapper.ts | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'packages/website') diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index 1320fbeb9..e82243c83 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -375,7 +375,11 @@ export class Blockchain { clearInterval(this._zrxPollIntervalId); delete this._zrxPollIntervalId; } - }, 5000); + }, 5000, (err: Error) => { + utils.consoleLog(`Polling tokenBalance failed: ${err}`); + clearInterval(this._zrxPollIntervalId); + delete this._zrxPollIntervalId; + }); } public async signOrderHashAsync(orderHash: string): Promise { utils.assert(!_.isUndefined(this._zeroEx), 'ZeroEx must be instantiated.'); diff --git a/packages/website/ts/web3_wrapper.ts b/packages/website/ts/web3_wrapper.ts index 6f260dc48..f5e3985c5 100644 --- a/packages/website/ts/web3_wrapper.ts +++ b/packages/website/ts/web3_wrapper.ts @@ -1,6 +1,7 @@ import { BigNumber, intervalUtils, promisify } from '@0xproject/utils'; import * as _ from 'lodash'; import { Dispatcher } from 'ts/redux/dispatcher'; +import { utils } from 'ts/utils/utils'; import * as Web3 from 'web3'; export class Web3Wrapper { @@ -135,7 +136,10 @@ export class Web3Wrapper { await this._updateUserEtherBalanceAsync(this._prevUserAddress); } } - }, 5000); + }, 5000, (err: Error) => { + utils.consoleLog(`Watching network and balances failed: ${err}`); + this._stopEmittingNetworkConnectionAndUserBalanceStateAsync(); + }); } private async _updateUserEtherBalanceAsync(userAddress: string) { const balance = await this.getBalanceInEthAsync(userAddress); -- cgit v1.2.3 From 024f093585ac4d97d674e254658f4a44275b8b9e Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Thu, 18 Jan 2018 15:02:53 +0800 Subject: Fix Portal topbar so that it displays the mobile menu --- packages/website/ts/components/top_bar.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'packages/website') diff --git a/packages/website/ts/components/top_bar.tsx b/packages/website/ts/components/top_bar.tsx index 601471222..c07366a0c 100644 --- a/packages/website/ts/components/top_bar.tsx +++ b/packages/website/ts/components/top_bar.tsx @@ -167,15 +167,13 @@ export class TopBar extends React.Component { )} - {this.props.blockchainIsLoaded && - !_.isEmpty(this.props.userAddress) &&
{this._renderUser()}
} - {!this._isViewingPortal() && ( -
-
- -
+ {this.props.blockchainIsLoaded && _.isEmpty(this.props.userAddress) && +
{this._renderUser()}
} +
+
+
- )} +
{this._renderDrawer()} -- cgit v1.2.3 From 9e569b37912cf11fabad7fbc47bf9343c67a354e Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Thu, 18 Jan 2018 15:20:15 +0800 Subject: Remove dead-code --- packages/website/ts/components/footer.tsx | 5 ----- 1 file changed, 5 deletions(-) (limited to 'packages/website') diff --git a/packages/website/ts/components/footer.tsx b/packages/website/ts/components/footer.tsx index 3346f2545..22baf076b 100644 --- a/packages/website/ts/components/footer.tsx +++ b/packages/website/ts/components/footer.tsx @@ -13,7 +13,6 @@ interface FooterMenuItem { title: string; path?: string; isExternal?: boolean; - fileName?: string; } enum Sections { @@ -56,25 +55,21 @@ const menuItemsBySection: MenuItemsBySection = { title: 'Rocket.chat', isExternal: true, path: constants.URL_ZEROEX_CHAT, - fileName: 'rocketchat.png', }, { title: 'Blog', isExternal: true, path: constants.URL_BLOG, - fileName: 'medium.png', }, { title: 'Twitter', isExternal: true, path: constants.URL_TWITTER, - fileName: 'twitter.png', }, { title: 'Reddit', isExternal: true, path: constants.URL_REDDIT, - fileName: 'reddit.png', }, ], Organization: [ -- cgit v1.2.3 From 807d9e3eef883541c4f43838e6ca702b120974e1 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Thu, 18 Jan 2018 15:20:34 +0800 Subject: Add discourse forum to Community section of website footer --- packages/website/public/images/social/discourse.png | Bin 0 -> 1454 bytes packages/website/ts/components/footer.tsx | 6 ++++++ packages/website/ts/utils/constants.ts | 1 + 3 files changed, 7 insertions(+) create mode 100644 packages/website/public/images/social/discourse.png (limited to 'packages/website') diff --git a/packages/website/public/images/social/discourse.png b/packages/website/public/images/social/discourse.png new file mode 100644 index 000000000..4bca3de0d Binary files /dev/null and b/packages/website/public/images/social/discourse.png differ diff --git a/packages/website/ts/components/footer.tsx b/packages/website/ts/components/footer.tsx index 22baf076b..a0f1a0c96 100644 --- a/packages/website/ts/components/footer.tsx +++ b/packages/website/ts/components/footer.tsx @@ -71,6 +71,11 @@ const menuItemsBySection: MenuItemsBySection = { isExternal: true, path: constants.URL_REDDIT, }, + { + title: 'Forum', + isExternal: true, + path: constants.URL_DISCOURSE_FORUM, + }, ], Organization: [ { @@ -100,6 +105,7 @@ const titleToIcon: { [title: string]: string } = { Blog: 'medium.png', Twitter: 'twitter.png', Reddit: 'reddit.png', + Forum: 'discourse.png', }; export interface FooterProps {} diff --git a/packages/website/ts/utils/constants.ts b/packages/website/ts/utils/constants.ts index 3fc1e6397..dded82114 100644 --- a/packages/website/ts/utils/constants.ts +++ b/packages/website/ts/utils/constants.ts @@ -65,6 +65,7 @@ export const constants = { URL_BIGNUMBERJS_GITHUB: 'http://mikemcl.github.io/bignumber.js', URL_BITLY_API: 'https://api-ssl.bitly.com', URL_BLOG: 'https://blog.0xproject.com/latest', + URL_DISCOURSE_FORUM: 'https://forum.0xproject.com', URL_FIREFOX_U2F_ADDON: 'https://addons.mozilla.org/en-US/firefox/addon/u2f-support-add-on/', URL_ETHER_FAUCET: 'https://faucet.0xproject.com', URL_GITHUB_ORG: 'https://github.com/0xProject', -- cgit v1.2.3 From f9c21efc3073fea4578d46a47f5a08214c592e87 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Thu, 18 Jan 2018 19:29:54 +0800 Subject: Use intervalUtils.clearAsyncExcludingInterval instead of calling clearInterval directly for grepability --- packages/website/ts/blockchain.ts | 6 +++--- packages/website/ts/web3_wrapper.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'packages/website') diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index e82243c83..66f982427 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -372,12 +372,12 @@ export class Blockchain { const [balance] = await this.getTokenBalanceAndAllowanceAsync(this._userAddress, token.address); if (!balance.eq(currBalance)) { this._dispatcher.replaceTokenBalanceByAddress(token.address, balance); - clearInterval(this._zrxPollIntervalId); + intervalUtils.clearAsyncExcludingInterval(this._zrxPollIntervalId); delete this._zrxPollIntervalId; } }, 5000, (err: Error) => { utils.consoleLog(`Polling tokenBalance failed: ${err}`); - clearInterval(this._zrxPollIntervalId); + intervalUtils.clearAsyncExcludingInterval(this._zrxPollIntervalId); delete this._zrxPollIntervalId; }); } @@ -475,7 +475,7 @@ export class Blockchain { this._web3Wrapper.updatePrevUserAddress(newUserAddress); } public destroy() { - clearInterval(this._zrxPollIntervalId); + intervalUtils.clearAsyncExcludingInterval(this._zrxPollIntervalId); this._web3Wrapper.destroy(); this._stopWatchingExchangeLogFillEvents(); } diff --git a/packages/website/ts/web3_wrapper.ts b/packages/website/ts/web3_wrapper.ts index f5e3985c5..407c62aaa 100644 --- a/packages/website/ts/web3_wrapper.ts +++ b/packages/website/ts/web3_wrapper.ts @@ -149,6 +149,6 @@ export class Web3Wrapper { } } private _stopEmittingNetworkConnectionAndUserBalanceStateAsync() { - clearInterval(this._watchNetworkAndBalanceIntervalId); + intervalUtils.clearAsyncExcludingInterval(this._watchNetworkAndBalanceIntervalId); } } -- cgit v1.2.3 From 614ea14a7fe90252d2bef8a97b3c376ae4498a17 Mon Sep 17 00:00:00 2001 From: Leonid Logvinov Date: Thu, 18 Jan 2018 16:18:25 +0100 Subject: Fix prettier --- packages/website/ts/blockchain.ts | 24 +++++----- packages/website/ts/components/top_bar.tsx | 6 ++- packages/website/ts/web3_wrapper.ts | 72 ++++++++++++++++-------------- 3 files changed, 56 insertions(+), 46 deletions(-) (limited to 'packages/website') diff --git a/packages/website/ts/blockchain.ts b/packages/website/ts/blockchain.ts index 66f982427..5530701c0 100644 --- a/packages/website/ts/blockchain.ts +++ b/packages/website/ts/blockchain.ts @@ -368,18 +368,22 @@ export class Blockchain { const [currBalance] = await this.getTokenBalanceAndAllowanceAsync(this._userAddress, token.address); - this._zrxPollIntervalId = intervalUtils.setAsyncExcludingInterval(async () => { - const [balance] = await this.getTokenBalanceAndAllowanceAsync(this._userAddress, token.address); - if (!balance.eq(currBalance)) { - this._dispatcher.replaceTokenBalanceByAddress(token.address, balance); + this._zrxPollIntervalId = intervalUtils.setAsyncExcludingInterval( + async () => { + const [balance] = await this.getTokenBalanceAndAllowanceAsync(this._userAddress, token.address); + if (!balance.eq(currBalance)) { + this._dispatcher.replaceTokenBalanceByAddress(token.address, balance); + intervalUtils.clearAsyncExcludingInterval(this._zrxPollIntervalId); + delete this._zrxPollIntervalId; + } + }, + 5000, + (err: Error) => { + utils.consoleLog(`Polling tokenBalance failed: ${err}`); intervalUtils.clearAsyncExcludingInterval(this._zrxPollIntervalId); delete this._zrxPollIntervalId; - } - }, 5000, (err: Error) => { - utils.consoleLog(`Polling tokenBalance failed: ${err}`); - intervalUtils.clearAsyncExcludingInterval(this._zrxPollIntervalId); - delete this._zrxPollIntervalId; - }); + }, + ); } public async signOrderHashAsync(orderHash: string): Promise { utils.assert(!_.isUndefined(this._zeroEx), 'ZeroEx must be instantiated.'); diff --git a/packages/website/ts/components/top_bar.tsx b/packages/website/ts/components/top_bar.tsx index c07366a0c..0859755fe 100644 --- a/packages/website/ts/components/top_bar.tsx +++ b/packages/website/ts/components/top_bar.tsx @@ -167,8 +167,10 @@ export class TopBar extends React.Component { )} - {this.props.blockchainIsLoaded && _.isEmpty(this.props.userAddress) && -
{this._renderUser()}
} + {this.props.blockchainIsLoaded && + _.isEmpty(this.props.userAddress) && ( +
{this._renderUser()}
+ )}
diff --git a/packages/website/ts/web3_wrapper.ts b/packages/website/ts/web3_wrapper.ts index 407c62aaa..415df6e8b 100644 --- a/packages/website/ts/web3_wrapper.ts +++ b/packages/website/ts/web3_wrapper.ts @@ -102,44 +102,48 @@ export class Web3Wrapper { let prevNodeVersion: string; this._prevUserEtherBalanceInEth = new BigNumber(0); this._dispatcher.updateNetworkId(this._prevNetworkId); - this._watchNetworkAndBalanceIntervalId = intervalUtils.setAsyncExcludingInterval(async () => { - // Check for network state changes - const currentNetworkId = await this.getNetworkIdIfExists(); - if (currentNetworkId !== this._prevNetworkId) { - this._prevNetworkId = currentNetworkId; - this._dispatcher.updateNetworkId(currentNetworkId); - } - - // Check for node version changes - const currentNodeVersion = await this.getNodeVersionAsync(); - if (currentNodeVersion !== prevNodeVersion) { - prevNodeVersion = currentNodeVersion; - this._dispatcher.updateNodeVersion(currentNodeVersion); - } - - if (this._shouldPollUserAddress) { - const userAddressIfExists = await this.getFirstAccountIfExistsAsync(); - // Update makerAddress on network change - if (this._prevUserAddress !== userAddressIfExists) { - this._prevUserAddress = userAddressIfExists; - this._dispatcher.updateUserAddress(userAddressIfExists); + this._watchNetworkAndBalanceIntervalId = intervalUtils.setAsyncExcludingInterval( + async () => { + // Check for network state changes + const currentNetworkId = await this.getNetworkIdIfExists(); + if (currentNetworkId !== this._prevNetworkId) { + this._prevNetworkId = currentNetworkId; + this._dispatcher.updateNetworkId(currentNetworkId); } - // Check for user ether balance changes - if (userAddressIfExists !== '') { - await this._updateUserEtherBalanceAsync(userAddressIfExists); + // Check for node version changes + const currentNodeVersion = await this.getNodeVersionAsync(); + if (currentNodeVersion !== prevNodeVersion) { + prevNodeVersion = currentNodeVersion; + this._dispatcher.updateNodeVersion(currentNodeVersion); } - } else { - // This logic is primarily for the Ledger, since we don't regularly poll for the address - // we simply update the balance for the last fetched address. - if (!_.isEmpty(this._prevUserAddress)) { - await this._updateUserEtherBalanceAsync(this._prevUserAddress); + + if (this._shouldPollUserAddress) { + const userAddressIfExists = await this.getFirstAccountIfExistsAsync(); + // Update makerAddress on network change + if (this._prevUserAddress !== userAddressIfExists) { + this._prevUserAddress = userAddressIfExists; + this._dispatcher.updateUserAddress(userAddressIfExists); + } + + // Check for user ether balance changes + if (userAddressIfExists !== '') { + await this._updateUserEtherBalanceAsync(userAddressIfExists); + } + } else { + // This logic is primarily for the Ledger, since we don't regularly poll for the address + // we simply update the balance for the last fetched address. + if (!_.isEmpty(this._prevUserAddress)) { + await this._updateUserEtherBalanceAsync(this._prevUserAddress); + } } - } - }, 5000, (err: Error) => { - utils.consoleLog(`Watching network and balances failed: ${err}`); - this._stopEmittingNetworkConnectionAndUserBalanceStateAsync(); - }); + }, + 5000, + (err: Error) => { + utils.consoleLog(`Watching network and balances failed: ${err}`); + this._stopEmittingNetworkConnectionAndUserBalanceStateAsync(); + }, + ); } private async _updateUserEtherBalanceAsync(userAddress: string) { const balance = await this.getBalanceInEthAsync(userAddress); -- cgit v1.2.3 From 13ec8ed03cd4423c9b5373e5eabd2d85a9b131f1 Mon Sep 17 00:00:00 2001 From: Jacob Evans Date: Fri, 19 Jan 2018 10:42:37 +1100 Subject: Allow Token symbols to be alphanumeric --- packages/website/ts/components/generate_order/new_token_form.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'packages/website') diff --git a/packages/website/ts/components/generate_order/new_token_form.tsx b/packages/website/ts/components/generate_order/new_token_form.tsx index b416de168..63645be9a 100644 --- a/packages/website/ts/components/generate_order/new_token_form.tsx +++ b/packages/website/ts/components/generate_order/new_token_form.tsx @@ -189,8 +189,8 @@ export class NewTokenForm extends React.Component maxLength) { symbolErrText = `Max length is ${maxLength}`; } else if (tokenWithSymbolExists) { @@ -231,7 +231,7 @@ export class NewTokenForm extends React.Component Date: Fri, 19 Jan 2018 11:26:03 +0800 Subject: Fix bug hiding the user info from topBar --- packages/website/ts/components/top_bar.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'packages/website') diff --git a/packages/website/ts/components/top_bar.tsx b/packages/website/ts/components/top_bar.tsx index 0859755fe..11d3e7cc2 100644 --- a/packages/website/ts/components/top_bar.tsx +++ b/packages/website/ts/components/top_bar.tsx @@ -168,7 +168,7 @@ export class TopBar extends React.Component {
)} {this.props.blockchainIsLoaded && - _.isEmpty(this.props.userAddress) && ( + !_.isEmpty(this.props.userAddress) && (
{this._renderUser()}
)}
-- cgit v1.2.3 From 9ccf63b44afe1ae6ccc2b9298ee35697d6be9e30 Mon Sep 17 00:00:00 2001 From: Fabio Berger Date: Fri, 19 Jan 2018 11:33:35 +0800 Subject: Add our mainnet and kovan nodes as backups for Portal requests --- packages/website/ts/utils/configs.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'packages/website') diff --git a/packages/website/ts/utils/configs.ts b/packages/website/ts/utils/configs.ts index 52b400d57..3d37a89ab 100644 --- a/packages/website/ts/utils/configs.ts +++ b/packages/website/ts/utils/configs.ts @@ -118,8 +118,8 @@ export const configs = { ] as OutdatedWrappedEtherByNetworkId[], // The order matters. We first try first node and only then fall back to others. PUBLIC_NODE_URLS_BY_NETWORK_ID: { - [1]: [`https://mainnet.infura.io/${INFURA_API_KEY}`], - [42]: [`https://kovan.infura.io/${INFURA_API_KEY}`], + [1]: [`https://mainnet.infura.io/${INFURA_API_KEY}`, 'https://mainnet.0xproject.com'], + [42]: [`https://kovan.infura.io/${INFURA_API_KEY}`, 'https://kovan.0xproject.com'], } as PublicNodeUrlsByNetworkId, SHOULD_DEPRECATE_OLD_WETH_TOKEN: true, SYMBOLS_OF_MINTABLE_TOKENS: ['MKR', 'MLN', 'GNT', 'DGD', 'REP'], -- cgit v1.2.3