import Api from './api.js'; import React from 'react'; import classnames from 'classnames'; class Panel extends React.Component { render = () => { if (this.props.component === null) { return
; } var className = classnames('row', this.props.topClassName); return (
{this.props.title}

{this.props.component}
); } } class AccountInformation extends React.Component { constructor(props) { super(props); this.state = {'email': null}; } loadAccount = () => { Api.Call('USER_ACCOUNT', {}, function(err, status, data) { if (err) { console.error(err, data); return; } this.setState({'email': data.email}); }.bind(this)); } componentDidMount = () => { this.loadAccount(); } render = () => { var component =

Loading...

; if (this.state.email !== null) { component =

Email: {this.state.email}

; } return component; } } class PoloniexConfiguration extends React.Component { constructor(props) { super(props); this.state = {'apiKey': '', 'apiSecret': '', 'status': 'loading', 'editMode': false}; } checkCredentials = () => { Api.Call('MARKET_TEST_CREDENTIALS', {'name': 'poloniex'}, function(err, status, data) { if (err) { console.error(err, data); if (err.code === 'invalid_market_credentials') { this.setState({'status': 'invalidCredentials'}); } else if (err.code === 'ip_restricted_api_key') { this.setState({'status': 'ipRestricted'}); } else if (err.code === 'market_credentials_not_configured') { this.setState({'status': 'emptyCredentials'}); } return; } this.setState({'status': 'ok'}); }.bind(this)); } handleCredentialsChange = (key, secret) => { this.setState({'apiKey': key, 'apiSecret': secret}); } handleCredentialsSubmit = () => { this.setState({'status': 'loading', 'editMode': false}); Api.Call('UPDATE_MARKET', {'key': this.state.apiKey, 'secret': this.state.apiSecret, 'name': 'poloniex'}, function(err, status, data) { if (err) { console.error(err, data); if (err.code === 'invalid_market_credentials') { this.setState({'status': 'invalidCredentials'}); } else if (err.code === 'ip_restricted_api_key') { this.setState({'status': 'ipRestricted'}); } return; } this.checkCredentials(); }.bind(this)); } componentDidMount = () => { this.checkCredentials(); } onEditClick = () => { Api.Call('MARKET', {'name': 'poloniex'}, function(err, status, data) { this.setState({'editMode': true}); if (err) { console.error(err, data); return; } var newStatus = this.state.status; if (!data.key || !data.secret) { newStatus = 'emptyCredentials'; } this.setState({'apiKey': data.key, 'apiSecret': data.secret, 'status': newStatus}); }.bind(this)); } render = () => { var displayText = null; switch (this.state.status) { case 'loading': displayText = 'Checking Poloniex credentials...'; break; case 'invalidCredentials': displayText = 'Invalid poloniex credentials'; break; case 'ipRestricted': displayText = 'Your API key is IP restricted.'; break; case 'emptyCredentials': displayText = 'Please provide poloniex credentials'; break; case 'ok': displayText = 'You are all set !'; break; default: console.error('unknown status', this.state.status); displayText = null; } return ( ); } } class PoloniexCredentialsForm extends React.Component { handleSubmit = (e) => { this.props.onCredentialsSubmit(); e.preventDefault(); } handleApiKeyChange = (event) => { this.props.onCredentialsChange(event.target.value, this.props.apiSecret); } handleApiSecretChange = (event) => { this.props.onCredentialsChange(this.props.apiKey, event.target.value); } render = () => { var submitType = this.props.editMode === true ? 'submit' : 'hidden'; var buttonDisplay = this.props.editMode === true ? 'none' : 'inline'; var secretDisplayed = this.props.editMode === true ? this.props.apiSecret : 'XXXXXXX'; var keyDisplayed = this.props.editMode === true ? this.props.apiKey : 'XXXXXXX'; var iconName = 'icon-cancel-circled'; switch (this.props.status) { case 'loading': iconName = 'icon-hourglass-2'; break; case 'ok': iconName = 'icon-ok-circled'; break; } return (
{this.props.statusMessage}
); } } class UserAccount extends React.Component { render = () => { return ( } title="Account" /> } title="Poloniex credentials" topClassName="api-credentials-form" /> ); } } export default UserAccount;