@oanda/labs-order-book-widget 1.0.71 → 1.0.72

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 (73) hide show
  1. package/CHANGELOG.md +276 -0
  2. package/dist/main/OrderBookWidget/ChartWithData.js +62 -0
  3. package/dist/main/OrderBookWidget/ChartWithData.js.map +1 -0
  4. package/dist/main/OrderBookWidget/Main.js +46 -0
  5. package/dist/main/OrderBookWidget/Main.js.map +1 -0
  6. package/dist/main/OrderBookWidget/OrderBookWidget.js +2 -2
  7. package/dist/main/OrderBookWidget/OrderBookWidget.js.map +1 -1
  8. package/dist/main/OrderBookWidget/components/Chart/Chart.js +16 -7
  9. package/dist/main/OrderBookWidget/components/Chart/Chart.js.map +1 -1
  10. package/dist/main/OrderBookWidget/components/Chart/constants.js +5 -3
  11. package/dist/main/OrderBookWidget/components/Chart/constants.js.map +1 -1
  12. package/dist/main/OrderBookWidget/components/Chart/formatters.js +10 -4
  13. package/dist/main/OrderBookWidget/components/Chart/formatters.js.map +1 -1
  14. package/dist/main/OrderBookWidget/components/Chart/getOption.js +81 -36
  15. package/dist/main/OrderBookWidget/components/Chart/getOption.js.map +1 -1
  16. package/dist/main/OrderBookWidget/components/Chart/types.js.map +1 -1
  17. package/dist/main/OrderBookWidget/config.js +69 -1
  18. package/dist/main/OrderBookWidget/config.js.map +1 -1
  19. package/dist/main/OrderBookWidget/types.js +20 -0
  20. package/dist/main/OrderBookWidget/types.js.map +1 -1
  21. package/dist/main/translations/sources/en.json +3 -0
  22. package/dist/main/translations/sources/zh_TW.json +3 -0
  23. package/dist/module/OrderBookWidget/ChartWithData.js +55 -0
  24. package/dist/module/OrderBookWidget/ChartWithData.js.map +1 -0
  25. package/dist/module/OrderBookWidget/Main.js +38 -0
  26. package/dist/module/OrderBookWidget/Main.js.map +1 -0
  27. package/dist/module/OrderBookWidget/OrderBookWidget.js +2 -2
  28. package/dist/module/OrderBookWidget/OrderBookWidget.js.map +1 -1
  29. package/dist/module/OrderBookWidget/components/Chart/Chart.js +17 -8
  30. package/dist/module/OrderBookWidget/components/Chart/Chart.js.map +1 -1
  31. package/dist/module/OrderBookWidget/components/Chart/constants.js +4 -2
  32. package/dist/module/OrderBookWidget/components/Chart/constants.js.map +1 -1
  33. package/dist/module/OrderBookWidget/components/Chart/formatters.js +10 -4
  34. package/dist/module/OrderBookWidget/components/Chart/formatters.js.map +1 -1
  35. package/dist/module/OrderBookWidget/components/Chart/getOption.js +80 -35
  36. package/dist/module/OrderBookWidget/components/Chart/getOption.js.map +1 -1
  37. package/dist/module/OrderBookWidget/components/Chart/types.js.map +1 -1
  38. package/dist/module/OrderBookWidget/config.js +69 -1
  39. package/dist/module/OrderBookWidget/config.js.map +1 -1
  40. package/dist/module/OrderBookWidget/types.js +19 -1
  41. package/dist/module/OrderBookWidget/types.js.map +1 -1
  42. package/dist/module/translations/sources/en.json +3 -0
  43. package/dist/module/translations/sources/zh_TW.json +3 -0
  44. package/dist/types/OrderBookWidget/ChartWithData.d.ts +4 -0
  45. package/dist/types/OrderBookWidget/Main.d.ts +4 -0
  46. package/dist/types/OrderBookWidget/components/Chart/Chart.d.ts +1 -1
  47. package/dist/types/OrderBookWidget/components/Chart/constants.d.ts +4 -2
  48. package/dist/types/OrderBookWidget/components/Chart/getOption.d.ts +16 -1
  49. package/dist/types/OrderBookWidget/components/Chart/types.d.ts +11 -1
  50. package/dist/types/OrderBookWidget/config.d.ts +7 -1
  51. package/dist/types/OrderBookWidget/types.d.ts +26 -3
  52. package/package.json +3 -3
  53. package/src/OrderBookWidget/ChartWithData.tsx +78 -0
  54. package/src/OrderBookWidget/Main.tsx +40 -0
  55. package/src/OrderBookWidget/OrderBookWidget.tsx +2 -2
  56. package/src/OrderBookWidget/components/Chart/Chart.tsx +12 -6
  57. package/src/OrderBookWidget/components/Chart/constants.ts +4 -2
  58. package/src/OrderBookWidget/components/Chart/formatters.ts +6 -4
  59. package/src/OrderBookWidget/components/Chart/getOption.ts +93 -39
  60. package/src/OrderBookWidget/components/Chart/types.ts +11 -3
  61. package/src/OrderBookWidget/config.ts +70 -1
  62. package/src/OrderBookWidget/types.ts +28 -3
  63. package/src/translations/sources/en.json +3 -0
  64. package/src/translations/sources/zh_TW.json +3 -0
  65. package/test/Main.test.tsx +129 -0
  66. package/test/chartOptions.test.ts +20 -0
  67. package/dist/main/OrderBookWidget/Widget.js +0 -61
  68. package/dist/main/OrderBookWidget/Widget.js.map +0 -1
  69. package/dist/module/OrderBookWidget/Widget.js +0 -53
  70. package/dist/module/OrderBookWidget/Widget.js.map +0 -1
  71. package/dist/types/OrderBookWidget/Widget.d.ts +0 -4
  72. package/src/OrderBookWidget/Widget.tsx +0 -62
  73. package/test/Widget.test.tsx +0 -71
@@ -3,29 +3,48 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.getOption = exports.getDesktopOption = void 0;
6
+ exports.getResponsiveOption = exports.getOption = void 0;
7
7
  var _labsWidgetCommon = require("@oanda/labs-widget-common");
8
8
  var _constants = require("./constants");
9
9
  var _formatters = require("./formatters");
10
- const getDesktopOption = _ref => {
10
+ const getResponsiveOption = _ref => {
11
11
  let {
12
12
  isDark,
13
- isOrderBook
13
+ isOrderBook,
14
+ isDesktop,
15
+ lang
14
16
  } = _ref;
15
17
  const desktopGridLines = (0, _labsWidgetCommon.getGridLines)({
16
18
  isDark,
17
19
  chartWidth: _constants.CHART_WIDTH,
18
- chartHeight: _constants.CHART_HEIGHT,
19
- xLabelsSize: _constants.X_LABEL_SIZE,
20
- yLabelSize: _constants.Y_LABEL_SIZE_DESKTOP
20
+ chartHeight: isDesktop ? _constants.CHART_HEIGHT_DESKTOP : _constants.CHART_HEIGHT_MOBILE,
21
+ xLabelsSize: isDesktop ? _constants.X_LABEL_SIZE : _constants.X_LABEL_SIZE + _constants.ZOOM_CONTROL_HEIGHT,
22
+ yLabelSize: isDesktop ? _constants.Y_LABEL_SIZE_DESKTOP : _constants.Y_LABEL_SIZE_MOBILE,
23
+ bottomLeftBox: isDesktop,
24
+ marginBottom: isDesktop ? 0 : _constants.ZOOM_CONTROL_HEIGHT
21
25
  });
22
26
  return {
23
27
  grid: [{
24
28
  name: 'main-grid',
25
29
  top: '48px',
26
30
  left: '0px',
27
- right: "".concat(_constants.Y_LABEL_SIZE_DESKTOP, "px"),
28
- bottom: "".concat(_constants.X_LABEL_SIZE, "px")
31
+ right: "".concat(isDesktop ? _constants.Y_LABEL_SIZE_DESKTOP : _constants.Y_LABEL_SIZE_MOBILE, "px"),
32
+ bottom: "".concat(isDesktop ? _constants.X_LABEL_SIZE : _constants.X_LABEL_SIZE + _constants.ZOOM_CONTROL_HEIGHT, "px")
33
+ }],
34
+ yAxis: {
35
+ axisLabel: {
36
+ margin: isDesktop ? 10 : 0
37
+ }
38
+ },
39
+ series: [{
40
+ type: 'custom',
41
+ name: 'current-price',
42
+ id: 'current-price',
43
+ markLine: {
44
+ label: {
45
+ padding: isDesktop ? [5, 15, 5, 15] : [5, 12, 5, 5]
46
+ }
47
+ }
29
48
  }],
30
49
  graphic: [...desktopGridLines, {
31
50
  type: 'group',
@@ -57,12 +76,12 @@ const getDesktopOption = _ref => {
57
76
  fill: isDark ? _labsWidgetCommon.colorPalette.white : _labsWidgetCommon.colorPalette.black,
58
77
  width: 70,
59
78
  height: 30,
60
- text: isOrderBook ? 'Sell' : 'Short'
79
+ text: lang(isOrderBook ? 'sell' : 'short')
61
80
  }
62
81
  }]
63
82
  }, {
64
83
  type: 'group',
65
- right: '128px',
84
+ right: "".concat((isDesktop ? _constants.Y_LABEL_SIZE_DESKTOP : _constants.Y_LABEL_SIZE_MOBILE) + 8, "px'"),
66
85
  top: '56px',
67
86
  silent: true,
68
87
  children: [{
@@ -90,24 +109,27 @@ const getDesktopOption = _ref => {
90
109
  fill: isDark ? _labsWidgetCommon.colorPalette.white : _labsWidgetCommon.colorPalette.black,
91
110
  width: 70,
92
111
  height: 30,
93
- text: isOrderBook ? 'Buy' : 'Long'
112
+ text: lang(isOrderBook ? 'buy' : 'long')
94
113
  }
95
114
  }]
96
115
  }]
97
116
  };
