Skip to content
This repository was archived by the owner on Feb 22, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
3a715f7
Merge pull request #1097 from binary-com/dev
ashkanx Jan 11, 2019
2e0b98f
Merge pull request #1108 from binary-com/dev
ashkanx Jan 15, 2019
fa8efaa
Merge pull request #1125 from binary-com/dev
ashkanx Jan 22, 2019
ff4bd1f
Merge dev
gokula-binary Jan 28, 2019
b6a9127
Merge pull request #1164 from binary-com/dev
Feb 1, 2019
5344241
Explicitly set page_url
Feb 5, 2019
549705d
Add path to page_url, add eslint exception
Feb 5, 2019
d0c1c7c
Add show/hide header svgs
Feb 5, 2019
7a19ba8
Add Login + Account List in toolbox when header hidden
Feb 5, 2019
3d3493e
Set width to fix inconsistency
Feb 5, 2019
1261fe7
Add rules for toolbox Account List + Login
Feb 5, 2019
c07ec11
Add icons for toggling header
Feb 5, 2019
a8c8278
Add support for toolbox dropdown
Feb 5, 2019
33c8a6f
Update tour selector
Feb 5, 2019
c4ccc47
Reveal header as user progresses through tour
Feb 5, 2019
a57beae
Add logic for showing/hiding header and bind some events to new toolb…
Feb 5, 2019
7a9e2cd
Revert fixing HTML, address in future
Feb 5, 2019
4a74ec2
Remove some conditions before sending bot.init emit
Feb 5, 2019
c55575f
Modify default context menu by hooking Blockly fn
Feb 5, 2019
65a9c30
Open Elev.io widget when 'Help' is clicked
Feb 5, 2019
43f423b
Add disable some eslint rules
Feb 5, 2019
4aa5f51
Merge pull request #1178 from aaron-binary/default-chart-fix
ashkanx Feb 5, 2019
77fb2bc
Merge pull request #1180 from aaron-binary/modify-context-menu
ashkanx Feb 5, 2019
5d2e971
Add protocol to Elevio page_url
Feb 7, 2019
3b9b18b
Fix eslint's random spacing
Feb 7, 2019
bc05696
Refactor
Feb 7, 2019
26a53af
Hide toggleHeaderButton when progressing through tour
Feb 7, 2019
f8b6481
Add spacing for toolbox-login, and toolbox-account-list
Feb 7, 2019
a4bc081
Move clearUndo() to correct place
Feb 7, 2019
7b4ba4c
Don't record duration changes in redo/undo
Feb 7, 2019
49e4b55
Refactor ServerTime and sync server_time every 30 secs
Feb 7, 2019
7d5d6af
fix barrier offset predefined value
cakasuma Feb 7, 2019
7656643
Merge pull request #1174 from aaron-binary/fullscreen
ashkanx Feb 7, 2019
89697e5
Merge branch 'dev' into duration-stuck-on-loading
ashkanx Feb 7, 2019
8d40ef8
Merge pull request #1186 from aaron-binary/duration-stuck-on-loading
ashkanx Feb 7, 2019
76f5d5f
Merge pull request #1190 from binary-com/dev
ashkanx Feb 7, 2019
34b5c10
Merge branch 'dev' into server-time-sync
Feb 8, 2019
da174b4
edit default value
cakasuma Feb 8, 2019
6980e6b
Merge pull request #1187 from aaron-binary/server-time-sync
Feb 8, 2019
3c8b75d
Merge branch 'dev' into amam/barrier_default_value
cakasuma Feb 8, 2019
285368a
Merge branch 'dev' of https://github.com/binary-com/binary-bot into a…
cakasuma Feb 8, 2019
7340fc2
Merge branch 'amam/barrier_default_value' of github.com:cakasuma/bina…
cakasuma Feb 8, 2019
b04a615
Remove tokens when invalid
Feb 8, 2019
188a44f
openHome() instead of open(), as Elev.io pages are sometimes not shar…
Feb 8, 2019
1104641
Catch errors, remove invalid token
Feb 8, 2019
b996958
Lift tokenlist
Feb 8, 2019
57e31fd
camel case vars
cakasuma Feb 8, 2019
5872d81
Merge branch 'dev' into elevio-url-fix
ashkanx Feb 8, 2019
112dc34
Merge pull request #1177 from aaron-binary/elevio-url-fix
ashkanx Feb 8, 2019
3bdcc1b
Merge pull request #1193 from binary-com/dev
ashkanx Feb 8, 2019
52fa0a2
Merge branch 'dev' into qa-fixes
ashkanx Feb 8, 2019
c069ede
edit barrieroffset list set value
cakasuma Feb 11, 2019
1cd568f
Merge pull request #1192 from aaron-binary/qa-fixes
Feb 11, 2019
d71cebd
Merge branch 'dev' into amam/barrier_default_value
Feb 11, 2019
c9519df
Merge pull request #1188 from cakasuma/amam/barrier_default_value
Feb 11, 2019
5a828ed
Merge pull request #1201 from binary-com/dev
ashkanx Feb 11, 2019
0a921c0
Merge branch 'master' into beta
ashkanx Feb 11, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 15 additions & 13 deletions src/botPage/common/symbolApi/index.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import ActiveSymbols from './activeSymbols';
import config from '../../common/const';
import { getObjectValue } from '../../../common/utils/tools';
import { getTokenList } from '../../../common/utils/storageManager';
import { getTokenList, removeAllTokens } from '../../../common/utils/storageManager';

