@oanda/labs-order-book-widget 1.0.0

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 (59) hide show
  1. package/CHANGELOG.md +8 -0
  2. package/dist/main/OrderBookWidget/Main.js +70 -0
  3. package/dist/main/OrderBookWidget/Main.js.map +1 -0
  4. package/dist/main/OrderBookWidget/OrderBookWidget.js +23 -0
  5. package/dist/main/OrderBookWidget/OrderBookWidget.js.map +1 -0
  6. package/dist/main/OrderBookWidget/components/Chart/Chart.js +67 -0
  7. package/dist/main/OrderBookWidget/components/Chart/Chart.js.map +1 -0
  8. package/dist/main/OrderBookWidget/components/Chart/config.js +106 -0
  9. package/dist/main/OrderBookWidget/components/Chart/config.js.map +1 -0
  10. package/dist/main/OrderBookWidget/components/Chart/utils.js +21 -0
  11. package/dist/main/OrderBookWidget/components/Chart/utils.js.map +1 -0
  12. package/dist/main/OrderBookWidget/render.js +17 -0
  13. package/dist/main/OrderBookWidget/render.js.map +1 -0
  14. package/dist/main/OrderBookWidget/types.js +13 -0
  15. package/dist/main/OrderBookWidget/types.js.map +1 -0
  16. package/dist/main/OrderBookWidget/utils.js +17 -0
  17. package/dist/main/OrderBookWidget/utils.js.map +1 -0
  18. package/dist/main/index.js +28 -0
  19. package/dist/main/index.js.map +1 -0
  20. package/dist/module/OrderBookWidget/Main.js +62 -0
  21. package/dist/module/OrderBookWidget/Main.js.map +1 -0
  22. package/dist/module/OrderBookWidget/OrderBookWidget.js +16 -0
  23. package/dist/module/OrderBookWidget/OrderBookWidget.js.map +1 -0
  24. package/dist/module/OrderBookWidget/components/Chart/Chart.js +57 -0
  25. package/dist/module/OrderBookWidget/components/Chart/Chart.js.map +1 -0
  26. package/dist/module/OrderBookWidget/components/Chart/config.js +97 -0
  27. package/dist/module/OrderBookWidget/components/Chart/config.js.map +1 -0
  28. package/dist/module/OrderBookWidget/components/Chart/utils.js +14 -0
  29. package/dist/module/OrderBookWidget/components/Chart/utils.js.map +1 -0
  30. package/dist/module/OrderBookWidget/render.js +14 -0
  31. package/dist/module/OrderBookWidget/render.js.map +1 -0
  32. package/dist/module/OrderBookWidget/types.js +6 -0
  33. package/dist/module/OrderBookWidget/types.js.map +1 -0
  34. package/dist/module/OrderBookWidget/utils.js +11 -0
  35. package/dist/module/OrderBookWidget/utils.js.map +1 -0
  36. package/dist/module/index.js +3 -0
  37. package/dist/module/index.js.map +1 -0
  38. package/dist/types/OrderBookWidget/Main.d.ts +4 -0
  39. package/dist/types/OrderBookWidget/OrderBookWidget.d.ts +4 -0
  40. package/dist/types/OrderBookWidget/components/Chart/Chart.d.ts +6 -0
  41. package/dist/types/OrderBookWidget/components/Chart/config.d.ts +4 -0
  42. package/dist/types/OrderBookWidget/components/Chart/utils.d.ts +4 -0
  43. package/dist/types/OrderBookWidget/render.d.ts +6 -0
  44. package/dist/types/OrderBookWidget/types.d.ts +28 -0
  45. package/dist/types/OrderBookWidget/utils.d.ts +2 -0
  46. package/dist/types/index.d.ts +2 -0
  47. package/index.ts +1 -0
  48. package/package.json +19 -0
  49. package/src/OrderBookWidget/Main.tsx +80 -0
  50. package/src/OrderBookWidget/OrderBookWidget.tsx +17 -0
  51. package/src/OrderBookWidget/components/Chart/Chart.tsx +86 -0
  52. package/src/OrderBookWidget/components/Chart/config.tsx +100 -0
  53. package/src/OrderBookWidget/components/Chart/utils.tsx +13 -0
  54. package/src/OrderBookWidget/render.tsx +26 -0
  55. package/src/OrderBookWidget/types.ts +32 -0
  56. package/src/OrderBookWidget/utils.ts +25 -0
  57. package/src/index.ts +2 -0
  58. package/test/Main.test.tsx +57 -0
  59. package/tsconfig.types.json +12 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,8 @@
