@oanda/labs-crowd-view-widget 1.0.51 → 1.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +212 -0
- package/dist/main/CrowdViewWidget/components/Chart/Chart.js +60 -21
- package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js +3 -3
- package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/chartOptions.js +208 -42
- package/dist/main/CrowdViewWidget/components/Chart/chartOptions.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/types.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js +25 -6
- package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/utils/chartUtils.js +12 -10
- package/dist/main/CrowdViewWidget/components/Chart/utils/chartUtils.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/utils/getChartStyles.js +27 -0
- package/dist/main/CrowdViewWidget/components/Chart/utils/getChartStyles.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Chart/utils/getGridLines.js +123 -0
- package/dist/main/CrowdViewWidget/components/Chart/utils/getGridLines.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Chart/utils/index.js +22 -0
- package/dist/main/CrowdViewWidget/components/Chart/utils/index.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/utils/processSentiments.js +28 -0
- package/dist/main/CrowdViewWidget/components/Chart/utils/processSentiments.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Legend/Legend.js +1 -1
- package/dist/main/CrowdViewWidget/components/Legend/Legend.js.map +1 -1
- package/dist/main/CrowdViewWidget/constants.js +13 -3
- package/dist/main/CrowdViewWidget/constants.js.map +1 -1
- package/dist/main/gql/getSentiments.js +11 -0
- package/dist/main/gql/getSentiments.js.map +1 -0
- package/dist/main/gql/types/gql.js +2 -1
- package/dist/main/gql/types/gql.js.map +1 -1
- package/dist/main/gql/types/graphql.js +162 -1
- package/dist/main/gql/types/graphql.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/Chart.js +63 -24
- package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js +3 -3
- package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/chartOptions.js +208 -43
- package/dist/module/CrowdViewWidget/components/Chart/chartOptions.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/types.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js +26 -7
- package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/utils/chartUtils.js +12 -10
- package/dist/module/CrowdViewWidget/components/Chart/utils/chartUtils.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/utils/getChartStyles.js +20 -0
- package/dist/module/CrowdViewWidget/components/Chart/utils/getChartStyles.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Chart/utils/getGridLines.js +116 -0
- package/dist/module/CrowdViewWidget/components/Chart/utils/getGridLines.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Chart/utils/index.js +2 -0
- package/dist/module/CrowdViewWidget/components/Chart/utils/index.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/utils/processSentiments.js +21 -0
- package/dist/module/CrowdViewWidget/components/Chart/utils/processSentiments.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Legend/Legend.js +1 -1
- package/dist/module/CrowdViewWidget/components/Legend/Legend.js.map +1 -1
- package/dist/module/CrowdViewWidget/constants.js +12 -2
- package/dist/module/CrowdViewWidget/constants.js.map +1 -1
- package/dist/module/gql/getSentiments.js +6 -0
- package/dist/module/gql/getSentiments.js.map +1 -0
- package/dist/module/gql/types/gql.js +2 -1
- package/dist/module/gql/types/gql.js.map +1 -1
- package/dist/module/gql/types/graphql.js +161 -0
- package/dist/module/gql/types/graphql.js.map +1 -1
- package/dist/types/CrowdViewWidget/components/Chart/types.d.ts +43 -0
- package/dist/types/CrowdViewWidget/components/Chart/utils/chartUtils.d.ts +2 -2
- package/dist/types/CrowdViewWidget/components/Chart/utils/getChartStyles.d.ts +10 -0
- package/dist/types/CrowdViewWidget/components/Chart/utils/getGridLines.d.ts +97 -0
- package/dist/types/CrowdViewWidget/components/Chart/utils/index.d.ts +2 -0
- package/dist/types/CrowdViewWidget/components/Chart/utils/processSentiments.d.ts +3 -0
- package/dist/types/CrowdViewWidget/constants.d.ts +11 -1
- package/dist/types/gql/getSentiments.d.ts +2 -0
- package/dist/types/gql/types/gql.d.ts +9 -0
- package/dist/types/gql/types/graphql.d.ts +36 -0
- package/package.json +3 -3
- package/src/CrowdViewWidget/components/Chart/Chart.tsx +86 -34
- package/src/CrowdViewWidget/components/Chart/ChartWithData.tsx +3 -3
- package/src/CrowdViewWidget/components/Chart/chartOptions.ts +242 -72
- package/src/CrowdViewWidget/components/Chart/types.ts +55 -0
- package/src/CrowdViewWidget/components/Chart/useCrowdViewData.ts +35 -3
- package/src/CrowdViewWidget/components/Chart/utils/chartUtils.ts +33 -14
- package/src/CrowdViewWidget/components/Chart/utils/getChartStyles.ts +42 -0
- package/src/CrowdViewWidget/components/Chart/utils/getGridLines.ts +148 -0
- package/src/CrowdViewWidget/components/Chart/utils/index.ts +2 -0
- package/src/CrowdViewWidget/components/Chart/utils/processSentiments.ts +42 -0
- package/src/CrowdViewWidget/components/Legend/Legend.tsx +1 -1
- package/src/CrowdViewWidget/constants.ts +17 -1
- package/src/gql/getSentiments.ts +25 -0
- package/src/gql/types/gql.ts +8 -0
- package/src/gql/types/graphql.ts +161 -0
- package/test/components/Chart/utils/chartUtils.test.ts +76 -2
- package/test/components/Chart/utils/getChartStyles.test.ts +64 -0
- package/test/components/Chart/utils/processSentiments.test.ts +130 -0
|
@@ -1,11 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
|
|
4
|
-
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
|
|
5
|
-
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
|
|
6
|
-
import { colorPalette, getGridLines, getLineCommons, themeColors } from '@oanda/labs-widget-common';
|
|
7
|
-
import { CHART_CONFIG } from '../../constants';
|
|
1
|
+
import chroma from 'chroma-js';
|
|
2
|
+
import { CHART_CONFIG, CHART_CONFIG_CALCULATED } from '../../constants';
|
|
8
3
|
import { formatXAxisLabel, getLabelData, getRectColor, getTooltipFormatter, isDifferenceGreaterThanTwoWeeks } from './utils/chartUtils';
|
|
4
|
+
import { getChartStyles } from './utils/getChartStyles';
|
|
5
|
+
import { getGridLines } from './utils/getGridLines';
|
|
9
6
|
export const getOption = (_ref, isDark, isDesktop, labelCallback) => {
|
|
10
7
|
let {
|
|
11
8
|
xAxisData,
|
|
@@ -14,53 +11,64 @@ export const getOption = (_ref, isDark, isDesktop, labelCallback) => {
|
|
|
14
11
|
bucketWidth,
|
|
15
12
|
buckets,
|
|
16
13
|
precision,
|
|
17
|
-
bookType
|
|
14
|
+
bookType,
|
|
15
|
+
sentiments
|
|
18
16
|
} = _ref;
|
|
19
17
|
let selectedPrice;
|
|
18
|
+
const {
|
|
19
|
+
sentimentLongColor,
|
|
20
|
+
sentimentShortColor,
|
|
21
|
+
candleLongColor,
|
|
22
|
+
candleShortColor,
|
|
23
|
+
sentimentAreaOpacity,
|
|
24
|
+
tooltipLinesColor,
|
|
25
|
+
sentimentLabelColor
|
|
26
|
+
} = getChartStyles(isDark);
|
|
20
27
|
const visibleXAxisData = xAxisData.slice(xAxisData.length * CHART_CONFIG.INITIAL_START_ZOOM / 100, xAxisData.length * CHART_CONFIG.INITIAL_END_ZOOM / 100);
|
|
21
28
|
const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(visibleXAxisData[0], visibleXAxisData[visibleXAxisData.length - 1]);
|
|
22
29
|
const labelsData = getLabelData({
|
|
23
30
|
xAxisData,
|
|
24
31
|
isGreaterThanTwoWeeks
|
|
25
32
|
});
|
|
26
|
-
const
|
|
33
|
+
const gridMainLines = getGridLines({
|
|
27
34
|
isDark,
|
|
28
|
-
|
|
29
|
-
chartHeight: CHART_CONFIG.HEIGHT,
|
|
30
|
-
xLabelsSize: CHART_CONFIG.X_LABEL_SIZE,
|
|
31
|
-
yLabelSize: isDesktop ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP : CHART_CONFIG.Y_LABEL_SIZE_MOBILE,
|
|
32
|
-
bottomLeftBox: false
|
|
35
|
+
isDesktop
|
|
33
36
|
});
|
|
34
37
|
return {
|
|
35
38
|
animation: false,
|
|
36
39
|
dataZoom: [{
|
|
40
|
+
id: 'main',
|
|
37
41
|
type: 'inside',
|
|
38
42
|
xAxisIndex: 0,
|
|
39
43
|
start: CHART_CONFIG.INITIAL_START_ZOOM,
|
|
40
|
-
end: CHART_CONFIG.INITIAL_END_ZOOM
|
|
44
|
+
end: CHART_CONFIG.INITIAL_END_ZOOM,
|
|
45
|
+
filterMode: 'filter'
|
|
46
|
+
}, {
|
|
47
|
+
id: 'sentiment',
|
|
48
|
+
type: 'inside',
|
|
49
|
+
xAxisIndex: 1,
|
|
50
|
+
start: CHART_CONFIG.INITIAL_START_ZOOM,
|
|
51
|
+
end: CHART_CONFIG.INITIAL_END_ZOOM,
|
|
52
|
+
filterMode: 'none'
|
|
41
53
|
}],
|
|
42
54
|
tooltip: {
|
|
43
55
|
trigger: 'axis',
|
|
44
56
|
axisPointer: {
|
|
45
57
|
type: 'cross',
|
|
46
58
|
axis: 'x',
|
|
59
|
+
lineStyle: {
|
|
60
|
+
color: tooltipLinesColor
|
|
61
|
+
},
|
|
47
62
|
crossStyle: {
|
|
48
|
-
color:
|
|
63
|
+
color: tooltipLinesColor
|
|
49
64
|
},
|
|
50
65
|
label: {
|
|
66
|
+
padding: 0,
|
|
67
|
+
lineHeight: 24,
|
|
51
68
|
formatter: params => {
|
|
52
|
-
if (params.axisDimension === 'y') {
|
|
69
|
+
if (params.axisDimension === 'y' && params.axisIndex === 0) {
|
|
53
70
|
selectedPrice = Number(params.value);
|
|
54
|
-
return Number(params.value).toFixed(precision);
|
|
55
|
-
}
|
|
56
|
-
if (params.axisDimension === 'x') {
|
|
57
|
-
const date = new Date(params.value);
|
|
58
|
-
return date.toLocaleString(undefined, {
|
|
59
|
-
hour: '2-digit',
|
|
60
|
-
minute: '2-digit',
|
|
61
|
-
day: 'numeric',
|
|
62
|
-
month: 'short'
|
|
63
|
-
});
|
|
71
|
+
return " ".concat(Number(params.value).toFixed(precision), " ");
|
|
64
72
|
}
|
|
65
73
|
return null;
|
|
66
74
|
}
|
|
@@ -77,8 +85,13 @@ export const getOption = (_ref, isDark, isDesktop, labelCallback) => {
|
|
|
77
85
|
bookType
|
|
78
86
|
})
|
|
79
87
|
},
|
|
80
|
-
xAxis: {
|
|
88
|
+
xAxis: [{
|
|
81
89
|
type: 'category',
|
|
90
|
+
name: 'xAxis-less-than-two-weeks',
|
|
91
|
+
nameTextStyle: {
|
|
92
|
+
fontSize: 0
|
|
93
|
+
},
|
|
94
|
+
id: 'main-xAxis',
|
|
82
95
|
data: xAxisData,
|
|
83
96
|
splitNumber: 1,
|
|
84
97
|
axisTick: {
|
|
@@ -89,9 +102,22 @@ export const getOption = (_ref, isDark, isDesktop, labelCallback) => {
|
|
|
89
102
|
margin: 0,
|
|
90
103
|
formatter: value => formatXAxisLabel(value, isGreaterThanTwoWeeks)
|
|
91
104
|
}
|
|
92
|
-
},
|
|
93
|
-
|
|
105
|
+
}, {
|
|
106
|
+
type: 'category',
|
|
107
|
+
gridIndex: 1,
|
|
108
|
+
show: false,
|
|
109
|
+
data: xAxisData,
|
|
110
|
+
splitNumber: 1,
|
|
111
|
+
axisTick: {
|
|
112
|
+
show: false
|
|
113
|
+
},
|
|
114
|
+
axisLabel: {
|
|
115
|
+
show: false
|
|
116
|
+
}
|
|
117
|
+
}],
|
|
118
|
+
yAxis: [{
|
|
94
119
|
type: 'value',
|
|
120
|
+
gridIndex: 0,
|
|
95
121
|
position: 'right',
|
|
96
122
|
min: val => val.min - bucketWidth * 2,
|
|
97
123
|
max: val => val.max + bucketWidth * 2,
|
|
@@ -107,16 +133,93 @@ export const getOption = (_ref, isDark, isDesktop, labelCallback) => {
|
|
|
107
133
|
margin: isDesktop ? 4 : 2,
|
|
108
134
|
formatter: value => value.toFixed(precision - 1)
|
|
109
135
|
}
|
|
136
|
+
}, {
|
|
137
|
+
type: 'value',
|
|
138
|
+
gridIndex: 1,
|
|
139
|
+
position: 'right',
|
|
140
|
+
min: CHART_CONFIG.SENTIMENT_MIN,
|
|
141
|
+
max: CHART_CONFIG.SENTIMENT_MAX,
|
|
142
|
+
interval: CHART_CONFIG.SENTIMENT_INTERVAL,
|
|
143
|
+
axisLine: {
|
|
144
|
+
show: false
|
|
145
|
+
},
|
|
146
|
+
axisTick: {
|
|
147
|
+
show: false
|
|
148
|
+
},
|
|
149
|
+
axisLabel: {
|
|
150
|
+
verticalAlignMaxLabel: 'top',
|
|
151
|
+
verticalAlignMinLabel: 'bottom',
|
|
152
|
+
lineHeight: 20,
|
|
153
|
+
margin: isDesktop ? 4 : 2,
|
|
154
|
+
rich: {
|
|
155
|
+
shortRect: {
|
|
156
|
+
backgroundColor: chroma(sentimentShortColor).alpha(0.3).css(),
|
|
157
|
+
borderColor: sentimentShortColor,
|
|
158
|
+
borderWidth: 1,
|
|
159
|
+
width: 8,
|
|
160
|
+
height: 8
|
|
161
|
+
},
|
|
162
|
+
longRect: {
|
|
163
|
+
backgroundColor: chroma(sentimentLongColor).alpha(0.3).css(),
|
|
164
|
+
borderColor: sentimentLongColor,
|
|
165
|
+
borderWidth: 1,
|
|
166
|
+
width: 8,
|
|
167
|
+
height: 8
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
formatter: value => {
|
|
171
|
+
if (value === CHART_CONFIG.SENTIMENT_MIN) {
|
|
172
|
+
return "{shortRect| } ".concat(labelCallback('short'));
|
|
173
|
+
}
|
|
174
|
+
if (value === CHART_CONFIG.SENTIMENT_MAX) {
|
|
175
|
+
return "{longRect| } ".concat(labelCallback('long'));
|
|
176
|
+
}
|
|
177
|
+
if (value === CHART_CONFIG.SENTIMENT_MAX / 2) {
|
|
178
|
+
return '50%';
|
|
179
|
+
}
|
|
180
|
+
return undefined;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
}],
|
|
184
|
+
axisPointer: {
|
|
185
|
+
link: [{
|
|
186
|
+
xAxisIndex: 'all'
|
|
187
|
+
}]
|
|
188
|
+
},
|
|
189
|
+
visualMap: {
|
|
190
|
+
show: false,
|
|
191
|
+
seriesId: 'sentiment',
|
|
192
|
+
dimension: 1,
|
|
193
|
+
pieces: [{
|
|
194
|
+
lt: CHART_CONFIG.SENTIMENT_MAX / 2,
|
|
195
|
+
color: sentimentShortColor
|
|
196
|
+
}, {
|
|
197
|
+
gte: CHART_CONFIG.SENTIMENT_MAX / 2,
|
|
198
|
+
lte: CHART_CONFIG.SENTIMENT_MAX,
|
|
199
|
+
color: sentimentLongColor
|
|
200
|
+
}, {
|
|
201
|
+
gt: CHART_CONFIG.SENTIMENT_MAX,
|
|
202
|
+
color: sentimentLongColor
|
|
203
|
+
}]
|
|
110
204
|
},
|
|
111
205
|
series: [{
|
|
112
206
|
type: 'candlestick',
|
|
113
207
|
id: 'candlestick',
|
|
208
|
+
gridIndex: 0,
|
|
209
|
+
xAxisIndex: 0,
|
|
210
|
+
yAxisIndex: 0,
|
|
114
211
|
data: candlesSeriesData,
|
|
115
212
|
itemStyle: {
|
|
116
|
-
color:
|
|
117
|
-
color0:
|
|
118
|
-
borderColor:
|
|
119
|
-
borderColor0:
|
|
213
|
+
color: chroma(candleShortColor).desaturate().css(),
|
|
214
|
+
color0: chroma(candleLongColor).desaturate().css(),
|
|
215
|
+
borderColor: candleShortColor,
|
|
216
|
+
borderColor0: candleLongColor
|
|
217
|
+
},
|
|
218
|
+
emphasis: {
|
|
219
|
+
itemStyle: {
|
|
220
|
+
color: candleShortColor,
|
|
221
|
+
color0: candleLongColor
|
|
222
|
+
}
|
|
120
223
|
},
|
|
121
224
|
markPoint: {
|
|
122
225
|
symbol: 'circle',
|
|
@@ -125,8 +228,11 @@ export const getOption = (_ref, isDark, isDesktop, labelCallback) => {
|
|
|
125
228
|
}
|
|
126
229
|
}, {
|
|
127
230
|
type: 'custom',
|
|
231
|
+
gridIndex: 0,
|
|
128
232
|
name: 'heatmap',
|
|
129
233
|
id: 'heatmap',
|
|
234
|
+
xAxisIndex: 0,
|
|
235
|
+
yAxisIndex: 0,
|
|
130
236
|
silent: true,
|
|
131
237
|
clip: true,
|
|
132
238
|
renderItem: (_params, api) => {
|
|
@@ -163,24 +269,83 @@ export const getOption = (_ref, isDark, isDesktop, labelCallback) => {
|
|
|
163
269
|
};
|
|
164
270
|
},
|
|
165
271
|
data: orderPositionBooks
|
|
272
|
+
}, {
|
|
273
|
+
type: 'line',
|
|
274
|
+
name: 'sentiment-short',
|
|
275
|
+
id: 'sentiment',
|
|
276
|
+
xAxisIndex: 1,
|
|
277
|
+
yAxisIndex: 1,
|
|
278
|
+
data: sentiments,
|
|
279
|
+
showSymbol: false,
|
|
280
|
+
symbol: 'none',
|
|
281
|
+
lineStyle: {
|
|
282
|
+
width: 3,
|
|
283
|
+
opacity: 1
|
|
284
|
+
},
|
|
285
|
+
areaStyle: {
|
|
286
|
+
color: sentimentShortColor,
|
|
287
|
+
opacity: sentimentAreaOpacity
|
|
288
|
+
},
|
|
289
|
+
emphasis: {
|
|
290
|
+
areaStyle: {
|
|
291
|
+
opacity: 0
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
stack: 'sentiment'
|
|
295
|
+
}, {
|
|
296
|
+
type: 'line',
|
|
297
|
+
name: 'sentiment-long',
|
|
298
|
+
id: 'sentiment-long',
|
|
299
|
+
xAxisIndex: 1,
|
|
300
|
+
yAxisIndex: 1,
|
|
301
|
+
data: sentiments.map(sentiment => [sentiment[0], sentiment[2]]),
|
|
302
|
+
symbol: 'none',
|
|
303
|
+
lineStyle: {
|
|
304
|
+
color: 'transparent',
|
|
305
|
+
width: 0
|
|
306
|
+
},
|
|
307
|
+
areaStyle: {
|
|
308
|
+
color: sentimentLongColor,
|
|
309
|
+
opacity: sentimentAreaOpacity
|
|
310
|
+
},
|
|
311
|
+
stack: 'sentiment',
|
|
312
|
+
emphasis: {
|
|
313
|
+
disabled: true
|
|
314
|
+
},
|
|
315
|
+
tooltip: {
|
|
316
|
+
show: false
|
|
317
|
+
}
|
|
166
318
|
}],
|
|
167
319
|
grid: [{
|
|
168
320
|
name: 'main-grid',
|
|
321
|
+
id: 'main-grid',
|
|
322
|
+
height: "".concat(CHART_CONFIG.MAIN_HEIGHT, "px"),
|
|
169
323
|
top: '0px',
|
|
170
324
|
left: '0px',
|
|
171
325
|
right: "".concat(isDesktop ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP : CHART_CONFIG.Y_LABEL_SIZE_MOBILE, "px"),
|
|
172
326
|
bottom: "".concat(CHART_CONFIG.X_LABEL_SIZE, "px")
|
|
327
|
+
}, {
|
|
328
|
+
name: 'sentiment-grid',
|
|
329
|
+
id: 'sentiment-grid',
|
|
330
|
+
height: "".concat(CHART_CONFIG.SENTIMENT_HEIGHT, "px"),
|
|
331
|
+
bottom: "0px",
|
|
332
|
+
left: '0px',
|
|
333
|
+
right: "".concat(isDesktop ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP : CHART_CONFIG.Y_LABEL_SIZE_MOBILE, "px")
|
|
173
334
|
}],
|
|
174
|
-
graphic: [...
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
335
|
+
graphic: [...gridMainLines, {
|
|
336
|
+
type: 'text',
|
|
337
|
+
silent: true,
|
|
338
|
+
z: 1,
|
|
339
|
+
left: 4,
|
|
340
|
+
bottom: CHART_CONFIG_CALCULATED.SENTIMENT_TEXT_POSITION,
|
|
341
|
+
style: {
|
|
342
|
+
text: "".concat(labelCallback('sentiment'), ":"),
|
|
343
|
+
fontFamily: 'Sofia W03',
|
|
344
|
+
fontSize: 14,
|
|
345
|
+
fontWeight: 'bold',
|
|
346
|
+
fill: sentimentLabelColor
|
|
182
347
|
}
|
|
183
|
-
}
|
|
348
|
+
}]
|
|
184
349
|
};
|
|
185
350
|
};
|
|
186
351
|
//# sourceMappingURL=chartOptions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chartOptions.js","names":["colorPalette","getGridLines","getLineCommons","themeColors","CHART_CONFIG","formatXAxisLabel","getLabelData","getRectColor","getTooltipFormatter","isDifferenceGreaterThanTwoWeeks","getOption","_ref","isDark","isDesktop","labelCallback","xAxisData","candlesSeriesData","orderPositionBooks","bucketWidth","buckets","precision","bookType","selectedPrice","visibleXAxisData","slice","length","INITIAL_START_ZOOM","INITIAL_END_ZOOM","isGreaterThanTwoWeeks","labelsData","gridLines","chartWidth","WIDTH","chartHeight","HEIGHT","xLabelsSize","X_LABEL_SIZE","yLabelSize","Y_LABEL_SIZE_DESKTOP","Y_LABEL_SIZE_MOBILE","bottomLeftBox","animation","dataZoom","type","xAxisIndex","start","end","tooltip","trigger","axisPointer","axis","crossStyle","color","orange","borderPrimary","light","label","formatter","params","axisDimension","Number","value","toFixed","date","Date","toLocaleString","undefined","hour","minute","day","month","confine","xAxis","data","splitNumber","axisTick","show","axisLabel","padding","margin","yAxis","position","min","val","max","axisLine","showMaxLabel","showMinLabel","series","id","itemStyle","raspberryLight","color0","bottleGreenDark","bottleGreenLight","borderColor","borderColor0","markPoint","symbol","symbolSize","name","silent","clip","renderItem","_params","api","xVal","bucketIndex","metaValues","rectWidth","rectHeight","size","items","map","_ref2","price","sentiment","coord","shape","x","y","width","height","style","fill","emphasisDisabled","children","grid","top","left","right","concat","bottom","graphic","_objectSpread","x1","y1","x2","y2"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/chartOptions.ts"],"sourcesContent":["import {\n colorPalette,\n getGridLines,\n getLineCommons,\n themeColors,\n} from '@oanda/labs-widget-common';\n\nimport { CHART_CONFIG } from '../../constants';\nimport type { Bucket, GetOptionType } from './types';\nimport {\n formatXAxisLabel,\n getLabelData,\n getRectColor,\n getTooltipFormatter,\n isDifferenceGreaterThanTwoWeeks,\n} from './utils/chartUtils';\n\n// @ts-expect-error\nexport const getOption: GetOptionType = (\n {\n xAxisData,\n candlesSeriesData,\n orderPositionBooks,\n bucketWidth,\n buckets,\n precision,\n bookType,\n },\n isDark,\n isDesktop,\n labelCallback\n) => {\n let selectedPrice: number;\n const visibleXAxisData = xAxisData.slice(\n (xAxisData.length * CHART_CONFIG.INITIAL_START_ZOOM) / 100,\n (xAxisData.length * CHART_CONFIG.INITIAL_END_ZOOM) / 100\n );\n\n const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(\n visibleXAxisData[0],\n visibleXAxisData[visibleXAxisData.length - 1]\n );\n\n const labelsData = getLabelData({\n xAxisData,\n isGreaterThanTwoWeeks,\n });\n\n const gridLines = getGridLines({\n isDark,\n chartWidth: CHART_CONFIG.WIDTH,\n chartHeight: CHART_CONFIG.HEIGHT,\n xLabelsSize: CHART_CONFIG.X_LABEL_SIZE,\n yLabelSize: isDesktop\n ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP\n : CHART_CONFIG.Y_LABEL_SIZE_MOBILE,\n bottomLeftBox: false,\n });\n\n return {\n animation: false,\n dataZoom: [\n {\n type: 'inside',\n xAxisIndex: 0,\n start: CHART_CONFIG.INITIAL_START_ZOOM,\n end: CHART_CONFIG.INITIAL_END_ZOOM,\n },\n ],\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'cross',\n axis: 'x',\n crossStyle: {\n color: isDark ? colorPalette.orange : themeColors.borderPrimary.light,\n },\n label: {\n formatter: (params) => {\n if (params.axisDimension === 'y') {\n selectedPrice = Number(params.value);\n return Number(params.value).toFixed(precision);\n }\n\n if (params.axisDimension === 'x') {\n const date = new Date(params.value as string);\n return date.toLocaleString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n day: 'numeric',\n month: 'short',\n });\n }\n\n return null;\n },\n },\n },\n confine: true,\n formatter: (params) =>\n getTooltipFormatter({\n params,\n buckets,\n bucketWidth,\n selectedPrice,\n labelCallback,\n precision,\n bookType,\n }),\n },\n xAxis: {\n type: 'category',\n data: xAxisData,\n splitNumber: 1,\n axisTick: {\n show: false,\n },\n axisLabel: {\n padding: [8, 16, 8, 16],\n margin: 0,\n formatter: (value) => formatXAxisLabel(value, isGreaterThanTwoWeeks),\n },\n },\n yAxis: {\n type: 'value',\n position: 'right',\n min: (val) => val.min - bucketWidth * 2,\n max: (val) => val.max + bucketWidth * 2,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n showMaxLabel: false,\n showMinLabel: false,\n margin: isDesktop ? 4 : 2,\n formatter: (value: number) => value.toFixed(precision - 1),\n },\n },\n series: [\n {\n type: 'candlestick',\n id: 'candlestick',\n data: candlesSeriesData,\n itemStyle: {\n color: isDark ? colorPalette.orange : colorPalette.raspberryLight,\n color0: isDark\n ? colorPalette.bottleGreenDark\n : colorPalette.bottleGreenLight,\n borderColor: isDark\n ? colorPalette.orange\n : colorPalette.raspberryLight,\n borderColor0: isDark\n ? colorPalette.bottleGreenDark\n : colorPalette.bottleGreenLight,\n },\n\n markPoint: {\n symbol: 'circle',\n symbolSize: 0,\n data: labelsData,\n },\n },\n {\n type: 'custom',\n name: 'heatmap',\n id: 'heatmap',\n silent: true,\n clip: true,\n renderItem: (_params, api) => {\n const xVal = api.value(0);\n const bucketIndex = api.value(2) as number;\n const metaValues = buckets[bucketIndex];\n\n const [rectWidth, rectHeight] = api.size!([\n 0,\n bucketWidth,\n ]) as number[];\n\n const items = metaValues.map(({ price, sentiment }: Bucket) => {\n const start = api.coord([xVal, price]);\n\n return {\n type: 'rect',\n shape: {\n x: start[0] - rectWidth / 2,\n y: start[1] - rectHeight,\n width: rectWidth + 1,\n height: rectHeight,\n },\n style: {\n fill: getRectColor(sentiment, isDark),\n },\n silent: true,\n emphasisDisabled: true,\n };\n });\n\n return {\n type: 'group',\n children: items,\n silent: true,\n emphasisDisabled: true,\n };\n },\n data: orderPositionBooks,\n },\n ],\n grid: [\n {\n name: 'main-grid',\n top: '0px',\n left: '0px',\n right: `${isDesktop ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP : CHART_CONFIG.Y_LABEL_SIZE_MOBILE}px`,\n bottom: `${CHART_CONFIG.X_LABEL_SIZE}px`,\n },\n ],\n graphic: [\n ...gridLines,\n {\n ...getLineCommons(isDark as boolean),\n top: 0,\n right: 0,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n },\n },\n ],\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"chartOptions.js","names":["chroma","CHART_CONFIG","CHART_CONFIG_CALCULATED","formatXAxisLabel","getLabelData","getRectColor","getTooltipFormatter","isDifferenceGreaterThanTwoWeeks","getChartStyles","getGridLines","getOption","_ref","isDark","isDesktop","labelCallback","xAxisData","candlesSeriesData","orderPositionBooks","bucketWidth","buckets","precision","bookType","sentiments","selectedPrice","sentimentLongColor","sentimentShortColor","candleLongColor","candleShortColor","sentimentAreaOpacity","tooltipLinesColor","sentimentLabelColor","visibleXAxisData","slice","length","INITIAL_START_ZOOM","INITIAL_END_ZOOM","isGreaterThanTwoWeeks","labelsData","gridMainLines","animation","dataZoom","id","type","xAxisIndex","start","end","filterMode","tooltip","trigger","axisPointer","axis","lineStyle","color","crossStyle","label","padding","lineHeight","formatter","params","axisDimension","axisIndex","Number","value","concat","toFixed","confine","xAxis","name","nameTextStyle","fontSize","data","splitNumber","axisTick","show","axisLabel","margin","gridIndex","yAxis","position","min","val","max","axisLine","showMaxLabel","showMinLabel","SENTIMENT_MIN","SENTIMENT_MAX","interval","SENTIMENT_INTERVAL","verticalAlignMaxLabel","verticalAlignMinLabel","rich","shortRect","backgroundColor","alpha","css","borderColor","borderWidth","width","height","longRect","undefined","link","visualMap","seriesId","dimension","pieces","lt","gte","lte","gt","series","yAxisIndex","itemStyle","desaturate","color0","borderColor0","emphasis","markPoint","symbol","symbolSize","silent","clip","renderItem","_params","api","xVal","bucketIndex","metaValues","rectWidth","rectHeight","size","items","map","_ref2","price","sentiment","coord","shape","x","y","style","fill","emphasisDisabled","children","showSymbol","opacity","areaStyle","stack","disabled","grid","MAIN_HEIGHT","top","left","right","Y_LABEL_SIZE_DESKTOP","Y_LABEL_SIZE_MOBILE","bottom","X_LABEL_SIZE","SENTIMENT_HEIGHT","graphic","z","SENTIMENT_TEXT_POSITION","text","fontFamily","fontWeight"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/chartOptions.ts"],"sourcesContent":["import chroma from 'chroma-js';\n\nimport { CHART_CONFIG, CHART_CONFIG_CALCULATED } from '../../constants';\nimport type { Bucket, GetOptionType, TooltipParam } from './types';\nimport {\n formatXAxisLabel,\n getLabelData,\n getRectColor,\n getTooltipFormatter,\n isDifferenceGreaterThanTwoWeeks,\n} from './utils/chartUtils';\nimport { getChartStyles } from './utils/getChartStyles';\nimport { getGridLines } from './utils/getGridLines';\n\n// @ts-expect-error\nexport const getOption: GetOptionType = (\n {\n xAxisData,\n candlesSeriesData,\n orderPositionBooks,\n bucketWidth,\n buckets,\n precision,\n bookType,\n sentiments,\n },\n isDark,\n isDesktop,\n labelCallback\n) => {\n let selectedPrice: number;\n const {\n sentimentLongColor,\n sentimentShortColor,\n candleLongColor,\n candleShortColor,\n sentimentAreaOpacity,\n tooltipLinesColor,\n sentimentLabelColor,\n } = getChartStyles(isDark);\n\n const visibleXAxisData = xAxisData.slice(\n (xAxisData.length * CHART_CONFIG.INITIAL_START_ZOOM) / 100,\n (xAxisData.length * CHART_CONFIG.INITIAL_END_ZOOM) / 100\n );\n\n const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(\n visibleXAxisData[0],\n visibleXAxisData[visibleXAxisData.length - 1]\n );\n\n const labelsData = getLabelData({\n xAxisData,\n isGreaterThanTwoWeeks,\n });\n\n const gridMainLines = getGridLines({\n isDark,\n isDesktop,\n });\n\n return {\n animation: false,\n dataZoom: [\n {\n id: 'main',\n type: 'inside',\n xAxisIndex: 0,\n start: CHART_CONFIG.INITIAL_START_ZOOM,\n end: CHART_CONFIG.INITIAL_END_ZOOM,\n filterMode: 'filter',\n },\n {\n id: 'sentiment',\n type: 'inside',\n xAxisIndex: 1,\n start: CHART_CONFIG.INITIAL_START_ZOOM,\n end: CHART_CONFIG.INITIAL_END_ZOOM,\n filterMode: 'none',\n },\n ],\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n type: 'cross',\n axis: 'x',\n lineStyle: {\n color: tooltipLinesColor,\n },\n crossStyle: {\n color: tooltipLinesColor,\n },\n label: {\n padding: 0,\n lineHeight: 24,\n formatter: (params) => {\n if (params.axisDimension === 'y' && params.axisIndex === 0) {\n selectedPrice = Number(params.value);\n return ` ${Number(params.value).toFixed(precision)} `;\n }\n\n return null;\n },\n },\n },\n confine: true,\n formatter: (params: TooltipParam[]) =>\n getTooltipFormatter({\n params,\n buckets,\n bucketWidth,\n selectedPrice,\n labelCallback,\n precision,\n bookType,\n }),\n },\n xAxis: [\n {\n type: 'category',\n name: 'xAxis-less-than-two-weeks',\n nameTextStyle: {\n fontSize: 0,\n },\n id: 'main-xAxis',\n data: xAxisData,\n splitNumber: 1,\n axisTick: {\n show: false,\n },\n axisLabel: {\n padding: [8, 16, 8, 16],\n margin: 0,\n formatter: (value) => formatXAxisLabel(value, isGreaterThanTwoWeeks),\n },\n },\n {\n type: 'category',\n gridIndex: 1,\n show: false,\n data: xAxisData,\n splitNumber: 1,\n axisTick: {\n show: false,\n },\n axisLabel: {\n show: false,\n },\n },\n ],\n yAxis: [\n {\n type: 'value',\n gridIndex: 0,\n position: 'right',\n min: (val) => val.min - bucketWidth * 2,\n max: (val) => val.max + bucketWidth * 2,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n showMaxLabel: false,\n showMinLabel: false,\n margin: isDesktop ? 4 : 2,\n formatter: (value: number) => value.toFixed(precision - 1),\n },\n },\n {\n type: 'value',\n gridIndex: 1,\n position: 'right',\n min: CHART_CONFIG.SENTIMENT_MIN,\n max: CHART_CONFIG.SENTIMENT_MAX,\n interval: CHART_CONFIG.SENTIMENT_INTERVAL,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n verticalAlignMaxLabel: 'top',\n verticalAlignMinLabel: 'bottom',\n lineHeight: 20,\n margin: isDesktop ? 4 : 2,\n rich: {\n shortRect: {\n backgroundColor: chroma(sentimentShortColor).alpha(0.3).css(),\n borderColor: sentimentShortColor,\n borderWidth: 1,\n width: 8,\n height: 8,\n },\n longRect: {\n backgroundColor: chroma(sentimentLongColor).alpha(0.3).css(),\n borderColor: sentimentLongColor,\n borderWidth: 1,\n width: 8,\n height: 8,\n },\n },\n formatter: (value: number) => {\n if (value === CHART_CONFIG.SENTIMENT_MIN) {\n return `{shortRect| } ${labelCallback('short')}`;\n }\n\n if (value === CHART_CONFIG.SENTIMENT_MAX) {\n return `{longRect| } ${labelCallback('long')}`;\n }\n\n if (value === CHART_CONFIG.SENTIMENT_MAX / 2) {\n return '50%';\n }\n\n return undefined;\n },\n },\n },\n ],\n axisPointer: {\n link: [\n {\n xAxisIndex: 'all',\n },\n ],\n },\n visualMap: {\n show: false,\n seriesId: 'sentiment',\n dimension: 1,\n pieces: [\n {\n lt: CHART_CONFIG.SENTIMENT_MAX / 2,\n color: sentimentShortColor,\n },\n {\n gte: CHART_CONFIG.SENTIMENT_MAX / 2,\n lte: CHART_CONFIG.SENTIMENT_MAX,\n color: sentimentLongColor,\n },\n {\n gt: CHART_CONFIG.SENTIMENT_MAX,\n color: sentimentLongColor,\n },\n ],\n },\n series: [\n {\n type: 'candlestick',\n id: 'candlestick',\n gridIndex: 0,\n xAxisIndex: 0,\n yAxisIndex: 0,\n data: candlesSeriesData,\n itemStyle: {\n color: chroma(candleShortColor).desaturate().css(),\n color0: chroma(candleLongColor).desaturate().css(),\n borderColor: candleShortColor,\n borderColor0: candleLongColor,\n },\n emphasis: {\n itemStyle: {\n color: candleShortColor,\n color0: candleLongColor,\n },\n },\n markPoint: {\n symbol: 'circle',\n symbolSize: 0,\n data: labelsData,\n },\n },\n {\n type: 'custom',\n gridIndex: 0,\n name: 'heatmap',\n id: 'heatmap',\n xAxisIndex: 0,\n yAxisIndex: 0,\n silent: true,\n clip: true,\n renderItem: (_params, api) => {\n const xVal = api.value(0);\n const bucketIndex = api.value(2) as number;\n const metaValues = buckets[bucketIndex];\n\n const [rectWidth, rectHeight] = api.size!([\n 0,\n bucketWidth,\n ]) as number[];\n\n const items = metaValues.map(({ price, sentiment }: Bucket) => {\n const start = api.coord([xVal, price]);\n\n return {\n type: 'rect',\n shape: {\n x: start[0] - rectWidth / 2,\n y: start[1] - rectHeight,\n width: rectWidth + 1,\n height: rectHeight,\n },\n style: {\n fill: getRectColor(sentiment, isDark),\n },\n silent: true,\n emphasisDisabled: true,\n };\n });\n\n return {\n type: 'group',\n children: items,\n silent: true,\n emphasisDisabled: true,\n };\n },\n data: orderPositionBooks,\n },\n {\n type: 'line',\n name: 'sentiment-short',\n id: 'sentiment',\n xAxisIndex: 1,\n yAxisIndex: 1,\n data: sentiments,\n showSymbol: false,\n symbol: 'none',\n lineStyle: {\n width: 3,\n opacity: 1,\n },\n areaStyle: {\n color: sentimentShortColor,\n opacity: sentimentAreaOpacity,\n },\n emphasis: {\n areaStyle: {\n opacity: 0,\n },\n },\n stack: 'sentiment',\n },\n {\n type: 'line',\n name: 'sentiment-long',\n id: 'sentiment-long',\n xAxisIndex: 1,\n yAxisIndex: 1,\n data: sentiments.map((sentiment) => [sentiment[0], sentiment[2]]),\n symbol: 'none',\n lineStyle: {\n color: 'transparent',\n width: 0,\n },\n areaStyle: {\n color: sentimentLongColor,\n opacity: sentimentAreaOpacity,\n },\n stack: 'sentiment',\n emphasis: {\n disabled: true,\n },\n tooltip: {\n show: false,\n },\n },\n ],\n grid: [\n {\n name: 'main-grid',\n id: 'main-grid',\n height: `${CHART_CONFIG.MAIN_HEIGHT}px`,\n top: '0px',\n left: '0px',\n right: `${isDesktop ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP : CHART_CONFIG.Y_LABEL_SIZE_MOBILE}px`,\n bottom: `${CHART_CONFIG.X_LABEL_SIZE}px`,\n },\n {\n name: 'sentiment-grid',\n id: 'sentiment-grid',\n height: `${CHART_CONFIG.SENTIMENT_HEIGHT}px`,\n bottom: `0px`,\n left: '0px',\n right: `${isDesktop ? CHART_CONFIG.Y_LABEL_SIZE_DESKTOP : CHART_CONFIG.Y_LABEL_SIZE_MOBILE}px`,\n },\n ],\n graphic: [\n ...gridMainLines,\n {\n type: 'text',\n silent: true,\n z: 1,\n left: 4,\n bottom: CHART_CONFIG_CALCULATED.SENTIMENT_TEXT_POSITION,\n style: {\n text: `${labelCallback('sentiment')}:`,\n fontFamily: 'Sofia W03',\n fontSize: 14,\n fontWeight: 'bold',\n fill: sentimentLabelColor,\n },\n },\n ],\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/types.ts"],"sourcesContent":["import type { EChartsOption } from 'echarts';\n\nimport type {\n BookType,\n Division,\n Granularity,\n} from '../../../gql/types/graphql';\nimport type { InstrumentId } from '../../types';\n\nexport interface Bucket {\n price: number;\n sentiment: number;\n}\n\nexport interface UseCrowdViewDataProps {\n instrument: InstrumentId;\n bookType: BookType;\n division: Division;\n granularity: Granularity;\n}\n\ninterface CrowdViewData {\n xAxisData: string[];\n // [open, close, low, high]\n candlesSeriesData: [number, number, number, number][];\n // [time, price, index]\n orderPositionBooks: [string, number | null, number][];\n bucketWidth: number;\n buckets: Bucket[][];\n precision: number;\n bookType: BookType;\n}\n\nexport interface UseCrowdViewDataReturn {\n data: CrowdViewData | null;\n loading: boolean;\n error: boolean;\n}\n\nexport type GetOptionType = (\n props: CrowdViewData,\n isDark: boolean,\n isDesktop: boolean,\n labelCallback: (key: string, params?: Record<string, unknown>) => string\n) => EChartsOption;\n\nexport interface ChartProps {\n data: CrowdViewData;\n isDesktop: boolean;\n}\n\nexport interface ChartWithDataProps {\n bookType: BookType;\n division: Division;\n instrument: InstrumentId;\n granularity: Granularity;\n}\n\nexport interface GetLabelsDataProps {\n xAxisData: string[];\n isGreaterThanTwoWeeks: boolean;\n}\n"],"mappings":"","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/types.ts"],"sourcesContent":["import type { EChartsOption } from 'echarts';\n\nimport type {\n BookType,\n Division,\n Granularity,\n} from '../../../gql/types/graphql';\nimport type { InstrumentId } from '../../types';\n\nexport interface Bucket {\n price: number;\n sentiment: number;\n}\n\nexport interface UseCrowdViewDataProps {\n instrument: InstrumentId;\n bookType: BookType;\n division: Division;\n granularity: Granularity;\n}\n\nexport type ProcessedSentiment = [string, number, number];\n\ninterface CrowdViewData {\n xAxisData: string[];\n // [open, close, low, high]\n candlesSeriesData: [number, number, number, number][];\n // [time, price, index]\n orderPositionBooks: [string, number | null, number][];\n bucketWidth: number;\n buckets: Bucket[][];\n precision: number;\n bookType: BookType;\n sentiments: ProcessedSentiment[];\n}\n\nexport interface UseCrowdViewDataReturn {\n data: CrowdViewData | null;\n loading: boolean;\n error: boolean;\n}\n\nexport type GetOptionType = (\n props: CrowdViewData,\n isDark: boolean,\n isDesktop: boolean,\n labelCallback: (key: string, params?: Record<string, unknown>) => string\n) => EChartsOption;\n\nexport interface ChartProps {\n data: CrowdViewData;\n isDesktop: boolean;\n}\n\nexport interface ChartWithDataProps {\n bookType: BookType;\n division: Division;\n instrument: InstrumentId;\n granularity: Granularity;\n}\n\nexport interface GetLabelsDataProps {\n xAxisData: string[];\n isGreaterThanTwoWeeks: boolean;\n}\n\ninterface BaseTooltipParam {\n [key: string]: unknown;\n seriesId?: string;\n seriesName?: string;\n seriesType?: string;\n axisValue?: string | number;\n axisValueLabel?: string;\n axisDimension?: string;\n axisIndex?: number;\n value: unknown;\n}\n\nexport type TooltipParam =\n | (BaseTooltipParam & {\n seriesId: 'candlestick';\n value: [number, number, number, number, number]; // [0, open, close, low, high]\n })\n | (BaseTooltipParam & {\n seriesId: 'heatmap';\n value: [string, number, number]; // [time, price, index]\n })\n | (BaseTooltipParam & {\n seriesId: 'sentiment';\n value: [string, number, number]; // [time, shortPercent, longPercent]\n });\n\nexport interface DataZoomBatchItem {\n [key: string]: unknown;\n start: number;\n end: number;\n dataZoomId?: string;\n}\n\nexport interface DataZoomEvent {\n [key: string]: unknown;\n type: 'datazoom';\n batch?: DataZoomBatchItem[];\n}\n\nexport interface DataZoomItem {\n startValue: number;\n endValue: number;\n}\n\nexport type DataZoomArray = Array<DataZoomItem>;\n\nexport interface XAxisItem {\n name?: string;\n}\n\nexport type XAxisArray = Array<XAxisItem>;\n"],"mappings":"","ignoreList":[]}
|
|
@@ -2,9 +2,10 @@ import { useQuery } from '@apollo/client';
|
|
|
2
2
|
import { useMemo } from 'react';
|
|
3
3
|
import { getOrderPositionBooks } from '../../../gql/getOrderPositionBooks';
|
|
4
4
|
import { getPriceCandles } from '../../../gql/getPriceCandles';
|
|
5
|
+
import { getSentiments } from '../../../gql/getSentiments';
|
|
5
6
|
import { BookType, DataSource, Division } from '../../../gql/types/graphql';
|
|
6
7
|
import { BUCKET_CONFIG, INSTRUMENTS_CONFIG } from '../../constants';
|
|
7
|
-
import { getTargetBucketWidth, getTimeSpanForGranularity, processBuckets, processOrderPositionBooks, processPriceCandles, validateData } from './utils';
|
|
8
|
+
import { getTargetBucketWidth, getTimeSpanForGranularity, processBuckets, processOrderPositionBooks, processPriceCandles, processSentiments, validateData } from './utils';
|
|
8
9
|
export const useCrowdViewData = _ref => {
|
|
9
10
|
let {
|
|
10
11
|
instrument,
|
|
@@ -54,9 +55,24 @@ export const useCrowdViewData = _ref => {
|
|
|
54
55
|
fetchPolicy: 'no-cache',
|
|
55
56
|
skip: priceCandlesLoading || !!priceCandlesError
|
|
56
57
|
});
|
|
57
|
-
const
|
|
58
|
+
const {
|
|
59
|
+
loading: sentimentsLoading,
|
|
60
|
+
data: sentimentsData,
|
|
61
|
+
error: sentimentsError
|
|
62
|
+
} = useQuery(getSentiments, {
|
|
63
|
+
variables: {
|
|
64
|
+
instrument: INSTRUMENTS_CONFIG[instrument].v20name,
|
|
65
|
+
granularity,
|
|
66
|
+
timeSpan: getTimeSpanForGranularity(granularity)
|
|
67
|
+
},
|
|
68
|
+
fetchPolicy: 'no-cache',
|
|
69
|
+
skip: priceCandlesLoading || !!priceCandlesError
|
|
70
|
+
});
|
|
71
|
+
const loading = priceCandlesLoading || orderPositionLoading || sentimentsLoading;
|
|
72
|
+
const xAxisData = candles.map(candle => (candle === null || candle === void 0 ? void 0 : candle.point) || '');
|
|
58
73
|
const orderPositionBooks = useMemo(() => processOrderPositionBooks(orderPositionData, candleMap), [orderPositionData, candleMap]);
|
|
59
74
|
const buckets = useMemo(() => processBuckets(orderPositionData, targetBucketWidth), [orderPositionData, targetBucketWidth]);
|
|
75
|
+
const sentiments = useMemo(() => processSentiments(sentimentsData, xAxisData), [sentimentsData, xAxisData]);
|
|
60
76
|
const error = useMemo(() => {
|
|
61
77
|
if (priceCandlesError) {
|
|
62
78
|
return new Error("Price candles error: ".concat(priceCandlesError.message));
|
|
@@ -64,16 +80,18 @@ export const useCrowdViewData = _ref => {
|
|
|
64
80
|
if (orderPositionError) {
|
|
65
81
|
return new Error("Order position error: ".concat(orderPositionError.message));
|
|
66
82
|
}
|
|
83
|
+
if (sentimentsError) {
|
|
84
|
+
return new Error("Sentiments error: ".concat(sentimentsError.message));
|
|
85
|
+
}
|
|
67
86
|
if (loading) {
|
|
68
87
|
return null;
|
|
69
88
|
}
|
|
70
89
|
return validateData(priceCandlesData, orderPositionData, hasValidCandles);
|
|
71
|
-
}, [priceCandlesError, orderPositionError, loading, priceCandlesData, orderPositionData, hasValidCandles]);
|
|
90
|
+
}, [priceCandlesError, orderPositionError, sentimentsError, loading, priceCandlesData, orderPositionData, hasValidCandles]);
|
|
72
91
|
const data = useMemo(() => {
|
|
73
|
-
if (!priceCandlesData || !orderPositionData || error) {
|
|
92
|
+
if (!priceCandlesData || !orderPositionData || !sentimentsData || error) {
|
|
74
93
|
return null;
|
|
75
94
|
}
|
|
76
|
-
const xAxisData = candles.map(candle => (candle === null || candle === void 0 ? void 0 : candle.point) || '');
|
|
77
95
|
const candlesSeriesData = candles.map(candle => [(candle === null || candle === void 0 ? void 0 : candle.open) || 0, (candle === null || candle === void 0 ? void 0 : candle.close) || 0, (candle === null || candle === void 0 ? void 0 : candle.low) || 0, (candle === null || candle === void 0 ? void 0 : candle.high) || 0]);
|
|
78
96
|
return {
|
|
79
97
|
buckets,
|
|
@@ -82,9 +100,10 @@ export const useCrowdViewData = _ref => {
|
|
|
82
100
|
orderPositionBooks,
|
|
83
101
|
bucketWidth: targetBucketWidth,
|
|
84
102
|
precision: INSTRUMENTS_CONFIG[instrument].precision,
|
|
85
|
-
bookType
|
|
103
|
+
bookType,
|
|
104
|
+
sentiments
|
|
86
105
|
};
|
|
87
|
-
}, [priceCandlesData, orderPositionData, error, candles, buckets, orderPositionBooks, targetBucketWidth, instrument, bookType]);
|
|
106
|
+
}, [priceCandlesData, orderPositionData, sentimentsData, error, candles, buckets, xAxisData, orderPositionBooks, targetBucketWidth, instrument, bookType, sentiments]);
|
|
88
107
|
return {
|
|
89
108
|
data,
|
|
90
109
|
loading,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCrowdViewData.js","names":["useQuery","useMemo","getOrderPositionBooks","getPriceCandles","BookType","DataSource","Division","BUCKET_CONFIG","INSTRUMENTS_CONFIG","getTargetBucketWidth","getTimeSpanForGranularity","processBuckets","processOrderPositionBooks","processPriceCandles","validateData","useCrowdViewData","_ref","instrument","bookType","division","granularity","dataSource","Ogm","Oj","Mt5","V20","loading","priceCandlesLoading","data","priceCandlesData","error","priceCandlesError","variables","mt5name","v20name","timeSpan","fetchPolicy","priceCandlesProcessed","minPrice","maxPrice","hasValidCandles","candleMap","candles","targetBucketWidth","maxBookPrice","PRICE_PADDING_MULTIPLIER","minBookPrice","orderPositionLoading","orderPositionData","orderPositionError","Order","skip","orderPositionBooks","buckets","Error","concat","message","xAxisData","map","candle","point","candlesSeriesData","open","close","low","high","bucketWidth","precision"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/useCrowdViewData.ts"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport { useMemo } from 'react';\n\nimport { getOrderPositionBooks } from '../../../gql/getOrderPositionBooks';\nimport { getPriceCandles } from '../../../gql/getPriceCandles';\nimport type {\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables,\n GetPriceCandlesQuery,\n GetPriceCandlesQueryVariables,\n} from '../../../gql/types/graphql';\nimport { BookType, DataSource, Division } from '../../../gql/types/graphql';\nimport { BUCKET_CONFIG, INSTRUMENTS_CONFIG } from '../../constants';\nimport type { UseCrowdViewDataProps, UseCrowdViewDataReturn } from './types';\nimport {\n getTargetBucketWidth,\n getTimeSpanForGranularity,\n processBuckets,\n processOrderPositionBooks,\n processPriceCandles,\n validateData,\n} from './utils';\n\nexport const useCrowdViewData = ({\n instrument,\n bookType,\n division,\n granularity,\n}: UseCrowdViewDataProps): UseCrowdViewDataReturn => {\n const dataSource =\n division === Division.Ogm || division === Division.Oj\n ? DataSource.Mt5\n : DataSource.V20;\n const {\n loading: priceCandlesLoading,\n data: priceCandlesData,\n error: priceCandlesError,\n } = useQuery<GetPriceCandlesQuery, GetPriceCandlesQueryVariables>(\n getPriceCandles,\n {\n variables: {\n dataSource,\n division,\n instrument:\n dataSource === DataSource.Mt5\n ? INSTRUMENTS_CONFIG[instrument].mt5name\n : INSTRUMENTS_CONFIG[instrument].v20name,\n granularity,\n timeSpan: getTimeSpanForGranularity(granularity),\n },\n fetchPolicy: 'no-cache',\n }\n );\n\n const priceCandlesProcessed = useMemo(\n () => processPriceCandles(priceCandlesData),\n [priceCandlesData]\n );\n\n const { minPrice, maxPrice, hasValidCandles, candleMap, candles } =\n priceCandlesProcessed;\n\n const targetBucketWidth = getTargetBucketWidth(granularity, instrument);\n\n const maxBookPrice = useMemo(\n () => maxPrice + targetBucketWidth * BUCKET_CONFIG.PRICE_PADDING_MULTIPLIER,\n [maxPrice, targetBucketWidth]\n );\n\n const minBookPrice = useMemo(\n () => minPrice - targetBucketWidth * BUCKET_CONFIG.PRICE_PADDING_MULTIPLIER,\n [minPrice, targetBucketWidth]\n );\n\n const {\n loading: orderPositionLoading,\n data: orderPositionData,\n error: orderPositionError,\n } = useQuery<GetOrderPositionBooksQuery, GetOrderPositionBooksQueryVariables>(\n getOrderPositionBooks,\n {\n variables: {\n instrument: INSTRUMENTS_CONFIG[instrument].v20name,\n bookType: bookType || BookType.Order,\n timeSpan: getTimeSpanForGranularity(granularity),\n granularity,\n maxBookPrice,\n minBookPrice,\n },\n fetchPolicy: 'no-cache',\n skip: priceCandlesLoading || !!priceCandlesError,\n }\n );\n\n const loading = priceCandlesLoading || orderPositionLoading;\n\n const orderPositionBooks = useMemo(\n () => processOrderPositionBooks(orderPositionData, candleMap),\n [orderPositionData, candleMap]\n );\n\n const buckets = useMemo(\n () => processBuckets(orderPositionData, targetBucketWidth),\n [orderPositionData, targetBucketWidth]\n );\n\n const error = useMemo((): Error | null => {\n if (priceCandlesError) {\n return new Error(`Price candles error: ${priceCandlesError.message}`);\n }\n if (orderPositionError) {\n return new Error(`Order position error: ${orderPositionError.message}`);\n }\n if (loading) {\n return null;\n }\n return validateData(priceCandlesData, orderPositionData, hasValidCandles);\n }, [\n priceCandlesError,\n orderPositionError,\n loading,\n priceCandlesData,\n orderPositionData,\n hasValidCandles,\n ]);\n\n const data = useMemo(() => {\n if (!priceCandlesData || !orderPositionData || error) {\n return null;\n }\n\n const xAxisData = candles.map((candle) => candle?.point || '');\n const candlesSeriesData: [number, number, number, number][] = candles.map(\n (candle) => [\n candle?.open || 0,\n candle?.close || 0,\n candle?.low || 0,\n candle?.high || 0,\n ]\n );\n\n return {\n buckets,\n xAxisData,\n candlesSeriesData,\n orderPositionBooks,\n bucketWidth: targetBucketWidth,\n precision: INSTRUMENTS_CONFIG[instrument].precision,\n bookType,\n };\n }, [\n priceCandlesData,\n orderPositionData,\n error,\n candles,\n buckets,\n orderPositionBooks,\n targetBucketWidth,\n instrument,\n bookType,\n ]);\n\n return {\n data,\n loading,\n error: !!error,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useCrowdViewData.js","names":["useQuery","useMemo","getOrderPositionBooks","getPriceCandles","getSentiments","BookType","DataSource","Division","BUCKET_CONFIG","INSTRUMENTS_CONFIG","getTargetBucketWidth","getTimeSpanForGranularity","processBuckets","processOrderPositionBooks","processPriceCandles","processSentiments","validateData","useCrowdViewData","_ref","instrument","bookType","division","granularity","dataSource","Ogm","Oj","Mt5","V20","loading","priceCandlesLoading","data","priceCandlesData","error","priceCandlesError","variables","mt5name","v20name","timeSpan","fetchPolicy","priceCandlesProcessed","minPrice","maxPrice","hasValidCandles","candleMap","candles","targetBucketWidth","maxBookPrice","PRICE_PADDING_MULTIPLIER","minBookPrice","orderPositionLoading","orderPositionData","orderPositionError","Order","skip","sentimentsLoading","sentimentsData","sentimentsError","xAxisData","map","candle","point","orderPositionBooks","buckets","sentiments","Error","concat","message","candlesSeriesData","open","close","low","high","bucketWidth","precision"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/useCrowdViewData.ts"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport { useMemo } from 'react';\n\nimport { getOrderPositionBooks } from '../../../gql/getOrderPositionBooks';\nimport { getPriceCandles } from '../../../gql/getPriceCandles';\nimport { getSentiments } from '../../../gql/getSentiments';\nimport type {\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables,\n GetPriceCandlesQuery,\n GetPriceCandlesQueryVariables,\n GetSentimentsQuery,\n GetSentimentsQueryVariables,\n} from '../../../gql/types/graphql';\nimport { BookType, DataSource, Division } from '../../../gql/types/graphql';\nimport { BUCKET_CONFIG, INSTRUMENTS_CONFIG } from '../../constants';\nimport type { UseCrowdViewDataProps, UseCrowdViewDataReturn } from './types';\nimport {\n getTargetBucketWidth,\n getTimeSpanForGranularity,\n processBuckets,\n processOrderPositionBooks,\n processPriceCandles,\n processSentiments,\n validateData,\n} from './utils';\n\nexport const useCrowdViewData = ({\n instrument,\n bookType,\n division,\n granularity,\n}: UseCrowdViewDataProps): UseCrowdViewDataReturn => {\n const dataSource =\n division === Division.Ogm || division === Division.Oj\n ? DataSource.Mt5\n : DataSource.V20;\n const {\n loading: priceCandlesLoading,\n data: priceCandlesData,\n error: priceCandlesError,\n } = useQuery<GetPriceCandlesQuery, GetPriceCandlesQueryVariables>(\n getPriceCandles,\n {\n variables: {\n dataSource,\n division,\n instrument:\n dataSource === DataSource.Mt5\n ? INSTRUMENTS_CONFIG[instrument].mt5name\n : INSTRUMENTS_CONFIG[instrument].v20name,\n granularity,\n timeSpan: getTimeSpanForGranularity(granularity),\n },\n fetchPolicy: 'no-cache',\n }\n );\n\n const priceCandlesProcessed = useMemo(\n () => processPriceCandles(priceCandlesData),\n [priceCandlesData]\n );\n\n const { minPrice, maxPrice, hasValidCandles, candleMap, candles } =\n priceCandlesProcessed;\n\n const targetBucketWidth = getTargetBucketWidth(granularity, instrument);\n\n const maxBookPrice = useMemo(\n () => maxPrice + targetBucketWidth * BUCKET_CONFIG.PRICE_PADDING_MULTIPLIER,\n [maxPrice, targetBucketWidth]\n );\n\n const minBookPrice = useMemo(\n () => minPrice - targetBucketWidth * BUCKET_CONFIG.PRICE_PADDING_MULTIPLIER,\n [minPrice, targetBucketWidth]\n );\n\n const {\n loading: orderPositionLoading,\n data: orderPositionData,\n error: orderPositionError,\n } = useQuery<GetOrderPositionBooksQuery, GetOrderPositionBooksQueryVariables>(\n getOrderPositionBooks,\n {\n variables: {\n instrument: INSTRUMENTS_CONFIG[instrument].v20name,\n bookType: bookType || BookType.Order,\n timeSpan: getTimeSpanForGranularity(granularity),\n granularity,\n maxBookPrice,\n minBookPrice,\n },\n fetchPolicy: 'no-cache',\n skip: priceCandlesLoading || !!priceCandlesError,\n }\n );\n\n const {\n loading: sentimentsLoading,\n data: sentimentsData,\n error: sentimentsError,\n } = useQuery<GetSentimentsQuery, GetSentimentsQueryVariables>(getSentiments, {\n variables: {\n instrument: INSTRUMENTS_CONFIG[instrument].v20name,\n granularity,\n timeSpan: getTimeSpanForGranularity(granularity),\n },\n fetchPolicy: 'no-cache',\n skip: priceCandlesLoading || !!priceCandlesError,\n });\n\n const loading =\n priceCandlesLoading || orderPositionLoading || sentimentsLoading;\n const xAxisData = candles.map((candle) => candle?.point || '');\n\n const orderPositionBooks = useMemo(\n () => processOrderPositionBooks(orderPositionData, candleMap),\n [orderPositionData, candleMap]\n );\n\n const buckets = useMemo(\n () => processBuckets(orderPositionData, targetBucketWidth),\n [orderPositionData, targetBucketWidth]\n );\n\n const sentiments = useMemo(\n () => processSentiments(sentimentsData, xAxisData),\n [sentimentsData, xAxisData]\n );\n\n const error = useMemo((): Error | null => {\n if (priceCandlesError) {\n return new Error(`Price candles error: ${priceCandlesError.message}`);\n }\n if (orderPositionError) {\n return new Error(`Order position error: ${orderPositionError.message}`);\n }\n if (sentimentsError) {\n return new Error(`Sentiments error: ${sentimentsError.message}`);\n }\n if (loading) {\n return null;\n }\n return validateData(priceCandlesData, orderPositionData, hasValidCandles);\n }, [\n priceCandlesError,\n orderPositionError,\n sentimentsError,\n loading,\n priceCandlesData,\n orderPositionData,\n hasValidCandles,\n ]);\n\n const data = useMemo(() => {\n if (!priceCandlesData || !orderPositionData || !sentimentsData || error) {\n return null;\n }\n\n const candlesSeriesData: [number, number, number, number][] = candles.map(\n (candle) => [\n candle?.open || 0,\n candle?.close || 0,\n candle?.low || 0,\n candle?.high || 0,\n ]\n );\n\n return {\n buckets,\n xAxisData,\n candlesSeriesData,\n orderPositionBooks,\n bucketWidth: targetBucketWidth,\n precision: INSTRUMENTS_CONFIG[instrument].precision,\n bookType,\n sentiments,\n };\n }, [\n priceCandlesData,\n orderPositionData,\n sentimentsData,\n error,\n candles,\n buckets,\n xAxisData,\n orderPositionBooks,\n targetBucketWidth,\n instrument,\n bookType,\n sentiments,\n ]);\n\n return {\n data,\n loading,\n error: !!error,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -20,7 +20,7 @@ export const getLabelData = _ref => {
|
|
|
20
20
|
day: isGreaterThanTwoWeeks ? 'numeric' : undefined
|
|
21
21
|
}),
|
|
22
22
|
xAxis: item,
|
|
23
|
-
y: CHART_CONFIG.
|
|
23
|
+
y: CHART_CONFIG.MAIN_HEIGHT + CHART_CONFIG.X_LABEL_SIZE - 22,
|
|
24
24
|
silent: true,
|
|
25
25
|
emphasis: {
|
|
26
26
|
disabled: true
|
|
@@ -60,7 +60,6 @@ export const getRectColor = (sentiment, isDark) => {
|
|
|
60
60
|
return sentiment < 0 ? getGradientColor(sentiment * -1, colorPalette.short[0], colorPalette.short[1]) : getGradientColor(sentiment, colorPalette.long[0], colorPalette.long[1]);
|
|
61
61
|
};
|
|
62
62
|
export const getTooltipFormatter = _ref2 => {
|
|
63
|
-
var _booksParam$value;
|
|
64
63
|
let {
|
|
65
64
|
params,
|
|
66
65
|
buckets,
|
|
@@ -70,17 +69,19 @@ export const getTooltipFormatter = _ref2 => {
|
|
|
70
69
|
bookType,
|
|
71
70
|
labelCallback
|
|
72
71
|
} = _ref2;
|
|
73
|
-
|
|
74
|
-
|
|
72
|
+
if (!params || !Array.isArray(params) || params.length === 0) {
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
const candleParam = params.find(series => series.seriesId === 'candlestick');
|
|
76
|
+
const booksParam = params.find(series => series.seriesId === 'heatmap');
|
|
77
|
+
const sentimentParam = params.find(series => series.seriesId === 'sentiment');
|
|
78
|
+
if (!candleParam) {
|
|
75
79
|
return undefined;
|
|
76
80
|
}
|
|
77
|
-
const candleParam = arr[0];
|
|
78
|
-
const booksParam = arr[1];
|
|
79
81
|
const time = new Date(candleParam.axisValue);
|
|
80
82
|
const candleData = candleParam.value;
|
|
81
|
-
const
|
|
82
|
-
const
|
|
83
|
-
const selectedBuckets = buckets[bucketsIndex];
|
|
83
|
+
const bucketsIndex = booksParam === null || booksParam === void 0 ? void 0 : booksParam.value[2];
|
|
84
|
+
const selectedBuckets = bucketsIndex !== undefined ? buckets[bucketsIndex] : undefined;
|
|
84
85
|
const matchedBucket = selectedBuckets === null || selectedBuckets === void 0 ? void 0 : selectedBuckets.find(_ref3 => {
|
|
85
86
|
let {
|
|
86
87
|
price
|
|
@@ -91,6 +92,7 @@ export const getTooltipFormatter = _ref2 => {
|
|
|
91
92
|
if (!showCandles && !matchedBucket) {
|
|
92
93
|
return undefined;
|
|
93
94
|
}
|
|
95
|
+
const showSentiment = !!(sentimentParam !== null && sentimentParam !== void 0 && sentimentParam.value[1]) && !!(sentimentParam !== null && sentimentParam !== void 0 && sentimentParam.value[2]);
|
|
94
96
|
return "<p>".concat(time.toLocaleString(undefined, {
|
|
95
97
|
hour: '2-digit',
|
|
96
98
|
minute: '2-digit',
|
|
@@ -98,7 +100,7 @@ export const getTooltipFormatter = _ref2 => {
|
|
|
98
100
|
day: 'numeric',
|
|
99
101
|
month: 'numeric',
|
|
100
102
|
timeZoneName: 'short'
|
|
101
|
-
}), "</p><br />\n").concat(showCandles ? "<p><b>".concat(labelCallback('candle'), ":</b></p>\n<p>").concat(labelCallback('open_price'), ": ").concat(candleData[1], " </p>\n<p>").concat(labelCallback('close_price'), ": ").concat(candleData[2], " </p>\n<p>").concat(labelCallback('low'), ": ").concat(candleData[3], " </p>\n<p>").concat(labelCallback('high'), ": ").concat(candleData[4], " </p>\n") : '', "\n").concat(matchedBucket ? "<br /><p><b>".concat(labelCallback(bookType === BookType.Order ? 'orders' : 'positions'), ":</b></p>\n<p>").concat(labelCallback('price_range'), ": ").concat(matchedBucket.price.toFixed(precision - 1), " - ").concat(Number(matchedBucket.price + bucketWidth).toFixed(precision - 1), " </p>\n<p>").concat(matchedBucket.sentiment < 0 ? labelCallback(bookType === BookType.Order ? 'sell_overbalance' : 'short_overbalance') : labelCallback(bookType === BookType.Order ? 'buy_overbalance' : 'long_overbalance'), ": ").concat(Math.abs(matchedBucket.sentiment), "% </p>") : '');
|
|
103
|
+
}), "</p><br />\n").concat(showCandles ? "<p><b>".concat(labelCallback('candle'), ":</b></p>\n<p>").concat(labelCallback('open_price'), ": ").concat(candleData[1], " </p>\n<p>").concat(labelCallback('close_price'), ": ").concat(candleData[2], " </p>\n<p>").concat(labelCallback('low'), ": ").concat(candleData[3], " </p>\n<p>").concat(labelCallback('high'), ": ").concat(candleData[4], " </p>\n") : '', "\n").concat(matchedBucket ? "<br /><p><b>".concat(labelCallback(bookType === BookType.Order ? 'orders' : 'positions'), ":</b></p>\n<p>").concat(labelCallback('price_range'), ": ").concat(matchedBucket.price.toFixed(precision - 1), " - ").concat(Number(matchedBucket.price + bucketWidth).toFixed(precision - 1), " </p>\n<p>").concat(matchedBucket.sentiment < 0 ? labelCallback(bookType === BookType.Order ? 'sell_overbalance' : 'short_overbalance') : labelCallback(bookType === BookType.Order ? 'buy_overbalance' : 'long_overbalance'), ": ").concat(Math.abs(matchedBucket.sentiment), "% </p>") : '').concat(showSentiment && sentimentParam ? "<br /><p><b>".concat(labelCallback('sentiment'), ":</b></p>\n<p>").concat(labelCallback('long'), ": ").concat(sentimentParam.value[2].toFixed(2), "% </p>\n<p>").concat(labelCallback('short'), ": ").concat(sentimentParam.value[1].toFixed(2), "% </p>") : '');
|
|
102
104
|
};
|
|
103
105
|
export const formatXAxisLabel = (value, isGreaterThanTwoWeeks) => {
|
|
104
106
|
const date = new Date(value);
|