@oanda/labs-order-book-widget 1.0.23 → 1.0.26

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 (43) hide show
  1. package/CHANGELOG.md +264 -0
  2. package/dist/main/OrderBookWidget/Main.js +8 -4
  3. package/dist/main/OrderBookWidget/Main.js.map +1 -1
  4. package/dist/main/OrderBookWidget/OrderBookWidget.js +10 -3
  5. package/dist/main/OrderBookWidget/OrderBookWidget.js.map +1 -1
  6. package/dist/main/OrderBookWidget/components/Chart/Chart.js +2 -2
  7. package/dist/main/OrderBookWidget/components/Chart/Chart.js.map +1 -1
  8. package/dist/main/OrderBookWidget/render.js +3 -1
  9. package/dist/main/OrderBookWidget/render.js.map +1 -1
  10. package/dist/main/OrderBookWidget/types.js.map +1 -1
  11. package/dist/main/translations/index.js +19 -0
  12. package/dist/main/translations/index.js.map +1 -0
  13. package/dist/main/translations/sources/en.json +4 -0
  14. package/dist/main/translations/sources/zh_TW.json +4 -0
  15. package/dist/main/translations/translations.js +8 -0
  16. package/dist/main/translations/translations.js.map +1 -0
  17. package/dist/module/OrderBookWidget/Main.js +6 -2
  18. package/dist/module/OrderBookWidget/Main.js.map +1 -1
  19. package/dist/module/OrderBookWidget/OrderBookWidget.js +10 -3
  20. package/dist/module/OrderBookWidget/OrderBookWidget.js.map +1 -1
  21. package/dist/module/OrderBookWidget/render.js +3 -1
  22. package/dist/module/OrderBookWidget/render.js.map +1 -1
  23. package/dist/module/OrderBookWidget/types.js.map +1 -1
  24. package/dist/module/translations/index.js +12 -0
  25. package/dist/module/translations/index.js.map +1 -0
  26. package/dist/module/translations/sources/en.json +4 -0
  27. package/dist/module/translations/sources/zh_TW.json +4 -0
  28. package/dist/module/translations/translations.js +2 -0
  29. package/dist/module/translations/translations.js.map +1 -0
  30. package/dist/types/OrderBookWidget/OrderBookWidget.d.ts +1 -1
  31. package/dist/types/OrderBookWidget/types.d.ts +2 -0
  32. package/dist/types/translations/index.d.ts +4 -0
  33. package/dist/types/translations/translations.d.ts +1 -0
  34. package/lokalise.config.json +18 -0
  35. package/package.json +4 -3
  36. package/src/OrderBookWidget/Main.tsx +4 -2
  37. package/src/OrderBookWidget/OrderBookWidget.tsx +11 -5
  38. package/src/OrderBookWidget/render.tsx +2 -0
  39. package/src/OrderBookWidget/types.ts +3 -0
  40. package/src/translations/index.ts +13 -0
  41. package/src/translations/sources/en.json +4 -0
  42. package/src/translations/sources/zh_TW.json +4 -0
  43. package/src/translations/translations.ts +3 -0
package/CHANGELOG.md CHANGED
@@ -3,6 +3,270 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## 1.0.26 (2023-10-18)
7
+
8
+
9
+
10
+ ## 1.0.25 (2023-10-17)
11
+
12
+
13
+
14
+ ## 1.0.24 (2023-10-13)
15
+
16
+
17
+
18
+ ## 1.0.23 (2023-10-13)
19
+
20
+
21
+
22
+ ## 1.0.22 (2023-10-11)
23
+
24
+
25
+
26
+ ## 1.0.21 (2023-10-10)
27
+
28
+
29
+
30
+ ## 1.0.20 (2023-10-06)
31
+
32
+
33
+
34
+ ## 1.0.19 (2023-10-06)
35
+
36
+
37
+
38
+ ## 1.0.18 (2023-10-05)
39
+
40
+
41
+
42
+ ## 1.0.17 (2023-10-04)
43
+
44
+
45
+
46
+ ## 1.0.16 (2023-10-04)
47
+
48
+
49
+
50
+ ## 1.0.15 (2023-10-04)
51
+
52
+
53
+
54
+ ## 1.0.14 (2023-10-03)
55
+
56
+
57
+
58
+ ## 1.0.13 (2023-10-03)
59
+
60
+
61
+
62
+ ## 1.0.12 (2023-10-03)
63
+
64
+
65
+
66
+ ## 1.0.11 (2023-10-02)
67
+
68
+
69
+
70
+ ## 1.0.10 (2023-09-29)
71
+
72
+
73
+
74
+ ## 1.0.9 (2023-09-28)
75
+
76
+
77
+
78
+ ## 1.0.8 (2023-09-27)
79
+
80
+
81
+
82
+ ## 1.0.7 (2023-09-26)
83
+
84
+
85
+
86
+ ## 1.0.6 (2023-09-21)
87
+
88
+
89
+
90
+ ## 1.0.5 (2023-09-13)
91
+
92
+ **Note:** Version bump only for package @oanda/labs-order-book-widget
93
+
94
+
95
+
96
+
97
+
98
+ ## 1.0.25 (2023-10-17)
99
+
100
+
101
+
102
+ ## 1.0.24 (2023-10-13)
103
+
104
+
105
+
106
+ ## 1.0.23 (2023-10-13)
107
+
108
+
109
+
110
+ ## 1.0.22 (2023-10-11)
111
+
112
+
113
+
114
+ ## 1.0.21 (2023-10-10)
115
+
116
+
117
+
118
+ ## 1.0.20 (2023-10-06)
119
+
120
+
121
+
122
+ ## 1.0.19 (2023-10-06)
123
+
124
+
125
+
126
+ ## 1.0.18 (2023-10-05)
127
+
128
+
129
+
130
+ ## 1.0.17 (2023-10-04)
131
+
132
+
133
+
134
+ ## 1.0.16 (2023-10-04)
135
+
136
+
137
+
138
+ ## 1.0.15 (2023-10-04)
139
+
140
+
141
+
142
+ ## 1.0.14 (2023-10-03)
143
+
144
+
145
+
146
+ ## 1.0.13 (2023-10-03)
147
+
148
+
149
+
150
+ ## 1.0.12 (2023-10-03)
151
+
152
+
153
+
154
+ ## 1.0.11 (2023-10-02)
155
+
156
+
157
+
158
+ ## 1.0.10 (2023-09-29)
159
+
160
+
161
+
162
+ ## 1.0.9 (2023-09-28)
163
+
164
+
165
+
166
+ ## 1.0.8 (2023-09-27)
167
+
168
+
169
+
170
+ ## 1.0.7 (2023-09-26)
171
+
172
+
173
+
174
+ ## 1.0.6 (2023-09-21)
175
+
176
+
177
+
178
+ ## 1.0.5 (2023-09-13)
179
+
180
+ **Note:** Version bump only for package @oanda/labs-order-book-widget
181
+
182
+
183
+
184
+
185
+
186
+ ## 1.0.24 (2023-10-13)
187
+
188
+
189
+
190
+ ## 1.0.23 (2023-10-13)
191
+
192
+
193
+
194
+ ## 1.0.22 (2023-10-11)
195
+
196
+
197
+
198
+ ## 1.0.21 (2023-10-10)
199
+
200
+
201
+
202
+ ## 1.0.20 (2023-10-06)
203
+
204
+
205
+
206
+ ## 1.0.19 (2023-10-06)
207
+
208
+
209
+
210
+ ## 1.0.18 (2023-10-05)
211
+
212
+
213
+
214
+ ## 1.0.17 (2023-10-04)
215
+
216
+
217
+
218
+ ## 1.0.16 (2023-10-04)
219
+
220
+
221
+
222
+ ## 1.0.15 (2023-10-04)
223
+
224
+
225
+
226
+ ## 1.0.14 (2023-10-03)
227
+
228
+
229
+
230
+ ## 1.0.13 (2023-10-03)
231
+
232
+
233
+
234
+ ## 1.0.12 (2023-10-03)
235
+
236
+
237
+
238
+ ## 1.0.11 (2023-10-02)
239
+
240
+
241
+
242
+ ## 1.0.10 (2023-09-29)
243
+
244
+
245
+
246
+ ## 1.0.9 (2023-09-28)
247
+
248
+
249
+
250
+ ## 1.0.8 (2023-09-27)
251
+
252
+
253
+
254
+ ## 1.0.7 (2023-09-26)
255
+
256
+
257
+
258
+ ## 1.0.6 (2023-09-21)
259
+
260
+
261
+
262
+ ## 1.0.5 (2023-09-13)
263
+
264
+ **Note:** Version bump only for package @oanda/labs-order-book-widget
265
+
266
+
267
+
268
+
269
+
6
270
  ## 1.0.23 (2023-10-13)
7
271
 
8
272
 
