1 import Api from './api.js';
2 import React from 'react';
3 import classnames from 'classnames';
5 class Panel extends React.Component {
7 if (this.props.component === null) {
11 var className = classnames('row', this.props.topClassName);
14 <div className={className}>
15 <div className="box col-12">
17 <div className="col-4">{this.props.title}</div>
20 {this.props.component}
26 class AccountInformation extends React.Component {
29 this.state = {'email': null};
33 Api.Call('USER_ACCOUNT', {}, function(err, status, data) {
35 console.error(err, data);
39 this.setState({'email': data.email});
43 componentDidMount = () => {
48 var component = <p>Loading...</p>;
49 if (this.state.email !== null) {
50 component = <p>Email: {this.state.email}</p>;
58 class PoloniexConfiguration extends React.Component {
61 this.state = {'apiKey': '', 'apiSecret': '', 'status': 'loading', 'editMode': false};
64 checkCredentials = () => {
65 Api.Call('MARKET_TEST_CREDENTIALS', {'name': 'poloniex'}, function(err, status, data) {
67 console.error(err, data);
68 if (err.code === 'invalid_market_credentials') {
69 this.setState({'status': 'invalidCredentials'});
70 } else if (err.code === 'ip_restricted_api_key') {
71 this.setState({'status': 'ipRestricted'});
72 } else if (err.code === 'market_credentials_not_configured') {
73 this.setState({'status': 'emptyCredentials'});
78 this.setState({'status': 'ok'});
82 handleCredentialsChange = (key, secret) => {
83 this.setState({'apiKey': key, 'apiSecret': secret});
86 handleCredentialsSubmit = () => {
87 this.setState({'status': 'loading', 'editMode': false});
88 Api.Call('UPDATE_MARKET', {'key': this.state.apiKey, 'secret': this.state.apiSecret, 'name': 'poloniex'}, function(err, status, data) {
90 console.error(err, data);
91 if (err.code === 'invalid_market_credentials') {
92 this.setState({'status': 'invalidCredentials'});
93 } else if (err.code === 'ip_restricted_api_key') {
94 this.setState({'status': 'ipRestricted'});
99 this.checkCredentials();
103 componentDidMount = () => {
104 this.checkCredentials();
107 onEditClick = () => {
108 Api.Call('MARKET', {'name': 'poloniex'}, function(err, status, data) {
109 this.setState({'editMode': true});
111 console.error(err, data);
115 var newStatus = this.state.status;
116 if (!data.key || !data.secret) {
117 newStatus = 'emptyCredentials';
120 this.setState({'apiKey': data.key, 'apiSecret': data.secret, 'status': newStatus});
125 var displayText = null;
126 switch (this.state.status) {
128 displayText = 'Checking Poloniex credentials...';
130 case 'invalidCredentials':
131 displayText = 'Invalid poloniex credentials';
134 displayText = 'Your API key is IP restricted.';
136 case 'emptyCredentials':
137 displayText = 'Please provide poloniex credentials';
140 displayText = 'You are all set !';
143 console.error('unknown status', this.state.status);
148 <PoloniexCredentialsForm onLoadCredentials={this.onLoadCredentials}
149 onCredentialsSubmit={this.handleCredentialsSubmit}
150 onCredentialsChange={this.handleCredentialsChange}
151 apiSecret={this.state.apiSecret}
152 apiKey={this.state.apiKey}
153 status={this.state.status}
154 statusMessage={displayText}
155 editMode={this.state.editMode}
156 onEditClick={this.onEditClick}/>
161 class PoloniexCredentialsForm extends React.Component {
162 handleSubmit = (e) => {
163 this.props.onCredentialsSubmit();
167 handleApiKeyChange = (event) => {
168 this.props.onCredentialsChange(event.target.value, this.props.apiSecret);
171 handleApiSecretChange = (event) => {
172 this.props.onCredentialsChange(this.props.apiKey, event.target.value);
176 var submitType = this.props.editMode === true ? 'submit' : 'hidden';
177 var buttonDisplay = this.props.editMode === true ? 'none' : 'inline';
178 var secretDisplayed = this.props.editMode === true ? this.props.apiSecret : 'XXXXXXX';
179 var keyDisplayed = this.props.editMode === true ? this.props.apiKey : 'XXXXXXX';
181 var iconName = 'icon-cancel-circled';
182 switch (this.props.status) {
184 iconName = 'icon-hourglass-2';
187 iconName = 'icon-ok-circled';
193 <div className="row config-status">
194 <div className="col-12">
195 <span><i className={iconName}></i>{this.props.statusMessage}</span>
198 <div className="row">
199 <div className="col-12">
200 <form role="form" onSubmit={this.handleSubmit}>
201 <label className="w-100">Key:
202 <input className="form-control" type="text" placeholder="key" value={keyDisplayed} onChange={this.handleApiKeyChange} disabled={!this.props.editMode}/>
204 <label className="w-100">Secret:
205 <input className="form-control" type="text" placeholder="secret" value={secretDisplayed} onChange={this.handleApiSecretChange} disabled={!this.props.editMode}/>
207 <input className="form-control submit" type={submitType} value="Save" />
208 <button className="form-control submit" style={{display: buttonDisplay}} onSubmit={null} onClick={this.props.onEditClick} type="button">Show/Edit</button>
217 class UserAccount extends React.Component {
221 <Panel component={<AccountInformation/>} title="Account" />
222 <Panel component={<PoloniexConfiguration/>} title="Poloniex credentials" topClassName="api-credentials-form" />
228 export default UserAccount;