diff --git a/src/javascript/app_2/Stores/Modules/SmartChart/Helpers/__tests__/barriers.js b/src/javascript/app_2/Stores/Modules/SmartChart/Helpers/__tests__/barriers.js index 9f9a7317184c..be7742e1ba5f 100644 --- a/src/javascript/app_2/Stores/Modules/SmartChart/Helpers/__tests__/barriers.js +++ b/src/javascript/app_2/Stores/Modules/SmartChart/Helpers/__tests__/barriers.js @@ -26,7 +26,7 @@ describe('Barriers', () => { expect(Barriers.barriersToString(true, +11, +15)).to.deep.eql(['+11','+15']); }); }); - + describe('barriersObjectToArray', () => { const main = { color: "green", @@ -36,7 +36,7 @@ describe('Barriers', () => { const barriers = { main, }; - expect(Barriers.barriersObjectToArray(barriers)).to.deep.eql([{ + expect(Barriers.barriersObjectToArray(barriers, [])).to.deep.eql([{ color: "green", draggable: false }]); @@ -46,7 +46,7 @@ describe('Barriers', () => { main, somethingEmpty: {}, }; - expect(Barriers.barriersObjectToArray(barriers)).to.deep.eql([{ + expect(Barriers.barriersObjectToArray(barriers, [])).to.deep.eql([{ color: "green", draggable: false }]); diff --git a/src/javascript/app_2/Stores/Modules/SmartChart/Helpers/barriers.js b/src/javascript/app_2/Stores/Modules/SmartChart/Helpers/barriers.js index 40a5d83eb46d..804ff658142d 100644 --- a/src/javascript/app_2/Stores/Modules/SmartChart/Helpers/barriers.js +++ b/src/javascript/app_2/Stores/Modules/SmartChart/Helpers/barriers.js @@ -8,8 +8,13 @@ export const barriersToString = (is_relative, ...barriers_list) => barriers_list .filter(barrier => barrier !== undefined && barrier !== null) .map(barrier => `${is_relative && !/^[+-]/.test(barrier) ? '+' : ''}${barrier}`); -export const barriersObjectToArray = (barriers) => ( - Object.keys(barriers || {}) - .map(key => toJS(barriers[key])) - .filter(item => !isEmptyObject(item)) -); +export const barriersObjectToArray = (barriers, reference_array) => { + Object.keys(barriers).forEach(barrier => { + const js_object = toJS(barriers[barrier]); + if (!isEmptyObject(js_object)) { + reference_array.push(js_object); + } + }); + + return reference_array; +}; diff --git a/src/javascript/app_2/Stores/Modules/SmartChart/smart-chart-store.js b/src/javascript/app_2/Stores/Modules/SmartChart/smart-chart-store.js index 007be8526e39..7be64978919f 100644 --- a/src/javascript/app_2/Stores/Modules/SmartChart/smart-chart-store.js +++ b/src/javascript/app_2/Stores/Modules/SmartChart/smart-chart-store.js @@ -18,6 +18,8 @@ export default class SmartChartStore extends BaseStore { @observable granularity; @observable barriers = observable.object({}); @observable markers = observable.object({}); + barriers_empty_array = []; + markers_empty_array = []; @observable is_contract_mode = false; @observable is_title_enabled = true; @@ -83,7 +85,7 @@ export default class SmartChartStore extends BaseStore { if (this.trade_chart_layout && !isEmptyObject(this.trade_chart_layout)) { this.applySavedTradeChartLayout(); } - } + }; @action.bound onUnmount = () => { @@ -185,7 +187,30 @@ export default class SmartChartStore extends BaseStore { @computed get barriers_array() { - return barriersObjectToArray(this.barriers); + let has_differing = false; + const barriers_array = barriersObjectToArray(this.barriers, []); + + if (this.barriers_empty_array.length !== barriers_array.length) { + has_differing = true; + } else { + this.barriers_empty_array.forEach(barrier => { + barriers_array.forEach(next_barrier => { + Object.keys(barrier).forEach(key => { + if (barrier[key] !== next_barrier[key]) { + has_differing = true; + } + }); + }); + }); + } + + if (has_differing) { + this.barriers_empty_array = []; + } else { + this.barriers_empty_array.length = 0; + } + + return barriersObjectToArray(this.barriers, this.barriers_empty_array); } // ---------- Markers ---------- @@ -203,7 +228,30 @@ export default class SmartChartStore extends BaseStore { @computed get markers_array() { - return barriersObjectToArray(this.markers); + let has_differing = false; + const markers_array = barriersObjectToArray(this.markers, []); + + if (this.markers_empty_array.length !== markers_array.length) { + has_differing = true; + } else { + this.markers_empty_array.forEach(marker => { + markers_array.forEach(next_marker => { + Object.keys(marker).forEach(key => { + if (marker[key] !== next_marker[key]) { + has_differing = true; + } + }); + }); + }); + } + + if (has_differing) { + this.markers_empty_array = []; + } else { + this.markers_empty_array.length = 0; + } + + return barriersObjectToArray(this.markers, this.markers_empty_array); } // ---------- Chart Settings ----------