@@ -6,11 +6,12 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.Main = void 0;
7
7
  var _react = _interopRequireWildcard(require("react"));
8
8
  var _labsWidgetCommon = require("@oanda/labs-widget-common");
9
+ var _monoI18n = require("@oanda/mono-i18n");
9
10
  var _Chart = require("./components/Chart/Chart");
10
11
  var _types = require("./types");
11
12
  var _utils = require("./utils");
12
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
13
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
13
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
14
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
14
15
  const Main = _ref => {
15
16
  let {
16
17
  apiUrl,
@@ -21,6 +22,9 @@ const Main = _ref => {
21
22
  const [error, setError] = (0, _react.useState)(undefined);
22
23
  const [dataType, setDataType] = (0, _react.useState)(_types.DataType.Order);
23
24
  const [data, setData] = (0, _react.useState)(undefined);
25
+ const {
26
+ lang
27
+ } = (0, _monoI18n.useLocale)();
24
28
  (0, _react.useEffect)(() => {
25
29
  setIsLoading(true);
26
30
  setData(undefined);
@@ -48,10 +52,10 @@ const Main = _ref => {
48
52
  }, _react.default.createElement(_labsWidgetCommon.Button, {
49
53
  variant: isTypeOrder ? _labsWidgetCommon.ButtonVariant.primary : _labsWidgetCommon.ButtonVariant.secondary,
50
54
  onClick: () => setDataType(_types.DataType.Order)
51
- }, "Order Book"), _react.default.createElement(_labsWidgetCommon.Button, {
55
+ }, lang('order_book')), _react.default.createElement(_labsWidgetCommon.Button, {
52
56
  variant: isTypeOrder ? _labsWidgetCommon.ButtonVariant.secondary : _labsWidgetCommon.ButtonVariant.primary,
53
57
  onClick: () => setDataType(_types.DataType.Position)
54
- }, "Position Book")), _react.default.createElement("div", {
58
+ }, lang('position_book'))), _react.default.createElement("div", {
55
59
  className: "lw-relative lw-h-[600px] lw-w-full"
56
60
  }, error && _react.default.createElement("div", {
57
61
  className: "lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]"
@@ -1 +1 @@
1
- {"version":3,"file":"Main.js","names":["_react","_interopRequireWildcard","require","_labsWidgetCommon","_Chart","_types","_utils","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","Main","_ref","apiUrl","instrument","division","isLoading","setIsLoading","useState","error","setError","undefined","dataType","setDataType","DataType","Order","data","setData","useEffect","getData","then","result","orderBooks","length","Position","positionBooks","catch","err","JSON","stringify","isTypeOrder","createElement","className","Button","variant","ButtonVariant","primary","secondary","onClick","ChartError","Spinner","size","SpinnerSize","lg","Chart","exports"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Button, ButtonVariant, ChartError, Spinner, SpinnerSize,\n} from '@oanda/labs-widget-common';\nimport { Chart } from './components/Chart/Chart';\nimport { DataType, MainProps, OrderBookData } from './types';\nimport { getData } from './utils';\n\nconst Main = ({\n apiUrl,\n instrument,\n division,\n}: MainProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [dataType, setDataType] = useState(DataType.Order);\n const [data, setData] = useState<OrderBookData[] | undefined>(undefined);\n\n useEffect(() => {\n setIsLoading(true);\n setData(undefined);\n setError(undefined);\n\n getData(apiUrl, instrument, division, dataType)\n .then((result) => {\n setIsLoading(false);\n if (dataType === DataType.Order && result?.orderBooks.length > 0) {\n setData(result.orderBooks);\n } else if (dataType === DataType.Position && result?.positionBooks.length > 0) {\n setData(result.positionBooks);\n } else {\n setData(undefined);\n }\n }).catch((err) => {\n setIsLoading(false);\n setError(JSON.stringify(err));\n });\n }, [dataType, apiUrl, instrument, division]);\n\n const isTypeOrder = dataType === DataType.Order;\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-border lw-border-solid lw-border-grey lw-p-4 lw-text-sm lw-text-black\">\n <div className=\"lw-flex lw-gap-2\">\n <Button\n variant={isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary}\n onClick={() => setDataType(DataType.Order)}\n >\n Order Book\n </Button>\n <Button\n variant={isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary}\n onClick={() => setDataType(DataType.Position)}\n >\n Position Book\n </Button>\n </div>\n {/* @todo: chart height */}\n <div className=\"lw-relative lw-h-[600px] lw-w-full\">\n {error && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\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 data={data[data.length - 1]} isTypeOrder={isTypeOrder} />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AACA,IAAAC,iBAAA,GAAAD,OAAA;AAGA,IAAAE,MAAA,GAAAF,OAAA;AACA,IAAAG,MAAA,GAAAH,OAAA;AACA,IAAAI,MAAA,GAAAJ,OAAA;AAAkC,SAAAK,yBAAAC,WAAA,eAAAC,OAAA,kCAAAC,iBAAA,OAAAD,OAAA,QAAAE,gBAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,WAAA,WAAAA,WAAA,GAAAG,gBAAA,GAAAD,iBAAA,KAAAF,WAAA;AAAA,SAAAP,wBAAAW,GAAA,EAAAJ,WAAA,SAAAA,WAAA,IAAAI,GAAA,IAAAA,GAAA,CAAAC,UAAA,WAAAD,GAAA,QAAAA,GAAA,oBAAAA,GAAA,wBAAAA,GAAA,4BAAAE,OAAA,EAAAF,GAAA,UAAAG,KAAA,GAAAR,wBAAA,CAAAC,WAAA,OAAAO,KAAA,IAAAA,KAAA,CAAAC,GAAA,CAAAJ,GAAA,YAAAG,KAAA,CAAAE,GAAA,CAAAL,GAAA,SAAAM,MAAA,WAAAC,qBAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,GAAA,IAAAX,GAAA,QAAAW,GAAA,kBAAAH,MAAA,CAAAI,SAAA,CAAAC,cAAA,CAAAC,IAAA,CAAAd,GAAA,EAAAW,GAAA,SAAAI,IAAA,GAAAR,qBAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAV,GAAA,EAAAW,GAAA,cAAAI,IAAA,KAAAA,IAAA,CAAAV,GAAA,IAAAU,IAAA,CAAAC,GAAA,KAAAR,MAAA,CAAAC,cAAA,CAAAH,MAAA,EAAAK,GAAA,EAAAI,IAAA,YAAAT,MAAA,CAAAK,GAAA,IAAAX,GAAA,CAAAW,GAAA,SAAAL,MAAA,CAAAJ,OAAA,GAAAF,GAAA,MAAAG,KAAA,IAAAA,KAAA,CAAAa,GAAA,CAAAhB,GAAA,EAAAM,MAAA,YAAAA,MAAA;AAElC,MAAMW,IAAI,GAAGC,IAAA,IAII;EAAA,IAJH;IACZC,MAAM;IACNC,UAAU;IACVC;EACS,CAAC,GAAAH,IAAA;EACV,MAAM,CAACI,SAAS,EAAEC,YAAY,CAAC,GAAG,IAAAC,eAAQ,EAAC,KAAK,CAAC;EACjD,MAAM,CAACC,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAF,eAAQ,EAAqBG,SAAS,CAAC;EACjE,MAAM,CAACC,QAAQ,EAAEC,WAAW,CAAC,GAAG,IAAAL,eAAQ,EAACM,eAAQ,CAACC,KAAK,CAAC;EACxD,MAAM,CAACC,IAAI,EAAEC,OAAO,CAAC,GAAG,IAAAT,eAAQ,EAA8BG,SAAS,CAAC;EAExE,IAAAO,gBAAS,EAAC,MAAM;IACdX,YAAY,CAAC,IAAI,CAAC;IAClBU,OAAO,CAACN,SAAS,CAAC;IAClBD,QAAQ,CAACC,SAAS,CAAC;IAEnB,IAAAQ,cAAO,EAAChB,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEO,QAAQ,CAAC,CAC5CQ,IAAI,CAAEC,MAAM,IAAK;MAChBd,YAAY,CAAC,KAAK,CAAC;MACnB,IAAIK,QAAQ,KAAKE,eAAQ,CAACC,KAAK,IAAIM,MAAM,EAAEC,UAAU,CAACC,MAAM,GAAG,CAAC,EAAE;QAChEN,OAAO,CAACI,MAAM,CAACC,UAAU,CAAC;MAC5B,CAAC,MAAM,IAAIV,QAAQ,KAAKE,eAAQ,CAACU,QAAQ,IAAIH,MAAM,EAAEI,aAAa,CAACF,MAAM,GAAG,CAAC,EAAE;QAC7EN,OAAO,CAACI,MAAM,CAACI,aAAa,CAAC;MAC/B,CAAC,MAAM;QACLR,OAAO,CAACN,SAAS,CAAC;MACpB;IACF,CAAC,CAAC,CAACe,KAAK,CAAEC,GAAG,IAAK;MAChBpB,YAAY,CAAC,KAAK,CAAC;MACnBG,QAAQ,CAACkB,IAAI,CAACC,SAAS,CAACF,GAAG,CAAC,CAAC;IAC/B,CAAC,CAAC;EACN,CAAC,EAAE,CAACf,QAAQ,EAAET,MAAM,EAAEC,UAAU,EAAEC,QAAQ,CAAC,CAAC;EAE5C,MAAMyB,WAAW,GAAGlB,QAAQ,KAAKE,eAAQ,CAACC,KAAK;EAE/C,OACE3C,MAAA,CAAAc,OAAA,CAAA6C,aAAA;IAAK,eAAY,mBAAmB;IAACC,SAAS,EAAC;EAA0E,GACvH5D,MAAA,CAAAc,OAAA,CAAA6C,aAAA;IAAKC,SAAS,EAAC;EAAkB,GAC/B5D,MAAA,CAAAc,OAAA,CAAA6C,aAAA,CAACxD,iBAAA,CAAA0D,MAAM;IACLC,OAAO,EAAEJ,WAAW,GAAGK,+BAAa,CAACC,OAAO,GAAGD,+BAAa,CAACE,SAAU;IACvEC,OAAO,EAAEA,CAAA,KAAMzB,WAAW,CAACC,eAAQ,CAACC,KAAK;EAAE,GAC5C,YAEO,CAAC,EACT3C,MAAA,CAAAc,OAAA,CAAA6C,aAAA,CAACxD,iBAAA,CAAA0D,MAAM;IACLC,OAAO,EAAEJ,WAAW,GAAGK,+BAAa,CAACE,SAAS,GAAGF,+BAAa,CAACC,OAAQ;IACvEE,OAAO,EAAEA,CAAA,KAAMzB,WAAW,CAACC,eAAQ,CAACU,QAAQ;EAAE,GAC/C,eAEO,CACL,CAAC,EAENpD,MAAA,CAAAc,OAAA,CAAA6C,aAAA;IAAKC,SAAS,EAAC;EAAoC,GAChDvB,KAAK,IACJrC,MAAA,CAAAc,OAAA,CAAA6C,aAAA;IAAKC,SAAS,EAAC;EAAoH,GACjI5D,MAAA,CAAAc,OAAA,CAAA6C,aAAA,CAACxD,iBAAA,CAAAgE,UAAU,MAAE,CACV,CACN,EACAjC,SAAS,IACRlC,MAAA,CAAAc,OAAA,CAAA6C,aAAA;IAAKC,SAAS,EAAC;EAAoH,GACjI5D,MAAA,CAAAc,OAAA,CAAA6C,aAAA,CAACxD,iBAAA,CAAAiE,OAAO;IAACC,IAAI,EAAEC,6BAAW,CAACC;EAAG,CAAE,CAC7B,CACN,EACA3B,IAAI,IACH5C,MAAA,CAAAc,OAAA,CAAA6C,aAAA;IAAKC,SAAS,EAAC;EAA4D,GACzE5D,MAAA,CAAAc,OAAA,CAAA6C,aAAA,CAACvD,MAAA,CAAAoE,KAAK;IAAC5B,IAAI,EAAEA,IAAI,CAACA,IAAI,CAACO,MAAM,GAAG,CAAC,CAAE;IAACO,WAAW,EAAEA;EAAY,CAAE,CAC5D,CAEJ,CACF,CAAC;AAEV,CAAC;AAACe,OAAA,CAAA5C,IAAA,GAAAA,IAAA"}
1
+ {"version":3,"file":"Main.js","names":["_react","_interopRequireWildcard","require","_labsWidgetCommon","_monoI18n","_Chart","_types","_utils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","Main","_ref","apiUrl","instrument","division","isLoading","setIsLoading","useState","error","setError","undefined","dataType","setDataType","DataType","Order","data","setData","lang","useLocale","useEffect","getData","then","result","orderBooks","length","Position","positionBooks","catch","err","JSON","stringify","isTypeOrder","createElement","className","Button","variant","ButtonVariant","primary","secondary","onClick","ChartError","Spinner","size","SpinnerSize","lg","Chart","exports"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Button, ButtonVariant, ChartError, Spinner, SpinnerSize,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { Chart } from './components/Chart/Chart';\nimport { DataType, MainProps, OrderBookData } from './types';\nimport { getData } from './utils';\n\nconst Main = ({\n apiUrl,\n instrument,\n division,\n}: MainProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [dataType, setDataType] = useState(DataType.Order);\n const [data, setData] = useState<OrderBookData[] | undefined>(undefined);\n const { lang } = useLocale();\n\n useEffect(() => {\n setIsLoading(true);\n setData(undefined);\n setError(undefined);\n\n getData(apiUrl, instrument, division, dataType)\n .then((result) => {\n setIsLoading(false);\n if (dataType === DataType.Order && result?.orderBooks.length > 0) {\n setData(result.orderBooks);\n } else if (dataType === DataType.Position && result?.positionBooks.length > 0) {\n setData(result.positionBooks);\n } else {\n setData(undefined);\n }\n }).catch((err) => {\n setIsLoading(false);\n setError(JSON.stringify(err));\n });\n }, [dataType, apiUrl, instrument, division]);\n\n const isTypeOrder = dataType === DataType.Order;\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-border lw-border-solid lw-border-grey lw-p-4 lw-text-sm lw-text-black\">\n <div className=\"lw-flex lw-gap-2\">\n <Button\n variant={isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary}\n onClick={() => setDataType(DataType.Order)}\n >\n {lang('order_book')}\n </Button>\n <Button\n variant={isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary}\n onClick={() => setDataType(DataType.Position)}\n >\n {lang('position_book')}\n </Button>\n </div>\n {/* @todo: chart height */}\n <div className=\"lw-relative lw-h-[600px] lw-w-full\">\n {error && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\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 data={data[data.length - 1]} isTypeOrder={isTypeOrder} />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"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"}
@@ -5,19 +5,26 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.OrderBookWidget = void 0;
7
7
  var _react = _interopRequireDefault(require("react"));
8
+ var _monoI18n = require("@oanda/mono-i18n");
9
+ var _labsWidgetCommon = require("@oanda/labs-widget-common");
8
10
  var _Main = require("./Main");
11
+ var _translations = require("../translations");
9
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
13
  const OrderBookWidget = _ref => {
11
14
  let {
12
15
  apiUrl,
13
16
  instrument,
14
- division
17
+ division,
18
+ locale
15
19
  } = _ref;
16
- return _react.default.createElement(_Main.Main, {
20
+ return _react.default.createElement(_monoI18n.LocaleProvider, {
21
+ locale: (0, _labsWidgetCommon.getLocale)(locale),
22
+ translations: _translations.translations
23
+ }, _react.default.createElement(_Main.Main, {
17
24
  apiUrl: apiUrl,
18
25
  instrument: instrument,
19
26
  division: division
20
- });
27
+ }));
21
28
  };
22
29
  exports.OrderBookWidget = OrderBookWidget;
23
30
  //# sourceMappingURL=OrderBookWidget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderBookWidget.js","names":["_react","_interopRequireDefault","require","_Main","obj","__esModule","default","OrderBookWidget","_ref","apiUrl","instrument","division","createElement","Main","exports"],"sources":["../../../src/OrderBookWidget/OrderBookWidget.tsx"],"sourcesContent":["import React from 'react';\nimport { Main } from './Main';\nimport { OrderBookWidgetConfig } from './types';\n\nconst OrderBookWidget = ({\n apiUrl,\n instrument,\n division,\n}: OrderBookWidgetConfig) => (\n <Main\n apiUrl={apiUrl}\n instrument={instrument}\n division={division}\n />\n);\n\nexport { OrderBookWidget };\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAA8B,SAAAD,uBAAAG,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAG9B,MAAMG,eAAe,GAAGC,IAAA;EAAA,IAAC;IACvBC,MAAM;IACNC,UAAU;IACVC;EACqB,CAAC,GAAAH,IAAA;EAAA,OACtBR,MAAA,CAAAM,OAAA,CAAAM,aAAA,CAACT,KAAA,CAAAU,IAAI;IACHJ,MAAM,EAAEA,MAAO;IACfC,UAAU,EAAEA,UAAW;IACvBC,QAAQ,EAAEA;EAAS,CACpB,CAAC;AAAA,CACH;AAACG,OAAA,CAAAP,eAAA,GAAAA,eAAA"}
1
+ {"version":3,"file":"OrderBookWidget.js","names":["_react","_interopRequireDefault","require","_monoI18n","_labsWidgetCommon","_Main","_translations","obj","__esModule","default","OrderBookWidget","_ref","apiUrl","instrument","division","locale","createElement","LocaleProvider","getLocale","translations","Main","exports"],"sources":["../../../src/OrderBookWidget/OrderBookWidget.tsx"],"sourcesContent":["import React from 'react';\nimport { LocaleProvider } from '@oanda/mono-i18n';\nimport { getLocale } from '@oanda/labs-widget-common';\nimport { Main } from './Main';\nimport { OrderBookWidgetConfig } from './types';\nimport { translations } from '../translations';\n\nconst OrderBookWidget = ({\n apiUrl,\n instrument,\n division,\n locale,\n}: OrderBookWidgetConfig) => (\n <LocaleProvider locale={getLocale(locale)} translations={translations}>\n <Main\n apiUrl={apiUrl}\n instrument={instrument}\n division={division}\n />\n </LocaleProvider>\n);\n\nexport { OrderBookWidget };\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,iBAAA,GAAAF,OAAA;AACA,IAAAG,KAAA,GAAAH,OAAA;AAEA,IAAAI,aAAA,GAAAJ,OAAA;AAA+C,SAAAD,uBAAAM,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAE/C,MAAMG,eAAe,GAAGC,IAAA;EAAA,IAAC;IACvBC,MAAM;IACNC,UAAU;IACVC,QAAQ;IACRC;EACqB,CAAC,GAAAJ,IAAA;EAAA,OACtBX,MAAA,CAAAS,OAAA,CAAAO,aAAA,CAACb,SAAA,CAAAc,cAAc;IAACF,MAAM,EAAE,IAAAG,2BAAS,EAACH,MAAM,CAAE;IAACI,YAAY,EAAEA;EAAa,GACpEnB,MAAA,CAAAS,OAAA,CAAAO,aAAA,CAACX,KAAA,CAAAe,IAAI;IACHR,MAAM,EAAEA,MAAO;IACfC,UAAU,EAAEA,UAAW;IACvBC,QAAQ,EAAEA;EAAS,CACpB,CACa,CAAC;AAAA,CAClB;AAACO,OAAA,CAAAX,eAAA,GAAAA,eAAA"}
@@ -11,8 +11,8 @@ var _reactChartjs = require("react-chartjs-2");
11
11
  var _config = require("./config");
12
12
  var _utils = require("./utils");
13
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
15
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
14
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
15
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
16
16
  _chart.Chart.register(_chart.CategoryScale, _chart.LinearScale, _chart.BarElement, _chart.Tooltip, _chartjsPluginZoom.default);
17
17
  const Chart = _ref => {
18
18
  let {
@@ -1 +1 @@
1
- {"version":3,"file":"Chart.js","names":["_react","_interopRequireWildcard","require","_chart","_chartjsPluginZoom","_interopRequireDefault","_reactChartjs","_config","_utils","obj","__esModule","default","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","ChartJS","register","CategoryScale","LinearScale","BarElement","Tooltip","zoomPlugin","Chart","_ref","data","isTypeOrder","chartRef","useRef","sell","buckets","map","item","Number","shortCountPercent","buy","longCountPercent","price","maxSell","Math","abs","min","maxBuy","max","rangeX","ceil","minRangeY","maxRangeY","chartData","labels","datasets","backgroundColor","colorNeg","label","barPercentage","borderWidth","categoryPercentage","borderColor","colorPos","useEffect","current","zoomScale","getInitialRange","createElement","className","Fragment","Bar","ref","options","getChartOptions","exports"],"sources":["../../../../../src/OrderBookWidget/components/Chart/Chart.tsx"],"sourcesContent":["import React, { useRef, useEffect } from 'react';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Tooltip,\n} from 'chart.js';\nimport zoomPlugin from 'chartjs-plugin-zoom';\nimport { Bar } from 'react-chartjs-2';\nimport type { ChartData } from 'chart.js';\nimport { colorNeg, colorPos, getChartOptions } from './config';\nimport { OrderBookData } from '../../types';\nimport { getInitialRange } from './utils';\n\nChartJS.register(CategoryScale, LinearScale, BarElement, Tooltip, zoomPlugin);\n\nexport const Chart = ({ data, isTypeOrder }: { data: OrderBookData, isTypeOrder: boolean }) => {\n const chartRef = useRef<ChartJS | null>(null);\n\n const sell = data.buckets.map((item) => Number(item.shortCountPercent) * -1);\n const buy = data.buckets.map((item) => Number(item.longCountPercent));\n const price = data.buckets.map((item) => Number(item.price));\n\n const maxSell = Math.abs(Math.min(...sell));\n const maxBuy = Math.max(...buy);\n const rangeX = Math.ceil((Math.max(maxSell, maxBuy)));\n const minRangeY = (Math.min(...price));\n const maxRangeY = (Math.max(...price));\n\n const chartData: ChartData<'bar'> = {\n labels: price,\n datasets: [\n {\n data: sell,\n backgroundColor: colorNeg,\n label: isTypeOrder ? 'Sell Orders' : 'Short Positions',\n barPercentage: 1,\n borderWidth: 1,\n categoryPercentage: 1,\n borderColor: 'transparent',\n },\n {\n data: buy,\n backgroundColor: colorPos,\n label: isTypeOrder ? 'Buy Orders' : 'Long Positions',\n borderColor: 'transparent',\n borderWidth: 1,\n barPercentage: 1,\n categoryPercentage: 1,\n },\n ],\n };\n\n useEffect(() => {\n if (chartRef && chartRef.current) {\n chartRef.current.zoomScale('y', getInitialRange(price), 'none');\n }\n }, [price]);\n\n return (\n <div className=\"lw-w-full\">\n {/* @todo: set correct margin when new designs are available */}\n <div className=\"lw-mb-0 lw-ml-[70px] lw-mr-2.5 lw-mt-[30px] lw-flex lw-justify-between lw-text-xs lw-text-darkGrey\">\n {isTypeOrder ? (\n <>\n <div>Sell</div>\n <div>Open Orders</div>\n <div>Buy</div>\n </>\n ) : (\n <>\n <div>Short</div>\n <div>Open Positions</div>\n <div>Long</div>\n </>\n )}\n </div>\n <Bar\n ref={chartRef as any}\n options={getChartOptions(rangeX, minRangeY, maxRangeY)}\n data={chartData}\n />\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Chart.js","names":["_react","_interopRequireWildcard","require","_chart","_chartjsPluginZoom","_interopRequireDefault","_reactChartjs","_config","_utils","obj","__esModule","default","_getRequireWildcardCache","e","WeakMap","r","t","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","ChartJS","register","CategoryScale","LinearScale","BarElement","Tooltip","zoomPlugin","Chart","_ref","data","isTypeOrder","chartRef","useRef","sell","buckets","map","item","Number","shortCountPercent","buy","longCountPercent","price","maxSell","Math","abs","min","maxBuy","max","rangeX","ceil","minRangeY","maxRangeY","chartData","labels","datasets","backgroundColor","colorNeg","label","barPercentage","borderWidth","categoryPercentage","borderColor","colorPos","useEffect","current","zoomScale","getInitialRange","createElement","className","Fragment","Bar","ref","options","getChartOptions","exports"],"sources":["../../../../../src/OrderBookWidget/components/Chart/Chart.tsx"],"sourcesContent":["import React, { useRef, useEffect } from 'react';\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Tooltip,\n} from 'chart.js';\nimport zoomPlugin from 'chartjs-plugin-zoom';\nimport { Bar } from 'react-chartjs-2';\nimport type { ChartData } from 'chart.js';\nimport { colorNeg, colorPos, getChartOptions } from './config';\nimport { OrderBookData } from '../../types';\nimport { getInitialRange } from './utils';\n\nChartJS.register(CategoryScale, LinearScale, BarElement, Tooltip, zoomPlugin);\n\nexport const Chart = ({ data, isTypeOrder }: { data: OrderBookData, isTypeOrder: boolean }) => {\n const chartRef = useRef<ChartJS | null>(null);\n\n const sell = data.buckets.map((item) => Number(item.shortCountPercent) * -1);\n const buy = data.buckets.map((item) => Number(item.longCountPercent));\n const price = data.buckets.map((item) => Number(item.price));\n\n const maxSell = Math.abs(Math.min(...sell));\n const maxBuy = Math.max(...buy);\n const rangeX = Math.ceil((Math.max(maxSell, maxBuy)));\n const minRangeY = (Math.min(...price));\n const maxRangeY = (Math.max(...price));\n\n const chartData: ChartData<'bar'> = {\n labels: price,\n datasets: [\n {\n data: sell,\n backgroundColor: colorNeg,\n label: isTypeOrder ? 'Sell Orders' : 'Short Positions',\n barPercentage: 1,\n borderWidth: 1,\n categoryPercentage: 1,\n borderColor: 'transparent',\n },\n {\n data: buy,\n backgroundColor: colorPos,\n label: isTypeOrder ? 'Buy Orders' : 'Long Positions',\n borderColor: 'transparent',\n borderWidth: 1,\n barPercentage: 1,\n categoryPercentage: 1,\n },\n ],\n };\n\n useEffect(() => {\n if (chartRef && chartRef.current) {\n chartRef.current.zoomScale('y', getInitialRange(price), 'none');\n }\n }, [price]);\n\n return (\n <div className=\"lw-w-full\">\n {/* @todo: set correct margin when new designs are available */}\n <div className=\"lw-mb-0 lw-ml-[70px] lw-mr-2.5 lw-mt-[30px] lw-flex lw-justify-between lw-text-xs lw-text-darkGrey\">\n {isTypeOrder ? (\n <>\n <div>Sell</div>\n <div>Open Orders</div>\n <div>Buy</div>\n </>\n ) : (\n <>\n <div>Short</div>\n <div>Open Positions</div>\n <div>Long</div>\n </>\n )}\n </div>\n <Bar\n ref={chartRef as any}\n options={getChartOptions(rangeX, minRangeY, maxRangeY)}\n data={chartData}\n />\n </div>\n );\n};\n"],"mappings":"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"}
@@ -8,9 +8,11 @@ const {
8
8
  apiUrl,
9
9
  instrument,
10
10
  division,
11
- renderElementId
11
+ renderElementId,
12
+ locale
12
13
  } = window.orderBookWidgetConfig;
13
14
  (0, _reactDom.render)(_react.default.createElement(_OrderBookWidget.OrderBookWidget, {
15
+ locale: locale,
14
16
  apiUrl: apiUrl,
15
17
  instrument: instrument,
16
18
  division: division
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","names":["_react","_interopRequireDefault","require","_reactDom","_OrderBookWidget","obj","__esModule","default","apiUrl","instrument","division","renderElementId","window","orderBookWidgetConfig","render","createElement","OrderBookWidget","document","getElementById"],"sources":["../../../src/OrderBookWidget/render.tsx"],"sourcesContent":["import React from 'react';\nimport { render } from 'react-dom';\nimport { OrderBookWidget } from './OrderBookWidget';\nimport { OrderBookWrapperConfig } from './types';\n\ndeclare global {\n interface Window {\n orderBookWidgetConfig: OrderBookWrapperConfig;\n }\n}\n\nconst {\n apiUrl,\n instrument,\n division,\n renderElementId,\n} = window.orderBookWidgetConfig;\n\nrender(\n <OrderBookWidget\n apiUrl={apiUrl}\n instrument={instrument}\n division={division}\n />,\n document.getElementById(renderElementId),\n);\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAAoD,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AASpD,MAAM;EACJG,MAAM;EACNC,UAAU;EACVC,QAAQ;EACRC;AACF,CAAC,GAAGC,MAAM,CAACC,qBAAqB;AAEhC,IAAAC,gBAAM,EACJd,MAAA,CAAAO,OAAA,CAAAQ,aAAA,CAACX,gBAAA,CAAAY,eAAe;EACdR,MAAM,EAAEA,MAAO;EACfC,UAAU,EAAEA,UAAW;EACvBC,QAAQ,EAAEA;AAAS,CACpB,CAAC,EACFO,QAAQ,CAACC,cAAc,CAACP,eAAe,CACzC,CAAC"}
1
+ {"version":3,"file":"render.js","names":["_react","_interopRequireDefault","require","_reactDom","_OrderBookWidget","obj","__esModule","default","apiUrl","instrument","division","renderElementId","locale","window","orderBookWidgetConfig","render","createElement","OrderBookWidget","document","getElementById"],"sources":["../../../src/OrderBookWidget/render.tsx"],"sourcesContent":["import React from 'react';\nimport { render } from 'react-dom';\nimport { OrderBookWidget } from './OrderBookWidget';\nimport { OrderBookWrapperConfig } from './types';\n\ndeclare global {\n interface Window {\n orderBookWidgetConfig: OrderBookWrapperConfig;\n }\n}\n\nconst {\n apiUrl,\n instrument,\n division,\n renderElementId,\n locale,\n} = window.orderBookWidgetConfig;\n\nrender(\n <OrderBookWidget\n locale={locale}\n apiUrl={apiUrl}\n instrument={instrument}\n division={division}\n />,\n document.getElementById(renderElementId),\n);\n"],"mappings":";;AAAA,IAAAA,MAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,SAAA,GAAAD,OAAA;AACA,IAAAE,gBAAA,GAAAF,OAAA;AAAoD,SAAAD,uBAAAI,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AASpD,MAAM;EACJG,MAAM;EACNC,UAAU;EACVC,QAAQ;EACRC,eAAe;EACfC;AACF,CAAC,GAAGC,MAAM,CAACC,qBAAqB;AAEhC,IAAAC,gBAAM,EACJf,MAAA,CAAAO,OAAA,CAAAS,aAAA,CAACZ,gBAAA,CAAAa,eAAe;EACdL,MAAM,EAAEA,MAAO;EACfJ,MAAM,EAAEA,MAAO;EACfC,UAAU,EAAEA,UAAW;EACvBC,QAAQ,EAAEA;AAAS,CACpB,CAAC,EACFQ,QAAQ,CAACC,cAAc,CAACR,eAAe,CACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["DataType","exports"],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["// @todo get from graphql schema\nexport interface OrderBookData {\n instrument: string;\n price: string;\n bucketWidth: string;\n buckets: {\n price: string;\n longCountPercent: string;\n shortCountPercent: string;\n }[];\n time: string;\n unixTime: string;\n region: string;\n division: string;\n}\n\nexport enum DataType {\n Order = 'ORDER',\n Position = 'POSITION',\n}\nexport interface OrderBookWidgetConfig {\n apiUrl: string;\n instrument: string;\n division: string;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface MainProps {\n apiUrl: string;\n instrument: string;\n division: string;\n}\n"],"mappings":";;;;;;IAgBYA,QAAQ,GAAAC,OAAA,CAAAD,QAAA,aAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA"}
1
+ {"version":3,"file":"types.js","names":["DataType","exports"],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["import { Locale } from '@oanda/mono-i18n';\n\n// @todo get from graphql schema\nexport interface OrderBookData {\n instrument: string;\n price: string;\n bucketWidth: string;\n buckets: {\n price: string;\n longCountPercent: string;\n shortCountPercent: string;\n }[];\n time: string;\n unixTime: string;\n region: string;\n division: string;\n}\n\nexport enum DataType {\n Order = 'ORDER',\n Position = 'POSITION',\n}\nexport interface OrderBookWidgetConfig {\n apiUrl: string;\n instrument: string;\n division: string;\n locale: Locale;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface MainProps {\n apiUrl: string;\n instrument: string;\n division: string;\n}\n"],"mappings":";;;;;;IAkBYA,QAAQ,GAAAC,OAAA,CAAAD,QAAA,aAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA"}
@@ -0,0 +1,19 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.translations = void 0;
7
+ var _monoI18n = require("@oanda/mono-i18n");
8
+ var _en = _interopRequireDefault(require("./sources/en.json"));
9
+ var _zh_TW = _interopRequireDefault(require("./sources/zh_TW.json"));
10
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
11
+ const translations = exports.translations = {
12
+ [_monoI18n.Locale.en]: {
13
+ translation: _en.default
14
+ },
15
+ [_monoI18n.Locale.zhTW]: {
16
+ translation: _zh_TW.default
17
+ }
18
+ };
19
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_monoI18n","require","_en","_interopRequireDefault","_zh_TW","obj","__esModule","default","translations","exports","Locale","en","translation","zhTW"],"sources":["../../../src/translations/index.ts"],"sourcesContent":["import { Locale, Translations } from '@oanda/mono-i18n';\n\nimport en from './sources/en.json';\nimport zhTW from './sources/zh_TW.json';\n\nimport { defaultTranslations } from './translations';\n\nexport type TranslationKey = keyof typeof defaultTranslations;\n\nexport const translations: Translations = {\n [Locale.en]: { translation: en },\n [Locale.zhTW]: { translation: zhTW },\n};\n"],"mappings":";;;;;;AAAA,IAAAA,SAAA,GAAAC,OAAA;AAEA,IAAAC,GAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,MAAA,GAAAD,sBAAA,CAAAF,OAAA;AAAwC,SAAAE,uBAAAE,GAAA,WAAAA,GAAA,IAAAA,GAAA,CAAAC,UAAA,GAAAD,GAAA,KAAAE,OAAA,EAAAF,GAAA;AAMjC,MAAMG,YAA0B,GAAAC,OAAA,CAAAD,YAAA,GAAG;EACxC,CAACE,gBAAM,CAACC,EAAE,GAAG;IAAEC,WAAW,EAAED;EAAG,CAAC;EAChC,CAACD,gBAAM,CAACG,IAAI,GAAG;IAAED,WAAW,EAAEC;EAAK;AACrC,CAAC"}
@@ -0,0 +1,4 @@
1
+ {
2
+ "data_unavailable": "Data unavailable",
3
+ "pagination_entries_range": "{{firstItemOnPage}}-{{lastItemOnPage}} of {{itemCount}} entries"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "data_unavailable": "無法使用資料",
3
+ "pagination_entries_range": "{{itemCount}}个挂单中的{{firstItemOnPage}}-{{lastItemOnPage}}"
4
+ }
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.defaultTranslations = void 0;
7
+ const defaultTranslations = exports.defaultTranslations = {};
8
+ //# sourceMappingURL=translations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translations.js","names":["defaultTranslations","exports"],"sources":["../../../src/translations/translations.ts"],"sourcesContent":["export const defaultTranslations = {\n\n};\n"],"mappings":";;;;;;AAAO,MAAMA,mBAAmB,GAAAC,OAAA,CAAAD,mBAAA,GAAG,CAEnC,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import React, { useState, useEffect } from 'react';
2
2
  import { Button, ButtonVariant, ChartError, Spinner, SpinnerSize } from '@oanda/labs-widget-common';
3
+ import { useLocale } from '@oanda/mono-i18n';
3
4
  import { Chart } from './components/Chart/Chart';
4
5
  import { DataType } from './types';
5
6
  import { getData } from './utils';
@@ -13,6 +14,9 @@ const Main = _ref => {
13
14
  const [error, setError] = useState(undefined);
14
15
  const [dataType, setDataType] = useState(DataType.Order);
15
16
  const [data, setData] = useState(undefined);
17
+ const {
18
+ lang
19
+ } = useLocale();
16
20
  useEffect(() => {
17
21
  setIsLoading(true);
18
22
  setData(undefined);
@@ -40,10 +44,10 @@ const Main = _ref => {
40
44
  }, React.createElement(Button, {
41
45
  variant: isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary,
42
46
  onClick: () => setDataType(DataType.Order)
43
- }, "Order Book"), React.createElement(Button, {
47
+ }, lang('order_book')), React.createElement(Button, {
44
48
  variant: isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary,
45
49
  onClick: () => setDataType(DataType.Position)
46
- }, "Position Book")), React.createElement("div", {
50
+ }, lang('position_book'))), React.createElement("div", {
47
51
  className: "lw-relative lw-h-[600px] lw-w-full"
48
52
  }, error && React.createElement("div", {
49
53
  className: "lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]"
@@ -1 +1 @@
1
- {"version":3,"file":"Main.js","names":["React","useState","useEffect","Button","ButtonVariant","ChartError","Spinner","SpinnerSize","Chart","DataType","getData","Main","_ref","apiUrl","instrument","division","isLoading","setIsLoading","error","setError","undefined","dataType","setDataType","Order","data","setData","then","result","orderBooks","length","Position","positionBooks","catch","err","JSON","stringify","isTypeOrder","createElement","className","variant","primary","secondary","onClick","size","lg"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Button, ButtonVariant, ChartError, Spinner, SpinnerSize,\n} from '@oanda/labs-widget-common';\nimport { Chart } from './components/Chart/Chart';\nimport { DataType, MainProps, OrderBookData } from './types';\nimport { getData } from './utils';\n\nconst Main = ({\n apiUrl,\n instrument,\n division,\n}: MainProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [dataType, setDataType] = useState(DataType.Order);\n const [data, setData] = useState<OrderBookData[] | undefined>(undefined);\n\n useEffect(() => {\n setIsLoading(true);\n setData(undefined);\n setError(undefined);\n\n getData(apiUrl, instrument, division, dataType)\n .then((result) => {\n setIsLoading(false);\n if (dataType === DataType.Order && result?.orderBooks.length > 0) {\n setData(result.orderBooks);\n } else if (dataType === DataType.Position && result?.positionBooks.length > 0) {\n setData(result.positionBooks);\n } else {\n setData(undefined);\n }\n }).catch((err) => {\n setIsLoading(false);\n setError(JSON.stringify(err));\n });\n }, [dataType, apiUrl, instrument, division]);\n\n const isTypeOrder = dataType === DataType.Order;\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-border lw-border-solid lw-border-grey lw-p-4 lw-text-sm lw-text-black\">\n <div className=\"lw-flex lw-gap-2\">\n <Button\n variant={isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary}\n onClick={() => setDataType(DataType.Order)}\n >\n Order Book\n </Button>\n <Button\n variant={isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary}\n onClick={() => setDataType(DataType.Position)}\n >\n Position Book\n </Button>\n </div>\n {/* @todo: chart height */}\n <div className=\"lw-relative lw-h-[600px] lw-w-full\">\n {error && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\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 data={data[data.length - 1]} isTypeOrder={isTypeOrder} />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"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"}
1
+ {"version":3,"file":"Main.js","names":["React","useState","useEffect","Button","ButtonVariant","ChartError","Spinner","SpinnerSize","useLocale","Chart","DataType","getData","Main","_ref","apiUrl","instrument","division","isLoading","setIsLoading","error","setError","undefined","dataType","setDataType","Order","data","setData","lang","then","result","orderBooks","length","Position","positionBooks","catch","err","JSON","stringify","isTypeOrder","createElement","className","variant","primary","secondary","onClick","size","lg"],"sources":["../../../src/OrderBookWidget/Main.tsx"],"sourcesContent":["import React, { useState, useEffect } from 'react';\nimport {\n Button, ButtonVariant, ChartError, Spinner, SpinnerSize,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport { Chart } from './components/Chart/Chart';\nimport { DataType, MainProps, OrderBookData } from './types';\nimport { getData } from './utils';\n\nconst Main = ({\n apiUrl,\n instrument,\n division,\n}: MainProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<string | undefined>(undefined);\n const [dataType, setDataType] = useState(DataType.Order);\n const [data, setData] = useState<OrderBookData[] | undefined>(undefined);\n const { lang } = useLocale();\n\n useEffect(() => {\n setIsLoading(true);\n setData(undefined);\n setError(undefined);\n\n getData(apiUrl, instrument, division, dataType)\n .then((result) => {\n setIsLoading(false);\n if (dataType === DataType.Order && result?.orderBooks.length > 0) {\n setData(result.orderBooks);\n } else if (dataType === DataType.Position && result?.positionBooks.length > 0) {\n setData(result.positionBooks);\n } else {\n setData(undefined);\n }\n }).catch((err) => {\n setIsLoading(false);\n setError(JSON.stringify(err));\n });\n }, [dataType, apiUrl, instrument, division]);\n\n const isTypeOrder = dataType === DataType.Order;\n\n return (\n <div data-testid=\"order-book-widget\" className=\"lw-border lw-border-solid lw-border-grey lw-p-4 lw-text-sm lw-text-black\">\n <div className=\"lw-flex lw-gap-2\">\n <Button\n variant={isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary}\n onClick={() => setDataType(DataType.Order)}\n >\n {lang('order_book')}\n </Button>\n <Button\n variant={isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary}\n onClick={() => setDataType(DataType.Position)}\n >\n {lang('position_book')}\n </Button>\n </div>\n {/* @todo: chart height */}\n <div className=\"lw-relative lw-h-[600px] lw-w-full\">\n {error && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full lw-items-center lw-justify-center lw-bg-lightGrey/[0.4]\">\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 data={data[data.length - 1]} isTypeOrder={isTypeOrder} />\n </div>\n )}\n </div>\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"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"}
@@ -1,16 +1,23 @@
1
1
  import React from 'react';
2
+ import { LocaleProvider } from '@oanda/mono-i18n';
3
+ import { getLocale } from '@oanda/labs-widget-common';
2
4
  import { Main } from './Main';
5
+ import { translations } from '../translations';
3
6
  const OrderBookWidget = _ref => {
4
7
  let {
5
8
  apiUrl,
6
9
  instrument,
7
- division
10
+ division,
11
+ locale
8
12
  } = _ref;
9
- return React.createElement(Main, {
13
+ return React.createElement(LocaleProvider, {
14
+ locale: getLocale(locale),
15
+ translations: translations
16
+ }, React.createElement(Main, {
10
17
  apiUrl: apiUrl,
11
18
  instrument: instrument,
12
19
  division: division
13
- });
20
+ }));
14
21
  };
15
22
  export { OrderBookWidget };
16
23
  //# sourceMappingURL=OrderBookWidget.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"OrderBookWidget.js","names":["React","Main","OrderBookWidget","_ref","apiUrl","instrument","division","createElement"],"sources":["../../../src/OrderBookWidget/OrderBookWidget.tsx"],"sourcesContent":["import React from 'react';\nimport { Main } from './Main';\nimport { OrderBookWidgetConfig } from './types';\n\nconst OrderBookWidget = ({\n apiUrl,\n instrument,\n division,\n}: OrderBookWidgetConfig) => (\n <Main\n apiUrl={apiUrl}\n instrument={instrument}\n division={division}\n />\n);\n\nexport { OrderBookWidget };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,IAAI,QAAQ,QAAQ;AAG7B,MAAMC,eAAe,GAAGC,IAAA;EAAA,IAAC;IACvBC,MAAM;IACNC,UAAU;IACVC;EACqB,CAAC,GAAAH,IAAA;EAAA,OACtBH,KAAA,CAAAO,aAAA,CAACN,IAAI;IACHG,MAAM,EAAEA,MAAO;IACfC,UAAU,EAAEA,UAAW;IACvBC,QAAQ,EAAEA;EAAS,CACpB,CAAC;AAAA,CACH;AAED,SAASJ,eAAe"}
1
+ {"version":3,"file":"OrderBookWidget.js","names":["React","LocaleProvider","getLocale","Main","translations","OrderBookWidget","_ref","apiUrl","instrument","division","locale","createElement"],"sources":["../../../src/OrderBookWidget/OrderBookWidget.tsx"],"sourcesContent":["import React from 'react';\nimport { LocaleProvider } from '@oanda/mono-i18n';\nimport { getLocale } from '@oanda/labs-widget-common';\nimport { Main } from './Main';\nimport { OrderBookWidgetConfig } from './types';\nimport { translations } from '../translations';\n\nconst OrderBookWidget = ({\n apiUrl,\n instrument,\n division,\n locale,\n}: OrderBookWidgetConfig) => (\n <LocaleProvider locale={getLocale(locale)} translations={translations}>\n <Main\n apiUrl={apiUrl}\n instrument={instrument}\n division={division}\n />\n </LocaleProvider>\n);\n\nexport { OrderBookWidget };\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,cAAc,QAAQ,kBAAkB;AACjD,SAASC,SAAS,QAAQ,2BAA2B;AACrD,SAASC,IAAI,QAAQ,QAAQ;AAE7B,SAASC,YAAY,QAAQ,iBAAiB;AAE9C,MAAMC,eAAe,GAAGC,IAAA;EAAA,IAAC;IACvBC,MAAM;IACNC,UAAU;IACVC,QAAQ;IACRC;EACqB,CAAC,GAAAJ,IAAA;EAAA,OACtBN,KAAA,CAAAW,aAAA,CAACV,cAAc;IAACS,MAAM,EAAER,SAAS,CAACQ,MAAM,CAAE;IAACN,YAAY,EAAEA;EAAa,GACpEJ,KAAA,CAAAW,aAAA,CAACR,IAAI;IACHI,MAAM,EAAEA,MAAO;IACfC,UAAU,EAAEA,UAAW;IACvBC,QAAQ,EAAEA;EAAS,CACpB,CACa,CAAC;AAAA,CAClB;AAED,SAASJ,eAAe"}
@@ -5,9 +5,11 @@ const {
5
5
  apiUrl,
6
6
  instrument,
7
7
  division,
8
- renderElementId
8
+ renderElementId,
9
+ locale
9
10
  } = window.orderBookWidgetConfig;
10
11
  render(React.createElement(OrderBookWidget, {
12
+ locale: locale,
11
13
  apiUrl: apiUrl,
12
14
  instrument: instrument,
13
15
  division: division
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","names":["React","render","OrderBookWidget","apiUrl","instrument","division","renderElementId","window","orderBookWidgetConfig","createElement","document","getElementById"],"sources":["../../../src/OrderBookWidget/render.tsx"],"sourcesContent":["import React from 'react';\nimport { render } from 'react-dom';\nimport { OrderBookWidget } from './OrderBookWidget';\nimport { OrderBookWrapperConfig } from './types';\n\ndeclare global {\n interface Window {\n orderBookWidgetConfig: OrderBookWrapperConfig;\n }\n}\n\nconst {\n apiUrl,\n instrument,\n division,\n renderElementId,\n} = window.orderBookWidgetConfig;\n\nrender(\n <OrderBookWidget\n apiUrl={apiUrl}\n instrument={instrument}\n division={division}\n />,\n document.getElementById(renderElementId),\n);\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,eAAe,QAAQ,mBAAmB;AASnD,MAAM;EACJC,MAAM;EACNC,UAAU;EACVC,QAAQ;EACRC;AACF,CAAC,GAAGC,MAAM,CAACC,qBAAqB;AAEhCP,MAAM,CACJD,KAAA,CAAAS,aAAA,CAACP,eAAe;EACdC,MAAM,EAAEA,MAAO;EACfC,UAAU,EAAEA,UAAW;EACvBC,QAAQ,EAAEA;AAAS,CACpB,CAAC,EACFK,QAAQ,CAACC,cAAc,CAACL,eAAe,CACzC,CAAC"}
1
+ {"version":3,"file":"render.js","names":["React","render","OrderBookWidget","apiUrl","instrument","division","renderElementId","locale","window","orderBookWidgetConfig","createElement","document","getElementById"],"sources":["../../../src/OrderBookWidget/render.tsx"],"sourcesContent":["import React from 'react';\nimport { render } from 'react-dom';\nimport { OrderBookWidget } from './OrderBookWidget';\nimport { OrderBookWrapperConfig } from './types';\n\ndeclare global {\n interface Window {\n orderBookWidgetConfig: OrderBookWrapperConfig;\n }\n}\n\nconst {\n apiUrl,\n instrument,\n division,\n renderElementId,\n locale,\n} = window.orderBookWidgetConfig;\n\nrender(\n <OrderBookWidget\n locale={locale}\n apiUrl={apiUrl}\n instrument={instrument}\n division={division}\n />,\n document.getElementById(renderElementId),\n);\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,eAAe,QAAQ,mBAAmB;AASnD,MAAM;EACJC,MAAM;EACNC,UAAU;EACVC,QAAQ;EACRC,eAAe;EACfC;AACF,CAAC,GAAGC,MAAM,CAACC,qBAAqB;AAEhCR,MAAM,CACJD,KAAA,CAAAU,aAAA,CAACR,eAAe;EACdK,MAAM,EAAEA,MAAO;EACfJ,MAAM,EAAEA,MAAO;EACfC,UAAU,EAAEA,UAAW;EACvBC,QAAQ,EAAEA;AAAS,CACpB,CAAC,EACFM,QAAQ,CAACC,cAAc,CAACN,eAAe,CACzC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["DataType"],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["// @todo get from graphql schema\nexport interface OrderBookData {\n instrument: string;\n price: string;\n bucketWidth: string;\n buckets: {\n price: string;\n longCountPercent: string;\n shortCountPercent: string;\n }[];\n time: string;\n unixTime: string;\n region: string;\n division: string;\n}\n\nexport enum DataType {\n Order = 'ORDER',\n Position = 'POSITION',\n}\nexport interface OrderBookWidgetConfig {\n apiUrl: string;\n instrument: string;\n division: string;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface MainProps {\n apiUrl: string;\n instrument: string;\n division: string;\n}\n"],"mappings":"AAgBA,WAAYA,QAAQ,aAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA"}
1
+ {"version":3,"file":"types.js","names":["DataType"],"sources":["../../../src/OrderBookWidget/types.ts"],"sourcesContent":["import { Locale } from '@oanda/mono-i18n';\n\n// @todo get from graphql schema\nexport interface OrderBookData {\n instrument: string;\n price: string;\n bucketWidth: string;\n buckets: {\n price: string;\n longCountPercent: string;\n shortCountPercent: string;\n }[];\n time: string;\n unixTime: string;\n region: string;\n division: string;\n}\n\nexport enum DataType {\n Order = 'ORDER',\n Position = 'POSITION',\n}\nexport interface OrderBookWidgetConfig {\n apiUrl: string;\n instrument: string;\n division: string;\n locale: Locale;\n}\n\nexport interface OrderBookWrapperConfig extends OrderBookWidgetConfig {\n renderElementId: string;\n}\n\nexport interface MainProps {\n apiUrl: string;\n instrument: string;\n division: string;\n}\n"],"mappings":"AAkBA,WAAYA,QAAQ,aAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA"}
@@ -0,0 +1,12 @@
1
+ import { Locale } from '@oanda/mono-i18n';
2
+ import en from './sources/en.json';
3
+ import zhTW from './sources/zh_TW.json';
4
+ export const translations = {
5
+ [Locale.en]: {
6
+ translation: en
7
+ },
8
+ [Locale.zhTW]: {
9
+ translation: zhTW
10
+ }
11
+ };
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["Locale","en","zhTW","translations","translation"],"sources":["../../../src/translations/index.ts"],"sourcesContent":["import { Locale, Translations } from '@oanda/mono-i18n';\n\nimport en from './sources/en.json';\nimport zhTW from './sources/zh_TW.json';\n\nimport { defaultTranslations } from './translations';\n\nexport type TranslationKey = keyof typeof defaultTranslations;\n\nexport const translations: Translations = {\n [Locale.en]: { translation: en },\n [Locale.zhTW]: { translation: zhTW },\n};\n"],"mappings":"AAAA,SAASA,MAAM,QAAsB,kBAAkB;AAEvD,OAAOC,EAAE,MAAM,mBAAmB;AAClC,OAAOC,IAAI,MAAM,sBAAsB;AAMvC,OAAO,MAAMC,YAA0B,GAAG;EACxC,CAACH,MAAM,CAACC,EAAE,GAAG;IAAEG,WAAW,EAAEH;EAAG,CAAC;EAChC,CAACD,MAAM,CAACE,IAAI,GAAG;IAAEE,WAAW,EAAEF;EAAK;AACrC,CAAC"}
@@ -0,0 +1,4 @@
1
+ {
2
+ "data_unavailable": "Data unavailable",
3
+ "pagination_entries_range": "{{firstItemOnPage}}-{{lastItemOnPage}} of {{itemCount}} entries"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "data_unavailable": "無法使用資料",
3
+ "pagination_entries_range": "{{itemCount}}个挂单中的{{firstItemOnPage}}-{{lastItemOnPage}}"
4
+ }
@@ -0,0 +1,2 @@
1
+ export const defaultTranslations = {};
2
+ //# sourceMappingURL=translations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"translations.js","names":["defaultTranslations"],"sources":["../../../src/translations/translations.ts"],"sourcesContent":["export const defaultTranslations = {\n\n};\n"],"mappings":"AAAA,OAAO,MAAMA,mBAAmB,GAAG,CAEnC,CAAC"}
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
2
  import { OrderBookWidgetConfig } from './types';
3
- declare const OrderBookWidget: ({ apiUrl, instrument, division, }: OrderBookWidgetConfig) => JSX.Element;
3
+ declare const OrderBookWidget: ({ apiUrl, instrument, division, locale, }: OrderBookWidgetConfig) => JSX.Element;
4
4
  export { OrderBookWidget };
@@ -1,3 +1,4 @@
1
+ import { Locale } from '@oanda/mono-i18n';
1
2
  export interface OrderBookData {
2
3
  instrument: string;
3
4
  price: string;
@@ -20,6 +21,7 @@ export interface OrderBookWidgetConfig {
20
21
  apiUrl: string;
21
22
  instrument: string;
22
23
  division: string;
24
+ locale: Locale;
23
25
  }
24
26
  export interface OrderBookWrapperConfig extends OrderBookWidgetConfig {
25
27
  renderElementId: string;
@@ -0,0 +1,4 @@
1
+ import { Translations } from '@oanda/mono-i18n';
2
+ import { defaultTranslations } from './translations';
3
+ export type TranslationKey = keyof typeof defaultTranslations;
4
+ export declare const translations: Translations;
@@ -0,0 +1 @@
1
+ export declare const defaultTranslations: {};
@@ -0,0 +1,18 @@
1
+ {
2
+ "projectId": "19607517615e88022ba782.45168463",
3
+ "outputDir": "src/translations/sources",
4
+ "esModuleTranslations": "src/translations/translations.ts",
5
+ "messagesFormat": "esModule",
6
+ "esModuleConstName": "defaultTranslations",
7
+ "includeEmptyTranslations": true,
8
+ "downloadOptions": {
9
+ "format": "json",
10
+ "add_newline_eof": true,
11
+ "placeholder_format": "i18n",
12
+ "indentation": "2sp",
13
+ "plural_format": "i18next",
14
+ "export_empty_as": "skip",
15
+ "include_tags": ["common_widgets, order_book_widgets"],
16
+ "filter_langs": ["en", "zh_TW"]
17
+ }
18
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oanda/labs-order-book-widget",
3
- "version": "1.0.23",
3
+ "version": "1.0.26",
4
4
  "description": "Labs Order Book Widget",
5
5
  "main": "dist/main/index.js",
6
6
  "module": "dist/module/index.js",
@@ -10,10 +10,11 @@
10
10
  "author": "OANDA",
11
11
  "license": "UNLICENSED",
12
12
  "dependencies": {
13
- "@oanda/labs-widget-common": "^1.0.23",
13
+ "@oanda/labs-widget-common": "^1.0.26",
14
+ "@oanda/mono-i18n": "9.0.0",
14
15
  "chart.js": "4.3.3",
15
16
  "chartjs-plugin-zoom": "2.0.1",
16
17
  "react-chartjs-2": "5.2.0"
17
18
  },
18
- "gitHead": "ef7bd1bb2ab3a52b55b76dfce829521f3b858f12"
19
+ "gitHead": "1c59d814fdb1e15659d977474c873233848a944e"
19
20
  }
@@ -2,6 +2,7 @@ import React, { useState, useEffect } from 'react';
2
2
  import {
3
3
  Button, ButtonVariant, ChartError, Spinner, SpinnerSize,
4
4
  } from '@oanda/labs-widget-common';
5
+ import { useLocale } from '@oanda/mono-i18n';
5
6
  import { Chart } from './components/Chart/Chart';
6
7
  import { DataType, MainProps, OrderBookData } from './types';
7
8
  import { getData } from './utils';
@@ -15,6 +16,7 @@ const Main = ({
15
16
  const [error, setError] = useState<string | undefined>(undefined);
16
17
  const [dataType, setDataType] = useState(DataType.Order);
17
18
  const [data, setData] = useState<OrderBookData[] | undefined>(undefined);
19
+ const { lang } = useLocale();
18
20
 
19
21
  useEffect(() => {
20
22
  setIsLoading(true);
@@ -46,13 +48,13 @@ const Main = ({
46
48
  variant={isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary}
47
49
  onClick={() => setDataType(DataType.Order)}
48
50
  >
49
- Order Book
51
+ {lang('order_book')}
50
52
  </Button>
51
53
  <Button
52
54
  variant={isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary}
53
55
  onClick={() => setDataType(DataType.Position)}
54
56
  >
55
- Position Book
57
+ {lang('position_book')}
56
58
  </Button>
57
59
  </div>
58
60
  {/* @todo: chart height */}
@@ -1,17 +1,23 @@
1
1
  import React from 'react';
2
+ import { LocaleProvider } from '@oanda/mono-i18n';
3
+ import { getLocale } from '@oanda/labs-widget-common';
2
4
  import { Main } from './Main';
3
5
  import { OrderBookWidgetConfig } from './types';
6
+ import { translations } from '../translations';
4
7
 
5
8
  const OrderBookWidget = ({
6
9
  apiUrl,
7
10
  instrument,
8
11
  division,
12
+ locale,
9
13
  }: OrderBookWidgetConfig) => (
10
- <Main
11
- apiUrl={apiUrl}
12
- instrument={instrument}
13
- division={division}
14
- />
14
+ <LocaleProvider locale={getLocale(locale)} translations={translations}>
15
+ <Main
16
+ apiUrl={apiUrl}
17
+ instrument={instrument}
18
+ division={division}
19
+ />
20
+ </LocaleProvider>
15
21
  );
16
22
 
17
23
  export { OrderBookWidget };
@@ -14,10 +14,12 @@ const {
14
14
  instrument,
15
15
  division,
16
16
  renderElementId,
17
+ locale,
17
18
  } = window.orderBookWidgetConfig;
18
19
 
19
20
  render(
20
21
  <OrderBookWidget
22
+ locale={locale}
21
23
  apiUrl={apiUrl}
22
24
  instrument={instrument}
23
25
  division={division}
@@ -1,3 +1,5 @@
1
+ import { Locale } from '@oanda/mono-i18n';
2
+
1
3
  // @todo get from graphql schema
2
4
  export interface OrderBookData {
3
5
  instrument: string;
@@ -22,6 +24,7 @@ export interface OrderBookWidgetConfig {
22
24
  apiUrl: string;
23
25
  instrument: string;
24
26
  division: string;
27
+ locale: Locale;
25
28
  }
26
29
 
27
30
  export interface OrderBookWrapperConfig extends OrderBookWidgetConfig {
@@ -0,0 +1,13 @@
1
+ import { Locale, Translations } from '@oanda/mono-i18n';
2
+
3
+ import en from './sources/en.json';
4
+ import zhTW from './sources/zh_TW.json';
5
+
6
+ import { defaultTranslations } from './translations';
7
+
8
+ export type TranslationKey = keyof typeof defaultTranslations;
9
+
10
+ export const translations: Translations = {
11
+ [Locale.en]: { translation: en },
12
+ [Locale.zhTW]: { translation: zhTW },
13
+ };
@@ -0,0 +1,4 @@
1
+ {
2
+ "data_unavailable": "Data unavailable",
3
+ "pagination_entries_range": "{{firstItemOnPage}}-{{lastItemOnPage}} of {{itemCount}} entries"
4
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "data_unavailable": "無法使用資料",
3
+ "pagination_entries_range": "{{itemCount}}个挂单中的{{firstItemOnPage}}-{{lastItemOnPage}}"
4
+ }
@@ -0,0 +1,3 @@
1
+ export const defaultTranslations = {
2
+
3
+ };