|
1 | 1 | import _ from 'underscore'
|
2 | 2 |
|
3 |
| -export default class ActiveSymbols { |
4 |
| - constructor(activeSymbols) { |
5 |
| - this.activeSymbols = activeSymbols |
6 |
| - this.markets = {} |
7 |
| - this.submarkets = {} |
8 |
| - this.symbols = {} |
9 |
| - this.getMarkets() |
10 |
| - } |
11 |
| - getMarkets() { |
12 |
| - if (!_.isEmpty(this.markets)) { |
13 |
| - return this.markets |
14 |
| - } |
15 |
| - const markets = _.groupBy(this.activeSymbols, 'market') |
16 |
| - for (const marketName of Object.keys(markets)) { |
17 |
| - const marketSymbols = markets[marketName] |
18 |
| - const symbol = marketSymbols[0] |
19 |
| - this.markets[marketName] = { |
20 |
| - name: symbol.market_display_name, |
21 |
| - is_active: !symbol.is_trading_suspended && symbol.exchange_is_open, |
22 |
| - } |
23 |
| - this.getSubmarketsForMarket(marketName) |
24 |
| - } |
25 |
| - return this.markets |
26 |
| - } |
27 |
| - getSubmarketsForMarket(marketName) { |
28 |
| - const market = this.markets[marketName] |
29 |
| - market.submarkets = {} |
30 |
| - const submarkets = _.groupBy(_.groupBy(this.activeSymbols, 'market')[marketName], 'submarket') |
31 |
| - for (const submarketName of Object.keys(submarkets)) { |
32 |
| - const submarketSymbols = submarkets[submarketName] |
33 |
| - const symbol = submarketSymbols[0] |
34 |
| - this.submarkets[submarketName] = market.submarkets[submarketName] = { |
35 |
| - name: symbol.submarket_display_name, |
36 |
| - is_active: !symbol.is_trading_suspended && symbol.exchange_is_open, |
37 |
| - } |
38 |
| - this.getSymbolsForSubmarket(submarketName) |
| 3 | +let apiActiveSymbols |
| 4 | +let groupedMarkets |
| 5 | +let groupedSubmarkets |
| 6 | + |
| 7 | +const parsedMarkets = {} |
| 8 | +const parsedSubmarkets = {} |
| 9 | +const parsedSymbols = {} |
| 10 | + |
| 11 | +const parseSymbols = () => { |
| 12 | + for (const s of apiActiveSymbols) { |
| 13 | + const submarket = parsedSubmarkets[s.submarket] |
| 14 | + submarket.symbols = submarket.symbols || {} |
| 15 | + parsedSymbols[s.symbol.toLowerCase()] = submarket.symbols[s.symbol.toLowerCase()] = { |
| 16 | + ...s, |
| 17 | + display: s.display_name, |
| 18 | + is_active: !s.is_trading_suspended && s.exchange_is_open, |
39 | 19 | }
|
40 |
| - return market.submarkets |
41 | 20 | }
|
42 |
| - getSymbolsForSubmarket(submarketName) { |
43 |
| - const submarket = this.submarkets[submarketName] |
44 |
| - submarket.symbols = {} |
45 |
| - const symbols = _.groupBy(this.activeSymbols, 'submarket')[submarketName] |
46 |
| - for (const symbol of symbols) { |
47 |
| - this.symbols[symbol.symbol] = submarket.symbols[symbol.symbol] = { |
48 |
| - display: symbol.display_name, |
49 |
| - symbol_type: symbol.symbol_type, |
50 |
| - is_active: !symbol.is_trading_suspended && symbol.exchange_is_open, |
51 |
| - pip: symbol.pip, |
52 |
| - market: symbol.market, |
53 |
| - submarket: symbol.submarket, |
54 |
| - } |
| 21 | +} |
| 22 | + |
| 23 | +const parseSubmarkets = () => { |
| 24 | + for (const k of Object.keys(groupedSubmarkets)) { |
| 25 | + const symbol = groupedSubmarkets[k][0] |
| 26 | + const market = parsedMarkets[symbol.market] |
| 27 | + market.submarkets = market.submarkets || {} |
| 28 | + parsedSubmarkets[k] = market.submarkets[k] = { |
| 29 | + name: symbol.submarket_display_name, |
| 30 | + is_active: !symbol.is_trading_suspended && symbol.exchange_is_open, |
55 | 31 | }
|
56 |
| - return submarket.symbols |
57 | 32 | }
|
58 |
| - getSubmarkets() { |
59 |
| - if (!_.isEmpty(this.submarkets)) { |
60 |
| - return this.submarkets |
| 33 | +} |
| 34 | + |
| 35 | +const parseMarkets = () => { |
| 36 | + for (const k of Object.keys(groupedMarkets)) { |
| 37 | + const symbol = groupedMarkets[k][0] |
| 38 | + parsedMarkets[k] = { |
| 39 | + name: symbol.market_display_name, |
| 40 | + is_active: !symbol.is_trading_suspended && symbol.exchange_is_open, |
61 | 41 | }
|
62 |
| - this.getMarkets() |
63 |
| - return this.submarkets |
64 | 42 | }
|
65 |
| - getSymbols() { |
66 |
| - if (!_.isEmpty(this.symbols)) { |
67 |
| - return this.symbols |
68 |
| - } |
69 |
| - this.getMarkets() |
70 |
| - return this.symbols |
| 43 | +} |
| 44 | + |
| 45 | +export default class ActiveSymbols { |
| 46 | + constructor(activeSymbols) { |
| 47 | + apiActiveSymbols = activeSymbols |
| 48 | + groupedMarkets = _.groupBy(apiActiveSymbols, 'market') |
| 49 | + groupedSubmarkets = _.groupBy(apiActiveSymbols, 'submarket') |
| 50 | + parseMarkets() |
| 51 | + parseSubmarkets() |
| 52 | + parseSymbols() |
71 | 53 | }
|
72 |
| - getMarketsList() { |
73 |
| - const tradeMarketsList = {} |
74 |
| - _.extend(tradeMarketsList, this.getMarkets()) |
75 |
| - _.extend(tradeMarketsList, this.getSubmarkets()) |
76 |
| - return tradeMarketsList |
| 54 | + getMarkets() { |
| 55 | + return parsedMarkets |
77 | 56 | }
|
78 |
| - getTradeUnderlyings() { |
79 |
| - const tradeUnderlyings = {} |
80 |
| - const symbols = this.getSymbols() |
81 |
| - for (const key of Object.keys(symbols)) { |
82 |
| - const symbol = symbols[key] |
83 |
| - if (!tradeUnderlyings[symbol.market]) { |
84 |
| - tradeUnderlyings[symbol.market] = {} |
85 |
| - } |
86 |
| - if (!tradeUnderlyings[symbol.submarket]) { |
87 |
| - tradeUnderlyings[symbol.submarket] = {} |
88 |
| - } |
89 |
| - tradeUnderlyings[symbol.market][key] = symbol |
90 |
| - tradeUnderlyings[symbol.submarket][key] = symbol |
91 |
| - } |
92 |
| - return tradeUnderlyings |
| 57 | + getSymbols() { |
| 58 | + return parsedSymbols |
93 | 59 | }
|
94 | 60 | getSymbolNames() {
|
95 |
| - const symbols = _.clone(this.getSymbols()) |
| 61 | + const symbols = _.clone(parsedSymbols) |
96 | 62 | for (const key of Object.keys(symbols)) {
|
97 | 63 | symbols[key] = symbols[key].display
|
98 | 64 | }
|
|
0 commit comments