@oanda/labs-crowd-view-widget 1.0.29 → 1.0.31
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 +252 -0
- package/dist/main/CrowdViewWidget/Main.js +1 -0
- package/dist/main/CrowdViewWidget/Main.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/Chart.js +68 -2
- package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js +7 -3
- package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/constants.js +4 -1
- package/dist/main/CrowdViewWidget/components/Chart/constants.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/getOption.js +44 -12
- package/dist/main/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/types.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/utils.js +103 -16
- package/dist/main/CrowdViewWidget/components/Chart/utils.js.map +1 -1
- package/dist/main/CrowdViewWidget/config.js +10 -4
- package/dist/main/CrowdViewWidget/config.js.map +1 -1
- package/dist/main/CrowdViewWidget/types.js +22 -5
- package/dist/main/CrowdViewWidget/types.js.map +1 -1
- package/dist/module/CrowdViewWidget/Main.js +1 -0
- package/dist/module/CrowdViewWidget/Main.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/Chart.js +70 -4
- package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js +7 -3
- package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/constants.js +3 -0
- package/dist/module/CrowdViewWidget/components/Chart/constants.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/getOption.js +46 -14
- package/dist/module/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/types.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/utils.js +100 -15
- package/dist/module/CrowdViewWidget/components/Chart/utils.js.map +1 -1
- package/dist/module/CrowdViewWidget/config.js +10 -4
- package/dist/module/CrowdViewWidget/config.js.map +1 -1
- package/dist/module/CrowdViewWidget/types.js +21 -4
- package/dist/module/CrowdViewWidget/types.js.map +1 -1
- package/dist/types/CrowdViewWidget/components/Chart/ChartWithData.d.ts +1 -1
- package/dist/types/CrowdViewWidget/components/Chart/constants.d.ts +3 -0
- package/dist/types/CrowdViewWidget/components/Chart/types.d.ts +11 -1
- package/dist/types/CrowdViewWidget/components/Chart/utils.d.ts +26 -1
- package/dist/types/CrowdViewWidget/types.d.ts +20 -4
- package/package.json +3 -3
- package/src/CrowdViewWidget/Main.tsx +5 -1
- package/src/CrowdViewWidget/components/Chart/Chart.tsx +99 -2
- package/src/CrowdViewWidget/components/Chart/ChartWithData.tsx +7 -3
- package/src/CrowdViewWidget/components/Chart/constants.tsx +4 -0
- package/src/CrowdViewWidget/components/Chart/getOption.ts +72 -19
- package/src/CrowdViewWidget/components/Chart/types.ts +13 -2
- package/src/CrowdViewWidget/components/Chart/utils.ts +110 -11
- package/src/CrowdViewWidget/config.ts +12 -4
- package/src/CrowdViewWidget/types.ts +21 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOption.js","names":["_labsWidgetCommon","require","echarts","_interopRequireWildcard","_constants","_utils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","getDesktopOption","_ref","isDark","desktopGridLines","getGridLines","chartWidth","CHART_WIDTH","chartHeight","CHART_HEIGHT","xLabelsSize","X_LABEL_SIZE","yLabelSize","Y_LABEL_SIZE_DESKTOP","bottomLeftBox","yAxis","nameTextStyle","align","padding","axisLabel","margin","grid","name","top","left","right","bottom","graphic","getLineCommons","shape","x1","y1","x2","y2","exports","getOption","_ref2","xAxisData","ordersPositionsChartData","ordersPositionsBucketWidth","candlesSeriesData","animation","dataZoom","type","xAxisIndex","start","end","yAxisIndex","startValue","endValue","tooltip","trigger","formatter","xAxis","data","axisTick","show","value","Date","toLocaleTimeString","undefined","hour","minute","position","axisLine","showMaxLabel","showMinLabel","series","itemStyle","color","colorPalette","raspberryLight","color0","bottleGreenLight","silent","renderItem","params","api","coordSys","xVal","yVal","sentiment","coord","rectWidth","rectHeight","size","boundaries","clipRectByRect","x","y","width","height","style","fill","getRectColor","emphasisDisabled"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/getOption.ts"],"sourcesContent":["import {\n colorPalette,\n getGridLines,\n getLineCommons,\n} from '@oanda/labs-widget-common';\nimport * as echarts from 'echarts/core';\n\nimport {\n CHART_HEIGHT,\n CHART_WIDTH,\n X_LABEL_SIZE,\n Y_LABEL_SIZE_DESKTOP,\n} from './constants';\nimport type { GetOptionType, GetResponsiveOptionsProps } from './types';\nimport { getRectColor } from './utils';\n\nexport const getDesktopOption = ({ isDark }: GetResponsiveOptionsProps) => {\n const desktopGridLines = getGridLines({\n isDark,\n chartWidth: CHART_WIDTH,\n chartHeight: CHART_HEIGHT,\n xLabelsSize: X_LABEL_SIZE,\n yLabelSize: Y_LABEL_SIZE_DESKTOP,\n bottomLeftBox: false,\n });\n\n return {\n yAxis: {\n nameTextStyle: {\n align: 'left',\n padding: [0, 0, 0, 8],\n },\n axisLabel: {\n margin: 8,\n },\n },\n grid: [\n {\n name: 'main-grid',\n top: '0px',\n left: '0px',\n right: `${Y_LABEL_SIZE_DESKTOP}px`,\n bottom: `${X_LABEL_SIZE}px`,\n },\n ],\n graphic: [\n ...desktopGridLines,\n {\n ...getLineCommons(isDark),\n top: 0,\n right: 0,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n },\n },\n ],\n };\n};\n\nexport const getOption: GetOptionType = ({\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth,\n candlesSeriesData,\n}) => {\n return {\n animation: false,\n dataZoom: [\n {\n type: 'inside',\n xAxisIndex: 0,\n start: 80,\n end: 100,\n },\n {\n type: 'inside',\n yAxisIndex: 0,\n startValue: 1.5,\n endValue: 1.7,\n },\n ],\n tooltip: {\n trigger: 'axis',\n formatter: '{c}',\n },\n xAxis: {\n type: 'category',\n data: xAxisData,\n axisTick: {\n show: false,\n },\n axisLabel: {\n padding: [8, 16, 8, 16],\n margin: 0,\n formatter: (value) =>\n `${new Date(value).toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}`,\n },\n },\n yAxis: {\n type: 'value',\n position: 'right',\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n showMaxLabel: false,\n showMinLabel: false,\n },\n },\n series: [\n {\n type: 'candlestick',\n data: candlesSeriesData,\n itemStyle: {\n color: colorPalette.raspberryLight,\n color0: colorPalette.bottleGreenLight,\n },\n },\n {\n type: 'custom',\n name: 'heatmap',\n silent: true,\n renderItem: (params, api) => {\n const { coordSys } = params;\n\n const xVal = api.value(0);\n const yVal = api.value(1);\n const sentiment = api.value(2) as number;\n const start = api.coord([xVal, yVal]);\n\n const [rectWidth, rectHeight] = api.size!([\n 0,\n ordersPositionsBucketWidth,\n ]) as number[];\n\n const boundaries = coordSys as unknown as {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n\n const shape = echarts.graphic.clipRectByRect(\n {\n x: start[0] - rectWidth / 2,\n y: start[1],\n width: rectWidth,\n height: rectHeight,\n },\n boundaries\n );\n return (\n shape && {\n type: 'rect',\n shape,\n style: {\n fill: getRectColor(sentiment),\n },\n emphasisDisabled: true,\n }\n );\n },\n data: ordersPositionsChartData,\n },\n ],\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"getOption.js","names":["_labsWidgetCommon","require","echarts","_interopRequireWildcard","_constants","_utils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","getDesktopOption","_ref","isDark","desktopGridLines","getGridLines","chartWidth","CHART_WIDTH","chartHeight","CHART_HEIGHT","xLabelsSize","X_LABEL_SIZE","yLabelSize","Y_LABEL_SIZE_DESKTOP","bottomLeftBox","yAxis","nameTextStyle","align","padding","axisLabel","margin","grid","name","top","left","right","bottom","graphic","getLineCommons","shape","x1","y1","x2","y2","exports","getOption","_ref2","xAxisData","ordersPositionsChartData","ordersPositionsBucketWidth","candlesSeriesData","visibleXAxisData","slice","length","INITIAL_START_ZOOM","INITIAL_END_ZOOM","isGreaterThanTwoWeeks","isDifferenceGreaterThanTwoWeeks","labelsData","getLabelData","visibleItemsCount","Math","round","initialInterval","MAX_LABELS_COUNT","floor","title","show","text","animation","dataZoom","type","xAxisIndex","start","end","tooltip","trigger","formatter","val","timestamp","axisValue","Date","toLocaleTimeString","undefined","hour","minute","toLocaleDateString","day","month","xAxis","data","axisTick","interval","value","date","position","scale","axisLine","showMaxLabel","showMinLabel","series","id","itemStyle","color","colorPalette","raspberryLight","color0","bottleGreenLight","markPoint","symbol","symbolSize","silent","renderItem","params","api","coordSys","xVal","yVal","sentiment","coord","rectWidth","rectHeight","size","boundaries","clipRectByRect","x","y","width","height","style","fill","getRectColor","emphasisDisabled"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/getOption.ts"],"sourcesContent":["import {\n colorPalette,\n getGridLines,\n getLineCommons,\n} from '@oanda/labs-widget-common';\nimport * as echarts from 'echarts/core';\n\nimport {\n CHART_HEIGHT,\n CHART_WIDTH,\n INITIAL_END_ZOOM,\n INITIAL_START_ZOOM,\n MAX_LABELS_COUNT,\n X_LABEL_SIZE,\n Y_LABEL_SIZE_DESKTOP,\n} from './constants';\nimport type { GetOptionType, GetResponsiveOptionsProps } from './types';\nimport {\n getLabelData,\n getRectColor,\n isDifferenceGreaterThanTwoWeeks,\n} from './utils';\n\nexport const getDesktopOption = ({ isDark }: GetResponsiveOptionsProps) => {\n const desktopGridLines = getGridLines({\n isDark,\n chartWidth: CHART_WIDTH,\n chartHeight: CHART_HEIGHT,\n xLabelsSize: X_LABEL_SIZE,\n yLabelSize: Y_LABEL_SIZE_DESKTOP,\n bottomLeftBox: false,\n });\n\n return {\n yAxis: {\n nameTextStyle: {\n align: 'left',\n padding: [0, 0, 0, 8],\n },\n axisLabel: {\n margin: 8,\n },\n },\n grid: [\n {\n name: 'main-grid',\n top: '0px',\n left: '0px',\n right: `${Y_LABEL_SIZE_DESKTOP}px`,\n bottom: `${X_LABEL_SIZE}px`,\n },\n ],\n graphic: [\n ...desktopGridLines,\n {\n ...getLineCommons(isDark),\n top: 0,\n right: 0,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n },\n },\n ],\n };\n};\n\n// @ts-ignore\nexport const getOption: GetOptionType = ({\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth,\n candlesSeriesData,\n}) => {\n const visibleXAxisData = xAxisData.slice(\n (xAxisData.length * INITIAL_START_ZOOM) / 100,\n (xAxisData.length * INITIAL_END_ZOOM) / 100\n );\n\n const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(\n visibleXAxisData[0],\n visibleXAxisData[visibleXAxisData.length - 1]\n );\n const labelsData = getLabelData({\n xAxisData,\n isGreaterThanTwoWeeks,\n });\n\n const visibleItemsCount = Math.round(\n (xAxisData.length * (INITIAL_END_ZOOM - INITIAL_START_ZOOM)) / 100\n );\n\n const initialInterval =\n visibleItemsCount > MAX_LABELS_COUNT\n ? Math.floor(visibleItemsCount / MAX_LABELS_COUNT)\n : 0;\n\n return {\n title: {\n show: false,\n text: `${initialInterval},${isGreaterThanTwoWeeks}`,\n },\n animation: false,\n dataZoom: [\n {\n type: 'inside',\n xAxisIndex: 0,\n start: INITIAL_START_ZOOM,\n end: INITIAL_END_ZOOM,\n },\n ],\n tooltip: {\n trigger: 'axis',\n formatter: (val) => {\n // @ts-ignore\n const timestamp = val[0].axisValue as string;\n\n return `${new Date(timestamp).toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}\n ${new Date(timestamp).toLocaleDateString(undefined, {\n day: 'numeric',\n month: 'short',\n })}\n`;\n },\n },\n xAxis: {\n type: 'category',\n data: xAxisData,\n axisTick: {\n show: false,\n },\n axisLabel: {\n padding: [8, 16, 8, 16],\n margin: 0,\n interval: initialInterval,\n formatter: (value) => {\n const date = new Date(value);\n return isGreaterThanTwoWeeks\n ? `${date.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}`\n : `${date.toLocaleDateString(undefined, {\n day: 'numeric',\n })}`;\n },\n },\n },\n yAxis: {\n type: 'value',\n position: 'right',\n scale: true,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n showMaxLabel: false,\n showMinLabel: false,\n },\n },\n series: [\n {\n type: 'candlestick',\n id: 'candlestick',\n data: candlesSeriesData,\n itemStyle: {\n color: colorPalette.raspberryLight,\n color0: colorPalette.bottleGreenLight,\n },\n markPoint: {\n symbol: 'circle',\n symbolSize: 0,\n data: labelsData,\n },\n },\n {\n type: 'custom',\n name: 'heatmap',\n id: 'heatmap',\n silent: true,\n renderItem: (params, api) => {\n const { coordSys } = params;\n const xVal = api.value(0);\n const yVal = api.value(1);\n const sentiment = api.value(2) as number;\n const start = api.coord([xVal, yVal]);\n const [rectWidth, rectHeight] = api.size!([\n 0,\n ordersPositionsBucketWidth,\n ]) as number[];\n const boundaries = coordSys as unknown as {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n const shape = echarts.graphic.clipRectByRect(\n {\n x: start[0] - rectWidth / 2,\n y: start[1],\n width: rectWidth,\n height: rectHeight,\n },\n boundaries\n );\n return (\n shape && {\n type: 'rect',\n shape,\n style: {\n fill: getRectColor(sentiment),\n },\n emphasisDisabled: true,\n }\n );\n },\n data: ordersPositionsChartData,\n },\n ],\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/types.ts"],"sourcesContent":["import type { GetOrderPositionBooksQuery } from '@oanda/labs-order-book-widget/src/gql/types/graphql';\nimport type { EChartsOption } from 'echarts';\n\nimport type { BookType } from '../../../gql/types/graphql';\n\ninterface ChartOptionsProps {\n xAxisData: string[];\n ordersPositionsChartData: [\n // timestamp\n string,\n // price\n number,\n // orders-positions sentiment\n number,\n ][];\n ordersPositionsBucketWidth: number;\n candlesSeriesData: [number, number, number, number][];\n}\n\nexport type GetOptionType = (props: ChartOptionsProps) => EChartsOption;\
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/types.ts"],"sourcesContent":["import type { GetOrderPositionBooksQuery } from '@oanda/labs-order-book-widget/src/gql/types/graphql';\nimport type { EChartsOption } from 'echarts';\n\nimport type { BookType } from '../../../gql/types/graphql';\nimport type { GranularityId } from '../../types';\n\ninterface ChartOptionsProps {\n xAxisData: string[];\n ordersPositionsChartData: [\n // timestamp\n string,\n // price\n number,\n // orders-positions sentiment\n number,\n ][];\n ordersPositionsBucketWidth: number;\n candlesSeriesData: [number, number, number, number][];\n}\n\nexport type GetOptionType = (props: ChartOptionsProps) => EChartsOption;\nexport interface GetResponsiveOptionsProps {\n isDark: boolean;\n}\n\nexport interface ChartProps {\n data: ChartOptionsProps;\n}\n\nexport interface ChartWithDataProps {\n bookType: BookType;\n instrument: string;\n granularity: GranularityId;\n}\n\ninterface TransformDataForChartTypeProps {\n data: GetOrderPositionBooksQuery;\n granularity: GranularityId;\n}\n\nexport type TransformDataForChartType = (\n props: TransformDataForChartTypeProps\n) => ChartOptionsProps;\n\nexport interface GetLabelsDataProps {\n xAxisData: string[];\n isGreaterThanTwoWeeks: boolean;\n}\n"],"mappings":"","ignoreList":[]}
|
|
@@ -3,8 +3,10 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.transformDataForChart = exports.getRectColor = void 0;
|
|
6
|
+
exports.transformDataForChart = exports.isDifferenceGreaterThanTwoWeeks = exports.getRectColor = exports.getLabelData = exports.GranularityId = void 0;
|
|
7
7
|
var _config = require("../../config");
|
|
8
|
+
var _types = require("../../types");
|
|
9
|
+
var _constants = require("./constants");
|
|
8
10
|
var _getPriceCandlesMock = require("./getPriceCandlesMock");
|
|
9
11
|
const getRectColor = sentiment => {
|
|
10
12
|
const colors = sentiment < 0 ? _config.colorMap.short : _config.colorMap.long;
|
|
@@ -24,10 +26,48 @@ const getRectColor = sentiment => {
|
|
|
24
26
|
return 'transparent';
|
|
25
27
|
};
|
|
26
28
|
exports.getRectColor = getRectColor;
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
let GranularityId = exports.GranularityId = function (GranularityId) {
|
|
30
|
+
GranularityId["MINUTE_5"] = "MINUTE_5";
|
|
31
|
+
GranularityId["MINUTE_15"] = "MINUTE_15";
|
|
32
|
+
GranularityId["MINUTE_30"] = "MINUTE_30";
|
|
33
|
+
GranularityId["HOUR_1"] = "HOUR_1";
|
|
34
|
+
GranularityId["HOUR_4"] = "HOUR_4";
|
|
35
|
+
GranularityId["DAY_1"] = "DAY_1";
|
|
36
|
+
return GranularityId;
|
|
37
|
+
}({});
|
|
38
|
+
const timeSpansInMilliseconds = {
|
|
39
|
+
[_types.TimeSpanId.HOUR_1]: 60 * 60 * 1000,
|
|
40
|
+
[_types.TimeSpanId.HOUR_12]: 12 * 60 * 60 * 1000,
|
|
41
|
+
[_types.TimeSpanId.DAY_1]: 24 * 60 * 60 * 1000,
|
|
42
|
+
[_types.TimeSpanId.DAY_2]: 2 * 24 * 60 * 60 * 1000,
|
|
43
|
+
[_types.TimeSpanId.WEEK_1]: 7 * 24 * 60 * 60 * 1000,
|
|
44
|
+
[_types.TimeSpanId.WEEK_2]: 14 * 24 * 60 * 60 * 1000,
|
|
45
|
+
[_types.TimeSpanId.WEEK_3]: 21 * 24 * 60 * 60 * 1000,
|
|
46
|
+
[_types.TimeSpanId.MONTH_1]: 30 * 24 * 60 * 60 * 1000,
|
|
47
|
+
[_types.TimeSpanId.MONTH_3]: 3 * 30 * 24 * 60 * 60 * 1000,
|
|
48
|
+
[_types.TimeSpanId.MONTH_6]: 6 * 30 * 24 * 60 * 60 * 1000,
|
|
49
|
+
[_types.TimeSpanId.YEAR_1]: 365 * 24 * 60 * 60 * 1000,
|
|
50
|
+
[_types.TimeSpanId.YEAR_5]: 5 * 365 * 24 * 60 * 60 * 1000
|
|
51
|
+
};
|
|
52
|
+
const granularityInMilliseconds = {
|
|
53
|
+
[GranularityId.MINUTE_5]: 5 * 60 * 1000,
|
|
54
|
+
[GranularityId.MINUTE_15]: 15 * 60 * 1000,
|
|
55
|
+
[GranularityId.MINUTE_30]: 30 * 60 * 1000,
|
|
56
|
+
[GranularityId.HOUR_1]: 60 * 60 * 1000,
|
|
57
|
+
[GranularityId.HOUR_4]: 4 * 60 * 60 * 1000,
|
|
58
|
+
[GranularityId.DAY_1]: 24 * 60 * 60 * 1000
|
|
59
|
+
};
|
|
60
|
+
const temporaryGranularityTimeSpanMap = {
|
|
61
|
+
[GranularityId.MINUTE_5]: _types.TimeSpanId.DAY_2,
|
|
62
|
+
[GranularityId.MINUTE_15]: _types.TimeSpanId.WEEK_1,
|
|
63
|
+
[GranularityId.MINUTE_30]: _types.TimeSpanId.WEEK_2,
|
|
64
|
+
[GranularityId.HOUR_1]: _types.TimeSpanId.MONTH_1,
|
|
65
|
+
[GranularityId.HOUR_4]: _types.TimeSpanId.MONTH_3,
|
|
66
|
+
[GranularityId.DAY_1]: _types.TimeSpanId.MONTH_6
|
|
67
|
+
};
|
|
68
|
+
const mockOrderPositionDataForHistoricalData = (data, granularityId) => {
|
|
69
|
+
const granularity = granularityInMilliseconds[granularityId];
|
|
70
|
+
const timeSpan = timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];
|
|
31
71
|
const currentTime = data.orderPositionBooks[0].time;
|
|
32
72
|
const startDate = new Date(currentTime);
|
|
33
73
|
const totalSteps = timeSpan / granularity;
|
|
@@ -38,39 +78,86 @@ const mockOrderPositionDataForHistoricalData = data => {
|
|
|
38
78
|
buckets: data.orderPositionBooks[0].buckets,
|
|
39
79
|
bucketWidth: data.orderPositionBooks[0].bucketWidth
|
|
40
80
|
};
|
|
41
|
-
});
|
|
81
|
+
}).reverse();
|
|
42
82
|
return orderPositionDataForHistorical;
|
|
43
83
|
};
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
84
|
+
const getLabelData = _ref => {
|
|
85
|
+
let {
|
|
86
|
+
xAxisData,
|
|
87
|
+
isGreaterThanTwoWeeks
|
|
88
|
+
} = _ref;
|
|
89
|
+
return xAxisData.filter((record, index, arr) => {
|
|
90
|
+
if (index === 0) {
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
const previousTimestamp = arr[index - 1];
|
|
94
|
+
const currentDate = new Date(record);
|
|
95
|
+
const previousDate = new Date(previousTimestamp);
|
|
96
|
+
return isGreaterThanTwoWeeks ? currentDate.getDate() !== previousDate.getDate() : currentDate.getMonth() !== previousDate.getMonth();
|
|
97
|
+
}).map(item => ({
|
|
98
|
+
name: new Date(item).toLocaleDateString(undefined, {
|
|
99
|
+
month: 'short',
|
|
100
|
+
day: isGreaterThanTwoWeeks ? 'numeric' : undefined
|
|
101
|
+
}),
|
|
102
|
+
xAxis: item,
|
|
103
|
+
y: _constants.CHART_HEIGHT - 22,
|
|
104
|
+
silent: true,
|
|
105
|
+
emphasis: {
|
|
106
|
+
disabled: true
|
|
107
|
+
},
|
|
108
|
+
label: {
|
|
109
|
+
fontFamily: 'Sofia W03',
|
|
110
|
+
fontSize: 10,
|
|
111
|
+
position: 'bottom',
|
|
112
|
+
align: 'center',
|
|
113
|
+
formatter: '{b}'
|
|
114
|
+
}
|
|
115
|
+
}));
|
|
116
|
+
};
|
|
117
|
+
exports.getLabelData = getLabelData;
|
|
118
|
+
const isDifferenceGreaterThanTwoWeeks = (startDate, endDate) => {
|
|
119
|
+
const date1 = new Date(startDate);
|
|
120
|
+
const date2 = new Date(endDate);
|
|
121
|
+
const TWO_WEEKS_IN_MS = 14 * 24 * 60 * 60 * 1000;
|
|
122
|
+
const differenceInMs = Math.abs(date2.getTime() - date1.getTime());
|
|
123
|
+
return differenceInMs < TWO_WEEKS_IN_MS;
|
|
124
|
+
};
|
|
125
|
+
exports.isDifferenceGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks;
|
|
126
|
+
const transformDataForChart = _ref2 => {
|
|
127
|
+
let {
|
|
128
|
+
data,
|
|
129
|
+
granularity
|
|
130
|
+
} = _ref2;
|
|
131
|
+
const mockedData = mockOrderPositionDataForHistoricalData(data, granularity);
|
|
132
|
+
const xAxisData = mockedData.map(_ref3 => {
|
|
47
133
|
let {
|
|
48
134
|
time
|
|
49
|
-
} =
|
|
135
|
+
} = _ref3;
|
|
50
136
|
return time;
|
|
51
137
|
});
|
|
52
|
-
const ordersPositionsChartData = mockedData.flatMap(
|
|
138
|
+
const ordersPositionsChartData = mockedData.flatMap(_ref4 => {
|
|
53
139
|
let {
|
|
54
140
|
buckets,
|
|
55
141
|
time
|
|
56
|
-
} =
|
|
142
|
+
} = _ref4;
|
|
57
143
|
return buckets.map(bucket => [time, bucket.price, bucket.longCountPercent - bucket.shortCountPercent]);
|
|
58
144
|
}).filter(item => Math.abs(item[2]) > 0.15);
|
|
59
|
-
const mockedCandles = (0, _getPriceCandlesMock.getPriceCandlesMock)(
|
|
60
|
-
const candlesSeriesData = mockedCandles.map(
|
|
145
|
+
const mockedCandles = (0, _getPriceCandlesMock.getPriceCandlesMock)(xAxisData.length);
|
|
146
|
+
const candlesSeriesData = mockedCandles.map(_ref5 => {
|
|
61
147
|
let {
|
|
62
148
|
close,
|
|
63
149
|
open,
|
|
64
150
|
low,
|
|
65
151
|
high
|
|
66
|
-
} =
|
|
152
|
+
} = _ref5;
|
|
67
153
|
return [+close.toFixed(5), +open.toFixed(5), +low.toFixed(5), +high.toFixed(5)];
|
|
68
154
|
});
|
|
69
155
|
return {
|
|
70
156
|
xAxisData,
|
|
71
157
|
ordersPositionsChartData,
|
|
72
158
|
ordersPositionsBucketWidth: mockedData[0].bucketWidth,
|
|
73
|
-
candlesSeriesData
|
|
159
|
+
candlesSeriesData,
|
|
160
|
+
granularity
|
|
74
161
|
};
|
|
75
162
|
};
|
|
76
163
|
exports.transformDataForChart = transformDataForChart;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_config","require","_getPriceCandlesMock","getRectColor","sentiment","colors","colorMap","short","long","absSentiment","Math","abs","exports","mockOrderPositionDataForHistoricalData","data","oneMinuteInMilliseconds","granularity","timeSpan","currentTime","orderPositionBooks","time","startDate","Date","totalSteps","orderPositionDataForHistorical","Array","fill","map","_","index","newDate","getTime","toISOString","slice","buckets","bucketWidth","transformDataForChart","mockedData","xAxisData","_ref","ordersPositionsChartData","flatMap","_ref2","bucket","price","longCountPercent","shortCountPercent","filter","item","mockedCandles","getPriceCandlesMock","length","candlesSeriesData","_ref3","close","open","low","high","toFixed","ordersPositionsBucketWidth"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/utils.ts"],"sourcesContent":["import type { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';\nimport { colorMap } from '../../config';\nimport { getPriceCandlesMock } from './getPriceCandlesMock';\nimport type { TransformDataForChartType } from './types';\n\nexport const getRectColor = (sentiment: number) => {\n const colors = sentiment < 0 ? colorMap.short : colorMap.long;\n const absSentiment = Math.abs(sentiment);\n\n if (absSentiment < 0.15) {\n return colors[3];\n }\n\n if (absSentiment < 0.25) {\n return colors[2];\n }\n\n if (absSentiment < 0.4) {\n return colors[1];\n }\n\n if (absSentiment >= 0.4) {\n return colors[0];\n }\n\n return 'transparent';\n};\n\nconst mockOrderPositionDataForHistoricalData = (\n data: GetOrderPositionBooksQuery\n) => {\n const oneMinuteInMilliseconds = 60000;\n const granularity = oneMinuteInMilliseconds * 5; // 5min\n const timeSpan = oneMinuteInMilliseconds * 60 * 24; // 24h\n // const timeSpan = oneMinuteInMilliseconds * 60 * 6 // 6h\n // const timeSpan = oneMinuteInMilliseconds * 15 //15min\n\n const currentTime = data.orderPositionBooks[0]!.time;\n\n const startDate = new Date(currentTime as string);\n const totalSteps = timeSpan / granularity;\n\n const orderPositionDataForHistorical = new Array(totalSteps)\n .fill(null)\n .map((_, index) => {\n const newDate = new Date(startDate.getTime() - index * granularity);\n\n return {\n time: `${newDate.toISOString().slice(0, 19)}Z`,\n buckets: data.orderPositionBooks[0]!.buckets,\n bucketWidth: data.orderPositionBooks[0]!.bucketWidth,\n };\n });\n\n return orderPositionDataForHistorical;\n};\n\nexport const transformDataForChart: TransformDataForChartType = (data) => {\n const mockedData = mockOrderPositionDataForHistoricalData(data);\n\n const xAxisData = mockedData.map(({ time }) => time);\n const ordersPositionsChartData = mockedData\n .flatMap(\n ({ buckets, time }) =>\n buckets.map((bucket) => [\n time,\n bucket!.price,\n bucket!.longCountPercent - bucket!.shortCountPercent,\n ]) as [string, number, number][]\n )\n .filter((item) => Math.abs(item[2]) > 0.15);\n\n const mockedCandles = getPriceCandlesMock(ordersPositionsChartData.length);\n\n const candlesSeriesData: [number, number, number, number][] =\n mockedCandles.map(({ close, open, low, high }) => [\n +close.toFixed(5),\n +open.toFixed(5),\n +low.toFixed(5),\n +high.toFixed(5),\n ]);\n\n return {\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth: mockedData[0]!.bucketWidth,\n candlesSeriesData,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_config","require","_types","_constants","_getPriceCandlesMock","getRectColor","sentiment","colors","colorMap","short","long","absSentiment","Math","abs","exports","GranularityId","timeSpansInMilliseconds","TimeSpanId","HOUR_1","HOUR_12","DAY_1","DAY_2","WEEK_1","WEEK_2","WEEK_3","MONTH_1","MONTH_3","MONTH_6","YEAR_1","YEAR_5","granularityInMilliseconds","MINUTE_5","MINUTE_15","MINUTE_30","HOUR_4","temporaryGranularityTimeSpanMap","mockOrderPositionDataForHistoricalData","data","granularityId","granularity","timeSpan","currentTime","orderPositionBooks","time","startDate","Date","totalSteps","orderPositionDataForHistorical","Array","fill","map","_","index","newDate","getTime","toISOString","slice","buckets","bucketWidth","reverse","getLabelData","_ref","xAxisData","isGreaterThanTwoWeeks","filter","record","arr","previousTimestamp","currentDate","previousDate","getDate","getMonth","item","name","toLocaleDateString","undefined","month","day","xAxis","y","CHART_HEIGHT","silent","emphasis","disabled","label","fontFamily","fontSize","position","align","formatter","isDifferenceGreaterThanTwoWeeks","endDate","date1","date2","TWO_WEEKS_IN_MS","differenceInMs","transformDataForChart","_ref2","mockedData","_ref3","ordersPositionsChartData","flatMap","_ref4","bucket","price","longCountPercent","shortCountPercent","mockedCandles","getPriceCandlesMock","length","candlesSeriesData","_ref5","close","open","low","high","toFixed","ordersPositionsBucketWidth"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/utils.ts"],"sourcesContent":["import type { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';\nimport { colorMap } from '../../config';\nimport { TimeSpanId } from '../../types';\nimport { CHART_HEIGHT } from './constants';\nimport { getPriceCandlesMock } from './getPriceCandlesMock';\nimport type { GetLabelsDataProps, TransformDataForChartType } from './types';\n\nexport const getRectColor = (sentiment: number) => {\n const colors = sentiment < 0 ? colorMap.short : colorMap.long;\n const absSentiment = Math.abs(sentiment);\n\n if (absSentiment < 0.15) {\n return colors[3];\n }\n\n if (absSentiment < 0.25) {\n return colors[2];\n }\n\n if (absSentiment < 0.4) {\n return colors[1];\n }\n\n if (absSentiment >= 0.4) {\n return colors[0];\n }\n\n return 'transparent';\n};\n\nexport enum GranularityId {\n MINUTE_5 = 'MINUTE_5',\n MINUTE_15 = 'MINUTE_15',\n MINUTE_30 = 'MINUTE_30',\n HOUR_1 = 'HOUR_1',\n HOUR_4 = 'HOUR_4',\n DAY_1 = 'DAY_1',\n}\n\nconst timeSpansInMilliseconds: Record<TimeSpanId, number> = {\n [TimeSpanId.HOUR_1]: 60 * 60 * 1000,\n [TimeSpanId.HOUR_12]: 12 * 60 * 60 * 1000,\n [TimeSpanId.DAY_1]: 24 * 60 * 60 * 1000,\n [TimeSpanId.DAY_2]: 2 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_1]: 7 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_2]: 14 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_3]: 21 * 24 * 60 * 60 * 1000,\n [TimeSpanId.MONTH_1]: 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.MONTH_3]: 3 * 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.MONTH_6]: 6 * 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.YEAR_1]: 365 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.YEAR_5]: 5 * 365 * 24 * 60 * 60 * 1000, // Approximation\n};\n\nconst granularityInMilliseconds: Record<GranularityId, number> = {\n [GranularityId.MINUTE_5]: 5 * 60 * 1000,\n [GranularityId.MINUTE_15]: 15 * 60 * 1000,\n [GranularityId.MINUTE_30]: 30 * 60 * 1000,\n [GranularityId.HOUR_1]: 60 * 60 * 1000,\n [GranularityId.HOUR_4]: 4 * 60 * 60 * 1000,\n [GranularityId.DAY_1]: 24 * 60 * 60 * 1000,\n};\n\nconst temporaryGranularityTimeSpanMap: Record<GranularityId, TimeSpanId> = {\n [GranularityId.MINUTE_5]: TimeSpanId.DAY_2,\n [GranularityId.MINUTE_15]: TimeSpanId.WEEK_1,\n [GranularityId.MINUTE_30]: TimeSpanId.WEEK_2,\n [GranularityId.HOUR_1]: TimeSpanId.MONTH_1,\n [GranularityId.HOUR_4]: TimeSpanId.MONTH_3,\n [GranularityId.DAY_1]: TimeSpanId.MONTH_6,\n};\n\nconst mockOrderPositionDataForHistoricalData = (\n data: GetOrderPositionBooksQuery,\n granularityId: GranularityId\n) => {\n const granularity = granularityInMilliseconds[granularityId];\n const timeSpan =\n timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];\n\n const currentTime = data.orderPositionBooks[0]!.time;\n\n const startDate = new Date(currentTime as string);\n const totalSteps = timeSpan / granularity;\n\n const orderPositionDataForHistorical = new Array(totalSteps)\n .fill(null)\n .map((_, index) => {\n const newDate = new Date(startDate.getTime() - index * granularity);\n\n return {\n time: `${newDate.toISOString().slice(0, 19)}Z`,\n buckets: data.orderPositionBooks[0]!.buckets,\n bucketWidth: data.orderPositionBooks[0]!.bucketWidth,\n };\n })\n .reverse();\n\n return orderPositionDataForHistorical;\n};\n\nexport const getLabelData = ({\n xAxisData,\n isGreaterThanTwoWeeks,\n}: GetLabelsDataProps) =>\n xAxisData\n .filter((record, index, arr) => {\n if (index === 0) {\n return false;\n }\n const previousTimestamp = arr[index - 1];\n const currentDate = new Date(record);\n const previousDate = new Date(previousTimestamp);\n\n return isGreaterThanTwoWeeks\n ? currentDate.getDate() !== previousDate.getDate()\n : currentDate.getMonth() !== previousDate.getMonth();\n })\n .map((item) => ({\n name: new Date(item).toLocaleDateString(undefined, {\n month: 'short',\n day: isGreaterThanTwoWeeks ? 'numeric' : undefined,\n }),\n xAxis: item,\n y: CHART_HEIGHT - 22,\n silent: true,\n emphasis: {\n disabled: true,\n },\n label: {\n fontFamily: 'Sofia W03',\n fontSize: 10,\n position: 'bottom',\n align: 'center',\n formatter: '{b}',\n },\n }));\n\nexport const isDifferenceGreaterThanTwoWeeks = (\n startDate: string,\n endDate: string\n) => {\n const date1 = new Date(startDate);\n const date2 = new Date(endDate);\n\n const TWO_WEEKS_IN_MS = 14 * 24 * 60 * 60 * 1000;\n\n const differenceInMs = Math.abs(date2.getTime() - date1.getTime());\n\n return differenceInMs < TWO_WEEKS_IN_MS;\n};\n\nexport const transformDataForChart: TransformDataForChartType = ({\n data,\n granularity,\n}) => {\n const mockedData = mockOrderPositionDataForHistoricalData(data, granularity);\n\n const xAxisData = mockedData.map(({ time }) => time);\n const ordersPositionsChartData = mockedData\n .flatMap(\n ({ buckets, time }) =>\n buckets.map((bucket) => [\n time,\n bucket!.price,\n bucket!.longCountPercent - bucket!.shortCountPercent,\n ]) as [string, number, number][]\n )\n .filter((item) => Math.abs(item[2]) > 0.15);\n\n const mockedCandles = getPriceCandlesMock(xAxisData.length);\n\n const candlesSeriesData: [number, number, number, number][] =\n mockedCandles.map(({ close, open, low, high }) => [\n +close.toFixed(5),\n +open.toFixed(5),\n +low.toFixed(5),\n +high.toFixed(5),\n ]);\n\n return {\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth: mockedData[0]!.bucketWidth,\n candlesSeriesData,\n granularity,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -82,16 +82,22 @@ const instrumentPrecisionConfig = exports.instrumentPrecisionConfig = {
|
|
|
82
82
|
[_types.InstrumentId.XAG_USD]: 5
|
|
83
83
|
};
|
|
84
84
|
const granularitySelectConfig = exports.granularitySelectConfig = [{
|
|
85
|
-
id: _types.GranularityId.
|
|
85
|
+
id: _types.GranularityId.MINUTE_5,
|
|
86
86
|
label: '5_minutes'
|
|
87
87
|
}, {
|
|
88
|
-
id: _types.GranularityId.
|
|
88
|
+
id: _types.GranularityId.MINUTE_15,
|
|
89
89
|
label: '15_minutes'
|
|
90
90
|
}, {
|
|
91
|
-
id: _types.GranularityId.
|
|
91
|
+
id: _types.GranularityId.MINUTE_30,
|
|
92
|
+
label: '30_minutes'
|
|
93
|
+
}, {
|
|
94
|
+
id: _types.GranularityId.HOUR_1,
|
|
92
95
|
label: '1_hour'
|
|
93
96
|
}, {
|
|
94
|
-
id: _types.GranularityId.
|
|
97
|
+
id: _types.GranularityId.HOUR_4,
|
|
98
|
+
label: '4_hours'
|
|
99
|
+
}, {
|
|
100
|
+
id: _types.GranularityId.DAY_1,
|
|
95
101
|
label: '1_day'
|
|
96
102
|
}];
|
|
97
103
|
const colorMap = exports.colorMap = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":["_graphql","require","_types","navigationConfig","exports","id","BookType","Order","label","Position","instrumentSelectConfigOC","InstrumentId","EUR_AUD","EUR_GBP","EUR_JPY","EUR_USD","EUR_CHF","USD_CHF","USD_JPY","USD_CAD","GBP_USD","GBP_JPY","GBP_CHF","AUD_JPY","AUD_USD","NZD_USD","instrumentSelectConfig","XAU_USD","XAG_USD","instrumentPrecisionConfig","granularitySelectConfig","GranularityId","
|
|
1
|
+
{"version":3,"file":"config.js","names":["_graphql","require","_types","navigationConfig","exports","id","BookType","Order","label","Position","instrumentSelectConfigOC","InstrumentId","EUR_AUD","EUR_GBP","EUR_JPY","EUR_USD","EUR_CHF","USD_CHF","USD_JPY","USD_CAD","GBP_USD","GBP_JPY","GBP_CHF","AUD_JPY","AUD_USD","NZD_USD","instrumentSelectConfig","XAU_USD","XAG_USD","instrumentPrecisionConfig","granularitySelectConfig","GranularityId","MINUTE_5","MINUTE_15","MINUTE_30","HOUR_1","HOUR_4","DAY_1","colorMap","long","short"],"sources":["../../../src/CrowdViewWidget/config.ts"],"sourcesContent":["import { BookType } from '../gql/types/graphql';\nimport type { LegendType } from './components/Legend/LegendBar';\nimport { GranularityId, InstrumentId } from './types';\n\nconst navigationConfig = [\n {\n id: BookType.Order,\n label: 'order_book',\n },\n {\n id: BookType.Position,\n label: 'position_book',\n },\n];\n\nconst instrumentSelectConfigOC = [\n {\n id: InstrumentId.EUR_AUD,\n label: 'EUR/AUD',\n },\n {\n id: InstrumentId.EUR_GBP,\n label: 'EUR/GBP',\n },\n {\n id: InstrumentId.EUR_JPY,\n label: 'EUR/JPY',\n },\n {\n id: InstrumentId.EUR_USD,\n label: 'EUR/USD',\n },\n {\n id: InstrumentId.EUR_CHF,\n label: 'EUR/CHF',\n },\n {\n id: InstrumentId.USD_CHF,\n label: 'USD/CHF',\n },\n {\n id: InstrumentId.USD_JPY,\n label: 'USD/JPY',\n },\n {\n id: InstrumentId.USD_CAD,\n label: 'USD/CAD',\n },\n {\n id: InstrumentId.GBP_USD,\n label: 'GBP/USD',\n },\n {\n id: InstrumentId.GBP_JPY,\n label: 'GBP/JPY',\n },\n {\n id: InstrumentId.GBP_CHF,\n label: 'GBP/CHF',\n },\n {\n id: InstrumentId.AUD_JPY,\n label: 'AUD/JPY',\n },\n {\n id: InstrumentId.AUD_USD,\n label: 'AUD/USD',\n },\n {\n id: InstrumentId.NZD_USD,\n label: 'NZD/USD',\n },\n];\n\nconst instrumentSelectConfig = [\n ...instrumentSelectConfigOC,\n {\n id: InstrumentId.XAU_USD,\n label: 'XAU/USD',\n },\n {\n id: InstrumentId.XAG_USD,\n label: 'XAG/USD',\n },\n];\n\nconst instrumentPrecisionConfig: Record<InstrumentId, number> = {\n [InstrumentId.EUR_AUD]: 5,\n [InstrumentId.EUR_GBP]: 5,\n [InstrumentId.EUR_JPY]: 3,\n [InstrumentId.EUR_USD]: 5,\n [InstrumentId.EUR_CHF]: 5,\n [InstrumentId.USD_CHF]: 5,\n [InstrumentId.USD_JPY]: 3,\n [InstrumentId.USD_CAD]: 5,\n [InstrumentId.GBP_USD]: 5,\n [InstrumentId.GBP_JPY]: 3,\n [InstrumentId.GBP_CHF]: 5,\n [InstrumentId.AUD_JPY]: 3,\n [InstrumentId.AUD_USD]: 5,\n [InstrumentId.NZD_USD]: 5,\n [InstrumentId.XAU_USD]: 3,\n [InstrumentId.XAG_USD]: 5,\n};\n\nconst granularitySelectConfig = [\n {\n id: GranularityId.MINUTE_5,\n label: '5_minutes',\n },\n {\n id: GranularityId.MINUTE_15,\n label: '15_minutes',\n },\n {\n id: GranularityId.MINUTE_30,\n label: '30_minutes',\n },\n {\n id: GranularityId.HOUR_1,\n label: '1_hour',\n },\n {\n id: GranularityId.HOUR_4,\n label: '4_hours',\n },\n {\n id: GranularityId.DAY_1,\n label: '1_day',\n },\n];\n\nexport {\n granularitySelectConfig,\n instrumentPrecisionConfig,\n instrumentSelectConfig,\n instrumentSelectConfigOC,\n navigationConfig,\n};\nexport const colorMap: Record<LegendType, string[]> = {\n long: ['#00857333', '#00715F99', '#00857399', '#008573CC'],\n short: ['#DA632566', '#DA632599', '#DA6325CC', '#DA6325'],\n};\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.InstrumentId = exports.GranularityId = void 0;
|
|
6
|
+
exports.TimeSpanId = exports.InstrumentId = exports.GranularityId = void 0;
|
|
7
7
|
let InstrumentId = exports.InstrumentId = function (InstrumentId) {
|
|
8
8
|
InstrumentId["EUR_AUD"] = "EURAUD";
|
|
9
9
|
InstrumentId["EUR_GBP"] = "EURGBP";
|
|
@@ -24,10 +24,27 @@ let InstrumentId = exports.InstrumentId = function (InstrumentId) {
|
|
|
24
24
|
return InstrumentId;
|
|
25
25
|
}({});
|
|
26
26
|
let GranularityId = exports.GranularityId = function (GranularityId) {
|
|
27
|
-
GranularityId["
|
|
28
|
-
GranularityId["
|
|
29
|
-
GranularityId["
|
|
30
|
-
GranularityId["
|
|
27
|
+
GranularityId["MINUTE_5"] = "MINUTE_5";
|
|
28
|
+
GranularityId["MINUTE_15"] = "MINUTE_15";
|
|
29
|
+
GranularityId["MINUTE_30"] = "MINUTE_30";
|
|
30
|
+
GranularityId["HOUR_1"] = "HOUR_1";
|
|
31
|
+
GranularityId["HOUR_4"] = "HOUR_4";
|
|
32
|
+
GranularityId["DAY_1"] = "DAY_1";
|
|
31
33
|
return GranularityId;
|
|
32
34
|
}({});
|
|
35
|
+
let TimeSpanId = exports.TimeSpanId = function (TimeSpanId) {
|
|
36
|
+
TimeSpanId["HOUR_1"] = "HOUR_1";
|
|
37
|
+
TimeSpanId["HOUR_12"] = "HOUR_12";
|
|
38
|
+
TimeSpanId["DAY_1"] = "DAY_1";
|
|
39
|
+
TimeSpanId["DAY_2"] = "DAY_2";
|
|
40
|
+
TimeSpanId["WEEK_1"] = "WEEK_1";
|
|
41
|
+
TimeSpanId["WEEK_2"] = "WEEK_2";
|
|
42
|
+
TimeSpanId["WEEK_3"] = "WEEK_3";
|
|
43
|
+
TimeSpanId["MONTH_1"] = "MONTH_1";
|
|
44
|
+
TimeSpanId["MONTH_3"] = "MONTH_3";
|
|
45
|
+
TimeSpanId["MONTH_6"] = "MONTH_6";
|
|
46
|
+
TimeSpanId["YEAR_1"] = "YEAR_1";
|
|
47
|
+
TimeSpanId["YEAR_5"] = "YEAR_5";
|
|
48
|
+
return TimeSpanId;
|
|
49
|
+
}({});
|
|
33
50
|
//# sourceMappingURL=types.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":["InstrumentId","exports","GranularityId"],"sources":["../../../src/CrowdViewWidget/types.ts"],"sourcesContent":["import type { WidgetConfig } from '@oanda/labs-widget-common';\n\nimport type { Division } from '../gql/types/graphql';\n\nexport interface CrowdViewConfig extends WidgetConfig {}\n\nexport interface MainProps {\n instrument?: InstrumentId;\n division: Division;\n}\n\nexport enum InstrumentId {\n EUR_AUD = 'EURAUD',\n EUR_GBP = 'EURGBP',\n EUR_JPY = 'EURJPY',\n EUR_USD = 'EURUSD',\n EUR_CHF = 'EURCHF',\n USD_CHF = 'USDCHF',\n USD_JPY = 'USDJPY',\n USD_CAD = 'USDCAD',\n GBP_USD = 'GBPUSD',\n GBP_JPY = 'GBPJPY',\n GBP_CHF = 'GBPCHF',\n AUD_JPY = 'AUDJPY',\n AUD_USD = 'AUDUSD',\n NZD_USD = 'NZDUSD',\n XAU_USD = 'XAUUSD',\n XAG_USD = 'XAGUSD',\n}\n\nexport enum GranularityId {\n
|
|
1
|
+
{"version":3,"file":"types.js","names":["InstrumentId","exports","GranularityId","TimeSpanId"],"sources":["../../../src/CrowdViewWidget/types.ts"],"sourcesContent":["import type { WidgetConfig } from '@oanda/labs-widget-common';\n\nimport type { Division } from '../gql/types/graphql';\n\nexport interface CrowdViewConfig extends WidgetConfig {}\n\nexport interface MainProps {\n instrument?: InstrumentId;\n division: Division;\n}\n\nexport enum InstrumentId {\n EUR_AUD = 'EURAUD',\n EUR_GBP = 'EURGBP',\n EUR_JPY = 'EURJPY',\n EUR_USD = 'EURUSD',\n EUR_CHF = 'EURCHF',\n USD_CHF = 'USDCHF',\n USD_JPY = 'USDJPY',\n USD_CAD = 'USDCAD',\n GBP_USD = 'GBPUSD',\n GBP_JPY = 'GBPJPY',\n GBP_CHF = 'GBPCHF',\n AUD_JPY = 'AUDJPY',\n AUD_USD = 'AUDUSD',\n NZD_USD = 'NZDUSD',\n XAU_USD = 'XAUUSD',\n XAG_USD = 'XAGUSD',\n}\n\nexport enum GranularityId {\n MINUTE_5 = 'MINUTE_5',\n MINUTE_15 = 'MINUTE_15',\n MINUTE_30 = 'MINUTE_30',\n HOUR_1 = 'HOUR_1',\n HOUR_4 = 'HOUR_4',\n DAY_1 = 'DAY_1',\n}\n\nexport enum TimeSpanId {\n HOUR_1 = 'HOUR_1',\n HOUR_12 = 'HOUR_12',\n DAY_1 = 'DAY_1',\n DAY_2 = 'DAY_2',\n WEEK_1 = 'WEEK_1',\n WEEK_2 = 'WEEK_2',\n WEEK_3 = 'WEEK_3',\n MONTH_1 = 'MONTH_1',\n MONTH_3 = 'MONTH_3',\n MONTH_6 = 'MONTH_6',\n YEAR_1 = 'YEAR_1',\n YEAR_5 = 'YEAR_5',\n}\n\nexport interface OrdersPositionsData {\n price: number;\n buckets: {\n price: number;\n longCountPercent: number;\n shortCountPercent: number;\n }[];\n bucketWidth: number;\n timestamp: number;\n}\n"],"mappings":";;;;;;IAWYA,YAAY,GAAAC,OAAA,CAAAD,YAAA,aAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAZA,YAAY;EAAA,OAAZA,YAAY;AAAA;AAAA,IAmBZE,aAAa,GAAAD,OAAA,CAAAC,aAAA,aAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AAAA,IASbC,UAAU,GAAAF,OAAA,CAAAE,UAAA,aAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAVA,UAAU;EAAA,OAAVA,UAAU;AAAA","ignoreList":[]}
|
|
@@ -54,6 +54,7 @@ const Main = _ref => {
|
|
|
54
54
|
setSelectedOption: val => setGranularity(val)
|
|
55
55
|
}))), React.createElement(ChartWithData, {
|
|
56
56
|
bookType: bookType,
|
|
57
|
+
granularity: granularity.id,
|
|
57
58
|
instrument: instrument.id
|
|
58
59
|
}), React.createElement(Legend, {
|
|
59
60
|
longValues: [0.15, 0.25, 0.4, 0.55],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Main.js","names":["cn","Select","Size","Tabs","useLayoutProvider","useLocale","React","useState","BookType","Division","ChartWithData","Legend","granularitySelectConfig","instrumentSelectConfig","instrumentSelectConfigOC","navigationConfig","Main","_ref","division","instrumentSelectConfigWithDivision","Oc","size","isDesktop","DESKTOP","bookType","setBookType","Order","instrument","setInstrument","granularity","setGranularity","lang","createElement","Fragment","className","mobileFullWidth","activeTab","handleClick","e","currentTarget","value","items","labelCallback","options","searchPlaceholder","selectLabel","selectedOption","setSelectedOption","val","id","longValues","shortValues"],"sources":["../../../src/CrowdViewWidget/Main.tsx"],"sourcesContent":["import {\n cn,\n Select,\n Size,\n Tabs,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React, { useState } from 'react';\n\nimport { BookType, Division } from '../gql/types/graphql';\nimport { ChartWithData, Legend } from './components';\nimport {\n granularitySelectConfig,\n instrumentSelectConfig,\n instrumentSelectConfigOC,\n navigationConfig,\n} from './config';\nimport type { GranularityId, InstrumentId, MainProps } from './types';\n\nconst Main = ({ division }: MainProps) => {\n const instrumentSelectConfigWithDivision =\n division === Division.Oc\n ? instrumentSelectConfigOC\n : instrumentSelectConfig;\n\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n const [bookType, setBookType] = useState(BookType.Order);\n const [instrument, setInstrument] = useState(\n instrumentSelectConfigWithDivision[0]\n );\n\n const [granularity, setGranularity] = useState(granularitySelectConfig[0]);\n const { lang } = useLocale();\n\n return (\n <>\n {size && (\n <div\n className=\"lw-text-sm lw-tracking-normal\"\n data-testid=\"crowd-view-widget\"\n >\n <Tabs\n mobileFullWidth\n activeTab={bookType}\n handleClick={(e) => setBookType(e.currentTarget.value as BookType)}\n items={navigationConfig}\n labelCallback={lang}\n />\n <div className=\"lw-mb-6 lw-mt-12 lw-flex\">\n <div\n className={cn('lw-mr-2', {\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={instrumentSelectConfigWithDivision}\n searchPlaceholder={lang('search')}\n selectLabel={lang('instrument')}\n selectedOption={instrument}\n setSelectedOption={(val) =>\n setInstrument(val as { id: InstrumentId; label: string })\n }\n />\n </div>\n <div\n className={cn({\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={granularitySelectConfig}\n searchPlaceholder={lang('search')}\n selectLabel={lang('granularity')}\n selectedOption={granularity}\n setSelectedOption={(val) =>\n setGranularity(val as { id: GranularityId; label: string })\n }\n />\n </div>\n </div>\n\n <ChartWithData
|
|
1
|
+
{"version":3,"file":"Main.js","names":["cn","Select","Size","Tabs","useLayoutProvider","useLocale","React","useState","BookType","Division","ChartWithData","Legend","granularitySelectConfig","instrumentSelectConfig","instrumentSelectConfigOC","navigationConfig","Main","_ref","division","instrumentSelectConfigWithDivision","Oc","size","isDesktop","DESKTOP","bookType","setBookType","Order","instrument","setInstrument","granularity","setGranularity","lang","createElement","Fragment","className","mobileFullWidth","activeTab","handleClick","e","currentTarget","value","items","labelCallback","options","searchPlaceholder","selectLabel","selectedOption","setSelectedOption","val","id","longValues","shortValues"],"sources":["../../../src/CrowdViewWidget/Main.tsx"],"sourcesContent":["import {\n cn,\n Select,\n Size,\n Tabs,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport { useLocale } from '@oanda/mono-i18n';\nimport React, { useState } from 'react';\n\nimport { BookType, Division } from '../gql/types/graphql';\nimport { ChartWithData, Legend } from './components';\nimport {\n granularitySelectConfig,\n instrumentSelectConfig,\n instrumentSelectConfigOC,\n navigationConfig,\n} from './config';\nimport type { GranularityId, InstrumentId, MainProps } from './types';\n\nconst Main = ({ division }: MainProps) => {\n const instrumentSelectConfigWithDivision =\n division === Division.Oc\n ? instrumentSelectConfigOC\n : instrumentSelectConfig;\n\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n const [bookType, setBookType] = useState(BookType.Order);\n const [instrument, setInstrument] = useState(\n instrumentSelectConfigWithDivision[0]\n );\n\n const [granularity, setGranularity] = useState(granularitySelectConfig[0]);\n const { lang } = useLocale();\n\n return (\n <>\n {size && (\n <div\n className=\"lw-text-sm lw-tracking-normal\"\n data-testid=\"crowd-view-widget\"\n >\n <Tabs\n mobileFullWidth\n activeTab={bookType}\n handleClick={(e) => setBookType(e.currentTarget.value as BookType)}\n items={navigationConfig}\n labelCallback={lang}\n />\n <div className=\"lw-mb-6 lw-mt-12 lw-flex\">\n <div\n className={cn('lw-mr-2', {\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={instrumentSelectConfigWithDivision}\n searchPlaceholder={lang('search')}\n selectLabel={lang('instrument')}\n selectedOption={instrument}\n setSelectedOption={(val) =>\n setInstrument(val as { id: InstrumentId; label: string })\n }\n />\n </div>\n <div\n className={cn({\n 'lw-w-full': !isDesktop,\n 'lw-w-[280px]': isDesktop,\n })}\n >\n <Select\n options={granularitySelectConfig}\n searchPlaceholder={lang('search')}\n selectLabel={lang('granularity')}\n selectedOption={granularity}\n setSelectedOption={(val) =>\n setGranularity(val as { id: GranularityId; label: string })\n }\n />\n </div>\n </div>\n\n <ChartWithData\n bookType={bookType}\n granularity={granularity.id}\n instrument={instrument.id}\n />\n\n <Legend\n longValues={[0.15, 0.25, 0.4, 0.55]}\n shortValues={[0.15, 0.25, 0.4, 0.55]}\n />\n </div>\n )}\n </>\n );\n};\n\nexport { Main };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { BaseChart, getChartTheme, Theme, useLayoutProvider } from '@oanda/labs-widget-common';
|
|
2
2
|
import { BarChart, CandlestickChart, CustomChart } from 'echarts/charts';
|
|
3
|
-
import { DataZoomInsideComponent, GraphicComponent, GridSimpleComponent, TooltipComponent } from 'echarts/components';
|
|
3
|
+
import { DataZoomInsideComponent, GraphicComponent, GridSimpleComponent, MarkPointComponent, TooltipComponent } from 'echarts/components';
|
|
4
4
|
import * as echarts from 'echarts/core';
|
|
5
5
|
import { CanvasRenderer } from 'echarts/renderers';
|
|
6
6
|
import React, { useEffect, useRef } from 'react';
|
|
7
|
-
import { CHART_HEIGHT } from './constants';
|
|
7
|
+
import { CHART_HEIGHT, MAX_LABELS_COUNT } from './constants';
|
|
8
8
|
import { getDesktopOption, getOption } from './getOption';
|
|
9
|
-
|
|
9
|
+
import { getLabelData, isDifferenceGreaterThanTwoWeeks } from './utils';
|
|
10
|
+
echarts.use([GridSimpleComponent, GraphicComponent, BarChart, CanvasRenderer, DataZoomInsideComponent, CustomChart, TooltipComponent, CandlestickChart, MarkPointComponent]);
|
|
10
11
|
echarts.registerTheme('dark_theme', getChartTheme(Theme.Dark));
|
|
11
12
|
echarts.registerTheme('light_theme', getChartTheme(Theme.Light));
|
|
12
13
|
const Chart = _ref => {
|
|
@@ -23,13 +24,78 @@ const Chart = _ref => {
|
|
|
23
24
|
echartInstance.setOption(getDesktopOption({
|
|
24
25
|
isDark
|
|
25
26
|
}));
|
|
27
|
+
echartInstance.off('datazoom');
|
|
28
|
+
echartInstance.on('datazoom', () => {
|
|
29
|
+
const {
|
|
30
|
+
dataZoom,
|
|
31
|
+
title: {
|
|
32
|
+
text
|
|
33
|
+
}
|
|
34
|
+
} = echartInstance.getOption();
|
|
35
|
+
const {
|
|
36
|
+
start,
|
|
37
|
+
end
|
|
38
|
+
} = dataZoom[0];
|
|
39
|
+
const prevInterval = Number(text.split(',')[0]);
|
|
40
|
+
const prevIsGreaterThanTwoWeeks = Boolean(Number(text.split(',')[1]));
|
|
41
|
+
const visibleItemsCount = Math.round(data.xAxisData.length * (end - start) / 100);
|
|
42
|
+
const interval = visibleItemsCount > MAX_LABELS_COUNT ? Math.floor(visibleItemsCount / MAX_LABELS_COUNT) : 0;
|
|
43
|
+
if (interval !== prevInterval) {
|
|
44
|
+
echartInstance.setOption({
|
|
45
|
+
xAxis: {
|
|
46
|
+
axisLabel: {
|
|
47
|
+
interval
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
const visibleXAxisData = data.xAxisData.slice(data.xAxisData.length * start / 100, data.xAxisData.length * end / 100);
|
|
53
|
+
const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(visibleXAxisData[0], visibleXAxisData[visibleXAxisData.length - 1]);
|
|
54
|
+
if (isGreaterThanTwoWeeks !== prevIsGreaterThanTwoWeeks) {
|
|
55
|
+
const labelsData = getLabelData({
|
|
56
|
+
xAxisData: data.xAxisData,
|
|
57
|
+
isGreaterThanTwoWeeks
|
|
58
|
+
});
|
|
59
|
+
echartInstance.setOption({
|
|
60
|
+
series: [{
|
|
61
|
+
id: 'candlestick',
|
|
62
|
+
markPoint: {
|
|
63
|
+
data: labelsData
|
|
64
|
+
}
|
|
65
|
+
}]
|
|
66
|
+
});
|
|
67
|
+
echartInstance.setOption({
|
|
68
|
+
xAxis: {
|
|
69
|
+
axisLabel: {
|
|
70
|
+
formatter: value => {
|
|
71
|
+
const date = new Date(value);
|
|
72
|
+
return isGreaterThanTwoWeeks ? `${date.toLocaleTimeString(undefined, {
|
|
73
|
+
hour: '2-digit',
|
|
74
|
+
minute: '2-digit'
|
|
75
|
+
})}` : `${date.toLocaleDateString(undefined, {
|
|
76
|
+
day: 'numeric'
|
|
77
|
+
})}`;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
if (interval !== prevInterval || isGreaterThanTwoWeeks !== prevIsGreaterThanTwoWeeks) {
|
|
84
|
+
echartInstance.setOption({
|
|
85
|
+
title: {
|
|
86
|
+
text: `${interval},${isGreaterThanTwoWeeks ? 1 : 0}`
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
26
91
|
}
|
|
27
|
-
}, [echartRef, isDark]);
|
|
92
|
+
}, [echartRef, isDark, data]);
|
|
28
93
|
return React.createElement(BaseChart, {
|
|
29
94
|
ref: echartRef,
|
|
30
95
|
chartHeight: CHART_HEIGHT,
|
|
31
96
|
echarts: echarts,
|
|
32
97
|
isDark: isDark,
|
|
98
|
+
lazyUpdate: true,
|
|
33
99
|
option: getOption(data)
|
|
34
100
|
});
|
|
35
101
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","names":["BaseChart","getChartTheme","Theme","useLayoutProvider","BarChart","CandlestickChart","CustomChart","DataZoomInsideComponent","GraphicComponent","GridSimpleComponent","TooltipComponent","echarts","CanvasRenderer","React","useEffect","useRef","CHART_HEIGHT","getDesktopOption","getOption","use","registerTheme","Dark","Light","Chart","_ref","data","isDark","echartRef","current","echartInstance","getEchartsInstance","setOption","createElement","ref","chartHeight","option"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/Chart.tsx"],"sourcesContent":["import type { BaseChartRef } from '@oanda/labs-widget-common';\nimport {\n BaseChart,\n getChartTheme,\n Theme,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport { BarChart, CandlestickChart, CustomChart } from 'echarts/charts';\nimport {\n DataZoomInsideComponent,\n GraphicComponent,\n GridSimpleComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport React, { useEffect, useRef } from 'react';\n\nimport { CHART_HEIGHT } from './constants';\nimport { getDesktopOption, getOption } from './getOption';\nimport type { ChartProps } from './types';\n\necharts.use([\n GridSimpleComponent,\n GraphicComponent,\n BarChart,\n CanvasRenderer,\n DataZoomInsideComponent,\n CustomChart,\n TooltipComponent,\n CandlestickChart,\n]);\n\necharts.registerTheme('dark_theme', getChartTheme(Theme.Dark));\necharts.registerTheme('light_theme', getChartTheme(Theme.Light));\n\nconst Chart = ({ data }: ChartProps) => {\n const { isDark } = useLayoutProvider();\n const echartRef = useRef<BaseChartRef | null>(null);\n\n useEffect(() => {\n if (echartRef.current) {\n const echartInstance = echartRef.current.getEchartsInstance();\n\n echartInstance.setOption(getDesktopOption({ isDark }));\n }\n }, [echartRef, isDark]);\n\n return (\n <BaseChart\n ref={echartRef}\n chartHeight={CHART_HEIGHT}\n echarts={echarts}\n isDark={isDark}\n option={getOption(data)}\n />\n );\n};\n\nexport { Chart };\n"],"mappings":"AACA,SACEA,SAAS,EACTC,aAAa,EACbC,KAAK,EACLC,iBAAiB,QACZ,2BAA2B;AAClC,SAASC,QAAQ,EAAEC,gBAAgB,EAAEC,WAAW,QAAQ,gBAAgB;AACxE,SACEC,uBAAuB,EACvBC,gBAAgB,EAChBC,mBAAmB,EACnBC,gBAAgB,QACX,oBAAoB;AAC3B,OAAO,KAAKC,OAAO,MAAM,cAAc;AACvC,SAASC,cAAc,QAAQ,mBAAmB;AAClD,OAAOC,KAAK,IAAIC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AAEhD,SAASC,YAAY,QAAQ,aAAa;
|
|
1
|
+
{"version":3,"file":"Chart.js","names":["BaseChart","getChartTheme","Theme","useLayoutProvider","BarChart","CandlestickChart","CustomChart","DataZoomInsideComponent","GraphicComponent","GridSimpleComponent","MarkPointComponent","TooltipComponent","echarts","CanvasRenderer","React","useEffect","useRef","CHART_HEIGHT","MAX_LABELS_COUNT","getDesktopOption","getOption","getLabelData","isDifferenceGreaterThanTwoWeeks","use","registerTheme","Dark","Light","Chart","_ref","data","isDark","echartRef","current","echartInstance","getEchartsInstance","setOption","off","on","dataZoom","title","text","start","end","prevInterval","Number","split","prevIsGreaterThanTwoWeeks","Boolean","visibleItemsCount","Math","round","xAxisData","length","interval","floor","xAxis","axisLabel","visibleXAxisData","slice","isGreaterThanTwoWeeks","labelsData","series","id","markPoint","formatter","value","date","Date","toLocaleTimeString","undefined","hour","minute","toLocaleDateString","day","createElement","ref","chartHeight","lazyUpdate","option"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/Chart.tsx"],"sourcesContent":["import type { BaseChartRef } from '@oanda/labs-widget-common';\nimport {\n BaseChart,\n getChartTheme,\n Theme,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport { BarChart, CandlestickChart, CustomChart } from 'echarts/charts';\nimport {\n DataZoomInsideComponent,\n GraphicComponent,\n GridSimpleComponent,\n MarkPointComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport React, { useEffect, useRef } from 'react';\n\nimport { CHART_HEIGHT, MAX_LABELS_COUNT } from './constants';\nimport { getDesktopOption, getOption } from './getOption';\nimport type { ChartProps } from './types';\nimport { getLabelData, isDifferenceGreaterThanTwoWeeks } from './utils';\n\necharts.use([\n GridSimpleComponent,\n GraphicComponent,\n BarChart,\n CanvasRenderer,\n DataZoomInsideComponent,\n CustomChart,\n TooltipComponent,\n CandlestickChart,\n MarkPointComponent,\n]);\n\necharts.registerTheme('dark_theme', getChartTheme(Theme.Dark));\necharts.registerTheme('light_theme', getChartTheme(Theme.Light));\n\nconst Chart = ({ data }: ChartProps) => {\n const { isDark } = useLayoutProvider();\n const echartRef = useRef<BaseChartRef | null>(null);\n\n useEffect(() => {\n if (echartRef.current) {\n const echartInstance = echartRef.current.getEchartsInstance();\n\n echartInstance.setOption(getDesktopOption({ isDark }));\n\n echartInstance.off('datazoom');\n echartInstance.on('datazoom', () => {\n const {\n dataZoom,\n // @ts-ignore\n title: { text },\n } = echartInstance.getOption();\n\n const { start, end } = (\n dataZoom as { start: number; end: number }[]\n )[0];\n const prevInterval = Number((text as string).split(',')[0]);\n const prevIsGreaterThanTwoWeeks = Boolean(\n Number((text as string).split(',')[1])\n );\n\n const visibleItemsCount = Math.round(\n (data.xAxisData.length * (end - start)) / 100\n );\n\n const interval =\n visibleItemsCount > MAX_LABELS_COUNT\n ? Math.floor(visibleItemsCount / MAX_LABELS_COUNT)\n : 0;\n\n if (interval !== prevInterval) {\n echartInstance.setOption({\n xAxis: {\n axisLabel: {\n interval,\n },\n },\n });\n }\n\n const visibleXAxisData = data.xAxisData.slice(\n (data.xAxisData.length * start) / 100,\n (data.xAxisData.length * end) / 100\n );\n\n const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(\n visibleXAxisData[0],\n visibleXAxisData[visibleXAxisData.length - 1]\n );\n\n if (isGreaterThanTwoWeeks !== prevIsGreaterThanTwoWeeks) {\n const labelsData = getLabelData({\n xAxisData: data.xAxisData,\n isGreaterThanTwoWeeks,\n });\n\n echartInstance.setOption({\n series: [\n {\n id: 'candlestick',\n markPoint: {\n data: labelsData,\n },\n },\n ],\n });\n\n echartInstance.setOption({\n xAxis: {\n axisLabel: {\n formatter: (value: string) => {\n const date = new Date(value);\n return isGreaterThanTwoWeeks\n ? `${date.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}`\n : `${date.toLocaleDateString(undefined, {\n day: 'numeric',\n })}`;\n },\n },\n },\n });\n }\n\n if (\n interval !== prevInterval ||\n isGreaterThanTwoWeeks !== prevIsGreaterThanTwoWeeks\n ) {\n echartInstance.setOption({\n title: {\n text: `${interval},${isGreaterThanTwoWeeks ? 1 : 0}`,\n },\n });\n }\n });\n }\n }, [echartRef, isDark, data]);\n\n return (\n <BaseChart\n ref={echartRef}\n chartHeight={CHART_HEIGHT}\n echarts={echarts}\n isDark={isDark}\n lazyUpdate={true}\n option={getOption(data)}\n />\n );\n};\n\nexport { Chart };\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -8,7 +8,8 @@ import { transformDataForChart } from './utils';
|
|
|
8
8
|
const ChartWithData = _ref => {
|
|
9
9
|
let {
|
|
10
10
|
instrument,
|
|
11
|
-
bookType
|
|
11
|
+
bookType,
|
|
12
|
+
granularity
|
|
12
13
|
} = _ref;
|
|
13
14
|
const {
|
|
14
15
|
size
|
|
@@ -29,8 +30,11 @@ const ChartWithData = _ref => {
|
|
|
29
30
|
const isError = !!error;
|
|
30
31
|
const transformedData = useMemo(() => {
|
|
31
32
|
if (!data) return undefined;
|
|
32
|
-
return transformDataForChart(
|
|
33
|
-
|
|
33
|
+
return transformDataForChart({
|
|
34
|
+
data,
|
|
35
|
+
granularity
|
|
36
|
+
});
|
|
37
|
+
}, [data, granularity]);
|
|
34
38
|
return React.createElement(React.Fragment, null, React.createElement("div", {
|
|
35
39
|
className: classnames('lw-relative lw-w-full', {
|
|
36
40
|
'lw-h-[450px]': isDesktop,
|