98
117
  };
99
- exports.getDesktopOption = getDesktopOption;
118
+ exports.getResponsiveOption = getResponsiveOption;
100
119
  const getOption = _ref2 => {
101
120
  var _data$orderPositionBo, _data$orderPositionBo2, _data$orderPositionBo3;
102
121
  let {
103
122
  data,
104
123
  precision,
105
124
  isDark,
106
- isOrderBook
125
+ isOrderBook,
126
+ isDesktop,
127
+ lang
107
128
  } = _ref2;
108
129
  const buckets = ((_data$orderPositionBo = data.orderPositionBooks[0]) === null || _data$orderPositionBo === void 0 ? void 0 : _data$orderPositionBo.buckets) || [];
109
130
  const bucketWidth = (_data$orderPositionBo2 = data.orderPositionBooks[0]) === null || _data$orderPositionBo2 === void 0 ? void 0 : _data$orderPositionBo2.bucketWidth;
110
131
  const price = (_data$orderPositionBo3 = data.orderPositionBooks[0]) === null || _data$orderPositionBo3 === void 0 ? void 0 : _data$orderPositionBo3.price;
132
+ const bucketPrecision = bucketWidth.toString().split('.')[1].length || 0;
111
133
  const dataset = buckets.map(item => [item.price, Number(item.longCountPercent), Number(item.shortCountPercent) * -1]);
112
134
  const zoomInitialStartValue = price - bucketWidth * _constants.INITIAL_BARS * 0.5;
113
135
  const zoomInitialEndValue = price + bucketWidth * _constants.INITIAL_BARS * 0.5;
@@ -118,7 +140,7 @@ const getOption = _ref2 => {
118
140
  animation: false,
119
141
  color: [_labsWidgetCommon.colorPalette.bottleGreenLight, isDark ? _labsWidgetCommon.colorPalette.orange : _labsWidgetCommon.colorPalette.raspberryDark],
120
142
  title: {
121
- text: isOrderBook ? 'OPEN ORDERS' : 'OPEN POSITIONS',
143
+ text: lang(isOrderBook ? 'open_orders' : 'open_positions').toUpperCase(),
122
144
  padding: 20,
123
145
  textStyle: {
124
146
  fontSize: 14
@@ -143,8 +165,21 @@ const getOption = _ref2 => {
143
165
  axisPointer: {
144
166
  axis: 'y'
145
167
  },
146
- formatter: val => (0, _formatters.tooltipFormatter)(val[0].data, precision, isOrderBook)
168
+ formatter: val => (0, _formatters.tooltipFormatter)({
169
+ data: val[0].data,
170
+ precision: bucketPrecision,
171
+ isOrderBook,
172
+ lang
173
+ }),
174
+ extraCssText: 'z-index: 1'
147
175
  },
176
+ grid: [{
177
+ name: 'main-grid',
178
+ top: '48px',
179
+ left: '0px',
180
+ right: "".concat(isDesktop ? _constants.Y_LABEL_SIZE_DESKTOP : _constants.Y_LABEL_SIZE_MOBILE, "px"),
181
+ bottom: "".concat(isDesktop ? _constants.X_LABEL_SIZE : _constants.X_LABEL_SIZE + _constants.ZOOM_CONTROL_HEIGHT, "px")
182
+ }],
148
183
  xAxis: {
149
184
  type: 'value',
150
185
  min: range * -1.05,
@@ -172,10 +207,11 @@ const getOption = _ref2 => {
172
207
  show: false
173
208
  },
174
209
  axisLabel: {
210
+ margin: isDesktop ? 10 : 0,
175
211
  showMaxLabel: false,
176
212
  showMinLabel: false,
177
213
  padding: [0, 0, 0, 10],
178
- formatter: value => value.toFixed(precision)
214
+ formatter: value => value.toFixed(bucketPrecision)
179
215
  }
180
216
  },
181
217
  dataset: {
@@ -183,6 +219,8 @@ const getOption = _ref2 => {
183
219
  },
184
220
  series: [{
185
221
  type: 'custom',
222
+ name: 'sell-short',
223
+ id: 'sell-short',
186
224
  clip: true,
187
225
  encode: {
188
226
  x: 1,
@@ -216,32 +254,14 @@ const getOption = _ref2 => {
216
254
  }
217
255
  }, {
218
256
  type: 'custom',
257
+ name: 'buy-long',
258
+ id: 'buy-long',
219
259
  clip: true,
220
260
  encode: {
221
261
  x: 1,
222
262
  y: 0,
223
263
  tooltip: 2
224
264
  },
225
- markLine: {
226
- animation: false,
227
- silent: true,
228
- precision: 4,
229
- symbol: ['none', 'triangle'],
230
- symbolRotate: 90,
231
- symbolSize: [20, 10],
232
- lineStyle: {
233
- color: isDark ? _labsWidgetCommon.colorPalette.orange : _labsWidgetCommon.colorPalette.bottleGreenDark,
234
- width: 1
235
- },
236
- label: {
237
- padding: [5, 15, 5, 15],
238
- color: isDark ? _labsWidgetCommon.colorPalette.black : _labsWidgetCommon.colorPalette.white,
239
- backgroundColor: isDark ? _labsWidgetCommon.colorPalette.orange : _labsWidgetCommon.colorPalette.bottleGreenDark
240
- },
241
- data: [{
242
- yAxis: price
243
- }]
244
- },
245
265
  renderItem: (params, api) => {
246
266
  const yValue = api.value(0);
247
267
  const xStart = api.coord([api.value(2), yValue]);
@@ -267,6 +287,31 @@ const getOption = _ref2 => {
267
287
  }
268
288
  };
269
289
  }
290
+ }, {
291
+ type: 'custom',
292
+ name: 'current-price',
293
+ id: 'current-price',
294
+ markLine: {
295
+ animation: false,
296
+ silent: true,
297
+ precision,
298
+ symbol: ['none', 'triangle'],
299
+ symbolRotate: 90,
300
+ symbolSize: [20, 10],
301
+ lineStyle: {
302
+ color: isDark ? _labsWidgetCommon.colorPalette.orange : _labsWidgetCommon.colorPalette.bottleGreenDark,
303
+ width: 1
304
+ },
305
+ label: {
306
+ padding: isDesktop ? [5, 15, 5, 15] : [5, 12, 5, 5],
307
+ color: isDark ? _labsWidgetCommon.colorPalette.black : _labsWidgetCommon.colorPalette.white,
308
+ backgroundColor: isDark ? _labsWidgetCommon.colorPalette.orange : _labsWidgetCommon.colorPalette.bottleGreenDark
309
+ },
310
+ data: [{
311
+ yAxis: price
312
+ }]
313
+ },
314
+ renderItem: () => null
270
315
  }]
271
316
  };
272
317
  };
@@ -1 +1 @@
1
- {"version":3,"file":"getOption.js","names":["_labsWidgetCommon","require","_constants","_formatters","getDesktopOption","_ref","isDark","isOrderBook","desktopGridLines","getGridLines","chartWidth","CHART_WIDTH","chartHeight","CHART_HEIGHT","xLabelsSize","X_LABEL_SIZE","yLabelSize","Y_LABEL_SIZE_DESKTOP","grid","name","top","left","right","concat","bottom","graphic","type","silent","children","z","shape","width","height","style","fill","colorPalette","darkGray","white","shadowBlur","shadowOffsetX","shadowOffsetY","shadowColor","black","text","exports","getOption","_ref2","_data$orderPositionBo","_data$orderPositionBo2","_data$orderPositionBo3","data","precision","buckets","orderPositionBooks","bucketWidth","price","dataset","map","item","Number","longCountPercent","shortCountPercent","zoomInitialStartValue","INITIAL_BARS","zoomInitialEndValue","max","Math","min","abs","range","animation","color","bottleGreenLight","orange","raspberryDark","title","padding","textStyle","fontSize","toolbox","feature","getZoomControls","resetStartValue","resetEndValue","dataZoom","realtime","startValue","endValue","yAxisIndex","minValueSpan","tooltip","trigger","axisPointer","axis","formatter","val","tooltipFormatter","xAxis","axisTick","show","axisLine","axisLabel","showMinLabel","showMaxLabel","value","yAxis","position","toFixed","source","series","clip","encode","x","y","renderItem","params","api","yValue","xStart","coord","xEnd","bucketWidthHeight","size","rectShape","emphasis","visual","markLine","symbol","symbolRotate","symbolSize","lineStyle","bottleGreenDark","label","backgroundColor"],"sources":["../../../../../src/OrderBookWidget/components/Chart/getOption.ts"],"sourcesContent":["import { colorPalette, getGridLines, getZoomControls } from '@oanda/labs-widget-common';\nimport {\n INITIAL_BARS, CHART_WIDTH, CHART_HEIGHT, X_LABEL_SIZE, Y_LABEL_SIZE_DESKTOP,\n} from './constants';\nimport { GetOptionType, GetResponsiveOptionsProps } from './types';\nimport { tooltipFormatter } from './formatters';\n\nexport const getDesktopOption = ({ isDark, isOrderBook }: GetResponsiveOptionsProps) => {\n const desktopGridLines = getGridLines({\n isDark,\n chartWidth: CHART_WIDTH,\n chartHeight: CHART_HEIGHT,\n xLabelsSize: X_LABEL_SIZE,\n yLabelSize: Y_LABEL_SIZE_DESKTOP,\n });\n\n return {\n grid: [\n {\n name: 'main-grid',\n top: '48px',\n left: '0px',\n right: `${Y_LABEL_SIZE_DESKTOP}px`,\n bottom: `${X_LABEL_SIZE}px`,\n },\n ],\n graphic: [\n ...desktopGridLines,\n {\n type: 'group',\n left: '8px',\n top: '56px',\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n left: 'center',\n top: 'middle',\n shape: {\n width: 70,\n height: 30,\n },\n style: {\n fill: isDark ? colorPalette.darkGray : colorPalette.white,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n z: 100,\n left: 'center',\n top: 'middle',\n style: {\n fill: isDark ? colorPalette.white : colorPalette.black,\n width: 70,\n height: 30,\n text: isOrderBook ? 'Sell' : 'Short',\n },\n },\n ],\n },\n {\n type: 'group',\n right: '128px',\n top: '56px',\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n right: 'center',\n top: 'middle',\n shape: {\n width: 70,\n height: 30,\n },\n style: {\n fill: isDark ? colorPalette.darkGray : colorPalette.white,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n z: 100,\n right: 'center',\n top: 'middle',\n style: {\n fill: isDark ? colorPalette.white : colorPalette.black,\n width: 70,\n height: 30,\n text: isOrderBook ? 'Buy' : 'Long',\n },\n },\n ],\n },\n ],\n };\n};\n\nexport const getOption: GetOptionType = ({\n data, precision, isDark, isOrderBook,\n}) => {\n const buckets = data.orderPositionBooks[0]?.buckets || [];\n const bucketWidth = data.orderPositionBooks[0]?.bucketWidth!;\n const price = data.orderPositionBooks[0]?.price!;\n\n const dataset = buckets.map((item) => ([\n item!.price,\n Number(item!.longCountPercent),\n Number(item!.shortCountPercent) * -1,\n ]));\n\n const zoomInitialStartValue = price - (bucketWidth * INITIAL_BARS * 0.5);\n const zoomInitialEndValue = price + (bucketWidth * INITIAL_BARS * 0.5);\n\n const max = Math.max(...dataset.map((item) => item[1]));\n const min = Math.abs(Math.min(...dataset.map((item) => item[2])));\n\n const range = max > min ? max : min;\n\n return (\n {\n animation: false,\n color: [\n colorPalette.bottleGreenLight,\n isDark ? colorPalette.orange : colorPalette.raspberryDark,\n ],\n title: {\n text: isOrderBook ? 'OPEN ORDERS' : 'OPEN POSITIONS',\n padding: 20,\n textStyle: {\n fontSize: 14,\n },\n },\n toolbox: {\n feature: getZoomControls({\n resetStartValue: zoomInitialStartValue,\n resetEndValue: zoomInitialEndValue,\n }),\n },\n dataZoom: [\n {\n type: 'inside',\n realtime: true,\n startValue: zoomInitialStartValue,\n endValue: zoomInitialEndValue,\n\n yAxisIndex: 0,\n minValueSpan: 10 * bucketWidth,\n },\n ],\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n axis: 'y',\n },\n formatter: (val) => tooltipFormatter(\n (val as { data: number[] }[])[0].data,\n precision,\n isOrderBook,\n ),\n },\n xAxis: {\n type: 'value',\n min: range * -1.05,\n max: range * 1.05,\n axisTick: { show: false },\n axisLine: { show: false },\n axisLabel: {\n padding: [7, 0, 0, 0],\n showMinLabel: false,\n showMaxLabel: false,\n formatter: (value) => (value === 0 ? '%' : `${Math.abs(value)}%`),\n },\n },\n yAxis: {\n type: 'value',\n position: 'right',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n showMaxLabel: false,\n showMinLabel: false,\n padding: [0, 0, 0, 10],\n formatter: (value) => value.toFixed(precision),\n },\n },\n dataset: {\n source: dataset,\n },\n series: [\n {\n type: 'custom',\n clip: true,\n encode: {\n x: 1,\n y: 0,\n tooltip: 1,\n },\n renderItem: (params, api) => {\n const yValue = api.value(0);\n const xStart = api.coord([api.value(1), yValue]);\n const xEnd = api.coord([0, yValue]);\n const bucketWidthHeight = api.size ? (api.size([0, bucketWidth]) as number[])[1] : 0;\n const height = bucketWidthHeight > 4 ? bucketWidthHeight * 0.8 : bucketWidthHeight;\n\n const rectShape = {\n x: xStart[0] + 0.5,\n y: xStart[1] - height / 2,\n width: xEnd[0] - xStart[0],\n height,\n };\n\n return {\n type: 'rect',\n shape: rectShape,\n emphasis: {\n style: {\n fill: colorPalette.bottleGreenLight,\n },\n },\n style: {\n fill: api.visual('color'),\n },\n };\n },\n },\n {\n type: 'custom',\n clip: true,\n encode: {\n x: 1,\n y: 0,\n tooltip: 2,\n },\n markLine: {\n animation: false,\n silent: true,\n precision: 4,\n symbol: ['none', 'triangle'],\n symbolRotate: 90,\n symbolSize: [20, 10],\n lineStyle: {\n color: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,\n width: 1,\n },\n label: {\n padding: [5, 15, 5, 15],\n color: isDark ? colorPalette.black : colorPalette.white,\n backgroundColor: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,\n },\n data: [\n {\n yAxis: price,\n },\n ],\n },\n renderItem: (params, api) => {\n const yValue = api.value(0);\n const xStart = api.coord([api.value(2), yValue]);\n const xEnd = api.coord([0, yValue]);\n const bucketWidthHeight = api.size ? (api.size([0, bucketWidth]) as number[])[1] : 0;\n const height = bucketWidthHeight > 4 ? bucketWidthHeight * 0.8 : bucketWidthHeight;\n\n const rectShape = {\n x: xStart[0] - 0.5,\n y: xStart[1] - height / 2,\n width: xEnd[0] - xStart[0],\n height,\n };\n\n return {\n type: 'rect',\n shape: rectShape,\n emphasis: {\n style: {\n fill: isDark ? colorPalette.orange : colorPalette.raspberryDark,\n },\n },\n style: {\n fill: api.visual('color'),\n },\n };\n },\n },\n ],\n }\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"getOption.js","names":["_labsWidgetCommon","require","_constants","_formatters","getResponsiveOption","_ref","isDark","isOrderBook","isDesktop","lang","desktopGridLines","getGridLines","chartWidth","CHART_WIDTH","chartHeight","CHART_HEIGHT_DESKTOP","CHART_HEIGHT_MOBILE","xLabelsSize","X_LABEL_SIZE","ZOOM_CONTROL_HEIGHT","yLabelSize","Y_LABEL_SIZE_DESKTOP","Y_LABEL_SIZE_MOBILE","bottomLeftBox","marginBottom","grid","name","top","left","right","concat","bottom","yAxis","axisLabel","margin","series","type","id","markLine","label","padding","graphic","silent","children","z","shape","width","height","style","fill","colorPalette","darkGray","white","shadowBlur","shadowOffsetX","shadowOffsetY","shadowColor","black","text","exports","getOption","_ref2","_data$orderPositionBo","_data$orderPositionBo2","_data$orderPositionBo3","data","precision","buckets","orderPositionBooks","bucketWidth","price","bucketPrecision","toString","split","length","dataset","map","item","Number","longCountPercent","shortCountPercent","zoomInitialStartValue","INITIAL_BARS","zoomInitialEndValue","max","Math","min","abs","range","animation","color","bottleGreenLight","orange","raspberryDark","title","toUpperCase","textStyle","fontSize","toolbox","feature","getZoomControls","resetStartValue","resetEndValue","dataZoom","realtime","startValue","endValue","yAxisIndex","minValueSpan","tooltip","trigger","axisPointer","axis","formatter","val","tooltipFormatter","extraCssText","xAxis","axisTick","show","axisLine","showMinLabel","showMaxLabel","value","position","toFixed","source","clip","encode","x","y","renderItem","params","api","yValue","xStart","coord","xEnd","bucketWidthHeight","size","rectShape","emphasis","visual","symbol","symbolRotate","symbolSize","lineStyle","bottleGreenDark","backgroundColor"],"sources":["../../../../../src/OrderBookWidget/components/Chart/getOption.ts"],"sourcesContent":["import { colorPalette, getGridLines, getZoomControls } from '@oanda/labs-widget-common';\nimport {\n INITIAL_BARS,\n CHART_WIDTH,\n CHART_HEIGHT_DESKTOP,\n CHART_HEIGHT_MOBILE,\n X_LABEL_SIZE,\n Y_LABEL_SIZE_DESKTOP,\n Y_LABEL_SIZE_MOBILE,\n ZOOM_CONTROL_HEIGHT,\n} from './constants';\nimport { GetOptionType, GetResponsiveOptionsProps } from './types';\nimport { tooltipFormatter } from './formatters';\n\nexport const getResponsiveOption = (\n {\n isDark, isOrderBook, isDesktop, lang,\n }\n : GetResponsiveOptionsProps,\n) => {\n const desktopGridLines = getGridLines({\n isDark,\n chartWidth: CHART_WIDTH,\n chartHeight: isDesktop ? CHART_HEIGHT_DESKTOP : CHART_HEIGHT_MOBILE,\n xLabelsSize: isDesktop ? X_LABEL_SIZE : X_LABEL_SIZE + ZOOM_CONTROL_HEIGHT,\n yLabelSize: isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE,\n bottomLeftBox: isDesktop,\n marginBottom: isDesktop ? 0 : ZOOM_CONTROL_HEIGHT,\n });\n\n return {\n grid: [\n {\n name: 'main-grid',\n top: '48px',\n left: '0px',\n right: `${isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE}px`,\n bottom: `${isDesktop ? X_LABEL_SIZE : X_LABEL_SIZE + ZOOM_CONTROL_HEIGHT}px`,\n },\n ],\n yAxis: {\n axisLabel: {\n margin: isDesktop ? 10 : 0,\n },\n },\n series: [\n {\n type: 'custom',\n name: 'current-price',\n id: 'current-price',\n markLine: {\n label: {\n padding: isDesktop ? [5, 15, 5, 15] : [5, 12, 5, 5],\n },\n },\n },\n ],\n graphic: [\n ...desktopGridLines,\n {\n type: 'group',\n left: '8px',\n top: '56px',\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n left: 'center',\n top: 'middle',\n shape: {\n width: 70,\n height: 30,\n },\n style: {\n fill: isDark ? colorPalette.darkGray : colorPalette.white,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n z: 100,\n left: 'center',\n top: 'middle',\n style: {\n fill: isDark ? colorPalette.white : colorPalette.black,\n width: 70,\n height: 30,\n text: lang(isOrderBook ? 'sell' : 'short'),\n },\n },\n ],\n },\n {\n type: 'group',\n right: `${(isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE) + 8}px'`,\n top: '56px',\n silent: true,\n children: [\n {\n type: 'rect',\n z: 100,\n right: 'center',\n top: 'middle',\n shape: {\n width: 70,\n height: 30,\n },\n style: {\n fill: isDark ? colorPalette.darkGray : colorPalette.white,\n shadowBlur: 8,\n shadowOffsetX: 0,\n shadowOffsetY: 1,\n shadowColor: 'rgba(0,0,0,0.1)',\n },\n },\n {\n type: 'text',\n z: 100,\n right: 'center',\n top: 'middle',\n style: {\n fill: isDark ? colorPalette.white : colorPalette.black,\n width: 70,\n height: 30,\n text: lang(isOrderBook ? 'buy' : 'long'),\n },\n },\n ],\n },\n ],\n };\n};\n\nexport const getOption: GetOptionType = ({\n data, precision, isDark, isOrderBook, isDesktop, lang,\n}) => {\n const buckets = data.orderPositionBooks[0]?.buckets || [];\n const bucketWidth = data.orderPositionBooks[0]?.bucketWidth!;\n const price = data.orderPositionBooks[0]?.price!;\n const bucketPrecision = bucketWidth.toString().split('.')[1].length || 0;\n\n const dataset = buckets.map((item) => ([\n item!.price,\n Number(item!.longCountPercent),\n Number(item!.shortCountPercent) * -1,\n ]));\n\n const zoomInitialStartValue = price - (bucketWidth * INITIAL_BARS * 0.5);\n const zoomInitialEndValue = price + (bucketWidth * INITIAL_BARS * 0.5);\n\n const max = Math.max(...dataset.map((item) => item[1]));\n const min = Math.abs(Math.min(...dataset.map((item) => item[2])));\n\n const range = max > min ? max : min;\n\n return (\n {\n animation: false,\n color: [\n colorPalette.bottleGreenLight,\n isDark ? colorPalette.orange : colorPalette.raspberryDark,\n ],\n title: {\n text: lang(isOrderBook ? 'open_orders' : 'open_positions').toUpperCase(),\n padding: 20,\n textStyle: {\n fontSize: 14,\n },\n },\n toolbox: {\n feature: getZoomControls({\n resetStartValue: zoomInitialStartValue,\n resetEndValue: zoomInitialEndValue,\n }),\n },\n dataZoom: [\n {\n type: 'inside',\n realtime: true,\n startValue: zoomInitialStartValue,\n endValue: zoomInitialEndValue,\n\n yAxisIndex: 0,\n minValueSpan: 10 * bucketWidth,\n },\n ],\n tooltip: {\n trigger: 'axis',\n axisPointer: {\n axis: 'y',\n },\n formatter: (val) => tooltipFormatter({\n data: (val as { data: number[] }[])[0].data,\n precision: bucketPrecision,\n isOrderBook,\n lang,\n }),\n extraCssText: 'z-index: 1',\n },\n grid: [\n {\n name: 'main-grid',\n top: '48px',\n left: '0px',\n right: `${isDesktop ? Y_LABEL_SIZE_DESKTOP : Y_LABEL_SIZE_MOBILE}px`,\n bottom: `${isDesktop ? X_LABEL_SIZE : X_LABEL_SIZE + ZOOM_CONTROL_HEIGHT}px`,\n },\n ],\n xAxis: {\n type: 'value',\n min: range * -1.05,\n max: range * 1.05,\n axisTick: { show: false },\n axisLine: { show: false },\n axisLabel: {\n padding: [7, 0, 0, 0],\n showMinLabel: false,\n showMaxLabel: false,\n formatter: (value) => (value === 0 ? '%' : `${Math.abs(value)}%`),\n },\n },\n yAxis: {\n type: 'value',\n position: 'right',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n margin: isDesktop ? 10 : 0,\n showMaxLabel: false,\n showMinLabel: false,\n padding: [0, 0, 0, 10],\n formatter: (value) => value.toFixed(bucketPrecision),\n },\n },\n dataset: {\n source: dataset,\n },\n series: [\n {\n type: 'custom',\n name: 'sell-short',\n id: 'sell-short',\n clip: true,\n encode: {\n x: 1,\n y: 0,\n tooltip: 1,\n },\n renderItem: (params, api) => {\n const yValue = api.value(0);\n const xStart = api.coord([api.value(1), yValue]);\n const xEnd = api.coord([0, yValue]);\n const bucketWidthHeight = api.size ? (api.size([0, bucketWidth]) as number[])[1] : 0;\n const height = bucketWidthHeight > 4 ? bucketWidthHeight * 0.8 : bucketWidthHeight;\n\n const rectShape = {\n x: xStart[0] + 0.5,\n y: xStart[1] - height / 2,\n width: xEnd[0] - xStart[0],\n height,\n };\n\n return {\n type: 'rect',\n shape: rectShape,\n emphasis: {\n style: {\n fill: colorPalette.bottleGreenLight,\n },\n },\n style: {\n fill: api.visual('color'),\n },\n };\n },\n },\n {\n type: 'custom',\n name: 'buy-long',\n id: 'buy-long',\n clip: true,\n encode: {\n x: 1,\n y: 0,\n tooltip: 2,\n },\n renderItem: (params, api) => {\n const yValue = api.value(0);\n const xStart = api.coord([api.value(2), yValue]);\n const xEnd = api.coord([0, yValue]);\n const bucketWidthHeight = api.size ? (api.size([0, bucketWidth]) as number[])[1] : 0;\n const height = bucketWidthHeight > 4 ? bucketWidthHeight * 0.8 : bucketWidthHeight;\n\n const rectShape = {\n x: xStart[0] - 0.5,\n y: xStart[1] - height / 2,\n width: xEnd[0] - xStart[0],\n height,\n };\n\n return {\n type: 'rect',\n shape: rectShape,\n emphasis: {\n style: {\n fill: isDark ? colorPalette.orange : colorPalette.raspberryDark,\n },\n },\n style: {\n fill: api.visual('color'),\n },\n };\n },\n },\n {\n type: 'custom',\n name: 'current-price',\n id: 'current-price',\n markLine: {\n animation: false,\n silent: true,\n precision,\n symbol: ['none', 'triangle'],\n symbolRotate: 90,\n symbolSize: [20, 10],\n lineStyle: {\n color: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,\n width: 1,\n },\n label: {\n padding: isDesktop ? [5, 15, 5, 15] : [5, 12, 5, 5],\n color: isDark ? colorPalette.black : colorPalette.white,\n backgroundColor: isDark ? colorPalette.orange : colorPalette.bottleGreenDark,\n },\n data: [\n {\n yAxis: price,\n },\n ],\n },\n renderItem: () => null,\n },\n ],\n }\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/OrderBookWidget/components/Chart/types.ts"],"sourcesContent":["import { EChartsOption } from 'echarts';\nimport { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';\n\nexport interface ChartProps {\n data: GetOrderPositionBooksQuery;\n isOrderBook: boolean;\n}\n\nexport interface GetResponsiveOptionsProps {\n isDark: boolean;\n isOrderBook: boolean;\n}\n\nexport interface GetOptionProps {\n data: GetOrderPositionBooksQuery;\n precision: number;\n isDark: boolean;\n isOrderBook: boolean;\n}\n\nexport type GetOptionType = (\n props: GetOptionProps,\n) => EChartsOption;\n\nexport type TooltipFormatterType = (\n data: number[],\n precision: number,\n isOrderBook: boolean,\n) => string;\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../../../src/OrderBookWidget/components/Chart/types.ts"],"sourcesContent":["import { EChartsOption } from 'echarts';\nimport { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';\n\nexport interface ChartProps {\n data: GetOrderPositionBooksQuery;\n isOrderBook: boolean;\n precision: number;\n}\n\nexport interface GetResponsiveOptionsProps {\n isDesktop: boolean;\n isDark: boolean;\n isOrderBook: boolean;\n lang: (label: string) => string;\n}\n\nexport interface GetOptionProps {\n data: GetOrderPositionBooksQuery;\n precision: number;\n isDark: boolean;\n isOrderBook: boolean;\n isDesktop: boolean;\n lang: (label: string) => string;\n}\n\nexport type GetOptionType = (\n props: GetOptionProps,\n) => EChartsOption;\n\nexport type TooltipFormatterType = (\n props : {\n data: number[],\n precision: number,\n isOrderBook: boolean,\n lang: (label: string) => string;\n }\n) => string;\n"],"mappings":""}
@@ -3,8 +3,9 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.navigationConfig = void 0;
6
+ exports.navigationConfig = exports.instrumentSelectConfig = exports.instrumentPrecisionConfig = void 0;
7
7
  var _graphql = require("../gql/types/graphql");
8
+ var _types = require("./types");
8
9
  const navigationConfig = exports.navigationConfig = [{
9
10
  id: _graphql.BookType.Order,
10
11
  label: 'order_book'
@@ -12,4 +13,71 @@ const navigationConfig = exports.navigationConfig = [{
12
13
  id: _graphql.BookType.Position,
13
14
  label: 'position_book'
14
15
  }];
16
+ const instrumentSelectConfig = exports.instrumentSelectConfig = [{
17
+ id: _types.InstrumentId.EUR_AUD,
18
+ label: 'EUR/AUD'
19
+ }, {
20
+ id: _types.InstrumentId.EUR_GBP,
21
+ label: 'EUR/GBP'
22
+ }, {
23
+ id: _types.InstrumentId.EUR_JPY,
24
+ label: 'EUR/JPY'
25
+ }, {
26
+ id: _types.InstrumentId.EUR_USD,
27
+ label: 'EUR/USD'
28
+ }, {
29
+ id: _types.InstrumentId.EUR_CHF,
30
+ label: 'EUR/CHF'
31
+ }, {
32
+ id: _types.InstrumentId.USD_CHF,
33
+ label: 'USD/CHF'
34
+ }, {
35
+ id: _types.InstrumentId.USD_JPY,
36
+ label: 'USD/JPY'
37
+ }, {
38
+ id: _types.InstrumentId.USD_CAD,
39
+ label: 'USD/CAD'
40
+ }, {
41
+ id: _types.InstrumentId.GBP_USD,
42
+ label: 'GBP/USD'
43
+ }, {
44
+ id: _types.InstrumentId.GBP_JPY,
45
+ label: 'GBP/JPY'
46
+ }, {
47
+ id: _types.InstrumentId.GBP_CHF,
48
+ label: 'GBP/CHF'
49
+ }, {
50
+ id: _types.InstrumentId.AUD_JPY,
51
+ label: 'AUD/JPY'
52
+ }, {
53
+ id: _types.InstrumentId.AUD_USD,
54
+ label: 'AUD/USD'
55
+ }, {
56
+ id: _types.InstrumentId.NZD_USD,
57
+ label: 'NZD/USD'
58
+ }, {
59
+ id: _types.InstrumentId.XAU_USD,
60
+ label: 'XAU/USD'
61
+ }, {
62
+ id: _types.InstrumentId.XAG_USD,
63
+ label: 'XAG/USD'
64
+ }];
65
+ const instrumentPrecisionConfig = exports.instrumentPrecisionConfig = {
66
+ [_types.InstrumentId.EUR_AUD]: 5,
67
+ [_types.InstrumentId.EUR_GBP]: 5,
68
+ [_types.InstrumentId.EUR_JPY]: 3,
69
+ [_types.InstrumentId.EUR_USD]: 5,
70
+ [_types.InstrumentId.EUR_CHF]: 5,
71
+ [_types.InstrumentId.USD_CHF]: 5,
72
+ [_types.InstrumentId.USD_JPY]: 3,
73
+ [_types.InstrumentId.USD_CAD]: 5,
74
+ [_types.InstrumentId.GBP_USD]: 5,
75
+ [_types.InstrumentId.GBP_JPY]: 3,
76
+ [_types.InstrumentId.GBP_CHF]: 5,
77
+ [_types.InstrumentId.AUD_JPY]: 3,
78
+ [_types.InstrumentId.AUD_USD]: 5,
79
+ [_types.InstrumentId.NZD_USD]: 5,
80
+ [_types.InstrumentId.XAU_USD]: 3,
81
+ [_types.InstrumentId.XAG_USD]: 5
82
+ };
15
83
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","names":["_graphql","require","navigationConfig","exports","id","BookType","Order","label","Position"],"sources":["../../../src/OrderBookWidget/config.ts"],"sourcesContent":["import { BookType } from '../gql/types/graphql';\n\nconst navigationConfig = [{\n id: BookType.Order,\n label: 'order_book',\n}, {\n id: BookType.Position,\n label: 'position_book',\n}];\n\nexport { navigationConfig };\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AAEA,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,CAAC;EACxBE,EAAE,EAAEC,iBAAQ,CAACC,KAAK;EAClBC,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEC,iBAAQ,CAACG,QAAQ;EACrBD,KAAK,EAAE;AACT,CAAC,CAAC"}
1
+ {"version":3,"file":"config.js","names":["_graphql","require","_types","navigationConfig","exports","id","BookType","Order","label","Position","instrumentSelectConfig","InstrumentId","EUR_AUD","EUR_GBP","EUR_JPY","EUR_USD","EUR_CHF","USD_CHF","USD_JPY","USD_CAD","GBP_USD","GBP_JPY","GBP_CHF","AUD_JPY","AUD_USD","NZD_USD","XAU_USD","XAG_USD","instrumentPrecisionConfig"],"sources":["../../../src/OrderBookWidget/config.ts"],"sourcesContent":["import { BookType } from '../gql/types/graphql';\nimport { InstrumentId } from './types';\n\nconst navigationConfig = [{\n id: BookType.Order,\n label: 'order_book',\n}, {\n id: BookType.Position,\n label: 'position_book',\n}];\n\nconst instrumentSelectConfig = [{\n id: InstrumentId.EUR_AUD,\n label: 'EUR/AUD',\n}, {\n id: InstrumentId.EUR_GBP,\n label: 'EUR/GBP',\n}, {\n id: InstrumentId.EUR_JPY,\n label: 'EUR/JPY',\n}, {\n id: InstrumentId.EUR_USD,\n label: 'EUR/USD',\n}, {\n id: InstrumentId.EUR_CHF,\n label: 'EUR/CHF',\n}, {\n id: InstrumentId.USD_CHF,\n label: 'USD/CHF',\n}, {\n id: InstrumentId.USD_JPY,\n label: 'USD/JPY',\n}, {\n id: InstrumentId.USD_CAD,\n label: 'USD/CAD',\n}, {\n id: InstrumentId.GBP_USD,\n label: 'GBP/USD',\n}, {\n id: InstrumentId.GBP_JPY,\n label: 'GBP/JPY',\n}, {\n id: InstrumentId.GBP_CHF,\n label: 'GBP/CHF',\n}, {\n id: InstrumentId.AUD_JPY,\n label: 'AUD/JPY',\n}, {\n id: InstrumentId.AUD_USD,\n label: 'AUD/USD',\n}, {\n id: InstrumentId.NZD_USD,\n label: 'NZD/USD',\n}, {\n id: InstrumentId.XAU_USD,\n label: 'XAU/USD',\n}, {\n id: InstrumentId.XAG_USD,\n label: 'XAG/USD',\n}];\n\nconst instrumentPrecisionConfig: Record<InstrumentId, number> = {\n [InstrumentId.EUR_AUD]: 5,\n [InstrumentId.EUR_GBP]: 5,\n [InstrumentId.EUR_JPY]: 3,\n [InstrumentId.EUR_USD]: 5,\n [InstrumentId.EUR_CHF]: 5,\n [InstrumentId.USD_CHF]: 5,\n [InstrumentId.USD_JPY]: 3,\n [InstrumentId.USD_CAD]: 5,\n [InstrumentId.GBP_USD]: 5,\n [InstrumentId.GBP_JPY]: 3,\n [InstrumentId.GBP_CHF]: 5,\n [InstrumentId.AUD_JPY]: 3,\n [InstrumentId.AUD_USD]: 5,\n [InstrumentId.NZD_USD]: 5,\n [InstrumentId.XAU_USD]: 3,\n [InstrumentId.XAG_USD]: 5,\n};\nexport { navigationConfig, instrumentSelectConfig, instrumentPrecisionConfig };\n"],"mappings":";;;;;;AAAA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAD,OAAA;AAEA,MAAME,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,GAAG,CAAC;EACxBE,EAAE,EAAEC,iBAAQ,CAACC,KAAK;EAClBC,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEC,iBAAQ,CAACG,QAAQ;EACrBD,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,MAAME,sBAAsB,GAAAN,OAAA,CAAAM,sBAAA,GAAG,CAAC;EAC9BL,EAAE,EAAEM,mBAAY,CAACC,OAAO;EACxBJ,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACE,OAAO;EACxBL,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACG,OAAO;EACxBN,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACI,OAAO;EACxBP,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACK,OAAO;EACxBR,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACM,OAAO;EACxBT,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACO,OAAO;EACxBV,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACQ,OAAO;EACxBX,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACS,OAAO;EACxBZ,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACU,OAAO;EACxBb,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACW,OAAO;EACxBd,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACY,OAAO;EACxBf,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACa,OAAO;EACxBhB,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACc,OAAO;EACxBjB,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACe,OAAO;EACxBlB,KAAK,EAAE;AACT,CAAC,EAAE;EACDH,EAAE,EAAEM,mBAAY,CAACgB,OAAO;EACxBnB,KAAK,EAAE;AACT,CAAC,CAAC;AAEF,MAAMoB,yBAAuD,GAAAxB,OAAA,CAAAwB,yBAAA,GAAG;EAC9D,CAACjB,mBAAY,CAACC,OAAO,GAAG,CAAC;EACzB,CAACD,mBAAY,CAACE,OAAO,GAAG,CAAC;EACzB,CAACF,mBAAY,CAACG,OAAO,GAAG,CAAC;EACzB,CAACH,mBAAY,CAACI,OAAO,GAAG,CAAC;EACzB,CAACJ,mBAAY,CAACK,OAAO,GAAG,CAAC;EACzB,CAACL,mBAAY,CAACM,OAAO,GAAG,CAAC;EACzB,CAACN,mBAAY,CAACO,OAAO,GAAG,CAAC;EACzB,CAACP,mBAAY,CAACQ,OAAO,GAAG,CAAC;EACzB,CAACR,mBAAY,CAACS,OAAO,GAAG,CAAC;EACzB,CAACT,mBAAY,CAACU,OAAO,GAAG,CAAC;EACzB,CAACV,mBAAY,CAACW,OAAO,GAAG,CAAC;EACzB,CAACX,mBAAY,CAACY,OAAO,GAAG,CAAC;EACzB,CAACZ,mBAAY,CAACa,OAAO,GAAG,CAAC;EACzB,CAACb,mBAAY,CAACc,OAAO,GAAG,CAAC;EACzB,CAACd,mBAAY,CAACe,OAAO,GAAG,CAAC;EACzB,CAACf,mBAAY,CAACgB,OAAO,GAAG;AAC1B,CAAC"}
@@ -3,4 +3,24 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.InstrumentId = void 0;
7
+ let InstrumentId = exports.InstrumentId = function (InstrumentId) {
8
+ InstrumentId["EUR_AUD"] = "EUR_AUD";
9
+ InstrumentId["EUR_GBP"] = "EUR_GBP";
10
+ InstrumentId["EUR_JPY"] = "EUR_JPY";
11
+ InstrumentId["EUR_USD"] = "EUR_USD";
12
+ InstrumentId["EUR_CHF"] = "EUR_CHF";
13
+ InstrumentId["USD_CHF"] = "USD_CHF";
14
+ InstrumentId["USD_JPY"] = "USD_JPY";
15
+ InstrumentId["USD_CAD"] = "USD_CAD";
16
+ InstrumentId["GBP_USD"] = "GBP_USD";
17
+ InstrumentId["GBP_JPY"] = "GBP_JPY";
18
+ InstrumentId["GBP_CHF"] = "GBP_CHF";
19
+ InstrumentId["AUD_JPY"] = "AUD_JPY";
20
+ InstrumentId["AUD_USD"] = "AUD_USD";
21
+ InstrumentId["NZD_USD"] = "NZD_USD";
22
+ InstrumentId["XAU_USD"] = "XAU_USD";
23
+ InstrumentId["XAG_USD"] = "XAG_USD";
24
+ return InstrumentId;
25
+ }({});
6
26
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["import { Theme } from '@oanda/labs-widget-common';\nimport { Locale } from '@oanda/mono-i18n';\n\nexport interface OrderBookWidgetConfig {\n graphqlUrl: string;\n instrument: string;\n locale: Locale;\n theme?: Theme;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface WidgetProps {\n instrument: string;\n}\n"],"mappings":""}
1
+ {"version":3,"file":"types.js","names":["InstrumentId","exports"],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["import { Theme } from '@oanda/labs-widget-common';\nimport { Locale } from '@oanda/mono-i18n';\nimport { BookType } from '../gql/types/graphql';\n\nexport interface OrderBookWidgetConfig {\n graphqlUrl: string;\n instrument: InstrumentId;\n locale: Locale;\n theme?: Theme;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface MainProps {\n instrument?: InstrumentId;\n}\n\nexport interface ChartWithDataProps {\n instrument: InstrumentId;\n bookType: BookType;\n}\n\nexport enum InstrumentId {\n EUR_AUD = 'EUR_AUD',\n EUR_GBP = 'EUR_GBP',\n EUR_JPY = 'EUR_JPY',\n EUR_USD = 'EUR_USD',\n EUR_CHF = 'EUR_CHF',\n USD_CHF = 'USD_CHF',\n USD_JPY = 'USD_JPY',\n USD_CAD = 'USD_CAD',\n GBP_USD = 'GBP_USD',\n GBP_JPY = 'GBP_JPY',\n GBP_CHF = 'GBP_CHF',\n AUD_JPY = 'AUD_JPY',\n AUD_USD = 'AUD_USD',\n NZD_USD = 'NZD_USD',\n XAU_USD = 'XAU_USD',\n XAG_USD = 'XAG_USD',\n}\n"],"mappings":";;;;;;IAwBYA,YAAY,GAAAC,OAAA,CAAAD,YAAA,aAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA"}
@@ -1,4 +1,5 @@
1
1
  {
2
+ "buy": "Buy",
2
3
  "data_unavailable": "Data unavailable",
3
4
  "long": "Long",
4
5
  "long_positions": "Long Positions",
@@ -9,6 +10,8 @@
9
10
  "position_book": "Position Book",
10
11
  "price": "Price",
11
12
  "reset_zoom": "Reset Zoom",
13
+ "select_instrument": "Select instrument",
14
+ "sell": "Sell",
12
15
  "sell_orders": "Sell Orders",
13
16
  "short": "Short",
14
17
  "short_positions": "Short Positions",
@@ -1,4 +1,5 @@
1
1
  {
2
+ "buy": "買進",
2
3
  "data_unavailable": "沒有數據",
3
4
  "long": "長",
4
5
  "long_positions": "長倉",
@@ -9,6 +10,8 @@
9
10
  "position_book": "倉位手冊",
10
11
  "price": "價格",
11
12
  "reset_zoom": "重置比例",
13
+ "select_instrument": "選擇證券",
14
+ "sell": "賣出",
12
15
  "sell_orders": "賣單",
13
16
  "short": "短",
14
17
  "short_positions": "短倉",
@@ -0,0 +1,55 @@
1
+ import React from 'react';
2
+ import { useQuery } from '@apollo/client';
3
+ import { useMediaQuery } from 'usehooks-ts';
4
+ import classnames from 'classnames';
5
+ import { ChartError, Spinner, SpinnerSize } from '@oanda/labs-widget-common';
6
+ import { getOrderPositionBooks } from '../gql/getOrderPositionBooks';
7
+ import { BookType } from '../gql/types/graphql';
8
+ import { Chart } from './components/Chart/Chart';
9
+ import { instrumentPrecisionConfig } from './config';
10
+ const ChartWithData = _ref => {
11
+ var _data$orderPositionBo;
12
+ let {
13
+ instrument,
14
+ bookType
15
+ } = _ref;
16
+ const isDesktop = useMediaQuery('(min-width: 768px)');
17
+ const {
18
+ loading,
19
+ data,
20
+ error
21
+ } = useQuery(getOrderPositionBooks, {
22
+ variables: {
23
+ instrument,
24
+ bookType,
25
+ recentHours: 1
26
+ }
27
+ });
28
+ const isError = !loading && !(data !== null && data !== void 0 && (_data$orderPositionBo = data.orderPositionBooks[0]) !== null && _data$orderPositionBo !== void 0 && _data$orderPositionBo.price) || !!error;
29
+ return React.createElement("div", {
30
+ className: classnames('lw-relative lw-w-full', {
31
+ 'lw-h-[450px]': isDesktop,
32
+ 'lw-h-[390px]': !isDesktop
33
+ })
34
+ }, isError && React.createElement("div", {
35
+ className: classnames('lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary', {
36
+ 'lw-h-full': isDesktop,
37
+ 'lw-h-[calc(100%-40px)]': !isDesktop
38
+ })
39
+ }, React.createElement(ChartError, null)), loading && React.createElement("div", {
40
+ className: classnames('lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary', {
41
+ 'lw-h-full': isDesktop,
42
+ 'lw-h-[calc(100%-40px)]': !isDesktop
43
+ })
44
+ }, React.createElement(Spinner, {
45
+ size: SpinnerSize.lg
46
+ })), data && React.createElement("div", {
47
+ className: "lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full"
48
+ }, React.createElement(Chart, {
49
+ data: data,
50
+ isOrderBook: bookType === BookType.Order,
51
+ precision: instrumentPrecisionConfig[instrument]
52
+ })));
53
+ };
54
+ export { ChartWithData };
55
+ //# sourceMappingURL=ChartWithData.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ChartWithData.js","names":["React","useQuery","useMediaQuery","classnames","ChartError","Spinner","SpinnerSize","getOrderPositionBooks","BookType","Chart","instrumentPrecisionConfig","ChartWithData","_ref","_data$orderPositionBo","instrument","bookType","isDesktop","loading","data","error","variables","recentHours","isError","orderPositionBooks","price","createElement","className","size","lg","isOrderBook","Order","precision"],"sources":["../../../src/OrderBookWidget/ChartWithData.tsx"],"sourcesContent":["import React from 'react';\nimport { useQuery } from '@apollo/client';\nimport { useMediaQuery } from 'usehooks-ts';\nimport classnames from 'classnames';\nimport { ChartError, Spinner, SpinnerSize } from '@oanda/labs-widget-common';\nimport { ChartWithDataProps } from './types';\nimport { getOrderPositionBooks } from '../gql/getOrderPositionBooks';\nimport { GetOrderPositionBooksQuery, GetOrderPositionBooksQueryVariables, BookType } from '../gql/types/graphql';\nimport { Chart } from './components/Chart/Chart';\nimport { instrumentPrecisionConfig } from './config';\n\nconst ChartWithData = ({\n instrument,\n bookType,\n}: ChartWithDataProps) => {\n const isDesktop = useMediaQuery('(min-width: 768px)');\n\n const { loading, data, error } = useQuery<\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables\n >(getOrderPositionBooks, {\n variables: {\n instrument,\n bookType,\n recentHours: 1,\n },\n });\n\n const isError = (!loading && !data?.orderPositionBooks[0]?.price) || !!error;\n\n return (\n <div className={classnames('lw-relative lw-w-full', {\n 'lw-h-[450px]': isDesktop,\n 'lw-h-[390px]': !isDesktop,\n })}\n >\n {isError && (\n <div className={\n classnames(\n 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',\n {\n 'lw-h-full': isDesktop,\n 'lw-h-[calc(100%-40px)]': !isDesktop,\n },\n )\n }\n >\n <ChartError />\n </div>\n )}\n {loading && (\n <div className={\n classnames(\n 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',\n {\n 'lw-h-full': isDesktop,\n 'lw-h-[calc(100%-40px)]': !isDesktop,\n },\n )\n }\n >\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {data && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full\">\n <Chart\n data={data}\n isOrderBook={bookType === BookType.Order}\n precision={instrumentPrecisionConfig[instrument]}\n />\n </div>\n )}\n </div>\n );\n};\n\nexport { ChartWithData };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,QAAQ,QAAQ,gBAAgB;AACzC,SAASC,aAAa,QAAQ,aAAa;AAC3C,OAAOC,UAAU,MAAM,YAAY;AACnC,SAASC,UAAU,EAAEC,OAAO,EAAEC,WAAW,QAAQ,2BAA2B;AAE5E,SAASC,qBAAqB,QAAQ,8BAA8B;AACpE,SAA0EC,QAAQ,QAAQ,sBAAsB;AAChH,SAASC,KAAK,QAAQ,0BAA0B;AAChD,SAASC,yBAAyB,QAAQ,UAAU;AAEpD,MAAMC,aAAa,GAAGC,IAAA,IAGI;EAAA,IAAAC,qBAAA;EAAA,IAHH;IACrBC,UAAU;IACVC;EACkB,CAAC,GAAAH,IAAA;EACnB,MAAMI,SAAS,GAAGd,aAAa,CAAC,oBAAoB,CAAC;EAErD,MAAM;IAAEe,OAAO;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGlB,QAAQ,CAGvCM,qBAAqB,EAAE;IACvBa,SAAS,EAAE;MACTN,UAAU;MACVC,QAAQ;MACRM,WAAW,EAAE;IACf;EACF,CAAC,CAAC;EAEF,MAAMC,OAAO,GAAI,CAACL,OAAO,IAAI,EAACC,IAAI,aAAJA,IAAI,gBAAAL,qBAAA,GAAJK,IAAI,CAAEK,kBAAkB,CAAC,CAAC,CAAC,cAAAV,qBAAA,eAA3BA,qBAAA,CAA6BW,KAAK,KAAK,CAAC,CAACL,KAAK;EAE5E,OACEnB,KAAA,CAAAyB,aAAA;IAAKC,SAAS,EAAEvB,UAAU,CAAC,uBAAuB,EAAE;MAClD,cAAc,EAAEa,SAAS;MACzB,cAAc,EAAE,CAACA;IACnB,CAAC;EAAE,GAEAM,OAAO,IACRtB,KAAA,CAAAyB,aAAA;IAAKC,SAAS,EACRvB,UAAU,CACR,uIAAuI,EACvI;MACE,WAAW,EAAEa,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EACD,GAEHhB,KAAA,CAAAyB,aAAA,CAACrB,UAAU,MAAE,CACV,CACJ,EACAa,OAAO,IACRjB,KAAA,CAAAyB,aAAA;IAAKC,SAAS,EACRvB,UAAU,CACR,uIAAuI,EACvI;MACE,WAAW,EAAEa,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EACD,GAEHhB,KAAA,CAAAyB,aAAA,CAACpB,OAAO;IAACsB,IAAI,EAAErB,WAAW,CAACsB;EAAG,CAAE,CAC7B,CACJ,EACAV,IAAI,IACLlB,KAAA,CAAAyB,aAAA;IAAKC,SAAS,EAAC;EAA4D,GACzE1B,KAAA,CAAAyB,aAAA,CAAChB,KAAK;IACJS,IAAI,EAAEA,IAAK;IACXW,WAAW,EAAEd,QAAQ,KAAKP,QAAQ,CAACsB,KAAM;IACzCC,SAAS,EAAErB,yBAAyB,CAACI,UAAU;EAAE,CAClD,CACE,CAEF,CAAC;AAEV,CAAC;AAED,SAASH,aAAa"}
@@ -0,0 +1,38 @@
1
+ import React, { useState } from 'react';
2
+ import { Select, Tabs } from '@oanda/labs-widget-common';
3
+ import { useLocale } from '@oanda/mono-i18n';
4
+ import { BookType } from '../gql/types/graphql';
5
+ import { instrumentSelectConfig, navigationConfig } from './config';
6
+ import { ChartWithData } from './ChartWithData';
7
+ const Main = _ref => {
8
+ let {
9
+ instrument
10
+ } = _ref;
11
+ const [bookType, setBookType] = useState(BookType.Order);
12
+ const [toolInstrument, setToolInstrument] = useState(instrumentSelectConfig[0]);
13
+ const {
14
+ lang
15
+ } = useLocale();
16
+ return React.createElement("div", {
17
+ "data-testid": "order-book-widget",
18
+ className: "lw-p-4 lw-pt-0 lw-text-sm lw-tracking-normal lw-text-black"
19
+ }, React.createElement(Tabs, {
20
+ activeTab: bookType,
21
+ handleClick: e => setBookType(e.currentTarget.value),
22
+ labelCallback: lang,
23
+ items: navigationConfig,
24
+ mobileFullWidth: true
25
+ }), !instrument && React.createElement("div", {
26
+ className: "lw-mb-6 lw-mt-12"
27
+ }, React.createElement(Select, {
28
+ selectLabel: lang('select_instrument'),
29
+ options: instrumentSelectConfig,
30
+ selectedOption: toolInstrument,
31
+ setSelectedOption: val => setToolInstrument(val)
32
+ })), React.createElement(ChartWithData, {
33
+ instrument: instrument || toolInstrument.id,
34
+ bookType: bookType
35
+ }));
36
+ };
37
+ export { Main };
38
+ //# sourceMappingURL=Main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Main.js","names":["React","useState","Select","Tabs","useLocale","BookType","instrumentSelectConfig","navigationConfig","ChartWithData","Main","_ref","instrument","bookType","setBookType","Order","toolInstrument","setToolInstrument","lang","createElement","className","activeTab","handleClick","e","currentTarget","value","labelCallback","items","mobileFullWidth","selectLabel","options","selectedOption","setSelectedOption","val","id"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState } from 'react';\nimport { Select, Tabs } from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { InstrumentId, MainProps } from './types';\nimport { BookType } from '../gql/types/graphql';\nimport { instrumentSelectConfig, navigationConfig } from './config';\nimport { ChartWithData } from './ChartWithData';\n\nconst Main = ({ instrument }: MainProps) => {\n const [bookType, setBookType] = useState(BookType.Order);\n const [toolInstrument, setToolInstrument] = useState(instrumentSelectConfig[0]);\n const { lang } = useLocale();\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-p-4 lw-pt-0 lw-text-sm lw-tracking-normal lw-text-black\">\n <Tabs\n activeTab={bookType}\n handleClick={(e) => setBookType(e.currentTarget.value as BookType)}\n labelCallback={lang}\n items={navigationConfig}\n mobileFullWidth\n />\n {!instrument && (\n <div className=\"lw-mb-6 lw-mt-12\">\n <Select\n selectLabel={lang('select_instrument')}\n options={instrumentSelectConfig}\n selectedOption={toolInstrument}\n setSelectedOption={\n (val) => setToolInstrument(val as { id: InstrumentId; label: string })\n }\n />\n </div>\n )}\n <ChartWithData instrument={instrument || toolInstrument.id} bookType={bookType} />\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"AAAA,OAAOA,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AACvC,SAASC,MAAM,EAAEC,IAAI,QAAQ,2BAA2B;AACxD,SAASC,SAAS,QAAQ,kBAAkB;AAE5C,SAASC,QAAQ,QAAQ,sBAAsB;AAC/C,SAASC,sBAAsB,EAAEC,gBAAgB,QAAQ,UAAU;AACnE,SAASC,aAAa,QAAQ,iBAAiB;AAE/C,MAAMC,IAAI,GAAGC,IAAA,IAA+B;EAAA,IAA9B;IAAEC;EAAsB,CAAC,GAAAD,IAAA;EACrC,MAAM,CAACE,QAAQ,EAAEC,WAAW,CAAC,GAAGZ,QAAQ,CAACI,QAAQ,CAACS,KAAK,CAAC;EACxD,MAAM,CAACC,cAAc,EAAEC,iBAAiB,CAAC,GAAGf,QAAQ,CAACK,sBAAsB,CAAC,CAAC,CAAC,CAAC;EAC/E,MAAM;IAAEW;EAAK,CAAC,GAAGb,SAAS,CAAC,CAAC;EAE5B,OACEJ,KAAA,CAAAkB,aAAA;IAAK,eAAY,mBAAmB;IAACC,SAAS,EAAC;EAA4D,GACzGnB,KAAA,CAAAkB,aAAA,CAACf,IAAI;IACHiB,SAAS,EAAER,QAAS;IACpBS,WAAW,EAAGC,CAAC,IAAKT,WAAW,CAACS,CAAC,CAACC,aAAa,CAACC,KAAiB,CAAE;IACnEC,aAAa,EAAER,IAAK;IACpBS,KAAK,EAAEnB,gBAAiB;IACxBoB,eAAe;EAAA,CAChB,CAAC,EACD,CAAChB,UAAU,IACVX,KAAA,CAAAkB,aAAA;IAAKC,SAAS,EAAC;EAAkB,GAC/BnB,KAAA,CAAAkB,aAAA,CAAChB,MAAM;IACL0B,WAAW,EAAEX,IAAI,CAAC,mBAAmB,CAAE;IACvCY,OAAO,EAAEvB,sBAAuB;IAChCwB,cAAc,EAAEf,cAAe;IAC/BgB,iBAAiB,EACdC,GAAG,IAAKhB,iBAAiB,CAACgB,GAA0C;EACtE,CACF,CACE,CACN,EACDhC,KAAA,CAAAkB,aAAA,CAACV,aAAa;IAACG,UAAU,EAAEA,UAAU,IAAII,cAAc,CAACkB,EAAG;IAACrB,QAAQ,EAAEA;EAAS,CAAE,CAC9E,CAAC;AAEV,CAAC;AAED,SAASH,IAAI"}
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';
3
3
  import { LocaleProvider } from '@oanda/mono-i18n';
4
4
  import { ThemeProvider, getLocale } from '@oanda/labs-widget-common';
5
- import { Widget } from './Widget';
5
+ import { Main } from './Main';
6
6
  import { translations } from '../translations';
7
7
  const OrderBookWidget = _ref => {
8
8
  let {
@@ -22,7 +22,7 @@ const OrderBookWidget = _ref => {
22
22
  translations: translations
23
23
  }, React.createElement(ApolloProvider, {
24
24
  client: client
25
- }, React.createElement(Widget, {
25
+ }, React.createElement(Main, {
26
26
  instrument: instrument
27
27
  }))));
28
28
  };
@@ -1 +1 @@
1
- {"version":3,"file":"OrderBookWidget.js","names":["React","ApolloClient","InMemoryCache","ApolloProvider","LocaleProvider","ThemeProvider","getLocale","Widget","translations","OrderBookWidget","_ref","graphqlUrl","instrument","locale","theme","client","uri","cache","createElement"],"sources":["../../../src/OrderBookWidget/OrderBookWidget.tsx"],"sourcesContent":["import React from 'react';\nimport { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';\nimport { LocaleProvider } from '@oanda/mono-i18n';\nimport { ThemeProvider, getLocale } from '@oanda/labs-widget-common';\nimport { Widget } from './Widget';\nimport { OrderBookWidgetConfig } from './types';\nimport { translations } from '../translations';\n\nconst OrderBookWidget = ({\n graphqlUrl,\n instrument,\n locale,\n theme,\n}: OrderBookWidgetConfig) => {\n const client = new ApolloClient({\n uri: graphqlUrl,\n cache: new InMemoryCache(),\n });\n\n return (\n <ThemeProvider theme={theme}>\n <LocaleProvider locale={getLocale(locale)} translations={translations}>\n <ApolloProvider client={client}>\n <Widget instrument={instrument} />\n </ApolloProvider>\n </LocaleProvider>\n </ThemeProvider>\n );\n};\n\nexport { OrderBookWidget };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,EAAEC,aAAa,EAAEC,cAAc,QAAQ,gBAAgB;AAC5E,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,aAAa,EAAEC,SAAS,QAAQ,2BAA2B;AACpE,SAASC,MAAM,QAAQ,UAAU;AAEjC,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAMC,eAAe,GAAGC,IAAA,IAKK;EAAA,IALJ;IACvBC,UAAU;IACVC,UAAU;IACVC,MAAM;IACNC;EACqB,CAAC,GAAAJ,IAAA;EACtB,MAAMK,MAAM,GAAG,IAAId,YAAY,CAAC;IAC9Be,GAAG,EAAEL,UAAU;IACfM,KAAK,EAAE,IAAIf,aAAa,CAAC;EAC3B,CAAC,CAAC;EAEF,OACEF,KAAA,CAAAkB,aAAA,CAACb,aAAa;IAACS,KAAK,EAAEA;EAAM,GAC1Bd,KAAA,CAAAkB,aAAA,CAACd,cAAc;IAACS,MAAM,EAAEP,SAAS,CAACO,MAAM,CAAE;IAACL,YAAY,EAAEA;EAAa,GACpER,KAAA,CAAAkB,aAAA,CAACf,cAAc;IAACY,MAAM,EAAEA;EAAO,GAC7Bf,KAAA,CAAAkB,aAAA,CAACX,MAAM;IAACK,UAAU,EAAEA;EAAW,CAAE,CACnB,CACF,CACH,CAAC;AAEpB,CAAC;AAED,SAASH,eAAe"}
1
+ {"version":3,"file":"OrderBookWidget.js","names":["React","ApolloClient","InMemoryCache","ApolloProvider","LocaleProvider","ThemeProvider","getLocale","Main","translations","OrderBookWidget","_ref","graphqlUrl","instrument","locale","theme","client","uri","cache","createElement"],"sources":["../../../src/OrderBookWidget/OrderBookWidget.tsx"],"sourcesContent":["import React from 'react';\nimport { ApolloClient, InMemoryCache, ApolloProvider } from '@apollo/client';\nimport { LocaleProvider } from '@oanda/mono-i18n';\nimport { ThemeProvider, getLocale } from '@oanda/labs-widget-common';\nimport { Main } from './Main';\nimport { OrderBookWidgetConfig } from './types';\nimport { translations } from '../translations';\n\nconst OrderBookWidget = ({\n graphqlUrl,\n instrument,\n locale,\n theme,\n}: OrderBookWidgetConfig) => {\n const client = new ApolloClient({\n uri: graphqlUrl,\n cache: new InMemoryCache(),\n });\n\n return (\n <ThemeProvider theme={theme}>\n <LocaleProvider locale={getLocale(locale)} translations={translations}>\n <ApolloProvider client={client}>\n <Main instrument={instrument} />\n </ApolloProvider>\n </LocaleProvider>\n </ThemeProvider>\n );\n};\n\nexport { OrderBookWidget };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,YAAY,EAAEC,aAAa,EAAEC,cAAc,QAAQ,gBAAgB;AAC5E,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,aAAa,EAAEC,SAAS,QAAQ,2BAA2B;AACpE,SAASC,IAAI,QAAQ,QAAQ;AAE7B,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAMC,eAAe,GAAGC,IAAA,IAKK;EAAA,IALJ;IACvBC,UAAU;IACVC,UAAU;IACVC,MAAM;IACNC;EACqB,CAAC,GAAAJ,IAAA;EACtB,MAAMK,MAAM,GAAG,IAAId,YAAY,CAAC;IAC9Be,GAAG,EAAEL,UAAU;IACfM,KAAK,EAAE,IAAIf,aAAa,CAAC;EAC3B,CAAC,CAAC;EAEF,OACEF,KAAA,CAAAkB,aAAA,CAACb,aAAa;IAACS,KAAK,EAAEA;EAAM,GAC1Bd,KAAA,CAAAkB,aAAA,CAACd,cAAc;IAACS,MAAM,EAAEP,SAAS,CAACO,MAAM,CAAE;IAACL,YAAY,EAAEA;EAAa,GACpER,KAAA,CAAAkB,aAAA,CAACf,cAAc;IAACY,MAAM,EAAEA;EAAO,GAC7Bf,KAAA,CAAAkB,aAAA,CAACX,IAAI;IAACK,UAAU,EAAEA;EAAW,CAAE,CACjB,CACF,CACH,CAAC;AAEpB,CAAC;AAED,SAASH,eAAe"}