1
+ # Change Log
2
+
3
+ All notable changes to this project will be documented in this file.
4
+ See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
+
6
+ # 1.0.0 (2023-09-01)
7
+
8
+ **Note:** Version bump only for package @oanda/labs-order-book-widget
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Main = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _labsWidgetCommon = require("@oanda/labs-widget-common");
9
+ var _Chart = require("./components/Chart/Chart");
10
+ var _types = require("./types");
11
+ 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; }
14
+ const Main = _ref => {
15
+ let {
16
+ apiUrl,
17
+ instrument,
18
+ division
19
+ } = _ref;
20
+ const [isLoading, setIsLoading] = (0, _react.useState)(false);
21
+ const [error, setError] = (0, _react.useState)(undefined);
22
+ const [dataType, setDataType] = (0, _react.useState)(_types.DataType.Order);
23
+ const [data, setData] = (0, _react.useState)(undefined);
24
+ (0, _react.useEffect)(() => {
25
+ setIsLoading(true);
26
+ setData(undefined);
27
+ setError(undefined);
28
+ (0, _utils.getData)(apiUrl, instrument, division, dataType).then(result => {
29
+ setIsLoading(false);
30
+ if (dataType === _types.DataType.Order && (result === null || result === void 0 ? void 0 : result.orderBooks.length) > 0) {
31
+ setData(result.orderBooks);
32
+ } else if (dataType === _types.DataType.Position && (result === null || result === void 0 ? void 0 : result.positionBooks.length) > 0) {
33
+ setData(result.positionBooks);
34
+ } else {
35
+ setData(undefined);
36
+ }
37
+ }).catch(err => {
38
+ setIsLoading(false);
39
+ setError(JSON.stringify(err));
40
+ });
41
+ }, [dataType, apiUrl, instrument, division]);
42
+ const isTypeOrder = dataType === _types.DataType.Order;
43
+ return _react.default.createElement("div", {
44
+ "data-testid": "order-book-widget",
45
+ className: "border border-solid border-grey p-4 text-sm text-black"
46
+ }, _react.default.createElement("div", {
47
+ className: "flex gap-2"
48
+ }, _react.default.createElement(_labsWidgetCommon.Button, {
49
+ variant: isTypeOrder ? _labsWidgetCommon.ButtonVariant.primary : _labsWidgetCommon.ButtonVariant.secondary,
50
+ onClick: () => setDataType(_types.DataType.Order)
51
+ }, "Order Book"), _react.default.createElement(_labsWidgetCommon.Button, {
52
+ variant: isTypeOrder ? _labsWidgetCommon.ButtonVariant.secondary : _labsWidgetCommon.ButtonVariant.primary,
53
+ onClick: () => setDataType(_types.DataType.Position)
54
+ }, "Position Book")), _react.default.createElement("div", {
55
+ className: "relative h-[600px] w-full"
56
+ }, error && _react.default.createElement("div", {
57
+ className: "absolute left-0 top-0 flex h-full w-full items-center justify-center bg-lightGrey/[0.4]"
58
+ }, _react.default.createElement(_labsWidgetCommon.ChartError, null)), isLoading && _react.default.createElement("div", {
59
+ className: "absolute left-0 top-0 flex h-full w-full items-center justify-center bg-lightGrey/[0.4]"
60
+ }, _react.default.createElement(_labsWidgetCommon.Spinner, {
61
+ size: _labsWidgetCommon.SpinnerSize.lg
62
+ })), data && _react.default.createElement("div", {
63
+ className: "absolute left-0 top-0 flex h-full w-full"
64
+ }, _react.default.createElement(_Chart.Chart, {
65
+ data: data[data.length - 1],
66
+ isTypeOrder: isTypeOrder
67
+ }))));
68
+ };
69
+ exports.Main = Main;
70
+ //# sourceMappingURL=Main.js.map
@@ -0,0 +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=\"border border-solid border-grey p-4 text-sm text-black\">\n <div className=\"flex 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=\"relative h-[600px] w-full\">\n {error && (\n <div className=\"absolute left-0 top-0 flex h-full w-full items-center justify-center bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"absolute left-0 top-0 flex h-full w-full items-center justify-center bg-lightGrey/[0.4]\">\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {data && (\n <div className=\"absolute left-0 top-0 flex h-full 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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"}
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.OrderBookWidget = void 0;
7
+ var _react = _interopRequireDefault(require("react"));
8
+ var _Main = require("./Main");
9
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
10
+ const OrderBookWidget = _ref => {
11
+ let {
12
+ apiUrl,
13
+ instrument,
14
+ division
15
+ } = _ref;
16
+ return _react.default.createElement(_Main.Main, {
17
+ apiUrl: apiUrl,
18
+ instrument: instrument,
19
+ division: division
20
+ });
21
+ };
22
+ exports.OrderBookWidget = OrderBookWidget;
23
+ //# sourceMappingURL=OrderBookWidget.js.map
@@ -0,0 +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"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.Chart = void 0;
7
+ var _react = _interopRequireWildcard(require("react"));
8
+ var _chart = require("chart.js");
9
+ var _chartjsPluginZoom = _interopRequireDefault(require("chartjs-plugin-zoom"));
10
+ var _reactChartjs = require("react-chartjs-2");
11
+ var _config = require("./config");
12
+ var _utils = require("./utils");
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; }
16
+ _chart.Chart.register(_chart.CategoryScale, _chart.LinearScale, _chart.BarElement, _chart.Tooltip, _chartjsPluginZoom.default);
17
+ const Chart = _ref => {
18
+ let {
19
+ data,
20
+ isTypeOrder
21
+ } = _ref;
22
+ const chartRef = (0, _react.useRef)(null);
23
+ const sell = data.buckets.map(item => Number(item.shortCountPercent) * -1);
24
+ const buy = data.buckets.map(item => Number(item.longCountPercent));
25
+ const price = data.buckets.map(item => Number(item.price));
26
+ const maxSell = Math.abs(Math.min(...sell));
27
+ const maxBuy = Math.max(...buy);
28
+ const rangeX = Math.ceil(Math.max(maxSell, maxBuy));
29
+ const minRangeY = Math.min(...price);
30
+ const maxRangeY = Math.max(...price);
31
+ const chartData = {
32
+ labels: price,
33
+ datasets: [{
34
+ data: sell,
35
+ backgroundColor: _config.colorNeg,
36
+ label: isTypeOrder ? 'Sell Orders' : 'Short Positions',
37
+ barPercentage: 1,
38
+ borderWidth: 1,
39
+ categoryPercentage: 1,
40
+ borderColor: 'transparent'
41
+ }, {
42
+ data: buy,
43
+ backgroundColor: _config.colorPos,
44
+ label: isTypeOrder ? 'Buy Orders' : 'Long Positions',
45
+ borderColor: 'transparent',
46
+ borderWidth: 1,
47
+ barPercentage: 1,
48
+ categoryPercentage: 1
49
+ }]
50
+ };
51
+ (0, _react.useEffect)(() => {
52
+ if (chartRef && chartRef.current) {
53
+ chartRef.current.zoomScale('y', (0, _utils.getInitialRange)(price), 'none');
54
+ }
55
+ }, [price]);
56
+ return _react.default.createElement("div", {
57
+ className: "w-full"
58
+ }, _react.default.createElement("div", {
59
+ className: "mb-0 ml-[70px] mr-2.5 mt-[30px] flex justify-between text-xs text-darkGrey"
60
+ }, isTypeOrder ? _react.default.createElement(_react.default.Fragment, null, _react.default.createElement("div", null, "Sell"), _react.default.createElement("div", null, "Open Orders"), _react.default.createElement("div", null, "Buy")) : _react.default.createElement(_react.default.Fragment, null, _react.default.createElement("div", null, "Short"), _react.default.createElement("div", null, "Open Positions"), _react.default.createElement("div", null, "Long"))), _react.default.createElement(_reactChartjs.Bar, {
61
+ ref: chartRef,
62
+ options: (0, _config.getChartOptions)(rangeX, minRangeY, maxRangeY),
63
+ data: chartData
64
+ }));
65
+ };
66
+ exports.Chart = Chart;
67
+ //# sourceMappingURL=Chart.js.map
@@ -0,0 +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=\"w-full\">\n {/* @todo: set correct margin when new designs are available */}\n <div className=\"mb-0 ml-[70px] mr-2.5 mt-[30px] flex justify-between text-xs 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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"}
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getChartOptions = exports.colorPos = exports.colorNeg = void 0;
7
+ const colorPos = '#4A87F1';
8
+ exports.colorPos = colorPos;
9
+ const colorNeg = '#00d37e';
10
+ exports.colorNeg = colorNeg;
11
+ const getChartOptions = (rangeX, minRangeY, maxRangeY) => ({
12
+ animation: {
13
+ duration: 0
14
+ },
15
+ transitions: {
16
+ zoom: {
17
+ animation: {
18
+ duration: 500
19
+ }
20
+ }
21
+ },
22
+ skipNull: true,
23
+ scales: {
24
+ x: {
25
+ min: rangeX * -1,
26
+ max: rangeX,
27
+ ticks: {
28
+ color: '#607890',
29
+ callback: tickValue => tickValue === 0 ? '%' : "".concat(Math.abs(Number(tickValue)), " %")
30
+ },
31
+ grid: {
32
+ color: '#d1d7e0'
33
+ }
34
+ },
35
+ y: {
36
+ bounds: 'ticks',
37
+ type: 'linear',
38
+ min: minRangeY,
39
+ max: maxRangeY,
40
+ stacked: true,
41
+ afterFit(scaleInstance) {
42
+ scaleInstance.width = 80;
43
+ },
44
+ ticks: {
45
+ color: '#607890'
46
+ },
47
+ grid: {
48
+ color: '#d1d7e0'
49
+ }
50
+ }
51
+ },
52
+ indexAxis: 'y',
53
+ responsive: true,
54
+ plugins: {
55
+ zoom: {
56
+ limits: {
57
+ y: {
58
+ min: minRangeY,
59
+ max: maxRangeY
60
+ }
61
+ },
62
+ pan: {
63
+ enabled: true,
64
+ modifierKey: 'shift',
65
+ mode: 'y'
66
+ },
67
+ zoom: {
68
+ wheel: {
69
+ enabled: true
70
+ },
71
+ pinch: {
72
+ enabled: true
73
+ },
74
+ drag: {
75
+ enabled: true
76
+ },
77
+ mode: 'y'
78
+ }
79
+ },
80
+ tooltip: {
81
+ position: 'nearest',
82
+ yAlign: 'bottom',
83
+ backgroundColor: 'rgba(255, 255, 255, 0.90)',
84
+ borderWidth: 1,
85
+ borderColor: '#607890',
86
+ titleColor: '#607890',
87
+ bodyColor: '#607890',
88
+ displayColors: false,
89
+ titleFont: {
90
+ size: 14,
91
+ weight: 'normal'
92
+ },
93
+ bodyFont: {
94
+ size: 14,
95
+ weight: 'normal'
96
+ },
97
+ padding: 8,
98
+ callbacks: {
99
+ title: context => "Price: ".concat(context[0].label),
100
+ label: context => "".concat(context.dataset.label, ": ").concat(Math.abs(Number(context.raw)), "%")
101
+ }
102
+ }
103
+ }
104
+ });
105
+ exports.getChartOptions = getChartOptions;
106
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","names":["colorPos","exports","colorNeg","getChartOptions","rangeX","minRangeY","maxRangeY","animation","duration","transitions","zoom","skipNull","scales","x","min","max","ticks","color","callback","tickValue","concat","Math","abs","Number","grid","y","bounds","type","stacked","afterFit","scaleInstance","width","indexAxis","responsive","plugins","limits","pan","enabled","modifierKey","mode","wheel","pinch","drag","tooltip","position","yAlign","backgroundColor","borderWidth","borderColor","titleColor","bodyColor","displayColors","titleFont","size","weight","bodyFont","padding","callbacks","title","context","label","dataset","raw"],"sources":["../../../../../src/OrderBookWidget/components/Chart/config.tsx"],"sourcesContent":["import type { ChartOptions } from 'chart.js';\n\nexport const colorPos = '#4A87F1';\nexport const colorNeg = '#00d37e';\n\nexport const getChartOptions = (rangeX: number, minRangeY: number, maxRangeY: number): ChartOptions<'bar'> => ({\n animation: {\n duration: 0,\n },\n transitions: {\n zoom: {\n animation: {\n duration: 500,\n },\n },\n },\n skipNull: true,\n scales: {\n x: {\n min: rangeX * -1,\n max: rangeX,\n ticks: {\n color: '#607890',\n callback: (tickValue) => (tickValue === 0 ? '%' : `${Math.abs(Number(tickValue))} %`),\n },\n grid: {\n color: '#d1d7e0',\n },\n },\n y: {\n bounds: 'ticks',\n type: 'linear',\n min: minRangeY,\n max: maxRangeY,\n stacked: true,\n afterFit(scaleInstance) {\n // eslint-disable-next-line no-param-reassign\n scaleInstance.width = 80;\n },\n ticks: {\n color: '#607890',\n },\n grid: {\n color: '#d1d7e0',\n },\n },\n },\n indexAxis: 'y' as const,\n responsive: true,\n plugins: {\n zoom: {\n limits: {\n y: {\n min: minRangeY,\n max: maxRangeY,\n },\n },\n pan: {\n enabled: true,\n modifierKey: 'shift',\n mode: 'y',\n },\n zoom: {\n wheel: {\n enabled: true,\n },\n pinch: {\n enabled: true,\n },\n drag: {\n enabled: true,\n },\n mode: 'y',\n },\n },\n tooltip: {\n position: 'nearest',\n yAlign: 'bottom',\n backgroundColor: 'rgba(255, 255, 255, 0.90)',\n borderWidth: 1,\n borderColor: '#607890',\n titleColor: '#607890',\n bodyColor: '#607890',\n displayColors: false,\n titleFont: {\n size: 14,\n weight: 'normal',\n },\n bodyFont: {\n size: 14,\n weight: 'normal',\n },\n padding: 8,\n callbacks: {\n title: (context) => `Price: ${context[0].label}`,\n label: (context) => `${context.dataset.label}: ${Math.abs(Number(context.raw))}%`,\n },\n },\n },\n});\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getInitialRange = void 0;
7
+ const calculateQuartile = (sortedData, q) => {
8
+ const pos = (sortedData.length - 1) * q;
9
+ const base = Math.floor(pos);
10
+ const rest = pos - base;
11
+ if (sortedData[base + 1] !== undefined) {
12
+ return sortedData[base] + rest * (sortedData[base + 1] - sortedData[base]);
13
+ }
14
+ return sortedData[base];
15
+ };
16
+ const getInitialRange = data => ({
17
+ min: calculateQuartile(data, 0.25),
18
+ max: calculateQuartile(data, 0.75)
19
+ });
20
+ exports.getInitialRange = getInitialRange;
21
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["calculateQuartile","sortedData","q","pos","length","base","Math","floor","rest","undefined","getInitialRange","data","min","max","exports"],"sources":["../../../../../src/OrderBookWidget/components/Chart/utils.tsx"],"sourcesContent":["const calculateQuartile = (sortedData: number[], q: number) => {\n const pos = ((sortedData.length) - 1) * q;\n const base = Math.floor(pos);\n const rest = pos - base;\n if ((sortedData[base + 1] !== undefined)) {\n return sortedData[base] + rest * (sortedData[base + 1] - sortedData[base]);\n }\n return sortedData[base];\n};\n\nexport const getInitialRange = (\n data: number[],\n) => ({ min: calculateQuartile(data, 0.25), max: calculateQuartile(data, 0.75) });\n"],"mappings":";;;;;;AAAA,MAAMA,iBAAiB,GAAGA,CAACC,UAAoB,EAAEC,CAAS,KAAK;EAC7D,MAAMC,GAAG,GAAG,CAAEF,UAAU,CAACG,MAAM,GAAI,CAAC,IAAIF,CAAC;EACzC,MAAMG,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACJ,GAAG,CAAC;EAC5B,MAAMK,IAAI,GAAGL,GAAG,GAAGE,IAAI;EACvB,IAAKJ,UAAU,CAACI,IAAI,GAAG,CAAC,CAAC,KAAKI,SAAS,EAAG;IACxC,OAAOR,UAAU,CAACI,IAAI,CAAC,GAAGG,IAAI,IAAIP,UAAU,CAACI,IAAI,GAAG,CAAC,CAAC,GAAGJ,UAAU,CAACI,IAAI,CAAC,CAAC;EAC5E;EACA,OAAOJ,UAAU,CAACI,IAAI,CAAC;AACzB,CAAC;AAEM,MAAMK,eAAe,GAC1BC,IAAc,KACV;EAAEC,GAAG,EAAEZ,iBAAiB,CAACW,IAAI,EAAE,IAAI,CAAC;EAAEE,GAAG,EAAEb,iBAAiB,CAACW,IAAI,EAAE,IAAI;AAAE,CAAC,CAAC;AAACG,OAAA,CAAAJ,eAAA,GAAAA,eAAA"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var _react = _interopRequireDefault(require("react"));
4
+ var _reactDom = require("react-dom");
5
+ var _OrderBookWidget = require("./OrderBookWidget");
6
+ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
7
+ const {
8
+ apiUrl,
9
+ instrument,
10
+ division
11
+ } = window.orderBookWidgetConfig;
12
+ (0, _reactDom.render)(_react.default.createElement(_OrderBookWidget.OrderBookWidget, {
13
+ apiUrl: apiUrl,
14
+ instrument: instrument,
15
+ division: division
16
+ }), document.getElementById('order-book'));
17
+ //# sourceMappingURL=render.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render.js","names":["_react","_interopRequireDefault","require","_reactDom","_OrderBookWidget","obj","__esModule","default","apiUrl","instrument","division","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';\n\nimport { OrderBookWidgetConfig } from './types';\n\ndeclare global {\n interface Window {\n orderBookWidgetConfig: OrderBookWidgetConfig;\n }\n}\n\nconst {\n apiUrl,\n instrument,\n division,\n} = window.orderBookWidgetConfig;\n\nrender(\n <OrderBookWidget\n apiUrl={apiUrl}\n instrument={instrument}\n division={division}\n />,\n document.getElementById('order-book'),\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;AAUpD,MAAM;EACJG,MAAM;EACNC,UAAU;EACVC;AACF,CAAC,GAAGC,MAAM,CAACC,qBAAqB;AAEhC,IAAAC,gBAAM,EACJb,MAAA,CAAAO,OAAA,CAAAO,aAAA,CAACV,gBAAA,CAAAW,eAAe;EACdP,MAAM,EAAEA,MAAO;EACfC,UAAU,EAAEA,UAAW;EACvBC,QAAQ,EAAEA;AAAS,CACpB,CAAC,EACFM,QAAQ,CAACC,cAAc,CAAC,YAAY,CACtC,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.DataType = void 0;
7
+ let DataType = function (DataType) {
8
+ DataType["Order"] = "ORDER";
9
+ DataType["Position"] = "POSITION";
10
+ return DataType;
11
+ }({});
12
+ exports.DataType = DataType;
13
+ //# sourceMappingURL=types.js.map
@@ -0,0 +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}\n\nexport interface OrderBookWidgetConfig {\n apiUrl: string;\n instrument: string;\n division: string;\n}\n\nexport interface MainProps {\n apiUrl: string;\n instrument: string;\n division: string;\n}\n"],"mappings":";;;;;;IAgBYA,QAAQ,aAARA,QAAQ;EAARA,QAAQ;EAARA,QAAQ;EAAA,OAARA,QAAQ;AAAA;AAAAC,OAAA,CAAAD,QAAA,GAAAA,QAAA"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.getData = void 0;
7
+ var _types = require("./types");
8
+ const getFetchUrl = (apiUrl, instrument, division, dataType) => {
9
+ const recentHourlyDataType = dataType === _types.DataType.Order ? 'recentHourlyOrderBooks' : 'recentHourlyPositionBooks';
10
+ return "".concat(apiUrl, "/instruments/").concat(instrument, "/").concat(recentHourlyDataType, "?division=").concat(division);
11
+ };
12
+ const getData = (apiUrl, instrument, division, dataType) => {
13
+ const fetchUrl = getFetchUrl(apiUrl, instrument, division, dataType);
14
+ return fetch(fetchUrl).then(res => res.json());
15
+ };
16
+ exports.getData = getData;
17
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","names":["_types","require","getFetchUrl","apiUrl","instrument","division","dataType","recentHourlyDataType","DataType","Order","concat","getData","fetchUrl","fetch","then","res","json","exports"],"sources":["../../../src/OrderBookWidget/utils.ts"],"sourcesContent":["import { DataType } from './types';\n\nconst getFetchUrl = (\n apiUrl: string,\n instrument: string,\n division: string,\n dataType: string,\n) => {\n const recentHourlyDataType = dataType === DataType.Order ? 'recentHourlyOrderBooks' : 'recentHourlyPositionBooks';\n\n return `${apiUrl}/instruments/${instrument}/${recentHourlyDataType}?division=${division}`;\n};\n\nconst getData = (\n apiUrl: string,\n instrument: string,\n division: string,\n dataType: string,\n) => {\n const fetchUrl = getFetchUrl(apiUrl, instrument, division, dataType);\n\n return fetch(fetchUrl).then((res) => res.json());\n};\n\nexport { getData };\n"],"mappings":";;;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAEA,MAAMC,WAAW,GAAGA,CAClBC,MAAc,EACdC,UAAkB,EAClBC,QAAgB,EAChBC,QAAgB,KACb;EACH,MAAMC,oBAAoB,GAAGD,QAAQ,KAAKE,eAAQ,CAACC,KAAK,GAAG,wBAAwB,GAAG,2BAA2B;EAEjH,UAAAC,MAAA,CAAUP,MAAM,mBAAAO,MAAA,CAAgBN,UAAU,OAAAM,MAAA,CAAIH,oBAAoB,gBAAAG,MAAA,CAAaL,QAAQ;AACzF,CAAC;AAED,MAAMM,OAAO,GAAGA,CACdR,MAAc,EACdC,UAAkB,EAClBC,QAAgB,EAChBC,QAAgB,KACb;EACH,MAAMM,QAAQ,GAAGV,WAAW,CAACC,MAAM,EAAEC,UAAU,EAAEC,QAAQ,EAAEC,QAAQ,CAAC;EAEpE,OAAOO,KAAK,CAACD,QAAQ,CAAC,CAACE,IAAI,CAAEC,GAAG,IAAKA,GAAG,CAACC,IAAI,CAAC,CAAC,CAAC;AAClD,CAAC;AAACC,OAAA,CAAAN,OAAA,GAAAA,OAAA"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _types = require("./OrderBookWidget/types");
7
+ Object.keys(_types).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _types[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _types[key];
14
+ }
15
+ });
16
+ });
17
+ var _OrderBookWidget = require("./OrderBookWidget/OrderBookWidget");
18
+ Object.keys(_OrderBookWidget).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _OrderBookWidget[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _OrderBookWidget[key];
25
+ }
26
+ });
27
+ });
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["_types","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_OrderBookWidget"],"sources":["../../src/index.ts"],"sourcesContent":["export * from './OrderBookWidget/types';\nexport * from './OrderBookWidget/OrderBookWidget';\n"],"mappings":";;;;;AAAA,IAAAA,MAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,MAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,MAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,MAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,gBAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,gBAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,gBAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,gBAAA,CAAAL,GAAA;IAAA;EAAA;AAAA"}
@@ -0,0 +1,62 @@
1
+ import React, { useState, useEffect } from 'react';
2
+ import { Button, ButtonVariant, ChartError, Spinner, SpinnerSize } from '@oanda/labs-widget-common';
3
+ import { Chart } from './components/Chart/Chart';
4
+ import { DataType } from './types';
5
+ import { getData } from './utils';
6
+ const Main = _ref => {
7
+ let {
8
+ apiUrl,
9
+ instrument,
10
+ division
11
+ } = _ref;
12
+ const [isLoading, setIsLoading] = useState(false);
13
+ const [error, setError] = useState(undefined);
14
+ const [dataType, setDataType] = useState(DataType.Order);
15
+ const [data, setData] = useState(undefined);
16
+ useEffect(() => {
17
+ setIsLoading(true);
18
+ setData(undefined);
19
+ setError(undefined);
20
+ getData(apiUrl, instrument, division, dataType).then(result => {
21
+ setIsLoading(false);
22
+ if (dataType === DataType.Order && (result === null || result === void 0 ? void 0 : result.orderBooks.length) > 0) {
23
+ setData(result.orderBooks);
24
+ } else if (dataType === DataType.Position && (result === null || result === void 0 ? void 0 : result.positionBooks.length) > 0) {
25
+ setData(result.positionBooks);
26
+ } else {
27
+ setData(undefined);
28
+ }
29
+ }).catch(err => {
30
+ setIsLoading(false);
31
+ setError(JSON.stringify(err));
32
+ });
33
+ }, [dataType, apiUrl, instrument, division]);
34
+ const isTypeOrder = dataType === DataType.Order;
35
+ return React.createElement("div", {
36
+ "data-testid": "order-book-widget",
37
+ className: "border border-solid border-grey p-4 text-sm text-black"
38
+ }, React.createElement("div", {
39
+ className: "flex gap-2"
40
+ }, React.createElement(Button, {
41
+ variant: isTypeOrder ? ButtonVariant.primary : ButtonVariant.secondary,
42
+ onClick: () => setDataType(DataType.Order)
43
+ }, "Order Book"), React.createElement(Button, {
44
+ variant: isTypeOrder ? ButtonVariant.secondary : ButtonVariant.primary,
45
+ onClick: () => setDataType(DataType.Position)
46
+ }, "Position Book")), React.createElement("div", {
47
+ className: "relative h-[600px] w-full"
48
+ }, error && React.createElement("div", {
49
+ className: "absolute left-0 top-0 flex h-full w-full items-center justify-center bg-lightGrey/[0.4]"
50
+ }, React.createElement(ChartError, null)), isLoading && React.createElement("div", {
51
+ className: "absolute left-0 top-0 flex h-full w-full items-center justify-center bg-lightGrey/[0.4]"
52
+ }, React.createElement(Spinner, {
53
+ size: SpinnerSize.lg
54
+ })), data && React.createElement("div", {
55
+ className: "absolute left-0 top-0 flex h-full w-full"
56
+ }, React.createElement(Chart, {
57
+ data: data[data.length - 1],
58
+ isTypeOrder: isTypeOrder
59
+ }))));
60
+ };
61
+ export { Main };
62
+ //# sourceMappingURL=Main.js.map
@@ -0,0 +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=\"border border-solid border-grey p-4 text-sm text-black\">\n <div className=\"flex 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=\"relative h-[600px] w-full\">\n {error && (\n <div className=\"absolute left-0 top-0 flex h-full w-full items-center justify-center bg-lightGrey/[0.4]\">\n <ChartError />\n </div>\n )}\n {isLoading && (\n <div className=\"absolute left-0 top-0 flex h-full w-full items-center justify-center bg-lightGrey/[0.4]\">\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {data && (\n <div className=\"absolute left-0 top-0 flex h-full 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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"}
@@ -0,0 +1,16 @@
1
+ import React from 'react';
2
+ import { Main } from './Main';
3
+ const OrderBookWidget = _ref => {
4
+ let {
5
+ apiUrl,
6
+ instrument,
7
+ division
8
+ } = _ref;
9
+ return React.createElement(Main, {
10
+ apiUrl: apiUrl,
11
+ instrument: instrument,
12
+ division: division
13
+ });
14
+ };
15
+ export { OrderBookWidget };
16
+ //# sourceMappingURL=OrderBookWidget.js.map
@@ -0,0 +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"}
@@ -0,0 +1,57 @@
1
+ import React, { useRef, useEffect } from 'react';
2
+ import { Chart as ChartJS, CategoryScale, LinearScale, BarElement, Tooltip } from 'chart.js';
3
+ import zoomPlugin from 'chartjs-plugin-zoom';
4
+ import { Bar } from 'react-chartjs-2';
5
+ import { colorNeg, colorPos, getChartOptions } from './config';
6
+ import { getInitialRange } from './utils';
7
+ ChartJS.register(CategoryScale, LinearScale, BarElement, Tooltip, zoomPlugin);
8
+ export const Chart = _ref => {
9
+ let {
10
+ data,
11
+ isTypeOrder
12
+ } = _ref;
13
+ const chartRef = useRef(null);
14
+ const sell = data.buckets.map(item => Number(item.shortCountPercent) * -1);
15
+ const buy = data.buckets.map(item => Number(item.longCountPercent));
16
+ const price = data.buckets.map(item => Number(item.price));
17
+ const maxSell = Math.abs(Math.min(...sell));
18
+ const maxBuy = Math.max(...buy);
19
+ const rangeX = Math.ceil(Math.max(maxSell, maxBuy));
20
+ const minRangeY = Math.min(...price);
21
+ const maxRangeY = Math.max(...price);
22
+ const chartData = {
23
+ labels: price,
24
+ datasets: [{
25
+ data: sell,
26
+ backgroundColor: colorNeg,
27
+ label: isTypeOrder ? 'Sell Orders' : 'Short Positions',
28
+ barPercentage: 1,
29
+ borderWidth: 1,
30
+ categoryPercentage: 1,
31
+ borderColor: 'transparent'
32
+ }, {
33
+ data: buy,
34
+ backgroundColor: colorPos,
35
+ label: isTypeOrder ? 'Buy Orders' : 'Long Positions',
36
+ borderColor: 'transparent',
37
+ borderWidth: 1,
38
+ barPercentage: 1,
39
+ categoryPercentage: 1
40
+ }]
41
+ };
42
+ useEffect(() => {
43
+ if (chartRef && chartRef.current) {
44
+ chartRef.current.zoomScale('y', getInitialRange(price), 'none');
45
+ }
46
+ }, [price]);
47
+ return React.createElement("div", {
48
+ className: "w-full"
49
+ }, React.createElement("div", {
50
+ className: "mb-0 ml-[70px] mr-2.5 mt-[30px] flex justify-between text-xs text-darkGrey"
51
+ }, isTypeOrder ? React.createElement(React.Fragment, null, React.createElement("div", null, "Sell"), React.createElement("div", null, "Open Orders"), React.createElement("div", null, "Buy")) : React.createElement(React.Fragment, null, React.createElement("div", null, "Short"), React.createElement("div", null, "Open Positions"), React.createElement("div", null, "Long"))), React.createElement(Bar, {
52
+ ref: chartRef,
53
+ options: getChartOptions(rangeX, minRangeY, maxRangeY),
54
+ data: chartData
55
+ }));
56
+ };
57
+ //# sourceMappingURL=Chart.js.map