const noop = () => {};

Expand Down Expand Up @@ -44,7 +44,7 @@ export default class _Symbol {
constructor(api) {
this.api = api;
this.initPromise = new Promise(resolve => {
const getActiveSymbolsPromise = () => {
const getActiveSymbolsLogic = () => {
this.api.getActiveSymbolsBrief().then(r => {
this.activeSymbols = new ActiveSymbols(r.active_symbols);
this.api.getAssetIndex().then(r2 => {
Expand All @@ -53,17 +53,19 @@ export default class _Symbol {
}, noop);
}, noop);
};
// Authorize when possible for accurate offered symbols, assetindex
const getAuthorisePromise = () => {
const tokenList = getTokenList();
if (tokenList.length) {
return this.api.authorize(tokenList[0].token);
}
return new Promise(r => r());
};
getAuthorisePromise()
.then(() => getActiveSymbolsPromise(), noop)
.catch(() => getActiveSymbolsPromise(), noop);
// Authorize the WS connection when possible for accurate offered Symbols & AssetIndex
const tokenList = getTokenList();
if (tokenList.length) {
this.api
.authorize(tokenList[0].token)
.then(getActiveSymbolsLogic())
.catch(() => {
removeAllTokens();
getActiveSymbolsLogic();
});
} else {
getActiveSymbolsLogic();
}
});
}
/* eslint-disable class-methods-use-this */
Expand Down
35 changes: 25 additions & 10 deletions src/botPage/view/View.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,10 +56,6 @@ api.events.on('website_status', response => {
}
});

api.send({ time: '1' }).then(response => {
ReactDOM.render(<ServerTime startTime={response.time} />, $('#server-time')[0]);
});

api.events.on('balance', response => {
const {
balance: { balance: b, currency },
Expand Down Expand Up @@ -175,11 +171,12 @@ const getActiveToken = (tokenList, activeToken) => {

const updateTokenList = () => {
const tokenList = getTokenList();
const loginButton = $('#login');
const accountList = $('#account-list');
const loginButton = $('#login, #toolbox-login');
const accountList = $('#account-list, #toolbox-account-list');
if (tokenList.length === 0) {
loginButton.show();
accountList.hide();

$('.account-id')
.removeAttr('value')
.text('');
Expand All @@ -190,7 +187,6 @@ const updateTokenList = () => {
} else {
loginButton.hide();
accountList.show();

const activeToken = getActiveToken(tokenList, getStorage(AppConstants.STORAGE_ACTIVE_TOKEN));
updateLogo(activeToken.token);
addBalanceForToken(activeToken.token);
Expand All @@ -200,7 +196,6 @@ const updateTokenList = () => {
}
tokenList.forEach(tokenInfo => {
const prefix = isVirtual(tokenInfo) ? 'Virtual Account' : `${tokenInfo.loginInfo.currency} Account`;

if (tokenInfo === activeToken) {
$('.account-id')
.attr('value', `${tokenInfo.token}`)
Expand Down Expand Up @@ -277,6 +272,7 @@ export default class View {
applyToolboxPermissions();
renderReactComponents();
if (!getTokenList().length) updateLogo();
this.showHeader(getStorage('showHeader') !== 'false');
resolve();
});
});
Expand Down Expand Up @@ -468,11 +464,13 @@ export default class View {

$('#showSummary').click(showSummary);

$('#toggleHeaderButton').click(() => this.showHeader($('#header').is(':hidden')));

$('#loadXml').click(() => {
$('#files').click();
});

$('#logout').click(() => {
$('#logout, #toolbox-logout').click(() => {
setBeforeUnload(true);
logout();
hideRealityCheck();
Expand Down Expand Up @@ -573,7 +571,7 @@ export default class View {
.catch(() => {});
});

$('#login')
$('#login, #toolbox-login')
.bind('click.login', () => {
setBeforeUnload(true);
document.location = getOAuthURL();
Expand Down Expand Up @@ -636,6 +634,22 @@ export default class View {
}
});
}
showHeader = show => {
const $header = $('#header');
const $topbarAccount = $('#toolbox-account');
const $toggleHeaderButton = $('.icon-hide-header');
if (show) {
$header.show(0);
$topbarAccount.hide(0);
$toggleHeaderButton.removeClass('enabled');
} else {
$header.hide(0);
$topbarAccount.show(0);
$toggleHeaderButton.addClass('enabled');
}
setStorage('showHeader', show);
window.dispatchEvent(new Event('resize'));
};
}

function initRealityCheck(stopCallback) {
Expand All @@ -648,6 +662,7 @@ function initRealityCheck(stopCallback) {
);
}
function renderReactComponents() {
ReactDOM.render(<ServerTime api={api} />, $('#server-time')[0]);
ReactDOM.render(<Tour />, $('#tour')[0]);
ReactDOM.render(
<OfficialVersionWarning
Expand Down
20 changes: 15 additions & 5 deletions src/botPage/view/blockly/blocks/shared.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,12 @@ import { symbolApi } from '../../shared';
import config from '../../../common/const';
import { generateLiveApiInstance } from '../../../../common/appId';
import { translate } from '../../../../common/i18n';
import { get as getStorage, set as setStorage, getTokenList } from '../../../../common/utils/storageManager';
import {
get as getStorage,
set as setStorage,
getTokenList,
removeAllTokens,
} from '../../../../common/utils/storageManager';

let purchaseChoices = [[translate('Click to select'), '']];

Expand Down Expand Up @@ -136,21 +141,27 @@ export const dependentFieldMapping = {

export const getAvailableDurations = (symbol, selectedContractType) => {
const contractsForStore = JSON.parse(getStorage('contractsForStore') || '[]');
const tokenList = getTokenList();
let tokenList = getTokenList();
const defaultDurations = [
[translate('Ticks'), 't'],
[translate('Seconds'), 's'],
[translate('Minutes'), 'm'],
[translate('Hours'), 'h'],
[translate('Days'), 'd'],
];

const getContractsForSymbolFromApi = async underlyingSymbol => {
// Refactor this when reducing WS connections
let api = generateLiveApiInstance();
const api = generateLiveApiInstance();

// Try to authorize for accurate contracts response
if (tokenList.length) {
await api.authorize(tokenList[0].token);
try {
await api.authorize(tokenList[0].token);
} catch (e) {
removeAllTokens();
tokenList = [];
}
}

const response = await api.getContractsForSymbol(underlyingSymbol);
Expand All @@ -176,7 +187,6 @@ export const getAvailableDurations = (symbol, selectedContractType) => {
setStorage('contractsForStore', JSON.stringify(contractsForStore));
}
api.disconnect();
api = null;
return contractsForSymbol;
};
const getDurationsForContract = contractsForSymbol => {
Expand Down
22 changes: 22 additions & 0 deletions src/botPage/view/blockly/blocks/trade/components.js
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,17 @@ export const barrierOffset = block => {
.setCheck('Number')
.appendField(`${translate('Barrier Offset')} 1:`)
.appendField(new Blockly.FieldDropdown(config.barrierTypes), 'BARRIEROFFSETTYPE_LIST');
} else {
const barrierOffsetList = block.getField('BARRIEROFFSETTYPE_LIST');
if (!block.workspace.getBlockById('BARRIERVALUE')) {
const barrierValue = block.workspace.newBlock('math_number', 'BARRIERVALUE');
barrierOffsetList.setValue('+');
barrierValue.setFieldValue('0.274', 'NUM');
barrierValue.setShadow(true);
barrierValue.outputConnection.connect(block.getInput('BARRIEROFFSET').connection);
barrierValue.initSvg();
barrierValue.render();
}
}
};

Expand All @@ -86,6 +97,17 @@ export const secondBarrierOffset = block => {
.setCheck('Number')
.appendField(`${translate('Barrier Offset')} 2:`)
.appendField(new Blockly.FieldDropdown(config.barrierTypes), 'SECONDBARRIEROFFSETTYPE_LIST');
} else {
const barrierOffsetList = block.getField('SECONDBARRIEROFFSETTYPE_LIST');
if (!block.workspace.getBlockById('SECONDBARRIERVALUE')) {
const secondBarrierValue = block.workspace.newBlock('math_number', 'SECONDBARRIERVALUE');
barrierOffsetList.setValue('-');
secondBarrierValue.setFieldValue('0.274', 'NUM');
secondBarrierValue.setShadow(true);
secondBarrierValue.outputConnection.connect(block.getInput('SECONDBARRIEROFFSET').connection);
secondBarrierValue.initSvg();
secondBarrierValue.render();
}
}
};

Expand Down
3 changes: 1 addition & 2 deletions src/botPage/view/blockly/blocks/trade/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,7 @@ const decorateTrade = ev => {
}
if ([Blockly.Events.CHANGE, Blockly.Events.MOVE, Blockly.Events.CREATE].includes(ev.type)) {
const symbol = trade.getFieldValue('SYMBOL_LIST');

if (symbol && (ev.group === 'reset' || ev.type !== Blockly.Events.CREATE)) {
if (symbol) {
globalObserver.emit('bot.init', symbol);
}

Expand Down
5 changes: 5 additions & 0 deletions src/botPage/view/blockly/blocks/trade/tradeOptions.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,13 @@ export default () => {
const tradeType = getTradeType(this);

const prevSelectedDuration = durationTypeList.getValue();

Blockly.Events.recordUndo = false;
this.setFieldValue(translate('Loading...'), 'DURATIONTYPE_LIST');
Blockly.Events.recordUndo = true;

getAvailableDurations(symbol, tradeType).then(durations => {
Blockly.Events.recordUndo = false;
// Prevent UI flickering by only updating field if options have changed
// eslint-disable-next-line no-underscore-dangle
if (JSON.stringify(durationTypeList.menuGenerator_) !== JSON.stringify(durations)) {
Expand All @@ -56,6 +60,7 @@ export default () => {
} else {
this.setFieldValue(translate('Not available'), 'DURATIONTYPE_LIST');
}
Blockly.Events.recordUndo = true;
});
}
}
Expand Down
42 changes: 41 additions & 1 deletion src/botPage/view/blockly/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -243,11 +243,11 @@ export default class _Blockly {
this.blocksXmlStr = Blockly.Xml.domToPrettyText(main);
Blockly.Xml.domToWorkspace(main.getElementsByTagName('xml')[0], workspace);
this.zoomOnPlusMinus();
Blockly.mainWorkspace.clearUndo();
disposeBlocksWithLoaders();
setTimeout(() => {
setBeforeUnload(true);
Blockly.mainWorkspace.cleanUp();
Blockly.mainWorkspace.clearUndo();
}, 0);
resolve();
});
Expand Down Expand Up @@ -417,3 +417,43 @@ while(true) {
}
/* eslint-enable */
}

// Hooks to override default Blockly behaviour
/* eslint-disable no-unused-expressions */
const originalContextMenuFn = Blockly.ContextMenu.show;
Blockly.ContextMenu.show = (e, menuOptions, rtl) => {
// Rename 'Clean up blocks'
menuOptions.some(option => {
if (option.text === Blockly.Msg.CLEAN_UP) {
option.text = translate('Rearrange vertically'); // eslint-disable-line no-param-reassign
return true;
}
return false;
}) &&
/* Remove delete all blocks, but only when 'Clean up blocks' is available (i.e. workspace)
* This allows users to still delete root blocks containing blocks
*/
menuOptions.some((option, i) => {
if (
option.text === Blockly.Msg.DELETE_BLOCK ||
option.text.replace(/[0-9]+/, '%1') === Blockly.Msg.DELETE_X_BLOCKS
) {
menuOptions.splice(i, 1);
return true;
}
return false;
});
// Open the Elev.io widget when clicking 'Help'
// eslint-disable-next-line no-underscore-dangle
if (window._elev) {
menuOptions.some(option => {
if (option.text === Blockly.Msg.HELP) {
option.callback = () => window._elev.openHome(); // eslint-disable-line no-param-reassign, no-underscore-dangle
return true;
}
return false;
});
}
originalContextMenuFn(e, menuOptions, rtl);
};
/* eslint-enable */
38 changes: 24 additions & 14 deletions src/botPage/view/react-components/HeaderWidgets.js
Original file line number Diff line number Diff line change
@@ -1,25 +1,35 @@
import React, { Component } from 'react';

export default class ServerTime extends Component {
constructor() {
constructor(props) {
super();
this.state = {};
const getServerTime = () => {
props.api.send({ time: '1' }).then(response =>
this.setState(
{
date: new Date(response.time * 1000),
},
this.updateTime()
)
);
};
getServerTime();
setInterval(() => this.updateTime(), 1000);
setInterval(() => getServerTime(), 30000);
}
updateTime() {
this.date.setSeconds(this.date.getSeconds() + 1);
const year = this.date.getUTCFullYear();
const month = `0${this.date.getMonth() + 1}`.slice(-2);
const date = `0${this.date.getUTCDate()}`.slice(-2);
const hours = `0${this.date.getUTCHours()}`.slice(-2);
const minutes = `0${this.date.getMinutes()}`.slice(-2);
const seconds = `0${this.date.getSeconds()}`.slice(-2);
this.setState({ date: `${year}-${month}-${date} ${hours}:${minutes}:${seconds} GMT` });
}
componentWillMount() {
this.date = new Date(this.props.startTime * 1000);
setInterval(() => this.updateTime(), 1000);
if (!this.state.date) return;
this.state.date.setSeconds(this.state.date.getSeconds() + 1);
const year = this.state.date.getUTCFullYear();
const month = `0${this.state.date.getMonth() + 1}`.slice(-2);
const day = `0${this.state.date.getUTCDate()}`.slice(-2);
const hours = `0${this.state.date.getUTCHours()}`.slice(-2);
const minutes = `0${this.state.date.getMinutes()}`.slice(-2);
const seconds = `0${this.state.date.getSeconds()}`.slice(-2);
this.setState({ dateString: `${year}-${month}-${day} ${hours}:${minutes}:${seconds} GMT` });
}
render() {
return <b>{this.state.date}</b>;
return <b>{this.state.dateString}</b>;
}
}
Loading