@oanda/labs-crowd-view-widget 1.0.54 → 1.0.55

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.
Files changed (168) hide show
  1. package/CHANGELOG.md +224 -0
  2. package/dist/main/CrowdViewWidget/components/Chart/Chart.js +37 -56
  3. package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  4. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js +20 -7
  5. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  6. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.js +15 -9
  7. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.js.map +1 -1
  8. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js +6 -6
  9. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js.map +1 -1
  10. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js +41 -13
  11. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js.map +1 -1
  12. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js +159 -0
  13. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js.map +1 -0
  14. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.js +7 -14
  15. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.js.map +1 -1
  16. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.js +20 -2
  17. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.js.map +1 -1
  18. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.js +13 -5
  19. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.js.map +1 -1
  20. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js +10 -3
  21. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js.map +1 -1
  22. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js +20 -5
  23. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js.map +1 -1
  24. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js +19 -28
  25. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js.map +1 -1
  26. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/index.js +11 -0
  27. package/dist/main/CrowdViewWidget/components/Chart/chartOptions/index.js.map +1 -1
  28. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.js +18 -0
  29. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.js.map +1 -0
  30. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getLabelData.js +1 -20
  31. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getLabelData.js.map +1 -1
  32. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js +21 -9
  33. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js.map +1 -1
  34. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.js +59 -0
  35. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.js.map +1 -0
  36. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.js +34 -0
  37. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.js.map +1 -0
  38. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/index.js +33 -0
  39. package/dist/main/CrowdViewWidget/components/Chart/chartUtils/index.js.map +1 -1
  40. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js +19 -0
  41. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js.map +1 -0
  42. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/index.js +11 -0
  43. package/dist/main/CrowdViewWidget/components/Chart/dataUtils/index.js.map +1 -1
  44. package/dist/main/CrowdViewWidget/components/Chart/getOption.js +33 -21
  45. package/dist/main/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
  46. package/dist/main/CrowdViewWidget/components/Chart/types.js.map +1 -1
  47. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js +7 -4
  48. package/dist/main/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
  49. package/dist/main/CrowdViewWidget/components/Legend/Legend.js +1 -1
  50. package/dist/main/CrowdViewWidget/components/Legend/Legend.js.map +1 -1
  51. package/dist/main/CrowdViewWidget/components/Legend/LegendBar.js +11 -1
  52. package/dist/main/CrowdViewWidget/components/Legend/LegendBar.js.map +1 -1
  53. package/dist/main/CrowdViewWidget/constants.js +13 -5
  54. package/dist/main/CrowdViewWidget/constants.js.map +1 -1
  55. package/dist/main/CrowdViewWidget/selectConfig.js +0 -6
  56. package/dist/main/CrowdViewWidget/selectConfig.js.map +1 -1
  57. package/dist/main/translations/sources/en.json +2 -1
  58. package/dist/module/CrowdViewWidget/components/Chart/Chart.js +38 -56
  59. package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  60. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js +19 -6
  61. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  62. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.js +15 -9
  63. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.js.map +1 -1
  64. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js +6 -6
  65. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.js.map +1 -1
  66. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js +41 -13
  67. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getGridLines.js.map +1 -1
  68. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js +151 -0
  69. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.js.map +1 -0
  70. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.js +7 -14
  71. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.js.map +1 -1
  72. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.js +20 -2
  73. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.js.map +1 -1
  74. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.js +13 -5
  75. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.js.map +1 -1
  76. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js +10 -3
  77. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.js.map +1 -1
  78. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js +21 -6
  79. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.js.map +1 -1
  80. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js +19 -28
  81. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.js.map +1 -1
  82. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/index.js +1 -0
  83. package/dist/module/CrowdViewWidget/components/Chart/chartOptions/index.js.map +1 -1
  84. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.js +11 -0
  85. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.js.map +1 -0
  86. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getLabelData.js +1 -20
  87. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getLabelData.js.map +1 -1
  88. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js +21 -9
  89. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.js.map +1 -1
  90. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.js +52 -0
  91. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.js.map +1 -0
  92. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.js +27 -0
  93. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.js.map +1 -0
  94. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/index.js +3 -0
  95. package/dist/module/CrowdViewWidget/components/Chart/chartUtils/index.js.map +1 -1
  96. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js +12 -0
  97. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.js.map +1 -0
  98. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/index.js +1 -0
  99. package/dist/module/CrowdViewWidget/components/Chart/dataUtils/index.js.map +1 -1
  100. package/dist/module/CrowdViewWidget/components/Chart/getOption.js +34 -22
  101. package/dist/module/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
  102. package/dist/module/CrowdViewWidget/components/Chart/types.js.map +1 -1
  103. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js +8 -5
  104. package/dist/module/CrowdViewWidget/components/Chart/useCrowdViewData.js.map +1 -1
  105. package/dist/module/CrowdViewWidget/components/Legend/Legend.js +1 -1
  106. package/dist/module/CrowdViewWidget/components/Legend/Legend.js.map +1 -1
  107. package/dist/module/CrowdViewWidget/components/Legend/LegendBar.js +11 -1
  108. package/dist/module/CrowdViewWidget/components/Legend/LegendBar.js.map +1 -1
  109. package/dist/module/CrowdViewWidget/constants.js +13 -5
  110. package/dist/module/CrowdViewWidget/constants.js.map +1 -1
  111. package/dist/module/CrowdViewWidget/selectConfig.js +0 -6
  112. package/dist/module/CrowdViewWidget/selectConfig.js.map +1 -1
  113. package/dist/module/translations/sources/en.json +2 -1
  114. package/dist/types/CrowdViewWidget/components/Chart/Chart.d.ts +1 -1
  115. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.d.ts +5 -1
  116. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getGridLines.d.ts +2 -1
  117. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.d.ts +8 -0
  118. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.d.ts +2 -3
  119. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.d.ts +2 -1
  120. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.d.ts +2 -1
  121. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.d.ts +3 -1
  122. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.d.ts +1 -3
  123. package/dist/types/CrowdViewWidget/components/Chart/chartOptions/index.d.ts +1 -0
  124. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.d.ts +1 -0
  125. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/getLabelData.d.ts +1 -16
  126. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.d.ts +3 -1
  127. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.d.ts +4 -0
  128. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.d.ts +3 -0
  129. package/dist/types/CrowdViewWidget/components/Chart/chartUtils/index.d.ts +3 -0
  130. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.d.ts +2 -0
  131. package/dist/types/CrowdViewWidget/components/Chart/dataUtils/index.d.ts +1 -0
  132. package/dist/types/CrowdViewWidget/components/Chart/types.d.ts +5 -0
  133. package/dist/types/CrowdViewWidget/constants.d.ts +12 -4
  134. package/package.json +3 -3
  135. package/src/CrowdViewWidget/components/Chart/Chart.tsx +70 -79
  136. package/src/CrowdViewWidget/components/Chart/ChartWithData.tsx +31 -13
  137. package/src/CrowdViewWidget/components/Chart/chartOptions/getDataZoomConfig.ts +11 -2
  138. package/src/CrowdViewWidget/components/Chart/chartOptions/getGridConfig.ts +6 -6
  139. package/src/CrowdViewWidget/components/Chart/chartOptions/getGridLines.ts +48 -6
  140. package/src/CrowdViewWidget/components/Chart/chartOptions/getLabelsConfig.ts +191 -0
  141. package/src/CrowdViewWidget/components/Chart/chartOptions/getSeriesCandlestickConfig.ts +7 -15
  142. package/src/CrowdViewWidget/components/Chart/chartOptions/getSeriesHeatmapConfig.ts +22 -1
  143. package/src/CrowdViewWidget/components/Chart/chartOptions/getSeriesSentimentConfig.ts +13 -4
  144. package/src/CrowdViewWidget/components/Chart/chartOptions/getTooltipConfig.ts +12 -1
  145. package/src/CrowdViewWidget/components/Chart/chartOptions/getXAxisConfig.ts +55 -30
  146. package/src/CrowdViewWidget/components/Chart/chartOptions/getYAxisConfig.ts +13 -30
  147. package/src/CrowdViewWidget/components/Chart/chartOptions/index.ts +1 -0
  148. package/src/CrowdViewWidget/components/Chart/chartUtils/formatXAxisAdditionalLabel.ts +13 -0
  149. package/src/CrowdViewWidget/components/Chart/chartUtils/getLabelData.ts +11 -35
  150. package/src/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.ts +40 -11
  151. package/src/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.ts +75 -0
  152. package/src/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.ts +37 -0
  153. package/src/CrowdViewWidget/components/Chart/chartUtils/index.ts +3 -0
  154. package/src/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.ts +13 -0
  155. package/src/CrowdViewWidget/components/Chart/dataUtils/index.ts +1 -0
  156. package/src/CrowdViewWidget/components/Chart/getOption.ts +41 -17
  157. package/src/CrowdViewWidget/components/Chart/types.ts +5 -0
  158. package/src/CrowdViewWidget/components/Chart/useCrowdViewData.ts +12 -5
  159. package/src/CrowdViewWidget/components/Legend/Legend.tsx +1 -1
  160. package/src/CrowdViewWidget/components/Legend/LegendBar.tsx +17 -1
  161. package/src/CrowdViewWidget/constants.ts +12 -4
  162. package/src/CrowdViewWidget/selectConfig.ts +0 -8
  163. package/src/translations/sources/en.json +2 -1
  164. package/test/components/Chart/utils/chartUtils.test.ts +13 -2
  165. package/test/components/Chart/utils/handleLabelUpdate.test.ts +419 -0
  166. package/test/components/Chart/utils/handleTooltipUpdate.test.ts +140 -0
  167. package/test/components/Legend.test.tsx +3 -3
  168. package/test/components/LegendBar.test.tsx +22 -20
