X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=cmd%2Fweb%2Fjs%2Fpoloniex.jsx;h=c0b68c706671842dcfd0c94a6401d0c8dcb3b104;hb=refs%2Ftags%2Fv0.0.2;hp=877198d81fed44dfa5312032ab128010daabd801;hpb=7a9e5112eaaea58d55f181d3e5296e4ff839921c;p=perso%2FImmae%2FProjets%2FCryptomonnaies%2FCryptoportfolio%2FFront.git diff --git a/cmd/web/js/poloniex.jsx b/cmd/web/js/poloniex.jsx index 877198d..c0b68c7 100644 --- a/cmd/web/js/poloniex.jsx +++ b/cmd/web/js/poloniex.jsx @@ -1,49 +1,199 @@ -var Api = require('./api.js').Api; -var App = require('./app.js'); -var classNames = require('classnames'); - -module.exports.PoloniexForm = React.createClass({ - getInitialState: function() { - return {'hideMsg': true, 'msg': '', 'msgOk': false, 'apiSecret': this.props.apiSecret, 'apiKey': this.props.apiKey}; - }, - handleSubmit: function(e) { +import Api from './api.js'; +import classNames from 'classnames'; +import React from 'react'; + +class PoloniexController extends React.Component { + constructor(props) { + super(props); + this.state = {'apiKey': '', 'apiSecret': '', 'apiRequested': false, 'flag': 'loading', 'valueCurrency': null, 'balanceValue': null, 'balance': null}; + } + + handleCredentialsChange = (key, secret) => { + this.setState({'apiKey': key, 'apiSecret': secret}); + } + + handleCredentialsSubmit = () => { + if (!this.state.apiKey || !this.state.apiSecret) { + return; + } Api.Call('UPDATE_MARKET', {'key': this.state.apiKey, 'secret': this.state.apiSecret, 'name': 'poloniex'}, function(err, status, data) { if (err) { console.error(err, data); - this.displayMessage(App.errorCodeToMessage(err.code), false); return; } - this.displayMessage('OK', true); + this.setState({'flag': 'loading', 'valueCurrency': null, 'balanceValue': null, 'balance': null}); + this.loadBalance(); + }.bind(this)); + } + + loadBalance = () => { + Api.Call('MARKET_BALANCE', {'name': 'poloniex', 'currency': 'BTC'}, function(err, status, data) { + if (err) { + console.error(err, data); + if (err.code === 'invalid_market_credentials') { + this.setState({'flag': 'invalidCredentials', 'valueCurrency': null, 'balanceValue': null, 'balance': null}); + } + return; + } + this.setState({'flag': 'ok', 'valueCurrency': data.valueCurrency, 'balanceValue': data.value, 'balance': data.balance}); }.bind(this)); + } + + componentDidMount = () => { + Api.Call('MARKET', {'name': 'poloniex'}, function(err, status, data) { + this.setState({'apiRequested': true}); + if (err) { + console.error(err, data); + return; + } + + var flag = this.state.flag; + if (!data.key || !data.secret) { + flag = 'emptyCredentials'; + } else { + this.loadBalance(); + } + + this.setState({'apiKey': data.key, 'apiSecret': data.secret, 'flag': flag}); + }.bind(this)); + } + + render = () => { + var displayText = null; + switch (this.state.flag) { + case 'loading': + displayText = 'Loading data from poloniex...'; + break; + case 'invalidCredentials': + displayText = 'Invalid poloniex credentials'; + break; + case 'emptyCredentials': + displayText = 'Please provide poloniex credentials'; + break; + default: + displayText = null; + } + if (this.state.apiRequested === false) { + return
; + } + return ( +
+ + +
+ ); + } +} + +class PoloniexBalance extends React.Component { + constructor(props) { + super(props); + this.state = {'hideMsg': true, 'msg': '', 'msgOk': false}; + } + + render = () => { + var dashboard = null; + + if (this.props.balanceValue !== null) { + + var balance = Object.keys(this.props.balance).map(function(currency) { + return
{this.props.balance[currency]}
; + }.bind(this)); + + dashboard = +
+
+
+ {balance} +
+
+
+
+ Balance ({this.props.balanceCurrency}): {this.props.balanceValue} +
+
+
; +} else { + dashboard = +
+
+ {this.props.displayText} +
+
; +} + + return ( +
+
+
+
Portfolio
+
+
+ {dashboard} +
+
+ ); + } +} + +class PoloniexCredentialsForm extends React.Component { + constructor(props) { + super(props); + this.state = {'hideMsg': true, 'msg': '', 'editMode': false, 'msgOk': false}; + } + + handleSubmit = (e) => { + this.props.onCredentialsSubmit(); + this.setState({'editMode': false}); e.preventDefault(); - }, - handleApiKeyChange: function(event) { - this.setState({'apiKey': event.target.value}); - }, - handleApiSecretChange: function(event) { - this.setState({'apiSecret': event.target.value}); - }, - hideMessage: function() { - this.setState({'hideMsg': true}); - }, - displayMessage: function(msg, ok) { - this.setState({'msg': msg, 'msgOk': ok, 'hideMsg': false}); - }, - render: function() { - var cName = classNames('form-message', {'hidden': this.state.hideMsg, 'message-ok': this.state.msgOk}); + } + + handleApiKeyChange = (event) => { + this.props.onCredentialsChange(event.target.value, this.props.apiSecret); + } + + handleApiSecretChange = (event) => { + this.props.onCredentialsChange(this.props.apiKey, event.target.value); + } + + onEditClick = () => { + this.setState({'editMode': true}); + } + + render = () => { + var submitType = this.state.editMode === true ? 'submit' : 'hidden'; + var buttonDisplay = this.state.editMode === true ? 'none' : 'inline'; + var secretDisplayed = this.state.editMode === true ? this.props.apiSecret : 'XXXXXXX'; + var keyDisplayed = this.state.editMode === true ? this.props.apiKey : 'XXXXXXX'; + return ( -
-
-
- - - -
{this.state.msg}
+
+
+ Poloniex credentials +
+ + + + +
); } -}); +} + +export default PoloniexController;