@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
@@ -0,0 +1,32 @@
1
+ // @todo get from graphql schema
2
+ export interface OrderBookData {
3
+ instrument: string;
4
+ price: string;
5
+ bucketWidth: string;
6
+ buckets: {
7
+ price: string;
8
+ longCountPercent: string;
9
+ shortCountPercent: string;
10
+ }[];
11
+ time: string;
12
+ unixTime: string;
13
+ region: string;
14
+ division: string;
15
+ }
16
+
17
+ export enum DataType {
18
+ Order = 'ORDER',
19
+ Position = 'POSITION',
20
+ }
21
+
22
+ export interface OrderBookWidgetConfig {
23
+ apiUrl: string;
24
+ instrument: string;
25
+ division: string;
26
+ }
27
+
28
+ export interface MainProps {
29
+ apiUrl: string;
30
+ instrument: string;
31
+ division: string;
32
+ }
@@ -0,0 +1,25 @@
1
+ import { DataType } from './types';
2
+
3
+ const getFetchUrl = (
4
+ apiUrl: string,
5
+ instrument: string,
6
+ division: string,
7
+ dataType: string,
8
+ ) => {
9
+ const recentHourlyDataType = dataType === DataType.Order ? 'recentHourlyOrderBooks' : 'recentHourlyPositionBooks';
10
+
11
+ return `${apiUrl}/instruments/${instrument}/${recentHourlyDataType}?division=${division}`;
12
+ };
13
+
14
+ const getData = (
15
+ apiUrl: string,
16
+ instrument: string,
17
+ division: string,
18
+ dataType: string,
19
+ ) => {
20
+ const fetchUrl = getFetchUrl(apiUrl, instrument, division, dataType);
21
+
22
+ return fetch(fetchUrl).then((res) => res.json());
23
+ };
24
+
25
+ export { getData };
package/src/index.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from './OrderBookWidget/types';
2
+ export * from './OrderBookWidget/OrderBookWidget';
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @jest-environment jsdom
3
+ */
4
+ import React from 'react';
5
+ import { render } from '@testing-library/react';
6
+ import { Main } from '../src/OrderBookWidget/Main';
7
+
8
+ jest.mock('../src/OrderBookWidget/utils', () => ({
9
+ getData: () => Promise.resolve({
10
+ orderBooks: [{
11
+ instrument: 'GBP_USD',
12
+ price: '1.25933',
13
+ bucketWidth: '0.0005',
14
+ buckets: [
15
+ {
16
+ price: '0.02',
17
+ longCountPercent: '0.0582',
18
+ shortCountPercent: '0.0',
19
+ },
20
+ {
21
+ price: '0.7',
22
+ longCountPercent: '0.0582',
23
+ shortCountPercent: '0.0',
24
+ },
25
+ {
26
+ price: '0.9925',
27
+ longCountPercent: '0.0582',
28
+ shortCountPercent: '0.0',
29
+ },
30
+ {
31
+ price: '1.0',
32
+ longCountPercent: '0.1163',
33
+ shortCountPercent: '0.0',
34
+ },
35
+ ],
36
+ time: '2023-08-24T10:30:00Z',
37
+ unixTime: '1692873000',
38
+ region: '-',
39
+ division: 'OJ',
40
+ dataSource: '-',
41
+ }],
42
+ }),
43
+ }));
44
+
45
+ jest.mock('../src/OrderBookWidget/components/Chart/Chart', () => ({
46
+ Chart: () => <p data-testid="chart-test-component">Chart</p>,
47
+ }));
48
+
49
+ describe('Main component', () => {
50
+ it('should render main component', async () => {
51
+ const { findByTestId } = render(
52
+ <Main instrument="EUR/USD" division="OJ" apiUrl="http://test.com" />,
53
+ );
54
+
55
+ expect(await findByTestId('order-book-widget')).toBeInTheDocument();
56
+ });
57
+ });
@@ -0,0 +1,12 @@
1
+ {
2
+ "extends": "../../tsconfig.types.json",
3
+ "compilerOptions": {
4
+ "rootDir": "./src",
5
+ "outDir": "./dist",
6
+ "declarationDir": "./dist/types"
7
+ },
8
+ "include": [
9
+ "./src/**/*",
10
+ "../../types/**/*"
11
+ ]
12
+ }