@@ -15,6 +15,14 @@ const calculateBucketDisplayPrecision = bucketWidth => {
15
15
  const findSeriesParam = (params, seriesId) => {
16
16
  return params.find(series => series.seriesId === seriesId);
17
17
  };
18
+ const findSentimentSeriesParam = (params, sentimentLongs, sentimentShorts) => {
19
+ var _sentimentLongs$index, _sentimentShorts$inde;
20
+ const index = params[0].dataIndex;
21
+ return {
22
+ sentimentLong: (_sentimentLongs$index = sentimentLongs[index]) !== null && _sentimentLongs$index !== void 0 ? _sentimentLongs$index : null,
23
+ sentimentShort: (_sentimentShorts$inde = sentimentShorts[index]) !== null && _sentimentShorts$inde !== void 0 ? _sentimentShorts$inde : null
24
+ };
25
+ };
18
26
  const getSentimentOverbalanceLabel = (sentiment, bookType) => {
19
27
  if (sentiment < 0) {
20
28
  return bookType === BookType.Order ? 'sell_overbalance' : 'short_overbalance';
@@ -40,12 +48,11 @@ const formatBookData = _ref => {
40
48
  const sentimentValue = Math.abs(matchedBucket.sentiment).toFixed(bucketDisplayPrecision);
41
49
  return "<br /><p><b>".concat(labelCallback(bookLabelKey), ":</b></p>\n<p>").concat(labelCallback('price_range'), ": ").concat(priceRangeStart, " - ").concat(priceRangeEnd, " </p>\n<p>").concat(labelCallback(sentimentLabel), ": ").concat(sentimentValue, "% </p>");
42
50
  };
43
- const formatSentimentData = (sentimentParam, labelCallback) => {
44
- const [, shortPercent, longPercent] = sentimentParam.value;
45
- return "<br /><p><b>".concat(labelCallback('sentiment'), ":</b></p>\n<p>").concat(labelCallback('long'), ": ").concat(longPercent.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </p>\n<p>").concat(labelCallback('short'), ": ").concat(shortPercent.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </p>");
51
+ const formatSentimentData = (sentimentLong, sentimentShort, labelCallback) => {
52
+ return "<br /><p><b>".concat(labelCallback('sentiment'), ":</b></p>\n<p>").concat(labelCallback('long'), ": ").concat(sentimentLong.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </p>\n<p>").concat(labelCallback('short'), ": ").concat(sentimentShort.toFixed(SENTIMENT_DISPLAY_PRECISION), "% </p>");
46
53
  };
47
- const hasValidCandleData = candleData => !!candleData[1] && !!candleData[2] && !!candleData[3] && !!candleData[3];
48
- const hasValidSentimentData = sentimentParam => !!(sentimentParam !== null && sentimentParam !== void 0 && sentimentParam.value[1]) && !!(sentimentParam !== null && sentimentParam !== void 0 && sentimentParam.value[2]);
54
+ const hasValidCandleData = candleData => !!candleData[1] && !!candleData[2] && !!candleData[3] && !!candleData[4];
55
+ const hasValidSentimentData = (sentimentLong, sentimentShort) => sentimentLong !== null && sentimentShort !== null;
49
56
  const findMatchingBucket = (buckets, bucketsIndex, selectedPrice, bucketWidth) => {
50
57
  if (bucketsIndex === undefined) {
51
58
  return undefined;
@@ -65,14 +72,19 @@ export const getTooltipFormatter = _ref3 => {
65
72
  bucketWidth,
66
73
  selectedPrice,
67
74
  bookType,
68
- labelCallback
75
+ labelCallback,
76
+ sentimentLongs,
77
+ sentimentShorts
69
78
  } = _ref3;
70
79
  if (!params || !Array.isArray(params) || params.length === 0) {
71
80
  return '';
72
81
  }
73
82
  const candleParam = findSeriesParam(params, 'candlestick');
74
83
  const booksParam = findSeriesParam(params, 'heatmap');
75
- const sentimentParam = findSeriesParam(params, 'sentiment');
84
+ const {
85
+ sentimentLong,
86
+ sentimentShort
87
+ } = findSentimentSeriesParam(params, sentimentLongs, sentimentShorts);
76
88
  if (!candleParam) {
77
89
  return '';
78
90
  }
@@ -82,7 +94,7 @@ export const getTooltipFormatter = _ref3 => {
82
94
  const bucketsIndex = booksParam === null || booksParam === void 0 ? void 0 : booksParam.value[2];
83
95
  const matchedBucket = findMatchingBucket(buckets, bucketsIndex, selectedPrice, bucketWidth);
84
96
  const showCandles = hasValidCandleData(candleData);
85
- const showSentiment = hasValidSentimentData(sentimentParam);
97
+ const showSentiment = hasValidSentimentData(sentimentLong, sentimentShort);
86
98
  if (!showCandles && !matchedBucket) {
87
99
  return '';
88
100
  }
@@ -95,7 +107,7 @@ export const getTooltipFormatter = _ref3 => {
95
107
  bookType,
96
108
  labelCallback
97
109
  }) : '';
98
- const sentimentSection = showSentiment && sentimentParam ? formatSentimentData(sentimentParam, labelCallback) : '';
110
+ const sentimentSection = showSentiment && sentimentLong && sentimentShort ? formatSentimentData(sentimentLong, sentimentShort, labelCallback) : '';
99
111
  return "<p>".concat(timeFormatted, "</p><br />\n").concat(candleSection, "\n").concat(bookSection, "\n").concat(sentimentSection);
100
112
  };
101
113
  //# sourceMappingURL=getTooltipFormatter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getTooltipFormatter.js","names":["BookType","DATE_FORMAT_OPTIONS","hour","minute","year","day","month","timeZoneName","SENTIMENT_DISPLAY_PRECISION","calculateBucketDisplayPrecision","bucketWidth","_bucketWidth$toString","toString","split","length","findSeriesParam","params","seriesId","find","series","getSentimentOverbalanceLabel","sentiment","bookType","Order","formatCandleData","candleData","labelCallback","open","close","low","high","concat","formatBookData","_ref","matchedBucket","bucketDisplayPrecision","bookLabelKey","priceRangeStart","price","toFixed","priceRangeEnd","sentimentLabel","sentimentValue","Math","abs","formatSentimentData","sentimentParam","shortPercent","longPercent","value","hasValidCandleData","hasValidSentimentData","findMatchingBucket","buckets","bucketsIndex","selectedPrice","undefined","selectedBuckets","_ref2","getTooltipFormatter","_ref3","Array","isArray","candleParam","booksParam","time","Date","axisValue","showCandles","showSentiment","timeFormatted","toLocaleString","candleSection","bookSection","sentimentSection"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.ts"],"sourcesContent":["import { BookType } from '../../../../gql/types/graphql';\nimport type { Bucket, TooltipParam } from '../types';\n\nconst DATE_FORMAT_OPTIONS: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: '2-digit',\n year: 'numeric',\n day: 'numeric',\n month: 'numeric',\n timeZoneName: 'short',\n};\n\nconst SENTIMENT_DISPLAY_PRECISION = 2;\n\nconst calculateBucketDisplayPrecision = (bucketWidth: number): number => {\n return bucketWidth.toString().split('.')[1]?.length || 0;\n};\n\nconst findSeriesParam = <T extends TooltipParam['seriesId']>(\n params: TooltipParam[],\n seriesId: T\n): Extract<TooltipParam, { seriesId: T }> | undefined => {\n return params.find(\n (series): series is Extract<TooltipParam, { seriesId: T }> =>\n series.seriesId === seriesId\n );\n};\n\nconst getSentimentOverbalanceLabel = (\n sentiment: number,\n bookType: BookType\n): string => {\n if (sentiment < 0) {\n return bookType === BookType.Order\n ? 'sell_overbalance'\n : 'short_overbalance';\n }\n return bookType === BookType.Order ? 'buy_overbalance' : 'long_overbalance';\n};\n\nconst formatCandleData = (\n candleData: [number, number, number, number, number],\n labelCallback: (key: string) => string\n): string => {\n const [, open, close, low, high] = candleData;\n return `<p><b>${labelCallback('candle')}:</b></p>\n<p>${labelCallback('open_price')}: ${open} </p>\n<p>${labelCallback('close_price')}: ${close} </p>\n<p>${labelCallback('low')}: ${low} </p>\n<p>${labelCallback('high')}: ${high} </p>\n`;\n};\n\nconst formatBookData = ({\n matchedBucket,\n bucketWidth,\n bucketDisplayPrecision,\n bookType,\n labelCallback,\n}: {\n matchedBucket: Bucket;\n bucketWidth: number;\n bucketDisplayPrecision: number;\n bookType: BookType;\n labelCallback: (key: string) => string;\n}): string => {\n const bookLabelKey = bookType === BookType.Order ? 'orders' : 'positions';\n const priceRangeStart = matchedBucket.price.toFixed(bucketDisplayPrecision);\n const priceRangeEnd = (matchedBucket.price + bucketWidth).toFixed(\n bucketDisplayPrecision\n );\n const sentimentLabel = getSentimentOverbalanceLabel(\n matchedBucket.sentiment,\n bookType\n );\n const sentimentValue = Math.abs(matchedBucket.sentiment).toFixed(\n bucketDisplayPrecision\n );\n\n return `<br /><p><b>${labelCallback(bookLabelKey)}:</b></p>\n<p>${labelCallback('price_range')}: ${priceRangeStart} - ${priceRangeEnd} </p>\n<p>${labelCallback(sentimentLabel)}: ${sentimentValue}% </p>`;\n};\n\nconst formatSentimentData = (\n sentimentParam: Extract<TooltipParam, { seriesId: 'sentiment' }>,\n labelCallback: (key: string) => string\n): string => {\n const [, shortPercent, longPercent] = sentimentParam.value;\n return `<br /><p><b>${labelCallback('sentiment')}:</b></p>\n<p>${labelCallback('long')}: ${longPercent.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </p>\n<p>${labelCallback('short')}: ${shortPercent.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </p>`;\n};\n\nconst hasValidCandleData = (\n candleData: [number, number, number, number, number]\n): boolean =>\n !!candleData[1] && !!candleData[2] && !!candleData[3] && !!candleData[3];\nconst hasValidSentimentData = (\n sentimentParam: Extract<TooltipParam, { seriesId: 'sentiment' }> | undefined\n): boolean => !!sentimentParam?.value[1] && !!sentimentParam?.value[2];\nconst findMatchingBucket = (\n buckets: Bucket[][],\n bucketsIndex: number | undefined,\n selectedPrice: number,\n bucketWidth: number\n): Bucket | undefined => {\n if (bucketsIndex === undefined) {\n return undefined;\n }\n const selectedBuckets = buckets[bucketsIndex];\n return selectedBuckets?.find(\n ({ price }) => selectedPrice >= price && selectedPrice < price + bucketWidth\n );\n};\n\nexport const getTooltipFormatter = ({\n params,\n buckets,\n bucketWidth,\n selectedPrice,\n bookType,\n labelCallback,\n}: {\n params: TooltipParam[];\n buckets: Bucket[][];\n bucketWidth: number;\n selectedPrice: number;\n bookType: BookType;\n labelCallback: (key: string) => string;\n}) => {\n if (!params || !Array.isArray(params) || params.length === 0) {\n return '';\n }\n\n const candleParam = findSeriesParam(params, 'candlestick');\n const booksParam = findSeriesParam(params, 'heatmap');\n const sentimentParam = findSeriesParam(params, 'sentiment');\n\n if (!candleParam) {\n return '';\n }\n\n const bucketDisplayPrecision = calculateBucketDisplayPrecision(bucketWidth);\n const time = new Date(candleParam.axisValue as string);\n const candleData = candleParam.value;\n const bucketsIndex = booksParam?.value[2];\n const matchedBucket = findMatchingBucket(\n buckets,\n bucketsIndex,\n selectedPrice,\n bucketWidth\n );\n const showCandles = hasValidCandleData(candleData);\n const showSentiment = hasValidSentimentData(sentimentParam);\n\n if (!showCandles && !matchedBucket) {\n return '';\n }\n\n const timeFormatted = time.toLocaleString(undefined, DATE_FORMAT_OPTIONS);\n const candleSection = showCandles\n ? formatCandleData(candleData, labelCallback)\n : '';\n const bookSection = matchedBucket\n ? formatBookData({\n matchedBucket,\n bucketWidth,\n bucketDisplayPrecision,\n bookType,\n labelCallback,\n })\n : '';\n const sentimentSection =\n showSentiment && sentimentParam\n ? formatSentimentData(sentimentParam, labelCallback)\n : '';\n\n return `<p>${timeFormatted}</p><br />\n${candleSection}\n${bookSection}\n${sentimentSection}`;\n};\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"getTooltipFormatter.js","names":["BookType","DATE_FORMAT_OPTIONS","hour","minute","year","day","month","timeZoneName","SENTIMENT_DISPLAY_PRECISION","calculateBucketDisplayPrecision","bucketWidth","_bucketWidth$toString","toString","split","length","findSeriesParam","params","seriesId","find","series","findSentimentSeriesParam","sentimentLongs","sentimentShorts","_sentimentLongs$index","_sentimentShorts$inde","index","dataIndex","sentimentLong","sentimentShort","getSentimentOverbalanceLabel","sentiment","bookType","Order","formatCandleData","candleData","labelCallback","open","close","low","high","concat","formatBookData","_ref","matchedBucket","bucketDisplayPrecision","bookLabelKey","priceRangeStart","price","toFixed","priceRangeEnd","sentimentLabel","sentimentValue","Math","abs","formatSentimentData","hasValidCandleData","hasValidSentimentData","findMatchingBucket","buckets","bucketsIndex","selectedPrice","undefined","selectedBuckets","_ref2","getTooltipFormatter","_ref3","Array","isArray","candleParam","booksParam","time","Date","axisValue","value","showCandles","showSentiment","timeFormatted","toLocaleString","candleSection","bookSection","sentimentSection"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/getTooltipFormatter.ts"],"sourcesContent":["import { BookType } from '../../../../gql/types/graphql';\nimport type { Bucket, TooltipParam } from '../types';\n\nconst DATE_FORMAT_OPTIONS: Intl.DateTimeFormatOptions = {\n hour: '2-digit',\n minute: '2-digit',\n year: 'numeric',\n day: 'numeric',\n month: 'numeric',\n timeZoneName: 'short',\n};\n\nconst SENTIMENT_DISPLAY_PRECISION = 2;\n\nconst calculateBucketDisplayPrecision = (bucketWidth: number): number => {\n return bucketWidth.toString().split('.')[1]?.length || 0;\n};\n\nconst findSeriesParam = <T extends TooltipParam['seriesId']>(\n params: TooltipParam[],\n seriesId: T\n): Extract<TooltipParam, { seriesId: T }> | undefined => {\n return params.find(\n (series): series is Extract<TooltipParam, { seriesId: T }> =>\n series.seriesId === seriesId\n );\n};\n\nconst findSentimentSeriesParam = (\n params: TooltipParam[],\n sentimentLongs: (number | null)[],\n sentimentShorts: (number | null)[]\n): {\n sentimentLong: number | null;\n sentimentShort: number | null;\n} => {\n const index = params[0].dataIndex as number;\n\n return {\n sentimentLong: sentimentLongs[index] ?? null,\n sentimentShort: sentimentShorts[index] ?? null,\n };\n};\n\nconst getSentimentOverbalanceLabel = (\n sentiment: number,\n bookType: BookType\n): string => {\n if (sentiment < 0) {\n return bookType === BookType.Order\n ? 'sell_overbalance'\n : 'short_overbalance';\n }\n return bookType === BookType.Order ? 'buy_overbalance' : 'long_overbalance';\n};\n\nconst formatCandleData = (\n candleData: [number, number, number, number, number],\n labelCallback: (key: string) => string\n): string => {\n const [, open, close, low, high] = candleData;\n return `<p><b>${labelCallback('candle')}:</b></p>\n<p>${labelCallback('open_price')}: ${open} </p>\n<p>${labelCallback('close_price')}: ${close} </p>\n<p>${labelCallback('low')}: ${low} </p>\n<p>${labelCallback('high')}: ${high} </p>\n`;\n};\n\nconst formatBookData = ({\n matchedBucket,\n bucketWidth,\n bucketDisplayPrecision,\n bookType,\n labelCallback,\n}: {\n matchedBucket: Bucket;\n bucketWidth: number;\n bucketDisplayPrecision: number;\n bookType: BookType;\n labelCallback: (key: string) => string;\n}): string => {\n const bookLabelKey = bookType === BookType.Order ? 'orders' : 'positions';\n const priceRangeStart = matchedBucket.price.toFixed(bucketDisplayPrecision);\n const priceRangeEnd = (matchedBucket.price + bucketWidth).toFixed(\n bucketDisplayPrecision\n );\n const sentimentLabel = getSentimentOverbalanceLabel(\n matchedBucket.sentiment,\n bookType\n );\n const sentimentValue = Math.abs(matchedBucket.sentiment).toFixed(\n bucketDisplayPrecision\n );\n\n return `<br /><p><b>${labelCallback(bookLabelKey)}:</b></p>\n<p>${labelCallback('price_range')}: ${priceRangeStart} - ${priceRangeEnd} </p>\n<p>${labelCallback(sentimentLabel)}: ${sentimentValue}% </p>`;\n};\n\nconst formatSentimentData = (\n sentimentLong: number,\n sentimentShort: number,\n labelCallback: (key: string) => string\n): string => {\n return `<br /><p><b>${labelCallback('sentiment')}:</b></p>\n<p>${labelCallback('long')}: ${sentimentLong.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </p>\n<p>${labelCallback('short')}: ${sentimentShort.toFixed(SENTIMENT_DISPLAY_PRECISION)}% </p>`;\n};\n\nconst hasValidCandleData = (\n candleData: [number, number, number, number, number]\n): boolean =>\n !!candleData[1] && !!candleData[2] && !!candleData[3] && !!candleData[4];\n\nconst hasValidSentimentData = (\n sentimentLong: number | null,\n sentimentShort: number | null\n): boolean => sentimentLong !== null && sentimentShort !== null;\n\nconst findMatchingBucket = (\n buckets: Bucket[][],\n bucketsIndex: number | undefined,\n selectedPrice: number,\n bucketWidth: number\n): Bucket | undefined => {\n if (bucketsIndex === undefined) {\n return undefined;\n }\n const selectedBuckets = buckets[bucketsIndex];\n return selectedBuckets?.find(\n ({ price }) => selectedPrice >= price && selectedPrice < price + bucketWidth\n );\n};\n\nexport const getTooltipFormatter = ({\n params,\n buckets,\n bucketWidth,\n selectedPrice,\n bookType,\n labelCallback,\n sentimentLongs,\n sentimentShorts,\n}: {\n params: TooltipParam[];\n buckets: Bucket[][];\n bucketWidth: number;\n selectedPrice: number;\n bookType: BookType;\n labelCallback: (key: string) => string;\n sentimentLongs: (number | null)[];\n sentimentShorts: (number | null)[];\n}) => {\n if (!params || !Array.isArray(params) || params.length === 0) {\n return '';\n }\n\n const candleParam = findSeriesParam(params, 'candlestick');\n const booksParam = findSeriesParam(params, 'heatmap');\n const { sentimentLong, sentimentShort } = findSentimentSeriesParam(\n params,\n sentimentLongs,\n sentimentShorts\n );\n\n if (!candleParam) {\n return '';\n }\n\n const bucketDisplayPrecision = calculateBucketDisplayPrecision(bucketWidth);\n const time = new Date(candleParam.axisValue as string);\n const candleData = candleParam.value;\n const bucketsIndex = booksParam?.value[2];\n const matchedBucket = findMatchingBucket(\n buckets,\n bucketsIndex,\n selectedPrice,\n bucketWidth\n );\n const showCandles = hasValidCandleData(candleData);\n const showSentiment = hasValidSentimentData(sentimentLong, sentimentShort);\n\n if (!showCandles && !matchedBucket) {\n return '';\n }\n\n const timeFormatted = time.toLocaleString(undefined, DATE_FORMAT_OPTIONS);\n const candleSection = showCandles\n ? formatCandleData(candleData, labelCallback)\n : '';\n\n const bookSection = matchedBucket\n ? formatBookData({\n matchedBucket,\n bucketWidth,\n bucketDisplayPrecision,\n bookType,\n labelCallback,\n })\n : '';\n\n const sentimentSection =\n showSentiment && sentimentLong && sentimentShort\n ? formatSentimentData(sentimentLong, sentimentShort, labelCallback)\n : '';\n\n return `<p>${timeFormatted}</p><br />\n${candleSection}\n${bookSection}\n${sentimentSection}`;\n};\n"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,52 @@
1
+ import { formatXAxisAdditionalLabel } from './formatXAxisAdditionalLabel';
2
+ import { formatXAxisLabel } from './formatXAxisLabel';
3
+ import { getLabelData } from './getLabelData';
4
+ import { isDifferenceGreaterThanTwoWeeks } from './isDifferenceGreaterThanTwoWeeks';
5
+ export const handleLabelUpdate = (instance, mainData, labelTimerRef, isGreaterThanTwoWeeksRef) => {
6
+ if (labelTimerRef.current) {
7
+ clearTimeout(labelTimerRef.current);
8
+ }
9
+ labelTimerRef.current = setTimeout(() => {
10
+ var _isGreaterThanTwoWeek;
11
+ const {
12
+ dates
13
+ } = mainData;
14
+ const {
15
+ dataZoom
16
+ } = instance.getOption();
17
+ if (!Array.isArray(dataZoom) || dataZoom.length === 0 || !dataZoom[0] || typeof dataZoom[0].startValue !== 'number' || typeof dataZoom[0].endValue !== 'number') {
18
+ return;
19
+ }
20
+ const {
21
+ startValue,
22
+ endValue
23
+ } = dataZoom[0];
24
+ if (!dates[startValue] || !dates[endValue]) {
25
+ return;
26
+ }
27
+ const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(dates[startValue], dates[endValue]);
28
+ const wasGreaterThanTwoWeeks = (_isGreaterThanTwoWeek = isGreaterThanTwoWeeksRef.current) !== null && _isGreaterThanTwoWeek !== void 0 ? _isGreaterThanTwoWeek : false;
29
+ if (isGreaterThanTwoWeeks !== wasGreaterThanTwoWeeks) {
30
+ const labelsData = getLabelData({
31
+ dates,
32
+ isGreaterThanTwoWeeks
33
+ });
34
+ instance.setOption({
35
+ xAxis: [{
36
+ id: 'main-xAxis',
37
+ axisLabel: {
38
+ formatter: value => formatXAxisLabel(value, isGreaterThanTwoWeeks)
39
+ }
40
+ }, {
41
+ id: 'additional-xAxis',
42
+ axisLabel: {
43
+ customValues: labelsData,
44
+ formatter: value => formatXAxisAdditionalLabel(value, isGreaterThanTwoWeeks)
45
+ }
46
+ }]
47
+ });
48
+ isGreaterThanTwoWeeksRef.current = isGreaterThanTwoWeeks;
49
+ }
50
+ }, 50);
51
+ };
52
+ //# sourceMappingURL=handleLabelUpdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleLabelUpdate.js","names":["formatXAxisAdditionalLabel","formatXAxisLabel","getLabelData","isDifferenceGreaterThanTwoWeeks","handleLabelUpdate","instance","mainData","labelTimerRef","isGreaterThanTwoWeeksRef","current","clearTimeout","setTimeout","_isGreaterThanTwoWeek","dates","dataZoom","getOption","Array","isArray","length","startValue","endValue","isGreaterThanTwoWeeks","wasGreaterThanTwoWeeks","labelsData","setOption","xAxis","id","axisLabel","formatter","value","customValues"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/handleLabelUpdate.ts"],"sourcesContent":["import type { EChartsType } from 'echarts';\nimport type { MutableRefObject } from 'react';\n\nimport type { ChartProps, DataZoomArray } from '../types';\nimport { formatXAxisAdditionalLabel } from './formatXAxisAdditionalLabel';\nimport { formatXAxisLabel } from './formatXAxisLabel';\nimport { getLabelData } from './getLabelData';\nimport { isDifferenceGreaterThanTwoWeeks } from './isDifferenceGreaterThanTwoWeeks';\n\nexport const handleLabelUpdate = (\n instance: EChartsType,\n mainData: ChartProps['mainData'],\n labelTimerRef: MutableRefObject<NodeJS.Timeout | null>,\n isGreaterThanTwoWeeksRef: MutableRefObject<boolean | null>\n): void => {\n if (labelTimerRef.current) {\n clearTimeout(labelTimerRef.current);\n }\n labelTimerRef.current = setTimeout(() => {\n const { dates } = mainData;\n\n const { dataZoom } = instance.getOption();\n if (\n !Array.isArray(dataZoom) ||\n dataZoom.length === 0 ||\n !dataZoom[0] ||\n typeof dataZoom[0].startValue !== 'number' ||\n typeof dataZoom[0].endValue !== 'number'\n ) {\n return;\n }\n\n const { startValue, endValue } = dataZoom[0] as DataZoomArray[0];\n\n if (!dates[startValue] || !dates[endValue]) {\n return;\n }\n\n const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(\n dates[startValue],\n dates[endValue]\n );\n\n const wasGreaterThanTwoWeeks = isGreaterThanTwoWeeksRef.current ?? false;\n\n if (isGreaterThanTwoWeeks !== wasGreaterThanTwoWeeks) {\n const labelsData = getLabelData({\n dates,\n isGreaterThanTwoWeeks,\n });\n\n instance.setOption({\n xAxis: [\n {\n id: 'main-xAxis',\n axisLabel: {\n formatter: (value: string) =>\n formatXAxisLabel(value, isGreaterThanTwoWeeks),\n },\n },\n {\n id: 'additional-xAxis',\n axisLabel: {\n customValues: labelsData,\n formatter: (value: unknown) =>\n formatXAxisAdditionalLabel(value, isGreaterThanTwoWeeks),\n },\n },\n ],\n });\n\n isGreaterThanTwoWeeksRef.current = isGreaterThanTwoWeeks;\n }\n }, 50);\n};\n"],"mappings":"AAIA,SAASA,0BAA0B,QAAQ,8BAA8B;AACzE,SAASC,gBAAgB,QAAQ,oBAAoB;AACrD,SAASC,YAAY,QAAQ,gBAAgB;AAC7C,SAASC,+BAA+B,QAAQ,mCAAmC;AAEnF,OAAO,MAAMC,iBAAiB,GAAGA,CAC/BC,QAAqB,EACrBC,QAAgC,EAChCC,aAAsD,EACtDC,wBAA0D,KACjD;EACT,IAAID,aAAa,CAACE,OAAO,EAAE;IACzBC,YAAY,CAACH,aAAa,CAACE,OAAO,CAAC;EACrC;EACAF,aAAa,CAACE,OAAO,GAAGE,UAAU,CAAC,MAAM;IAAA,IAAAC,qBAAA;IACvC,MAAM;MAAEC;IAAM,CAAC,GAAGP,QAAQ;IAE1B,MAAM;MAAEQ;IAAS,CAAC,GAAGT,QAAQ,CAACU,SAAS,CAAC,CAAC;IACzC,IACE,CAACC,KAAK,CAACC,OAAO,CAACH,QAAQ,CAAC,IACxBA,QAAQ,CAACI,MAAM,KAAK,CAAC,IACrB,CAACJ,QAAQ,CAAC,CAAC,CAAC,IACZ,OAAOA,QAAQ,CAAC,CAAC,CAAC,CAACK,UAAU,KAAK,QAAQ,IAC1C,OAAOL,QAAQ,CAAC,CAAC,CAAC,CAACM,QAAQ,KAAK,QAAQ,EACxC;MACA;IACF;IAEA,MAAM;MAAED,UAAU;MAAEC;IAAS,CAAC,GAAGN,QAAQ,CAAC,CAAC,CAAqB;IAEhE,IAAI,CAACD,KAAK,CAACM,UAAU,CAAC,IAAI,CAACN,KAAK,CAACO,QAAQ,CAAC,EAAE;MAC1C;IACF;IAEA,MAAMC,qBAAqB,GAAGlB,+BAA+B,CAC3DU,KAAK,CAACM,UAAU,CAAC,EACjBN,KAAK,CAACO,QAAQ,CAChB,CAAC;IAED,MAAME,sBAAsB,IAAAV,qBAAA,GAAGJ,wBAAwB,CAACC,OAAO,cAAAG,qBAAA,cAAAA,qBAAA,GAAI,KAAK;IAExE,IAAIS,qBAAqB,KAAKC,sBAAsB,EAAE;MACpD,MAAMC,UAAU,GAAGrB,YAAY,CAAC;QAC9BW,KAAK;QACLQ;MACF,CAAC,CAAC;MAEFhB,QAAQ,CAACmB,SAAS,CAAC;QACjBC,KAAK,EAAE,CACL;UACEC,EAAE,EAAE,YAAY;UAChBC,SAAS,EAAE;YACTC,SAAS,EAAGC,KAAa,IACvB5B,gBAAgB,CAAC4B,KAAK,EAAER,qBAAqB;UACjD;QACF,CAAC,EACD;UACEK,EAAE,EAAE,kBAAkB;UACtBC,SAAS,EAAE;YACTG,YAAY,EAAEP,UAAU;YACxBK,SAAS,EAAGC,KAAc,IACxB7B,0BAA0B,CAAC6B,KAAK,EAAER,qBAAqB;UAC3D;QACF,CAAC;MAEL,CAAC,CAAC;MAEFb,wBAAwB,CAACC,OAAO,GAAGY,qBAAqB;IAC1D;EACF,CAAC,EAAE,EAAE,CAAC;AACR,CAAC","ignoreList":[]}
@@ -0,0 +1,27 @@
1
+ export const handleTooltipUpdate = (instance, zoomTimerRef, tooltipVisibleRef, canHover) => {
2
+ if (!canHover) {
3
+ return;
4
+ }
5
+ if (tooltipVisibleRef.current) {
6
+ instance.setOption({
7
+ tooltip: {
8
+ show: false
9
+ }
10
+ });
11
+ tooltipVisibleRef.current = false;
12
+ }
13
+ if (zoomTimerRef.current) {
14
+ clearTimeout(zoomTimerRef.current);
15
+ }
16
+ zoomTimerRef.current = setTimeout(() => {
17
+ if (!tooltipVisibleRef.current) {
18
+ instance.setOption({
19
+ tooltip: {
20
+ show: true
21
+ }
22
+ });
23
+ tooltipVisibleRef.current = true;
24
+ }
25
+ }, 100);
26
+ };
27
+ //# sourceMappingURL=handleTooltipUpdate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handleTooltipUpdate.js","names":["handleTooltipUpdate","instance","zoomTimerRef","tooltipVisibleRef","canHover","current","setOption","tooltip","show","clearTimeout","setTimeout"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/handleTooltipUpdate.ts"],"sourcesContent":["import type { EChartsType } from 'echarts';\nimport type { MutableRefObject } from 'react';\n\nexport const handleTooltipUpdate = (\n instance: EChartsType,\n zoomTimerRef: MutableRefObject<NodeJS.Timeout | null>,\n tooltipVisibleRef: MutableRefObject<boolean>,\n canHover: boolean\n): void => {\n if (!canHover) {\n return;\n }\n\n if (tooltipVisibleRef.current) {\n instance.setOption({\n tooltip: {\n show: false,\n },\n });\n tooltipVisibleRef.current = false;\n }\n\n if (zoomTimerRef.current) {\n clearTimeout(zoomTimerRef.current);\n }\n\n zoomTimerRef.current = setTimeout(() => {\n if (!tooltipVisibleRef.current) {\n instance.setOption({\n tooltip: {\n show: true,\n },\n });\n tooltipVisibleRef.current = true;\n }\n }, 100);\n};\n"],"mappings":"AAGA,OAAO,MAAMA,mBAAmB,GAAGA,CACjCC,QAAqB,EACrBC,YAAqD,EACrDC,iBAA4C,EAC5CC,QAAiB,KACR;EACT,IAAI,CAACA,QAAQ,EAAE;IACb;EACF;EAEA,IAAID,iBAAiB,CAACE,OAAO,EAAE;IAC7BJ,QAAQ,CAACK,SAAS,CAAC;MACjBC,OAAO,EAAE;QACPC,IAAI,EAAE;MACR;IACF,CAAC,CAAC;IACFL,iBAAiB,CAACE,OAAO,GAAG,KAAK;EACnC;EAEA,IAAIH,YAAY,CAACG,OAAO,EAAE;IACxBI,YAAY,CAACP,YAAY,CAACG,OAAO,CAAC;EACpC;EAEAH,YAAY,CAACG,OAAO,GAAGK,UAAU,CAAC,MAAM;IACtC,IAAI,CAACP,iBAAiB,CAACE,OAAO,EAAE;MAC9BJ,QAAQ,CAACK,SAAS,CAAC;QACjBC,OAAO,EAAE;UACPC,IAAI,EAAE;QACR;MACF,CAAC,CAAC;MACFL,iBAAiB,CAACE,OAAO,GAAG,IAAI;IAClC;EACF,CAAC,EAAE,GAAG,CAAC;AACT,CAAC","ignoreList":[]}
@@ -1,8 +1,11 @@
1
+ export * from './formatXAxisAdditionalLabel';
1
2
  export * from './formatXAxisLabel';
2
3
  export * from './getChartStyles';
3
4
  export * from './getGradientColor';
4
5
  export * from './getLabelData';
5
6
  export * from './getRectColor';
6
7
  export * from './getTooltipFormatter';
8
+ export * from './handleLabelUpdate';
9
+ export * from './handleTooltipUpdate';
7
10
  export * from './isDifferenceGreaterThanTwoWeeks';
8
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/index.ts"],"sourcesContent":["export * from './formatXAxisLabel';\nexport * from './getChartStyles';\nexport * from './getGradientColor';\nexport * from './getLabelData';\nexport * from './getRectColor';\nexport * from './getTooltipFormatter';\nexport * from './isDifferenceGreaterThanTwoWeeks';\n"],"mappings":"AAAA,cAAc,oBAAoB;AAClC,cAAc,kBAAkB;AAChC,cAAc,oBAAoB;AAClC,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,uBAAuB;AACrC,cAAc,mCAAmC","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/chartUtils/index.ts"],"sourcesContent":["export * from './formatXAxisAdditionalLabel';\nexport * from './formatXAxisLabel';\nexport * from './getChartStyles';\nexport * from './getGradientColor';\nexport * from './getLabelData';\nexport * from './getRectColor';\nexport * from './getTooltipFormatter';\nexport * from './handleLabelUpdate';\nexport * from './handleTooltipUpdate';\nexport * from './isDifferenceGreaterThanTwoWeeks';\n"],"mappings":"AAAA,cAAc,8BAA8B;AAC5C,cAAc,oBAAoB;AAClC,cAAc,kBAAkB;AAChC,cAAc,oBAAoB;AAClC,cAAc,gBAAgB;AAC9B,cAAc,gBAAgB;AAC9B,cAAc,uBAAuB;AACrC,cAAc,qBAAqB;AACnC,cAAc,uBAAuB;AACrC,cAAc,mCAAmC","ignoreList":[]}
@@ -0,0 +1,12 @@
1
+ import { Granularity } from '../../../../gql/types/graphql';
2
+ import { BUCKET_CONFIG } from '../../../constants';
3
+ export const getMultiplayerForTimeSpan = granularity => {
4
+ const timeSpanMultiplierMap = {
5
+ [Granularity.M5]: BUCKET_CONFIG.MULTIPLIER_5M,
6
+ [Granularity.M15]: BUCKET_CONFIG.MULTIPLIER_15M,
7
+ [Granularity.H1]: BUCKET_CONFIG.MULTIPLIER_1H,
8
+ [Granularity.H4]: BUCKET_CONFIG.MULTIPLIER_4H
9
+ };
10
+ return timeSpanMultiplierMap[granularity] || BUCKET_CONFIG.MULTIPLIER_5M;
11
+ };
12
+ //# sourceMappingURL=getMultiplayerForTimeSpan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getMultiplayerForTimeSpan.js","names":["Granularity","BUCKET_CONFIG","getMultiplayerForTimeSpan","granularity","timeSpanMultiplierMap","M5","MULTIPLIER_5M","M15","MULTIPLIER_15M","H1","MULTIPLIER_1H","H4","MULTIPLIER_4H"],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/dataUtils/getMultiplayerForTimeSpan.ts"],"sourcesContent":["import { Granularity } from '../../../../gql/types/graphql';\nimport { BUCKET_CONFIG } from '../../../constants';\n\nexport const getMultiplayerForTimeSpan = (granularity: Granularity): number => {\n const timeSpanMultiplierMap: Record<Granularity, number> = {\n [Granularity.M5]: BUCKET_CONFIG.MULTIPLIER_5M,\n [Granularity.M15]: BUCKET_CONFIG.MULTIPLIER_15M,\n [Granularity.H1]: BUCKET_CONFIG.MULTIPLIER_1H,\n [Granularity.H4]: BUCKET_CONFIG.MULTIPLIER_4H,\n };\n\n return timeSpanMultiplierMap[granularity] || BUCKET_CONFIG.MULTIPLIER_5M;\n};\n"],"mappings":"AAAA,SAASA,WAAW,QAAQ,+BAA+B;AAC3D,SAASC,aAAa,QAAQ,oBAAoB;AAElD,OAAO,MAAMC,yBAAyB,GAAIC,WAAwB,IAAa;EAC7E,MAAMC,qBAAkD,GAAG;IACzD,CAACJ,WAAW,CAACK,EAAE,GAAGJ,aAAa,CAACK,aAAa;IAC7C,CAACN,WAAW,CAACO,GAAG,GAAGN,aAAa,CAACO,cAAc;IAC/C,CAACR,WAAW,CAACS,EAAE,GAAGR,aAAa,CAACS,aAAa;IAC7C,CAACV,WAAW,CAACW,EAAE,GAAGV,aAAa,CAACW;EAClC,CAAC;EAED,OAAOR,qBAAqB,CAACD,WAAW,CAAC,IAAIF,aAAa,CAACK,aAAa;AAC1E,CAAC","ignoreList":[]}
@@ -1,4 +1,5 @@
1
1
  export * from './getInstrumentConfigForDivision';
2
+ export * from './getMultiplayerForTimeSpan';
2
3
  export * from './getTimeSpanForGranularity';
3
4
  export * from './processOrderPositionBooks';
4
5
  export * from './processPriceCandles';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/dataUtils/index.ts"],"sourcesContent":["export * from './getInstrumentConfigForDivision';\nexport * from './getTimeSpanForGranularity';\nexport * from './processOrderPositionBooks';\nexport * from './processPriceCandles';\nexport * from './processSentiments';\nexport * from './validateData';\n"],"mappings":"AAAA,cAAc,kCAAkC;AAChD,cAAc,6BAA6B;AAC3C,cAAc,6BAA6B;AAC3C,cAAc,uBAAuB;AACrC,cAAc,qBAAqB;AACnC,cAAc,gBAAgB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../../../../src/CrowdViewWidget/components/Chart/dataUtils/index.ts"],"sourcesContent":["export * from './getInstrumentConfigForDivision';\nexport * from './getMultiplayerForTimeSpan';\nexport * from './getTimeSpanForGranularity';\nexport * from './processOrderPositionBooks';\nexport * from './processPriceCandles';\nexport * from './processSentiments';\nexport * from './validateData';\n"],"mappings":"AAAA,cAAc,kCAAkC;AAChD,cAAc,6BAA6B;AAC3C,cAAc,6BAA6B;AAC3C,cAAc,6BAA6B;AAC3C,cAAc,uBAAuB;AACrC,cAAc,qBAAqB;AACnC,cAAc,gBAAgB","ignoreList":[]}
@@ -1,5 +1,5 @@
1
1
  import { CHART_CONFIG } from '../../constants';
2
- import { getDataZoomConfig, getGridConfig, getGridLines, getSeriesCandlestickConfig, getSeriesHeatmapConfig, getSeriesSentimentConfig, getTooltipConfig, getVisualMapConfig, getXAxisConfig, getYAxisConfig } from './chartOptions';
2
+ import { getDataZoomConfig, getGridConfig, getGridLines, getLabelsConfig, getSeriesCandlestickConfig, getSeriesHeatmapConfig, getSeriesSentimentConfig, getTooltipConfig, getVisualMapConfig, getXAxisConfig, getYAxisConfig } from './chartOptions';
3
3
  import { isDifferenceGreaterThanTwoWeeks } from './chartUtils';
4
4
  import { getChartStyles } from './chartUtils/getChartStyles';
5
5
  export const getOption = _ref => {
@@ -23,6 +23,7 @@ export const getOption = _ref => {
23
23
  sentimentThresholdMin,
24
24
  sentimentThresholdMax
25
25
  },
26
+ isLoading,
26
27
  isDark,
27
28
  isDesktop,
28
29
  labelCallback
@@ -31,8 +32,21 @@ export const getOption = _ref => {
31
32
  const selectedPriceRef = {
32
33
  current: 0
33
34
  };
34
- const visibleXAxisData = dates.slice(dates.length * CHART_CONFIG.INITIAL_START_ZOOM / 100, dates.length * CHART_CONFIG.INITIAL_END_ZOOM / 100);
35
+ const initialStartZoom = isDesktop ? CHART_CONFIG.INITIAL_START_ZOOM_DESKTOP : CHART_CONFIG.INITIAL_START_ZOOM_MOBILE;
36
+ const visibleXAxisData = dates.slice(dates.length * initialStartZoom / 100, dates.length * CHART_CONFIG.INITIAL_END_ZOOM / 100);
35
37
  const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(visibleXAxisData[0], visibleXAxisData[visibleXAxisData.length - 1]);
38
+ const heatmapChart = bookPrices && bookPrices.length > 0 ? [getSeriesHeatmapConfig({
39
+ bucketWidth,
40
+ buckets,
41
+ isDark,
42
+ sentimentThresholdMax,
43
+ sentimentThresholdMin,
44
+ isLoading
45
+ })] : [];
46
+ const sentimentChart = sentimentLongs && sentimentLongs.length > 0 ? [getSeriesSentimentConfig({
47
+ styles,
48
+ isLoading
49
+ })] : [];
36
50
  return {
37
51
  animation: false,
38
52
  tooltip: getTooltipConfig({
@@ -42,7 +56,9 @@ export const getOption = _ref => {
42
56
  displayPrecision,
43
57
  labelCallback,
44
58
  selectedPriceRef,
45
- tooltipLinesColor: styles.tooltipLinesColor
59
+ tooltipLinesColor: styles.tooltipLinesColor,
60
+ sentimentLongs,
61
+ sentimentShorts
46
62
  }),
47
63
  grid: getGridConfig({
48
64
  isDesktop
@@ -53,18 +69,23 @@ export const getOption = _ref => {
53
69
  }),
54
70
  yAxis: getYAxisConfig({
55
71
  bucketWidth,
56
- displayPrecision,
57
- isDesktop,
58
- labelCallback
72
+ displayPrecision
73
+ }),
74
+ dataZoom: getDataZoomConfig({
75
+ isDesktop
59
76
  }),
60
- dataZoom: getDataZoomConfig(),
61
77
  visualMap: getVisualMapConfig({
62
78
  sentimentLongColor: styles.sentimentLongColor,
63
79
  sentimentShortColor: styles.sentimentShortColor
64
80
  }),
65
- graphic: getGridLines({
66
- isDark
67
- }),
81
+ graphic: [...getGridLines({
82
+ isDark,
83
+ isDesktop
84
+ }), ...getLabelsConfig({
85
+ isDark,
86
+ isDesktop,
87
+ labelCallback
88
+ })],
68
89
  dataset: {
69
90
  source: {
70
91
  dates,
@@ -79,18 +100,9 @@ export const getOption = _ref => {
79
100
  }
80
101
  },
81
102
  series: [getSeriesCandlestickConfig({
82
- dates,
83
- isGreaterThanTwoWeeks,
84
- styles
85
- }), getSeriesHeatmapConfig({
86
- bucketWidth,
87
- buckets,
88
- isDark,
89
- sentimentThresholdMax,
90
- sentimentThresholdMin
91
- }), getSeriesSentimentConfig({
92
- styles
93
- })]
103
+ styles,
104
+ isLoading
105
+ }), ...heatmapChart, ...sentimentChart]
94
106
  };
95
107
  };
96
108
  //# sourceMappingURL=getOption.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getOption.js","names":["CHART_CONFIG","getDataZoomConfig","getGridConfig","getGridLines","getSeriesCandlestickConfig","getSeriesHeatmapConfig","getSeriesSentimentConfig","getTooltipConfig","getVisualMapConfig","getXAxisConfig","getYAxisConfig","isDifferenceGreaterThanTwoWeeks","getChartStyles","getOption","_ref","mainData","dates","candlesOpen","candlesClose","candlesLow","candlesHigh","bookPrices","bookIndexes","sentimentShorts","sentimentLongs","additionalData","bucketWidth","buckets","displayPrecision","bookType","sentimentThresholdMin","sentimentThresholdMax","isDark","isDesktop","labelCallback","styles","selectedPriceRef","current","visibleXAxisData","slice","length","INITIAL_START_ZOOM","INITIAL_END_ZOOM","isGreaterThanTwoWeeks","animation","tooltip","tooltipLinesColor","grid","xAxis","yAxis","dataZoom","visualMap","sentimentLongColor","sentimentShortColor","graphic","dataset","source","series"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/getOption.ts"],"sourcesContent":["import { CHART_CONFIG } from '../../constants';\nimport {\n getDataZoomConfig,\n getGridConfig,\n getGridLines,\n getSeriesCandlestickConfig,\n getSeriesHeatmapConfig,\n getSeriesSentimentConfig,\n getTooltipConfig,\n getVisualMapConfig,\n getXAxisConfig,\n getYAxisConfig,\n} from './chartOptions';\nimport { isDifferenceGreaterThanTwoWeeks } from './chartUtils';\nimport { getChartStyles } from './chartUtils/getChartStyles';\nimport type { GetOptionType } from './types';\n\nexport const getOption: GetOptionType = ({\n mainData: {\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n bookPrices,\n bookIndexes,\n sentimentShorts,\n sentimentLongs,\n },\n additionalData: {\n bucketWidth,\n buckets,\n displayPrecision,\n bookType,\n sentimentThresholdMin,\n sentimentThresholdMax,\n },\n isDark,\n isDesktop,\n labelCallback,\n}) => {\n const styles = getChartStyles(isDark);\n const selectedPriceRef = { current: 0 };\n\n const visibleXAxisData = dates.slice(\n (dates.length * CHART_CONFIG.INITIAL_START_ZOOM) / 100,\n (dates.length * CHART_CONFIG.INITIAL_END_ZOOM) / 100\n );\n\n const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(\n visibleXAxisData[0],\n visibleXAxisData[visibleXAxisData.length - 1]\n );\n\n return {\n animation: false,\n tooltip: getTooltipConfig({\n bookType,\n bucketWidth,\n buckets,\n displayPrecision,\n labelCallback,\n selectedPriceRef,\n tooltipLinesColor: styles.tooltipLinesColor,\n }),\n grid: getGridConfig({ isDesktop }),\n xAxis: getXAxisConfig({\n dates,\n isGreaterThanTwoWeeks,\n }),\n yAxis: getYAxisConfig({\n bucketWidth,\n displayPrecision,\n isDesktop,\n labelCallback,\n }),\n dataZoom: getDataZoomConfig(),\n visualMap: getVisualMapConfig({\n sentimentLongColor: styles.sentimentLongColor,\n sentimentShortColor: styles.sentimentShortColor,\n }),\n graphic: getGridLines({ isDark }),\n dataset: {\n source: {\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n bookPrices: bookPrices ?? [],\n bookIndexes: bookIndexes ?? [],\n sentimentShorts,\n sentimentLongs,\n },\n },\n series: [\n getSeriesCandlestickConfig({\n dates,\n isGreaterThanTwoWeeks,\n styles,\n }),\n getSeriesHeatmapConfig({\n bucketWidth,\n buckets,\n isDark,\n sentimentThresholdMax,\n sentimentThresholdMin,\n }),\n getSeriesSentimentConfig({\n styles,\n }),\n ],\n };\n};\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,iBAAiB;AAC9C,SACEC,iBAAiB,EACjBC,aAAa,EACbC,YAAY,EACZC,0BAA0B,EAC1BC,sBAAsB,EACtBC,wBAAwB,EACxBC,gBAAgB,EAChBC,kBAAkB,EAClBC,cAAc,EACdC,cAAc,QACT,gBAAgB;AACvB,SAASC,+BAA+B,QAAQ,cAAc;AAC9D,SAASC,cAAc,QAAQ,6BAA6B;AAG5D,OAAO,MAAMC,SAAwB,GAAGC,IAAA,IAuBlC;EAAA,IAvBmC;IACvCC,QAAQ,EAAE;MACRC,KAAK;MACLC,WAAW;MACXC,YAAY;MACZC,UAAU;MACVC,WAAW;MACXC,UAAU;MACVC,WAAW;MACXC,eAAe;MACfC;IACF,CAAC;IACDC,cAAc,EAAE;MACdC,WAAW;MACXC,OAAO;MACPC,gBAAgB;MAChBC,QAAQ;MACRC,qBAAqB;MACrBC;IACF,CAAC;IACDC,MAAM;IACNC,SAAS;IACTC;EACF,CAAC,GAAApB,IAAA;EACC,MAAMqB,MAAM,GAAGvB,cAAc,CAACoB,MAAM,CAAC;EACrC,MAAMI,gBAAgB,GAAG;IAAEC,OAAO,EAAE;EAAE,CAAC;EAEvC,MAAMC,gBAAgB,GAAGtB,KAAK,CAACuB,KAAK,CACjCvB,KAAK,CAACwB,MAAM,GAAGxC,YAAY,CAACyC,kBAAkB,GAAI,GAAG,EACrDzB,KAAK,CAACwB,MAAM,GAAGxC,YAAY,CAAC0C,gBAAgB,GAAI,GACnD,CAAC;EAED,MAAMC,qBAAqB,GAAGhC,+BAA+B,CAC3D2B,gBAAgB,CAAC,CAAC,CAAC,EACnBA,gBAAgB,CAACA,gBAAgB,CAACE,MAAM,GAAG,CAAC,CAC9C,CAAC;EAED,OAAO;IACLI,SAAS,EAAE,KAAK;IAChBC,OAAO,EAAEtC,gBAAgB,CAAC;MACxBsB,QAAQ;MACRH,WAAW;MACXC,OAAO;MACPC,gBAAgB;MAChBM,aAAa;MACbE,gBAAgB;MAChBU,iBAAiB,EAAEX,MAAM,CAACW;IAC5B,CAAC,CAAC;IACFC,IAAI,EAAE7C,aAAa,CAAC;MAAE+B;IAAU,CAAC,CAAC;IAClCe,KAAK,EAAEvC,cAAc,CAAC;MACpBO,KAAK;MACL2B;IACF,CAAC,CAAC;IACFM,KAAK,EAAEvC,cAAc,CAAC;MACpBgB,WAAW;MACXE,gBAAgB;MAChBK,SAAS;MACTC;IACF,CAAC,CAAC;IACFgB,QAAQ,EAAEjD,iBAAiB,CAAC,CAAC;IAC7BkD,SAAS,EAAE3C,kBAAkB,CAAC;MAC5B4C,kBAAkB,EAAEjB,MAAM,CAACiB,kBAAkB;MAC7CC,mBAAmB,EAAElB,MAAM,CAACkB;IAC9B,CAAC,CAAC;IACFC,OAAO,EAAEnD,YAAY,CAAC;MAAE6B;IAAO,CAAC,CAAC;IACjCuB,OAAO,EAAE;MACPC,MAAM,EAAE;QACNxC,KAAK;QACLC,WAAW;QACXC,YAAY;QACZC,UAAU;QACVC,WAAW;QACXC,UAAU,EAAEA,UAAU,aAAVA,UAAU,cAAVA,UAAU,GAAI,EAAE;QAC5BC,WAAW,EAAEA,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,EAAE;QAC9BC,eAAe;QACfC;MACF;IACF,CAAC;IACDiC,MAAM,EAAE,CACNrD,0BAA0B,CAAC;MACzBY,KAAK;MACL2B,qBAAqB;MACrBR;IACF,CAAC,CAAC,EACF9B,sBAAsB,CAAC;MACrBqB,WAAW;MACXC,OAAO;MACPK,MAAM;MACND,qBAAqB;MACrBD;IACF,CAAC,CAAC,EACFxB,wBAAwB,CAAC;MACvB6B;IACF,CAAC,CAAC;EAEN,CAAC;AACH,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"getOption.js","names":["CHART_CONFIG","getDataZoomConfig","getGridConfig","getGridLines","getLabelsConfig","getSeriesCandlestickConfig","getSeriesHeatmapConfig","getSeriesSentimentConfig","getTooltipConfig","getVisualMapConfig","getXAxisConfig","getYAxisConfig","isDifferenceGreaterThanTwoWeeks","getChartStyles","getOption","_ref","mainData","dates","candlesOpen","candlesClose","candlesLow","candlesHigh","bookPrices","bookIndexes","sentimentShorts","sentimentLongs","additionalData","bucketWidth","buckets","displayPrecision","bookType","sentimentThresholdMin","sentimentThresholdMax","isLoading","isDark","isDesktop","labelCallback","styles","selectedPriceRef","current","initialStartZoom","INITIAL_START_ZOOM_DESKTOP","INITIAL_START_ZOOM_MOBILE","visibleXAxisData","slice","length","INITIAL_END_ZOOM","isGreaterThanTwoWeeks","heatmapChart","sentimentChart","animation","tooltip","tooltipLinesColor","grid","xAxis","yAxis","dataZoom","visualMap","sentimentLongColor","sentimentShortColor","graphic","dataset","source","series"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/getOption.ts"],"sourcesContent":["import { CHART_CONFIG } from '../../constants';\nimport {\n getDataZoomConfig,\n getGridConfig,\n getGridLines,\n getLabelsConfig,\n getSeriesCandlestickConfig,\n getSeriesHeatmapConfig,\n getSeriesSentimentConfig,\n getTooltipConfig,\n getVisualMapConfig,\n getXAxisConfig,\n getYAxisConfig,\n} from './chartOptions';\nimport { isDifferenceGreaterThanTwoWeeks } from './chartUtils';\nimport { getChartStyles } from './chartUtils/getChartStyles';\nimport type { GetOptionType } from './types';\n\nexport const getOption: GetOptionType = ({\n mainData: {\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n bookPrices,\n bookIndexes,\n sentimentShorts,\n sentimentLongs,\n },\n additionalData: {\n bucketWidth,\n buckets,\n displayPrecision,\n bookType,\n sentimentThresholdMin,\n sentimentThresholdMax,\n },\n isLoading,\n isDark,\n isDesktop,\n labelCallback,\n}) => {\n const styles = getChartStyles(isDark);\n const selectedPriceRef = { current: 0 };\n\n const initialStartZoom = isDesktop\n ? CHART_CONFIG.INITIAL_START_ZOOM_DESKTOP\n : CHART_CONFIG.INITIAL_START_ZOOM_MOBILE;\n\n const visibleXAxisData = dates.slice(\n (dates.length * initialStartZoom) / 100,\n (dates.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 heatmapChart =\n bookPrices && bookPrices.length > 0\n ? [\n getSeriesHeatmapConfig({\n bucketWidth,\n buckets,\n isDark,\n sentimentThresholdMax,\n sentimentThresholdMin,\n isLoading,\n }),\n ]\n : [];\n\n const sentimentChart =\n sentimentLongs && sentimentLongs.length > 0\n ? [\n getSeriesSentimentConfig({\n styles,\n isLoading,\n }),\n ]\n : [];\n\n return {\n animation: false,\n tooltip: getTooltipConfig({\n bookType,\n bucketWidth,\n buckets,\n displayPrecision,\n labelCallback,\n selectedPriceRef,\n tooltipLinesColor: styles.tooltipLinesColor,\n sentimentLongs,\n sentimentShorts,\n }),\n grid: getGridConfig({ isDesktop }),\n xAxis: getXAxisConfig({\n dates,\n isGreaterThanTwoWeeks,\n }),\n yAxis: getYAxisConfig({\n bucketWidth,\n displayPrecision,\n }),\n dataZoom: getDataZoomConfig({ isDesktop }),\n visualMap: getVisualMapConfig({\n sentimentLongColor: styles.sentimentLongColor,\n sentimentShortColor: styles.sentimentShortColor,\n }),\n graphic: [\n ...getGridLines({ isDark, isDesktop }),\n ...getLabelsConfig({ isDark, isDesktop, labelCallback }),\n ],\n dataset: {\n source: {\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n bookPrices: bookPrices ?? [],\n bookIndexes: bookIndexes ?? [],\n sentimentShorts,\n sentimentLongs,\n },\n },\n series: [\n getSeriesCandlestickConfig({\n styles,\n isLoading,\n }),\n ...heatmapChart,\n ...sentimentChart,\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 CrowdViewMainData {\n dates: string[];\n candlesOpen: number[];\n candlesClose: number[];\n candlesLow: number[];\n candlesHigh: number[];\n bookPrices?: (number | null)[];\n bookIndexes?: (number | null)[];\n sentimentShorts: (number | null)[];\n sentimentLongs: (number | null)[];\n}\n\ninterface CrowdViewAdditionalData {\n bucketWidth: number;\n buckets: Bucket[][];\n displayPrecision: number;\n bookType: BookType;\n sentimentThresholdMin: number;\n sentimentThresholdMax: number;\n}\n\nexport interface UseCrowdViewDataReturn {\n mainData?: CrowdViewMainData | null;\n additionalData?: CrowdViewAdditionalData | null;\n loading: boolean;\n error: boolean;\n}\n\ninterface GetOptionProps {\n mainData: CrowdViewMainData;\n additionalData: CrowdViewAdditionalData;\n isDark: boolean;\n isDesktop: boolean;\n labelCallback: (key: string, params?: Record<string, unknown>) => string;\n}\n\nexport type GetOptionType = (props: GetOptionProps) => EChartsOption;\n\nexport interface ChartProps {\n mainData: CrowdViewMainData;\n additionalData: CrowdViewAdditionalData;\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 dates: 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":[]}
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 CrowdViewMainData {\n dates: string[];\n candlesOpen: number[];\n candlesClose: number[];\n candlesLow: number[];\n candlesHigh: number[];\n bookPrices?: (number | null)[];\n bookIndexes?: (number | null)[];\n sentimentShorts: (number | null)[];\n sentimentLongs: (number | null)[];\n}\n\ninterface CrowdViewAdditionalData {\n bucketWidth: number;\n buckets: Bucket[][];\n displayPrecision: number;\n bookType: BookType;\n sentimentThresholdMin: number;\n sentimentThresholdMax: number;\n}\n\nexport interface UseCrowdViewDataReturn {\n mainData?: CrowdViewMainData | null;\n additionalData?: CrowdViewAdditionalData | null;\n loading: boolean;\n priceCandlesLoading: boolean;\n orderPositionLoading: boolean;\n sentimentsLoading: boolean;\n error: boolean;\n}\n\ninterface GetOptionProps {\n mainData: CrowdViewMainData;\n additionalData: CrowdViewAdditionalData;\n isDark: boolean;\n isDesktop: boolean;\n isLoading: boolean;\n labelCallback: (key: string, params?: Record<string, unknown>) => string;\n}\n\nexport type GetOptionType = (props: GetOptionProps) => EChartsOption;\n\nexport interface ChartProps {\n mainData: CrowdViewMainData;\n additionalData: CrowdViewAdditionalData;\n isDesktop: boolean;\n isLoading: boolean;\n}\n\nexport interface ChartWithDataProps {\n bookType: BookType;\n division: Division;\n instrument: InstrumentId;\n granularity: Granularity;\n}\n\nexport interface GetLabelsDataProps {\n dates: 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":[]}
@@ -5,7 +5,7 @@ import { getPriceCandles } from '../../../gql/getPriceCandles';
5
5
  import { getSentiments } from '../../../gql/getSentiments';
6
6
  import { BookType, DataSource, Division } from '../../../gql/types/graphql';
7
7
  import { BUCKET_CONFIG, INSTRUMENTS_CONFIG } from '../../constants';
8
- import { getTimeSpanForGranularity, processOrderPositionBooks, processPriceCandles, processSentiments, validateData } from './dataUtils';
8
+ import { getMultiplayerForTimeSpan, getTimeSpanForGranularity, processOrderPositionBooks, processPriceCandles, processSentiments, validateData } from './dataUtils';
9
9
  export const useCrowdViewData = _ref => {
10
10
  let {
11
11
  instrument,
@@ -51,7 +51,7 @@ export const useCrowdViewData = _ref => {
51
51
  granularity,
52
52
  maxBookPrice: maxPrice,
53
53
  minBookPrice: minPrice,
54
- bucketMultiplier: 2,
54
+ bucketMultiplier: getMultiplayerForTimeSpan(granularity),
55
55
  bucketMargin: BUCKET_CONFIG.PRICE_MARGIN_MULTIPLIER
56
56
  },
57
57
  fetchPolicy: 'no-cache',
@@ -101,7 +101,7 @@ export const useCrowdViewData = _ref => {
101
101
  return validateData(priceCandlesData, orderPositionData, hasValidCandles, hasValidBooks, hasValidSentiments);
102
102
  }, [priceCandlesError, orderPositionError, sentimentsError, loading, priceCandlesData, orderPositionData, hasValidCandles, hasValidBooks, hasValidSentiments]);
103
103
  const data = useMemo(() => {
104
- if (!priceCandlesData || !orderPositionData || !sentimentsData || error) {
104
+ if (!priceCandlesData || error) {
105
105
  return null;
106
106
  }
107
107
  return {
@@ -117,7 +117,7 @@ export const useCrowdViewData = _ref => {
117
117
  sentimentLongs
118
118
  },
119
119
  additionalData: {
120
- bucketWidth,
120
+ bucketWidth: bucketWidth || INSTRUMENTS_CONFIG[instrument].defaultBucketWidth * getMultiplayerForTimeSpan(granularity),
121
121
  buckets,
122
122
  displayPrecision: pipsLocation,
123
123
  bookType,
@@ -125,10 +125,13 @@ export const useCrowdViewData = _ref => {
125
125
  sentimentThresholdMax
126
126
  }
127
127
  };
128
- }, [priceCandlesData, orderPositionData, sentimentsData, error, dates, candlesOpen, candlesClose, candlesLow, candlesHigh, bookPrices, bookIndexes, sentimentShorts, sentimentLongs, bucketWidth, buckets, pipsLocation, bookType, sentimentThresholdMin, sentimentThresholdMax]);
128
+ }, [priceCandlesData, error, dates, candlesOpen, candlesClose, candlesLow, candlesHigh, bookPrices, bookIndexes, sentimentShorts, sentimentLongs, bucketWidth, granularity, instrument, buckets, pipsLocation, bookType, sentimentThresholdMin, sentimentThresholdMax]);
129
129
  return {
130
130
  mainData: data === null || data === void 0 ? void 0 : data.mainData,
131
131
  additionalData: data === null || data === void 0 ? void 0 : data.additionalData,
132
+ priceCandlesLoading,
133
+ orderPositionLoading,
134
+ sentimentsLoading,
132
135
  loading,
133
136
  error: !!error
134
137
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useCrowdViewData.js","names":["useQuery","useMemo","getOrderPositionBooks","getPriceCandles","getSentiments","BookType","DataSource","Division","BUCKET_CONFIG","INSTRUMENTS_CONFIG","getTimeSpanForGranularity","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","minPrice","maxPrice","hasValidCandles","dates","candlesOpen","candlesClose","candlesLow","candlesHigh","pipsLocation","orderPositionLoading","orderPositionData","orderPositionError","Order","maxBookPrice","minBookPrice","bucketMultiplier","bucketMargin","PRICE_MARGIN_MULTIPLIER","skip","bookPrices","bookIndexes","buckets","bucketWidth","sentimentThresholdMin","sentimentThresholdMax","hasValidBooks","sentimentsLoading","sentimentsData","sentimentsError","sentimentLongs","sentimentShorts","hasValidSentiments","Error","concat","message","mainData","additionalData","displayPrecision"],"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 {\n getTimeSpanForGranularity,\n processOrderPositionBooks,\n processPriceCandles,\n processSentiments,\n validateData,\n} from './dataUtils';\nimport type { UseCrowdViewDataProps, UseCrowdViewDataReturn } from './types';\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\n // Get price candles data\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 {\n minPrice,\n maxPrice,\n hasValidCandles,\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n pipsLocation,\n } = useMemo(() => processPriceCandles(priceCandlesData), [priceCandlesData]);\n\n // Get order position books data\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: maxPrice,\n minBookPrice: minPrice,\n bucketMultiplier: 2,\n bucketMargin: BUCKET_CONFIG.PRICE_MARGIN_MULTIPLIER,\n },\n fetchPolicy: 'no-cache',\n skip: priceCandlesLoading || !!priceCandlesError,\n }\n );\n\n const {\n bookPrices,\n bookIndexes,\n buckets,\n bucketWidth,\n sentimentThresholdMin,\n sentimentThresholdMax,\n hasValidBooks,\n } = useMemo(\n () => processOrderPositionBooks(orderPositionData, dates),\n [orderPositionData, dates]\n );\n\n // Get sentiments data\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 { sentimentLongs, sentimentShorts, hasValidSentiments } = useMemo(\n () => processSentiments(sentimentsData, dates),\n [sentimentsData, dates]\n );\n\n // Gather all results\n const loading =\n priceCandlesLoading || orderPositionLoading || sentimentsLoading;\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(\n priceCandlesData,\n orderPositionData,\n hasValidCandles,\n hasValidBooks,\n hasValidSentiments\n );\n }, [\n priceCandlesError,\n orderPositionError,\n sentimentsError,\n loading,\n priceCandlesData,\n orderPositionData,\n hasValidCandles,\n hasValidBooks,\n hasValidSentiments,\n ]);\n\n const data = useMemo(() => {\n if (!priceCandlesData || !orderPositionData || !sentimentsData || error) {\n return null;\n }\n\n return {\n mainData: {\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n bookPrices,\n bookIndexes,\n sentimentShorts,\n sentimentLongs,\n },\n additionalData: {\n bucketWidth,\n buckets,\n displayPrecision: pipsLocation,\n bookType,\n sentimentThresholdMin,\n sentimentThresholdMax,\n },\n };\n }, [\n priceCandlesData,\n orderPositionData,\n sentimentsData,\n error,\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n bookPrices,\n bookIndexes,\n sentimentShorts,\n sentimentLongs,\n bucketWidth,\n buckets,\n pipsLocation,\n bookType,\n sentimentThresholdMin,\n sentimentThresholdMax,\n ]);\n\n return {\n mainData: data?.mainData,\n additionalData: data?.additionalData,\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","getMultiplayerForTimeSpan","getTimeSpanForGranularity","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","minPrice","maxPrice","hasValidCandles","dates","candlesOpen","candlesClose","candlesLow","candlesHigh","pipsLocation","orderPositionLoading","orderPositionData","orderPositionError","Order","maxBookPrice","minBookPrice","bucketMultiplier","bucketMargin","PRICE_MARGIN_MULTIPLIER","skip","bookPrices","bookIndexes","buckets","bucketWidth","sentimentThresholdMin","sentimentThresholdMax","hasValidBooks","sentimentsLoading","sentimentsData","sentimentsError","sentimentLongs","sentimentShorts","hasValidSentiments","Error","concat","message","mainData","additionalData","defaultBucketWidth","displayPrecision"],"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 {\n getMultiplayerForTimeSpan,\n getTimeSpanForGranularity,\n processOrderPositionBooks,\n processPriceCandles,\n processSentiments,\n validateData,\n} from './dataUtils';\nimport type { UseCrowdViewDataProps, UseCrowdViewDataReturn } from './types';\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\n // Get price candles data\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 {\n minPrice,\n maxPrice,\n hasValidCandles,\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n pipsLocation,\n } = useMemo(() => processPriceCandles(priceCandlesData), [priceCandlesData]);\n\n // Get order position books data\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: maxPrice,\n minBookPrice: minPrice,\n bucketMultiplier: getMultiplayerForTimeSpan(granularity),\n bucketMargin: BUCKET_CONFIG.PRICE_MARGIN_MULTIPLIER,\n },\n fetchPolicy: 'no-cache',\n skip: priceCandlesLoading || !!priceCandlesError,\n }\n );\n\n const {\n bookPrices,\n bookIndexes,\n buckets,\n bucketWidth,\n sentimentThresholdMin,\n sentimentThresholdMax,\n hasValidBooks,\n } = useMemo(\n () => processOrderPositionBooks(orderPositionData, dates),\n [orderPositionData, dates]\n );\n\n // Get sentiments data\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 { sentimentLongs, sentimentShorts, hasValidSentiments } = useMemo(\n () => processSentiments(sentimentsData, dates),\n [sentimentsData, dates]\n );\n\n // Gather all results\n const loading =\n priceCandlesLoading || orderPositionLoading || sentimentsLoading;\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(\n priceCandlesData,\n orderPositionData,\n hasValidCandles,\n hasValidBooks,\n hasValidSentiments\n );\n }, [\n priceCandlesError,\n orderPositionError,\n sentimentsError,\n loading,\n priceCandlesData,\n orderPositionData,\n hasValidCandles,\n hasValidBooks,\n hasValidSentiments,\n ]);\n\n const data = useMemo(() => {\n if (!priceCandlesData || error) {\n return null;\n }\n\n return {\n mainData: {\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n bookPrices,\n bookIndexes,\n sentimentShorts,\n sentimentLongs,\n },\n additionalData: {\n bucketWidth:\n bucketWidth ||\n INSTRUMENTS_CONFIG[instrument].defaultBucketWidth *\n getMultiplayerForTimeSpan(granularity),\n buckets,\n displayPrecision: pipsLocation,\n bookType,\n sentimentThresholdMin,\n sentimentThresholdMax,\n },\n };\n }, [\n priceCandlesData,\n error,\n dates,\n candlesOpen,\n candlesClose,\n candlesLow,\n candlesHigh,\n bookPrices,\n bookIndexes,\n sentimentShorts,\n sentimentLongs,\n bucketWidth,\n granularity,\n instrument,\n buckets,\n pipsLocation,\n bookType,\n sentimentThresholdMin,\n sentimentThresholdMax,\n ]);\n\n return {\n mainData: data?.mainData,\n additionalData: data?.additionalData,\n priceCandlesLoading,\n orderPositionLoading,\n sentimentsLoading,\n loading,\n error: !!error,\n };\n};\n"],"mappings":"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","ignoreList":[]}
@@ -21,7 +21,7 @@ export const Legend = _ref => {
21
21
  isDark: isDark,
22
22
  type: "long"
23
23
  }), React.createElement("div", {
24
- className: "lw-w-[250px]"
24
+ className: "lw-w-[200px]"
25
25
  }), React.createElement(LegendBar, {
26
26
  isDark: isDark,
27
27
  type: "short"
@@ -1 +1 @@
1
- {"version":3,"file":"Legend.js","names":["useLayoutProvider","useLocale","React","BookType","LegendBar","Legend","_ref","bookType","isDark","lang","createElement","className","type","Order"],"sources":["../../../../../src/CrowdViewWidget/components/Legend/Legend.tsx"],"sourcesContent":["import { useLayoutProvider } from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React from 'react';\n\nimport { BookType } from '../../../gql/types/graphql';\nimport { LegendBar } from './LegendBar';\n\ninterface LegendProps {\n bookType: BookType;\n}\n\nexport const Legend = ({ bookType }: LegendProps) => {\n const { isDark } = useLayoutProvider();\n const { lang } = useLocale();\n\n return (\n <div className=\"lw-my-4 lw-w-full\">\n <div className=\"lw-mb-1 lw-flex lw-w-full lw-flex-row lw-justify-between\">\n <LegendBar isDark={isDark} type=\"long\" />\n <div className=\"lw-w-[250px]\" />\n <LegendBar isDark={isDark} type=\"short\" />\n </div>\n <div className=\"lw-flex lw-w-full lw-flex-row lw-justify-between lw-pb-2 lw-font-sans lw-text-xs lw-text-text-primary\">\n <span>\n {lang(\n bookType === BookType.Order ? 'buy_overbalance' : 'long_overbalance'\n )}\n </span>\n <span>{lang('even_market_demand')}</span>\n <span>\n {lang(\n bookType === BookType.Order\n ? 'sell_overbalance'\n : 'short_overbalance'\n )}\n </span>\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,2BAA2B;AAC7D,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,QAAQ,QAAQ,4BAA4B;AACrD,SAASC,SAAS,QAAQ,aAAa;AAMvC,OAAO,MAAMC,MAAM,GAAGC,IAAA,IAA+B;EAAA,IAA9B;IAAEC;EAAsB,CAAC,GAAAD,IAAA;EAC9C,MAAM;IAAEE;EAAO,CAAC,GAAGR,iBAAiB,CAAC,CAAC;EACtC,MAAM;IAAES;EAAK,CAAC,GAAGR,SAAS,CAAC,CAAC;EAE5B,OACEC,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAAmB,GAChCT,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAA0D,GACvET,KAAA,CAAAQ,aAAA,CAACN,SAAS;IAACI,MAAM,EAAEA,MAAO;IAACI,IAAI,EAAC;EAAM,CAAE,CAAC,EACzCV,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAAc,CAAE,CAAC,EAChCT,KAAA,CAAAQ,aAAA,CAACN,SAAS;IAACI,MAAM,EAAEA,MAAO;IAACI,IAAI,EAAC;EAAO,CAAE,CACtC,CAAC,EACNV,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAAuG,GACpHT,KAAA,CAAAQ,aAAA,eACGD,IAAI,CACHF,QAAQ,KAAKJ,QAAQ,CAACU,KAAK,GAAG,iBAAiB,GAAG,kBACpD,CACI,CAAC,EACPX,KAAA,CAAAQ,aAAA,eAAOD,IAAI,CAAC,oBAAoB,CAAQ,CAAC,EACzCP,KAAA,CAAAQ,aAAA,eACGD,IAAI,CACHF,QAAQ,KAAKJ,QAAQ,CAACU,KAAK,GACvB,kBAAkB,GAClB,mBACN,CACI,CACH,CACF,CAAC;AAEV,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"Legend.js","names":["useLayoutProvider","useLocale","React","BookType","LegendBar","Legend","_ref","bookType","isDark","lang","createElement","className","type","Order"],"sources":["../../../../../src/CrowdViewWidget/components/Legend/Legend.tsx"],"sourcesContent":["import { useLayoutProvider } from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React from 'react';\n\nimport { BookType } from '../../../gql/types/graphql';\nimport { LegendBar } from './LegendBar';\n\ninterface LegendProps {\n bookType: BookType;\n}\n\nexport const Legend = ({ bookType }: LegendProps) => {\n const { isDark } = useLayoutProvider();\n const { lang } = useLocale();\n\n return (\n <div className=\"lw-my-4 lw-w-full\">\n <div className=\"lw-mb-1 lw-flex lw-w-full lw-flex-row lw-justify-between\">\n <LegendBar isDark={isDark} type=\"long\" />\n <div className=\"lw-w-[200px]\" />\n <LegendBar isDark={isDark} type=\"short\" />\n </div>\n <div className=\"lw-flex lw-w-full lw-flex-row lw-justify-between lw-pb-2 lw-font-sans lw-text-xs lw-text-text-primary\">\n <span>\n {lang(\n bookType === BookType.Order ? 'buy_overbalance' : 'long_overbalance'\n )}\n </span>\n <span>{lang('even_market_demand')}</span>\n <span>\n {lang(\n bookType === BookType.Order\n ? 'sell_overbalance'\n : 'short_overbalance'\n )}\n </span>\n </div>\n </div>\n );\n};\n"],"mappings":"AAAA,SAASA,iBAAiB,QAAQ,2BAA2B;AAC7D,SAASC,SAAS,QAAQ,kBAAkB;AAC5C,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,QAAQ,QAAQ,4BAA4B;AACrD,SAASC,SAAS,QAAQ,aAAa;AAMvC,OAAO,MAAMC,MAAM,GAAGC,IAAA,IAA+B;EAAA,IAA9B;IAAEC;EAAsB,CAAC,GAAAD,IAAA;EAC9C,MAAM;IAAEE;EAAO,CAAC,GAAGR,iBAAiB,CAAC,CAAC;EACtC,MAAM;IAAES;EAAK,CAAC,GAAGR,SAAS,CAAC,CAAC;EAE5B,OACEC,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAAmB,GAChCT,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAA0D,GACvET,KAAA,CAAAQ,aAAA,CAACN,SAAS;IAACI,MAAM,EAAEA,MAAO;IAACI,IAAI,EAAC;EAAM,CAAE,CAAC,EACzCV,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAAc,CAAE,CAAC,EAChCT,KAAA,CAAAQ,aAAA,CAACN,SAAS;IAACI,MAAM,EAAEA,MAAO;IAACI,IAAI,EAAC;EAAO,CAAE,CACtC,CAAC,EACNV,KAAA,CAAAQ,aAAA;IAAKC,SAAS,EAAC;EAAuG,GACpHT,KAAA,CAAAQ,aAAA,eACGD,IAAI,CACHF,QAAQ,KAAKJ,QAAQ,CAACU,KAAK,GAAG,iBAAiB,GAAG,kBACpD,CACI,CAAC,EACPX,KAAA,CAAAQ,aAAA,eAAOD,IAAI,CAAC,oBAAoB,CAAQ,CAAC,EACzCP,KAAA,CAAAQ,aAAA,eACGD,IAAI,CACHF,QAAQ,KAAKJ,QAAQ,CAACU,KAAK,GACvB,kBAAkB,GAClB,mBACN,CACI,CACH,CACF,CAAC;AAEV,CAAC","ignoreList":[]}
@@ -1,3 +1,4 @@
1
+ import { cn } from '@oanda/labs-widget-common';
1
2
  import React from 'react';
2
3
  import { COLOR_MAP } from '../../constants';
3
4
  export const LegendBar = _ref => {
@@ -8,14 +9,23 @@ export const LegendBar = _ref => {
8
9
  const colorPalette = isDark ? COLOR_MAP.dark : COLOR_MAP.light;
9
10
  const startColor = type === 'long' ? colorPalette.long[1] : colorPalette.short[0];
10
11
  const endColor = type === 'long' ? colorPalette.long[0] : colorPalette.short[1];
12
+ const endGradient = type === 'long' ? "linear-gradient(90deg,".concat(endColor, " 0%, transparent 100%)") : "linear-gradient(270deg,".concat(startColor, " 0%, transparent 100%)");
11
13
  return React.createElement("div", {
12
- className: "lw-flex lw-h-2 lw-w-full lw-overflow-hidden"
14
+ className: cn('lw-flex lw-h-2 lw-w-full lw-overflow-hidden', {
15
+ 'lw-flex-row-reverse': type === 'short'
16
+ })
13
17
  }, React.createElement("div", {
14
18
  className: "lw-h-full lw-flex-1",
15
19
  "data-testid": "legend-bar-segment",
16
20
  style: {
17
21
  background: "linear-gradient(90deg,".concat(startColor, " 0%, ").concat(endColor, " 100%)")
18
22
  }
23
+ }), React.createElement("div", {
24
+ className: "lw-h-full lw-w-[10px]",
25
+ "data-testid": "legend-bar-segment",
26
+ style: {
27
+ background: endGradient
28
+ }
19
29
  }));
20
30
  };
21
31
  //# sourceMappingURL=LegendBar.js.map