aboutsummaryrefslogtreecommitdiffstats
path: root/ui/app/components/token-balance.js
diff options
context:
space:
mode:
authorChi Kei Chan <chikeichan@gmail.com>2017-09-06 18:17:49 +0800
committerChi Kei Chan <chikeichan@gmail.com>2017-09-06 18:17:49 +0800
commitf1fb9e10a06d1811d97f61b6369684979b7ecf70 (patch)
tree674886d99e6be7ea30b83f8f3811643beb792f07 /ui/app/components/token-balance.js
parent690ddf5ed75967537aa5513986146c262012832a (diff)
downloadtangerine-wallet-browser-f1fb9e10a06d1811d97f61b6369684979b7ecf70.tar
tangerine-wallet-browser-f1fb9e10a06d1811d97f61b6369684979b7ecf70.tar.gz
tangerine-wallet-browser-f1fb9e10a06d1811d97f61b6369684979b7ecf70.tar.bz2
tangerine-wallet-browser-f1fb9e10a06d1811d97f61b6369684979b7ecf70.tar.lz
tangerine-wallet-browser-f1fb9e10a06d1811d97f61b6369684979b7ecf70.tar.xz
tangerine-wallet-browser-f1fb9e10a06d1811d97f61b6369684979b7ecf70.tar.zst
tangerine-wallet-browser-f1fb9e10a06d1811d97f61b6369684979b7ecf70.zip
Adding Token transaction detail screen
Diffstat (limited to 'ui/app/components/token-balance.js')
-rw-r--r--ui/app/components/token-balance.js104
1 files changed, 104 insertions, 0 deletions
diff --git a/ui/app/components/token-balance.js b/ui/app/components/token-balance.js
new file mode 100644
index 000000000..0757cc65c
--- /dev/null
+++ b/ui/app/components/token-balance.js
@@ -0,0 +1,104 @@
+const Component = require('react').Component
+const h = require('react-hyperscript')
+const inherits = require('util').inherits
+const TokenTracker = require('eth-token-tracker')
+const connect = require('react-redux').connect
+const selectors = require('../selectors')
+
+function mapStateToProps (state) {
+ return {
+ userAddress: selectors.getSelectedAddress(state),
+ }
+}
+
+module.exports = connect(mapStateToProps)(TokenBalance)
+
+
+inherits(TokenBalance, Component)
+function TokenBalance () {
+ this.state = {
+ balance: '',
+ isLoading: true,
+ error: null,
+ }
+ Component.call(this)
+}
+
+TokenBalance.prototype.render = function () {
+ const state = this.state
+ const { balance, isLoading } = state
+
+ return isLoading
+ ? h('span', '')
+ : h('span', balance)
+}
+
+TokenBalance.prototype.componentDidMount = function () {
+ this.createFreshTokenTracker()
+}
+
+TokenBalance.prototype.createFreshTokenTracker = function () {
+ if (this.tracker) {
+ // Clean up old trackers when refreshing:
+ this.tracker.stop()
+ this.tracker.removeListener('update', this.balanceUpdater)
+ this.tracker.removeListener('error', this.showError)
+ }
+
+ if (!global.ethereumProvider) return
+ const { userAddress, token } = this.props
+
+ this.tracker = new TokenTracker({
+ userAddress,
+ provider: global.ethereumProvider,
+ tokens: [token],
+ pollingInterval: 8000,
+ })
+
+
+ // Set up listener instances for cleaning up
+ this.balanceUpdater = this.updateBalance.bind(this)
+ this.showError = error => {
+ this.setState({ error, isLoading: false })
+ }
+ this.tracker.on('update', this.balanceUpdater)
+ this.tracker.on('error', this.showError)
+
+ this.tracker.updateBalances()
+ .then(() => {
+ this.updateBalance(this.tracker.serialize())
+ })
+ .catch((reason) => {
+ log.error(`Problem updating balances`, reason)
+ this.setState({ isLoading: false })
+ })
+}
+
+TokenBalance.prototype.componentDidUpdate = function (nextProps) {
+ const {
+ userAddress: oldAddress,
+ } = this.props
+ const {
+ userAddress: newAddress,
+ } = nextProps
+
+ if (!oldAddress || !newAddress) return
+ if (oldAddress === newAddress) return
+
+ this.setState({ isLoading: true })
+ this.createFreshTokenTracker()
+}
+
+TokenBalance.prototype.updateBalance = function (tokens = []) {
+ const [{ string }] = tokens
+ this.setState({
+ balance: string,
+ isLoading: false,
+ })
+}
+
+TokenBalance.prototype.componentWillUnmount = function () {
+ if (!this.tracker) return
+ this.tracker.stop()
+}
+