@oanda/labs-instruments-price-chart-widget 1.0.1 → 1.0.2
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.
- package/CHANGELOG.md +12 -0
- package/dist/main/InstrumentsPriceChartWidget/Main.js +3 -8
- package/dist/main/InstrumentsPriceChartWidget/Main.js.map +1 -1
- package/dist/{module/gql/mock/handlers.js → main/InstrumentsPriceChartWidget/getPriceCandlesMock.js} +28 -18
- package/dist/main/InstrumentsPriceChartWidget/getPriceCandlesMock.js.map +1 -0
- package/dist/module/InstrumentsPriceChartWidget/Main.js +3 -8
- package/dist/module/InstrumentsPriceChartWidget/Main.js.map +1 -1
- package/dist/{main/gql/mock/handlers.js → module/InstrumentsPriceChartWidget/getPriceCandlesMock.js} +21 -24
- package/dist/module/InstrumentsPriceChartWidget/getPriceCandlesMock.js.map +1 -0
- package/dist/types/InstrumentsPriceChartWidget/getPriceCandlesMock.d.ts +9 -0
- package/package.json +3 -3
- package/src/InstrumentsPriceChartWidget/Main.tsx +2 -13
- package/src/{gql/mock/handlers.ts → InstrumentsPriceChartWidget/getPriceCandlesMock.tsx} +29 -28
- package/dist/main/gql/mock/handlers.js.map +0 -1
- package/dist/module/gql/mock/handlers.js.map +0 -1
- package/dist/types/gql/mock/handlers.d.ts +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,18 @@
|
|
|
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.2 (2025-07-18)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
## 1.0.205 (2025-07-17)
|
|
11
|
+
|
|
12
|
+
**Note:** Version bump only for package @oanda/labs-instruments-price-chart-widget
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
6
18
|
## 1.0.1 (2025-07-17)
|
|
7
19
|
|
|
8
20
|
**Note:** Version bump only for package @oanda/labs-instruments-price-chart-widget
|
|
@@ -4,12 +4,11 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.Main = void 0;
|
|
7
|
-
var _client = require("@apollo/client");
|
|
8
7
|
var _labsWidgetCommon = require("@oanda/labs-widget-common");
|
|
9
8
|
var _react = _interopRequireWildcard(require("react"));
|
|
10
|
-
var _getPriceCandles = require("../gql/mock/getPriceCandles");
|
|
11
9
|
var _Chart = require("./components/Chart");
|
|
12
10
|
var _config = require("./config");
|
|
11
|
+
var _getPriceCandlesMock = require("./getPriceCandlesMock");
|
|
13
12
|
var _types = require("./types");
|
|
14
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); }
|
|
15
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 && {}.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; }
|
|
@@ -22,12 +21,8 @@ const Main = _ref => {
|
|
|
22
21
|
loading,
|
|
23
22
|
data,
|
|
24
23
|
error
|
|
25
|
-
} = (0,
|
|
26
|
-
|
|
27
|
-
timeSpan: _types.TimeSpanSubset.Day_1,
|
|
28
|
-
division
|
|
29
|
-
},
|
|
30
|
-
fetchPolicy: 'cache-and-network'
|
|
24
|
+
} = (0, _getPriceCandlesMock.getPriceCandlesMock)({
|
|
25
|
+
division
|
|
31
26
|
});
|
|
32
27
|
const showError = data?.getPriceCandles.length === 0 || !data?.getPriceCandles || !!error;
|
|
33
28
|
return _react.default.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","names":["
|
|
1
|
+
{"version":3,"file":"Main.js","names":["_labsWidgetCommon","require","_react","_interopRequireWildcard","_Chart","_config","_getPriceCandlesMock","_types","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","Main","_ref","division","selectedTimeUnit","setSelectedTimeUnit","useState","TimeSpanSubset","Day_1","loading","data","error","getPriceCandlesMock","showError","getPriceCandles","length","createElement","className","Spinner","size","SpinnerSize","lg","TimeUnitSwitch","callback","options","timeUnitConfig","selected","Chart","values","exports"],"sources":["../../../src/InstrumentsPriceChartWidget/Main.tsx"],"sourcesContent":["import {\n Spinner,\n SpinnerSize,\n TimeUnitSwitch,\n} from '@oanda/labs-widget-common';\nimport React, { useState } from 'react';\n\nimport { Chart } from './components/Chart';\nimport { timeUnitConfig } from './config';\nimport { getPriceCandlesMock } from './getPriceCandlesMock';\nimport { type MainProps, TimeSpanSubset } from './types';\n\nconst Main = ({ division }: MainProps) => {\n const [selectedTimeUnit, setSelectedTimeUnit] = useState(\n TimeSpanSubset.Day_1\n );\n\n const { loading, data, error } = getPriceCandlesMock({ division });\n\n const showError =\n data?.getPriceCandles.length === 0 || !data?.getPriceCandles || !!error;\n\n return (\n <div data-testid=\"instruments-price-chart-wrapper\">\n {loading && (\n <div className=\"lw-mb-[50px] lw-flex lw-h-[425px] lw-w-full lw-items-center lw-border lw-border-solid lw-border-border-primary\">\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n\n {!loading && !showError && (\n <div data-testid=\"instruments-price-chart-widget\">\n <div className=\"lw-flex lw-pt-2\">\n <TimeUnitSwitch<TimeSpanSubset>\n callback={setSelectedTimeUnit}\n options={timeUnitConfig}\n selected={selectedTimeUnit}\n />\n </div>\n\n <Chart values={data?.getPriceCandles} />\n </div>\n )}\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"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","ignoreList":[]}
|
package/dist/{module/gql/mock/handlers.js → main/InstrumentsPriceChartWidget/getPriceCandlesMock.js}
RENAMED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getPriceCandlesMock = void 0;
|
|
7
|
+
var _graphql = require("../gql/types/graphql");
|
|
8
|
+
const generateMockPriceCandles = function () {
|
|
9
|
+
let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 30;
|
|
10
|
+
let timeSpan = arguments.length > 1 ? arguments[1] : undefined;
|
|
11
|
+
const rawCandles = generateMockCandleData(count);
|
|
12
|
+
return rawCandles.map(candle => ({
|
|
11
13
|
__typename: 'CandlesData',
|
|
12
14
|
time: new Date(candle.timestamp).toISOString(),
|
|
13
15
|
unixTime: Math.floor(candle.timestamp / 1000),
|
|
@@ -15,14 +17,9 @@ export const handlers = [graphql.query('GetPriceCandles', _ref => {
|
|
|
15
17
|
__typename: 'Candle',
|
|
16
18
|
high: candle.max
|
|
17
19
|
},
|
|
18
|
-
timeSpan
|
|
20
|
+
timeSpan
|
|
19
21
|
}));
|
|
20
|
-
|
|
21
|
-
data: {
|
|
22
|
-
getPriceCandles: candles
|
|
23
|
-
}
|
|
24
|
-
});
|
|
25
|
-
})];
|
|
22
|
+
};
|
|
26
23
|
const generateMockCandleData = function () {
|
|
27
24
|
let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 30;
|
|
28
25
|
const now = Date.now();
|
|
@@ -53,4 +50,17 @@ const generateMockCandleData = function () {
|
|
|
53
50
|
};
|
|
54
51
|
});
|
|
55
52
|
};
|
|
56
|
-
|
|
53
|
+
const getPriceCandlesMock = _ref => {
|
|
54
|
+
let {
|
|
55
|
+
division
|
|
56
|
+
} = _ref;
|
|
57
|
+
return {
|
|
58
|
+
loading: false,
|
|
59
|
+
error: undefined,
|
|
60
|
+
data: {
|
|
61
|
+
getPriceCandles: generateMockPriceCandles(30, _graphql.TimeSpan.Day_1)
|
|
62
|
+
}
|
|
63
|
+
};
|
|
64
|
+
};
|
|
65
|
+
exports.getPriceCandlesMock = getPriceCandlesMock;
|
|
66
|
+
//# sourceMappingURL=getPriceCandlesMock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPriceCandlesMock.js","names":["_graphql","require","generateMockPriceCandles","count","arguments","length","undefined","timeSpan","rawCandles","generateMockCandleData","map","candle","__typename","time","Date","timestamp","toISOString","unixTime","Math","floor","high","max","now","candleInterval","currentPrice","spikeIndex","Array","from","_","i","trend","min","noise","random","open","close","finalHigh","getPriceCandlesMock","_ref","division","loading","error","data","getPriceCandles","TimeSpan","Day_1","exports"],"sources":["../../../src/InstrumentsPriceChartWidget/getPriceCandlesMock.tsx"],"sourcesContent":["import { type CandlesData, TimeSpan } from '../gql/types/graphql';\nimport type { MainProps } from './types';\n\nconst generateMockPriceCandles = (\n count = 30,\n timeSpan: TimeSpan\n): CandlesData[] => {\n const rawCandles = generateMockCandleData(count);\n\n return rawCandles.map((candle) => ({\n __typename: 'CandlesData',\n time: new Date(candle.timestamp).toISOString(),\n unixTime: Math.floor(candle.timestamp / 1000),\n candle: {\n __typename: 'Candle',\n high: candle.max,\n },\n timeSpan,\n }));\n};\n\nconst generateMockCandleData = (count: number = 30) => {\n const now = Date.now();\n const candleInterval = 30 * 60 * 1000;\n\n let currentPrice = 1.045;\n const spikeIndex = Math.floor(count * 0.6);\n\n return Array.from({ length: count }, (_, i) => {\n let trend = i < spikeIndex ? 0.0005 : -0.001;\n\n if (i === spikeIndex) {\n trend = 0.03;\n }\n\n if (i > spikeIndex + 3) {\n trend = 0;\n }\n\n currentPrice += trend;\n\n currentPrice = Math.max(1.03, Math.min(1.09, currentPrice));\n\n const noise = (Math.random() - 0.5) * 0.0005;\n currentPrice += noise;\n\n const open = currentPrice;\n const high = open + Math.random() * 0.0008;\n const close = open + (Math.random() - 0.5) * 0.0005;\n\n const finalHigh = Math.max(open, close, high);\n\n return {\n timestamp: now - (count - i) * candleInterval,\n max: finalHigh,\n };\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const getPriceCandlesMock = ({ division }: MainProps) => ({\n loading: false,\n error: undefined,\n data: {\n getPriceCandles: generateMockPriceCandles(30, TimeSpan.Day_1),\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { useQuery } from '@apollo/client';
|
|
2
1
|
import { Spinner, SpinnerSize, TimeUnitSwitch } from '@oanda/labs-widget-common';
|
|
3
2
|
import React, { useState } from 'react';
|
|
4
|
-
import { getPriceCandles } from '../gql/mock/getPriceCandles';
|
|
5
3
|
import { Chart } from './components/Chart';
|
|
6
4
|
import { timeUnitConfig } from './config';
|
|
5
|
+
import { getPriceCandlesMock } from './getPriceCandlesMock';
|
|
7
6
|
import { TimeSpanSubset } from './types';
|
|
8
7
|
const Main = _ref => {
|
|
9
8
|
let {
|
|
@@ -14,12 +13,8 @@ const Main = _ref => {
|
|
|
14
13
|
loading,
|
|
15
14
|
data,
|
|
16
15
|
error
|
|
17
|
-
} =
|
|
18
|
-
|
|
19
|
-
timeSpan: TimeSpanSubset.Day_1,
|
|
20
|
-
division
|
|
21
|
-
},
|
|
22
|
-
fetchPolicy: 'cache-and-network'
|
|
16
|
+
} = getPriceCandlesMock({
|
|
17
|
+
division
|
|
23
18
|
});
|
|
24
19
|
const showError = data?.getPriceCandles.length === 0 || !data?.getPriceCandles || !!error;
|
|
25
20
|
return React.createElement("div", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","names":["
|
|
1
|
+
{"version":3,"file":"Main.js","names":["Spinner","SpinnerSize","TimeUnitSwitch","React","useState","Chart","timeUnitConfig","getPriceCandlesMock","TimeSpanSubset","Main","_ref","division","selectedTimeUnit","setSelectedTimeUnit","Day_1","loading","data","error","showError","getPriceCandles","length","createElement","className","size","lg","callback","options","selected","values"],"sources":["../../../src/InstrumentsPriceChartWidget/Main.tsx"],"sourcesContent":["import {\n Spinner,\n SpinnerSize,\n TimeUnitSwitch,\n} from '@oanda/labs-widget-common';\nimport React, { useState } from 'react';\n\nimport { Chart } from './components/Chart';\nimport { timeUnitConfig } from './config';\nimport { getPriceCandlesMock } from './getPriceCandlesMock';\nimport { type MainProps, TimeSpanSubset } from './types';\n\nconst Main = ({ division }: MainProps) => {\n const [selectedTimeUnit, setSelectedTimeUnit] = useState(\n TimeSpanSubset.Day_1\n );\n\n const { loading, data, error } = getPriceCandlesMock({ division });\n\n const showError =\n data?.getPriceCandles.length === 0 || !data?.getPriceCandles || !!error;\n\n return (\n <div data-testid=\"instruments-price-chart-wrapper\">\n {loading && (\n <div className=\"lw-mb-[50px] lw-flex lw-h-[425px] lw-w-full lw-items-center lw-border lw-border-solid lw-border-border-primary\">\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n\n {!loading && !showError && (\n <div data-testid=\"instruments-price-chart-widget\">\n <div className=\"lw-flex lw-pt-2\">\n <TimeUnitSwitch<TimeSpanSubset>\n callback={setSelectedTimeUnit}\n options={timeUnitConfig}\n selected={selectedTimeUnit}\n />\n </div>\n\n <Chart values={data?.getPriceCandles} />\n </div>\n )}\n </div>\n );\n};\n\nexport { Main };\n"],"mappings":"AAAA,SACEA,OAAO,EACPC,WAAW,EACXC,cAAc,QACT,2BAA2B;AAClC,OAAOC,KAAK,IAAIC,QAAQ,QAAQ,OAAO;AAEvC,SAASC,KAAK,QAAQ,oBAAoB;AAC1C,SAASC,cAAc,QAAQ,UAAU;AACzC,SAASC,mBAAmB,QAAQ,uBAAuB;AAC3D,SAAyBC,cAAc,QAAQ,SAAS;AAExD,MAAMC,IAAI,GAAGC,IAAA,IAA6B;EAAA,IAA5B;IAAEC;EAAoB,CAAC,GAAAD,IAAA;EACnC,MAAM,CAACE,gBAAgB,EAAEC,mBAAmB,CAAC,GAAGT,QAAQ,CACtDI,cAAc,CAACM,KACjB,CAAC;EAED,MAAM;IAAEC,OAAO;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGV,mBAAmB,CAAC;IAAEI;EAAS,CAAC,CAAC;EAElE,MAAMO,SAAS,GACbF,IAAI,EAAEG,eAAe,CAACC,MAAM,KAAK,CAAC,IAAI,CAACJ,IAAI,EAAEG,eAAe,IAAI,CAAC,CAACF,KAAK;EAEzE,OACEd,KAAA,CAAAkB,aAAA;IAAK,eAAY;EAAiC,GAC/CN,OAAO,IACNZ,KAAA,CAAAkB,aAAA;IAAKC,SAAS,EAAC;EAAgH,GAC7HnB,KAAA,CAAAkB,aAAA,CAACrB,OAAO;IAACuB,IAAI,EAAEtB,WAAW,CAACuB;EAAG,CAAE,CAC7B,CACN,EAEA,CAACT,OAAO,IAAI,CAACG,SAAS,IACrBf,KAAA,CAAAkB,aAAA;IAAK,eAAY;EAAgC,GAC/ClB,KAAA,CAAAkB,aAAA;IAAKC,SAAS,EAAC;EAAiB,GAC9BnB,KAAA,CAAAkB,aAAA,CAACnB,cAAc;IACbuB,QAAQ,EAAEZ,mBAAoB;IAC9Ba,OAAO,EAAEpB,cAAe;IACxBqB,QAAQ,EAAEf;EAAiB,CAC5B,CACE,CAAC,EAENT,KAAA,CAAAkB,aAAA,CAAChB,KAAK;IAACuB,MAAM,EAAEZ,IAAI,EAAEG;EAAgB,CAAE,CACpC,CAEJ,CAAC;AAEV,CAAC;AAED,SAASV,IAAI","ignoreList":[]}
|
package/dist/{main/gql/mock/handlers.js → module/InstrumentsPriceChartWidget/getPriceCandlesMock.js}
RENAMED
|
@@ -1,19 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
var _msw = require("msw");
|
|
8
|
-
const handlers = exports.handlers = [_msw.graphql.query('GetPriceCandles', _ref => {
|
|
9
|
-
let {
|
|
10
|
-
variables
|
|
11
|
-
} = _ref;
|
|
12
|
-
const {
|
|
13
|
-
timeSpan
|
|
14
|
-
} = variables;
|
|
15
|
-
const rawCandles = generateMockCandleData(30);
|
|
16
|
-
const candles = rawCandles.map(candle => ({
|
|
1
|
+
import { TimeSpan } from '../gql/types/graphql';
|
|
2
|
+
const generateMockPriceCandles = function () {
|
|
3
|
+
let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 30;
|
|
4
|
+
let timeSpan = arguments.length > 1 ? arguments[1] : undefined;
|
|
5
|
+
const rawCandles = generateMockCandleData(count);
|
|
6
|
+
return rawCandles.map(candle => ({
|
|
17
7
|
__typename: 'CandlesData',
|
|
18
8
|
time: new Date(candle.timestamp).toISOString(),
|
|
19
9
|
unixTime: Math.floor(candle.timestamp / 1000),
|
|
@@ -21,14 +11,9 @@ const handlers = exports.handlers = [_msw.graphql.query('GetPriceCandles', _ref
|
|
|
21
11
|
__typename: 'Candle',
|
|
22
12
|
high: candle.max
|
|
23
13
|
},
|
|
24
|
-
timeSpan
|
|
14
|
+
timeSpan
|
|
25
15
|
}));
|
|
26
|
-
|
|
27
|
-
data: {
|
|
28
|
-
getPriceCandles: candles
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
|
-
})];
|
|
16
|
+
};
|
|
32
17
|
const generateMockCandleData = function () {
|
|
33
18
|
let count = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 30;
|
|
34
19
|
const now = Date.now();
|
|
@@ -59,4 +44,16 @@ const generateMockCandleData = function () {
|
|
|
59
44
|
};
|
|
60
45
|
});
|
|
61
46
|
};
|
|
62
|
-
|
|
47
|
+
export const getPriceCandlesMock = _ref => {
|
|
48
|
+
let {
|
|
49
|
+
division
|
|
50
|
+
} = _ref;
|
|
51
|
+
return {
|
|
52
|
+
loading: false,
|
|
53
|
+
error: undefined,
|
|
54
|
+
data: {
|
|
55
|
+
getPriceCandles: generateMockPriceCandles(30, TimeSpan.Day_1)
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
//# sourceMappingURL=getPriceCandlesMock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getPriceCandlesMock.js","names":["TimeSpan","generateMockPriceCandles","count","arguments","length","undefined","timeSpan","rawCandles","generateMockCandleData","map","candle","__typename","time","Date","timestamp","toISOString","unixTime","Math","floor","high","max","now","candleInterval","currentPrice","spikeIndex","Array","from","_","i","trend","min","noise","random","open","close","finalHigh","getPriceCandlesMock","_ref","division","loading","error","data","getPriceCandles","Day_1"],"sources":["../../../src/InstrumentsPriceChartWidget/getPriceCandlesMock.tsx"],"sourcesContent":["import { type CandlesData, TimeSpan } from '../gql/types/graphql';\nimport type { MainProps } from './types';\n\nconst generateMockPriceCandles = (\n count = 30,\n timeSpan: TimeSpan\n): CandlesData[] => {\n const rawCandles = generateMockCandleData(count);\n\n return rawCandles.map((candle) => ({\n __typename: 'CandlesData',\n time: new Date(candle.timestamp).toISOString(),\n unixTime: Math.floor(candle.timestamp / 1000),\n candle: {\n __typename: 'Candle',\n high: candle.max,\n },\n timeSpan,\n }));\n};\n\nconst generateMockCandleData = (count: number = 30) => {\n const now = Date.now();\n const candleInterval = 30 * 60 * 1000;\n\n let currentPrice = 1.045;\n const spikeIndex = Math.floor(count * 0.6);\n\n return Array.from({ length: count }, (_, i) => {\n let trend = i < spikeIndex ? 0.0005 : -0.001;\n\n if (i === spikeIndex) {\n trend = 0.03;\n }\n\n if (i > spikeIndex + 3) {\n trend = 0;\n }\n\n currentPrice += trend;\n\n currentPrice = Math.max(1.03, Math.min(1.09, currentPrice));\n\n const noise = (Math.random() - 0.5) * 0.0005;\n currentPrice += noise;\n\n const open = currentPrice;\n const high = open + Math.random() * 0.0008;\n const close = open + (Math.random() - 0.5) * 0.0005;\n\n const finalHigh = Math.max(open, close, high);\n\n return {\n timestamp: now - (count - i) * candleInterval,\n max: finalHigh,\n };\n });\n};\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nexport const getPriceCandlesMock = ({ division }: MainProps) => ({\n loading: false,\n error: undefined,\n data: {\n getPriceCandles: generateMockPriceCandles(30, TimeSpan.Day_1),\n },\n});\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type CandlesData } from '../gql/types/graphql';
|
|
2
|
+
import type { MainProps } from './types';
|
|
3
|
+
export declare const getPriceCandlesMock: ({ division }: MainProps) => {
|
|
4
|
+
loading: boolean;
|
|
5
|
+
error: undefined;
|
|
6
|
+
data: {
|
|
7
|
+
getPriceCandles: CandlesData[];
|
|
8
|
+
};
|
|
9
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oanda/labs-instruments-price-chart-widget",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "Labs Instruments Price Chart Widget",
|
|
5
5
|
"main": "dist/main/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"author": "OANDA",
|
|
13
13
|
"license": "UNLICENSED",
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@oanda/labs-widget-common": "^1.0.
|
|
15
|
+
"@oanda/labs-widget-common": "^1.0.206",
|
|
16
16
|
"@oanda/mono-i18n": "10.0.1",
|
|
17
17
|
"graphql": "16.8.1"
|
|
18
18
|
},
|
|
@@ -20,5 +20,5 @@
|
|
|
20
20
|
"@graphql-codegen/cli": "5.0.0",
|
|
21
21
|
"@graphql-codegen/client-preset": "4.1.0"
|
|
22
22
|
},
|
|
23
|
-
"gitHead": "
|
|
23
|
+
"gitHead": "8e9089b3a4cc94275dd2223e7fed7aae070fe454"
|
|
24
24
|
}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { useQuery } from '@apollo/client';
|
|
2
1
|
import {
|
|
3
2
|
Spinner,
|
|
4
3
|
SpinnerSize,
|
|
@@ -6,10 +5,9 @@ import {
|
|
|
6
5
|
} from '@oanda/labs-widget-common';
|
|
7
6
|
import React, { useState } from 'react';
|
|
8
7
|
|
|
9
|
-
import { getPriceCandles } from '../gql/mock/getPriceCandles';
|
|
10
|
-
import { type GetPriceCandlesQuery } from '../gql/types/graphql';
|
|
11
8
|
import { Chart } from './components/Chart';
|
|
12
9
|
import { timeUnitConfig } from './config';
|
|
10
|
+
import { getPriceCandlesMock } from './getPriceCandlesMock';
|
|
13
11
|
import { type MainProps, TimeSpanSubset } from './types';
|
|
14
12
|
|
|
15
13
|
const Main = ({ division }: MainProps) => {
|
|
@@ -17,16 +15,7 @@ const Main = ({ division }: MainProps) => {
|
|
|
17
15
|
TimeSpanSubset.Day_1
|
|
18
16
|
);
|
|
19
17
|
|
|
20
|
-
const { loading, data, error } =
|
|
21
|
-
getPriceCandles,
|
|
22
|
-
{
|
|
23
|
-
variables: {
|
|
24
|
-
timeSpan: TimeSpanSubset.Day_1,
|
|
25
|
-
division,
|
|
26
|
-
},
|
|
27
|
-
fetchPolicy: 'cache-and-network',
|
|
28
|
-
}
|
|
29
|
-
);
|
|
18
|
+
const { loading, data, error } = getPriceCandlesMock({ division });
|
|
30
19
|
|
|
31
20
|
const showError =
|
|
32
21
|
data?.getPriceCandles.length === 0 || !data?.getPriceCandles || !!error;
|
|
@@ -1,31 +1,23 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
return HttpResponse.json({
|
|
23
|
-
data: {
|
|
24
|
-
getPriceCandles: candles,
|
|
25
|
-
},
|
|
26
|
-
});
|
|
27
|
-
}),
|
|
28
|
-
];
|
|
1
|
+
import { type CandlesData, TimeSpan } from '../gql/types/graphql';
|
|
2
|
+
import type { MainProps } from './types';
|
|
3
|
+
|
|
4
|
+
const generateMockPriceCandles = (
|
|
5
|
+
count = 30,
|
|
6
|
+
timeSpan: TimeSpan
|
|
7
|
+
): CandlesData[] => {
|
|
8
|
+
const rawCandles = generateMockCandleData(count);
|
|
9
|
+
|
|
10
|
+
return rawCandles.map((candle) => ({
|
|
11
|
+
__typename: 'CandlesData',
|
|
12
|
+
time: new Date(candle.timestamp).toISOString(),
|
|
13
|
+
unixTime: Math.floor(candle.timestamp / 1000),
|
|
14
|
+
candle: {
|
|
15
|
+
__typename: 'Candle',
|
|
16
|
+
high: candle.max,
|
|
17
|
+
},
|
|
18
|
+
timeSpan,
|
|
19
|
+
}));
|
|
20
|
+
};
|
|
29
21
|
|
|
30
22
|
const generateMockCandleData = (count: number = 30) => {
|
|
31
23
|
const now = Date.now();
|
|
@@ -64,3 +56,12 @@ const generateMockCandleData = (count: number = 30) => {
|
|
|
64
56
|
};
|
|
65
57
|
});
|
|
66
58
|
};
|
|
59
|
+
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
61
|
+
export const getPriceCandlesMock = ({ division }: MainProps) => ({
|
|
62
|
+
loading: false,
|
|
63
|
+
error: undefined,
|
|
64
|
+
data: {
|
|
65
|
+
getPriceCandles: generateMockPriceCandles(30, TimeSpan.Day_1),
|
|
66
|
+
},
|
|
67
|
+
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","names":["_msw","require","handlers","exports","graphql","query","_ref","variables","timeSpan","rawCandles","generateMockCandleData","candles","map","candle","__typename","time","Date","timestamp","toISOString","unixTime","Math","floor","high","max","HttpResponse","json","data","getPriceCandles","count","arguments","length","undefined","now","candleInterval","currentPrice","spikeIndex","Array","from","_","i","trend","min","noise","random","open","close","finalHigh"],"sources":["../../../../src/gql/mock/handlers.ts"],"sourcesContent":["import { graphql, HttpResponse } from 'msw';\n\nimport type { CandlesData, TimeSpan } from '../types/graphql';\n\nexport const handlers = [\n graphql.query('GetPriceCandles', ({ variables }) => {\n const { timeSpan } = variables;\n\n const rawCandles = generateMockCandleData(30);\n\n const candles: CandlesData[] = rawCandles.map((candle) => ({\n __typename: 'CandlesData',\n time: new Date(candle.timestamp).toISOString(),\n unixTime: Math.floor(candle.timestamp / 1000),\n candle: {\n __typename: 'Candle',\n high: candle.max,\n },\n timeSpan: timeSpan as TimeSpan,\n }));\n\n return HttpResponse.json({\n data: {\n getPriceCandles: candles,\n },\n });\n }),\n];\n\nconst generateMockCandleData = (count: number = 30) => {\n const now = Date.now();\n const candleInterval = 30 * 60 * 1000;\n\n let currentPrice = 1.045;\n const spikeIndex = Math.floor(count * 0.6);\n\n return Array.from({ length: count }, (_, i) => {\n let trend = i < spikeIndex ? 0.0005 : -0.001;\n\n if (i === spikeIndex) {\n trend = 0.03;\n }\n\n if (i > spikeIndex + 3) {\n trend = 0;\n }\n\n currentPrice += trend;\n\n currentPrice = Math.max(1.03, Math.min(1.09, currentPrice));\n\n const noise = (Math.random() - 0.5) * 0.0005;\n currentPrice += noise;\n\n const open = currentPrice;\n const high = open + Math.random() * 0.0008;\n const close = open + (Math.random() - 0.5) * 0.0005;\n\n const finalHigh = Math.max(open, close, high);\n\n return {\n timestamp: now - (count - i) * candleInterval,\n max: finalHigh,\n };\n });\n};\n"],"mappings":";;;;;;AAAA,IAAAA,IAAA,GAAAC,OAAA;AAIO,MAAMC,QAAQ,GAAAC,OAAA,CAAAD,QAAA,GAAG,CACtBE,YAAO,CAACC,KAAK,CAAC,iBAAiB,EAAEC,IAAA,IAAmB;EAAA,IAAlB;IAAEC;EAAU,CAAC,GAAAD,IAAA;EAC7C,MAAM;IAAEE;EAAS,CAAC,GAAGD,SAAS;EAE9B,MAAME,UAAU,GAAGC,sBAAsB,CAAC,EAAE,CAAC;EAE7C,MAAMC,OAAsB,GAAGF,UAAU,CAACG,GAAG,CAAEC,MAAM,KAAM;IACzDC,UAAU,EAAE,aAAa;IACzBC,IAAI,EAAE,IAAIC,IAAI,CAACH,MAAM,CAACI,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;IAC9CC,QAAQ,EAAEC,IAAI,CAACC,KAAK,CAACR,MAAM,CAACI,SAAS,GAAG,IAAI,CAAC;IAC7CJ,MAAM,EAAE;MACNC,UAAU,EAAE,QAAQ;MACpBQ,IAAI,EAAET,MAAM,CAACU;IACf,CAAC;IACDf,QAAQ,EAAEA;EACZ,CAAC,CAAC,CAAC;EAEH,OAAOgB,iBAAY,CAACC,IAAI,CAAC;IACvBC,IAAI,EAAE;MACJC,eAAe,EAAEhB;IACnB;EACF,CAAC,CAAC;AACJ,CAAC,CAAC,CACH;AAED,MAAMD,sBAAsB,GAAG,SAAAA,CAAA,EAAwB;EAAA,IAAvBkB,KAAa,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAChD,MAAMG,GAAG,GAAGhB,IAAI,CAACgB,GAAG,CAAC,CAAC;EACtB,MAAMC,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAErC,IAAIC,YAAY,GAAG,KAAK;EACxB,MAAMC,UAAU,GAAGf,IAAI,CAACC,KAAK,CAACO,KAAK,GAAG,GAAG,CAAC;EAE1C,OAAOQ,KAAK,CAACC,IAAI,CAAC;IAAEP,MAAM,EAAEF;EAAM,CAAC,EAAE,CAACU,CAAC,EAAEC,CAAC,KAAK;IAC7C,IAAIC,KAAK,GAAGD,CAAC,GAAGJ,UAAU,GAAG,MAAM,GAAG,CAAC,KAAK;IAE5C,IAAII,CAAC,KAAKJ,UAAU,EAAE;MACpBK,KAAK,GAAG,IAAI;IACd;IAEA,IAAID,CAAC,GAAGJ,UAAU,GAAG,CAAC,EAAE;MACtBK,KAAK,GAAG,CAAC;IACX;IAEAN,YAAY,IAAIM,KAAK;IAErBN,YAAY,GAAGd,IAAI,CAACG,GAAG,CAAC,IAAI,EAAEH,IAAI,CAACqB,GAAG,CAAC,IAAI,EAAEP,YAAY,CAAC,CAAC;IAE3D,MAAMQ,KAAK,GAAG,CAACtB,IAAI,CAACuB,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM;IAC5CT,YAAY,IAAIQ,KAAK;IAErB,MAAME,IAAI,GAAGV,YAAY;IACzB,MAAMZ,IAAI,GAAGsB,IAAI,GAAGxB,IAAI,CAACuB,MAAM,CAAC,CAAC,GAAG,MAAM;IAC1C,MAAME,KAAK,GAAGD,IAAI,GAAG,CAACxB,IAAI,CAACuB,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM;IAEnD,MAAMG,SAAS,GAAG1B,IAAI,CAACG,GAAG,CAACqB,IAAI,EAAEC,KAAK,EAAEvB,IAAI,CAAC;IAE7C,OAAO;MACLL,SAAS,EAAEe,GAAG,GAAG,CAACJ,KAAK,GAAGW,CAAC,IAAIN,cAAc;MAC7CV,GAAG,EAAEuB;IACP,CAAC;EACH,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"handlers.js","names":["graphql","HttpResponse","handlers","query","_ref","variables","timeSpan","rawCandles","generateMockCandleData","candles","map","candle","__typename","time","Date","timestamp","toISOString","unixTime","Math","floor","high","max","json","data","getPriceCandles","count","arguments","length","undefined","now","candleInterval","currentPrice","spikeIndex","Array","from","_","i","trend","min","noise","random","open","close","finalHigh"],"sources":["../../../../src/gql/mock/handlers.ts"],"sourcesContent":["import { graphql, HttpResponse } from 'msw';\n\nimport type { CandlesData, TimeSpan } from '../types/graphql';\n\nexport const handlers = [\n graphql.query('GetPriceCandles', ({ variables }) => {\n const { timeSpan } = variables;\n\n const rawCandles = generateMockCandleData(30);\n\n const candles: CandlesData[] = rawCandles.map((candle) => ({\n __typename: 'CandlesData',\n time: new Date(candle.timestamp).toISOString(),\n unixTime: Math.floor(candle.timestamp / 1000),\n candle: {\n __typename: 'Candle',\n high: candle.max,\n },\n timeSpan: timeSpan as TimeSpan,\n }));\n\n return HttpResponse.json({\n data: {\n getPriceCandles: candles,\n },\n });\n }),\n];\n\nconst generateMockCandleData = (count: number = 30) => {\n const now = Date.now();\n const candleInterval = 30 * 60 * 1000;\n\n let currentPrice = 1.045;\n const spikeIndex = Math.floor(count * 0.6);\n\n return Array.from({ length: count }, (_, i) => {\n let trend = i < spikeIndex ? 0.0005 : -0.001;\n\n if (i === spikeIndex) {\n trend = 0.03;\n }\n\n if (i > spikeIndex + 3) {\n trend = 0;\n }\n\n currentPrice += trend;\n\n currentPrice = Math.max(1.03, Math.min(1.09, currentPrice));\n\n const noise = (Math.random() - 0.5) * 0.0005;\n currentPrice += noise;\n\n const open = currentPrice;\n const high = open + Math.random() * 0.0008;\n const close = open + (Math.random() - 0.5) * 0.0005;\n\n const finalHigh = Math.max(open, close, high);\n\n return {\n timestamp: now - (count - i) * candleInterval,\n max: finalHigh,\n };\n });\n};\n"],"mappings":"AAAA,SAASA,OAAO,EAAEC,YAAY,QAAQ,KAAK;AAI3C,OAAO,MAAMC,QAAQ,GAAG,CACtBF,OAAO,CAACG,KAAK,CAAC,iBAAiB,EAAEC,IAAA,IAAmB;EAAA,IAAlB;IAAEC;EAAU,CAAC,GAAAD,IAAA;EAC7C,MAAM;IAAEE;EAAS,CAAC,GAAGD,SAAS;EAE9B,MAAME,UAAU,GAAGC,sBAAsB,CAAC,EAAE,CAAC;EAE7C,MAAMC,OAAsB,GAAGF,UAAU,CAACG,GAAG,CAAEC,MAAM,KAAM;IACzDC,UAAU,EAAE,aAAa;IACzBC,IAAI,EAAE,IAAIC,IAAI,CAACH,MAAM,CAACI,SAAS,CAAC,CAACC,WAAW,CAAC,CAAC;IAC9CC,QAAQ,EAAEC,IAAI,CAACC,KAAK,CAACR,MAAM,CAACI,SAAS,GAAG,IAAI,CAAC;IAC7CJ,MAAM,EAAE;MACNC,UAAU,EAAE,QAAQ;MACpBQ,IAAI,EAAET,MAAM,CAACU;IACf,CAAC;IACDf,QAAQ,EAAEA;EACZ,CAAC,CAAC,CAAC;EAEH,OAAOL,YAAY,CAACqB,IAAI,CAAC;IACvBC,IAAI,EAAE;MACJC,eAAe,EAAEf;IACnB;EACF,CAAC,CAAC;AACJ,CAAC,CAAC,CACH;AAED,MAAMD,sBAAsB,GAAG,SAAAA,CAAA,EAAwB;EAAA,IAAvBiB,KAAa,GAAAC,SAAA,CAAAC,MAAA,QAAAD,SAAA,QAAAE,SAAA,GAAAF,SAAA,MAAG,EAAE;EAChD,MAAMG,GAAG,GAAGf,IAAI,CAACe,GAAG,CAAC,CAAC;EACtB,MAAMC,cAAc,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAErC,IAAIC,YAAY,GAAG,KAAK;EACxB,MAAMC,UAAU,GAAGd,IAAI,CAACC,KAAK,CAACM,KAAK,GAAG,GAAG,CAAC;EAE1C,OAAOQ,KAAK,CAACC,IAAI,CAAC;IAAEP,MAAM,EAAEF;EAAM,CAAC,EAAE,CAACU,CAAC,EAAEC,CAAC,KAAK;IAC7C,IAAIC,KAAK,GAAGD,CAAC,GAAGJ,UAAU,GAAG,MAAM,GAAG,CAAC,KAAK;IAE5C,IAAII,CAAC,KAAKJ,UAAU,EAAE;MACpBK,KAAK,GAAG,IAAI;IACd;IAEA,IAAID,CAAC,GAAGJ,UAAU,GAAG,CAAC,EAAE;MACtBK,KAAK,GAAG,CAAC;IACX;IAEAN,YAAY,IAAIM,KAAK;IAErBN,YAAY,GAAGb,IAAI,CAACG,GAAG,CAAC,IAAI,EAAEH,IAAI,CAACoB,GAAG,CAAC,IAAI,EAAEP,YAAY,CAAC,CAAC;IAE3D,MAAMQ,KAAK,GAAG,CAACrB,IAAI,CAACsB,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM;IAC5CT,YAAY,IAAIQ,KAAK;IAErB,MAAME,IAAI,GAAGV,YAAY;IACzB,MAAMX,IAAI,GAAGqB,IAAI,GAAGvB,IAAI,CAACsB,MAAM,CAAC,CAAC,GAAG,MAAM;IAC1C,MAAME,KAAK,GAAGD,IAAI,GAAG,CAACvB,IAAI,CAACsB,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI,MAAM;IAEnD,MAAMG,SAAS,GAAGzB,IAAI,CAACG,GAAG,CAACoB,IAAI,EAAEC,KAAK,EAAEtB,IAAI,CAAC;IAE7C,OAAO;MACLL,SAAS,EAAEc,GAAG,GAAG,CAACJ,KAAK,GAAGW,CAAC,IAAIN,cAAc;MAC7CT,GAAG,EAAEsB;IACP,CAAC;EACH,CAAC,CAAC;AACJ,CAAC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const handlers: import("msw").GraphQLHandler[];
|