@oanda/labs-crowd-view-widget 1.0.36 → 1.0.38
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 +308 -0
- package/dist/main/CrowdViewWidget/components/Chart/Chart.js +38 -74
- package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js +3 -18
- package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/getOption.js +29 -53
- package/dist/main/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js +47 -0
- package/dist/main/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js.map +1 -0
- package/dist/main/CrowdViewWidget/components/Chart/types.js.map +1 -1
- package/dist/main/CrowdViewWidget/components/Chart/utils.js +24 -22
- package/dist/main/CrowdViewWidget/components/Chart/utils.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/Chart.js +39 -76
- package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js +3 -18
- package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/getOption.js +29 -52
- package/dist/module/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js +40 -0
- package/dist/module/CrowdViewWidget/components/Chart/getOrderPositionDataMock.js.map +1 -0
- package/dist/module/CrowdViewWidget/components/Chart/types.js.map +1 -1
- package/dist/module/CrowdViewWidget/components/Chart/utils.js +24 -22
- package/dist/module/CrowdViewWidget/components/Chart/utils.js.map +1 -1
- package/dist/types/CrowdViewWidget/components/Chart/getOption.d.ts +1 -114
- package/dist/types/CrowdViewWidget/components/Chart/getOrderPositionDataMock.d.ts +14 -0
- package/dist/types/CrowdViewWidget/components/Chart/types.d.ts +1 -6
- package/package.json +3 -3
- package/src/CrowdViewWidget/components/Chart/Chart.tsx +32 -90
- package/src/CrowdViewWidget/components/Chart/ChartWithData.tsx +5 -22
- package/src/CrowdViewWidget/components/Chart/getOption.ts +45 -70
- package/src/CrowdViewWidget/components/Chart/getOrderPositionDataMock.ts +66 -0
- package/src/CrowdViewWidget/components/Chart/types.ts +4 -6
- package/src/CrowdViewWidget/components/Chart/utils.ts +23 -20
|
@@ -1,8 +1,6 @@
|
|
|
1
|
-
import { useQuery } from '@apollo/client';
|
|
2
1
|
import { ChartError, Size, Spinner, SpinnerSize, useLayoutProvider } from '@oanda/labs-widget-common';
|
|
3
2
|
import classnames from 'classnames';
|
|
4
3
|
import React, { useMemo } from 'react';
|
|
5
|
-
import { getOrderPositionBooks } from '../../../gql/getOrderPositionBooks';
|
|
6
4
|
import { Chart } from './Chart';
|
|
7
5
|
import { transformDataForChart } from './utils';
|
|
8
6
|
const ChartWithData = _ref => {
|
|
@@ -15,26 +13,13 @@ const ChartWithData = _ref => {
|
|
|
15
13
|
size
|
|
16
14
|
} = useLayoutProvider();
|
|
17
15
|
const isDesktop = size === Size.DESKTOP;
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
data,
|
|
21
|
-
error
|
|
22
|
-
} = useQuery(getOrderPositionBooks, {
|
|
23
|
-
variables: {
|
|
24
|
-
instrument,
|
|
25
|
-
bookType,
|
|
26
|
-
recentHours: 1
|
|
27
|
-
},
|
|
28
|
-
fetchPolicy: 'network-only'
|
|
29
|
-
});
|
|
30
|
-
const isError = !!error;
|
|
16
|
+
const isError = false;
|
|
17
|
+
const loading = false;
|
|
31
18
|
const transformedData = useMemo(() => {
|
|
32
|
-
if (!data) return undefined;
|
|
33
19
|
return transformDataForChart({
|
|
34
|
-
data,
|
|
35
20
|
granularity
|
|
36
21
|
});
|
|
37
|
-
}, [
|
|
22
|
+
}, [instrument, granularity, bookType]);
|
|
38
23
|
return React.createElement(React.Fragment, null, React.createElement("div", {
|
|
39
24
|
className: classnames('lw-relative lw-w-full', {
|
|
40
25
|
'lw-h-[450px]': isDesktop,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChartWithData.js","names":["
|
|
1
|
+
{"version":3,"file":"ChartWithData.js","names":["ChartError","Size","Spinner","SpinnerSize","useLayoutProvider","classnames","React","useMemo","Chart","transformDataForChart","ChartWithData","_ref","instrument","bookType","granularity","size","isDesktop","DESKTOP","isError","loading","transformedData","createElement","Fragment","className","lg","data"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/ChartWithData.tsx"],"sourcesContent":["import {\n ChartError,\n Size,\n Spinner,\n SpinnerSize,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport classnames from 'classnames';\nimport React, { useMemo } from 'react';\n\nimport { Chart } from './Chart';\nimport type { ChartWithDataProps } from './types';\nimport { transformDataForChart } from './utils';\n\nconst ChartWithData = ({\n instrument,\n bookType,\n granularity,\n}: ChartWithDataProps) => {\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n\n const isError = false;\n const loading = false;\n\n const transformedData = useMemo(() => {\n return transformDataForChart({ granularity });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [instrument, granularity, bookType]);\n\n return (\n <>\n <div\n className={classnames('lw-relative lw-w-full', {\n 'lw-h-[450px]': isDesktop,\n 'lw-h-[390px]': !isDesktop,\n })}\n >\n {isError && (\n <div\n className={classnames(\n 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',\n {\n 'lw-h-full': isDesktop,\n 'lw-h-[calc(100%-40px)]': !isDesktop,\n }\n )}\n >\n <ChartError />\n </div>\n )}\n {loading && (\n <div\n className={classnames(\n 'lw-absolute lw-left-0 lw-top-0 lw-flex lw-w-full lw-items-center lw-justify-center lw-border lw-border-solid lw-border-border-primary',\n {\n 'lw-h-full': isDesktop,\n 'lw-h-[calc(100%-40px)]': !isDesktop,\n }\n )}\n >\n <Spinner size={SpinnerSize.lg} />\n </div>\n )}\n {!isError && transformedData && (\n <div className=\"lw-absolute lw-left-0 lw-top-0 lw-flex lw-h-full lw-w-full\">\n <Chart data={transformedData} />\n </div>\n )}\n </div>\n </>\n );\n};\n\nexport { ChartWithData };\n"],"mappings":"AAAA,SACEA,UAAU,EACVC,IAAI,EACJC,OAAO,EACPC,WAAW,EACXC,iBAAiB,QACZ,2BAA2B;AAClC,OAAOC,UAAU,MAAM,YAAY;AACnC,OAAOC,KAAK,IAAIC,OAAO,QAAQ,OAAO;AAEtC,SAASC,KAAK,QAAQ,SAAS;AAE/B,SAASC,qBAAqB,QAAQ,SAAS;AAE/C,MAAMC,aAAa,GAAGC,IAAA,IAII;EAAA,IAJH;IACrBC,UAAU;IACVC,QAAQ;IACRC;EACkB,CAAC,GAAAH,IAAA;EACnB,MAAM;IAAEI;EAAK,CAAC,GAAGX,iBAAiB,CAAC,CAAC;EACpC,MAAMY,SAAS,GAAGD,IAAI,KAAKd,IAAI,CAACgB,OAAO;EAEvC,MAAMC,OAAO,GAAG,KAAK;EACrB,MAAMC,OAAO,GAAG,KAAK;EAErB,MAAMC,eAAe,GAAGb,OAAO,CAAC,MAAM;IACpC,OAAOE,qBAAqB,CAAC;MAAEK;IAAY,CAAC,CAAC;EAE/C,CAAC,EAAE,CAACF,UAAU,EAAEE,WAAW,EAAED,QAAQ,CAAC,CAAC;EAEvC,OACEP,KAAA,CAAAe,aAAA,CAAAf,KAAA,CAAAgB,QAAA,QACEhB,KAAA,CAAAe,aAAA;IACEE,SAAS,EAAElB,UAAU,CAAC,uBAAuB,EAAE;MAC7C,cAAc,EAAEW,SAAS;MACzB,cAAc,EAAE,CAACA;IACnB,CAAC;EAAE,GAEFE,OAAO,IACNZ,KAAA,CAAAe,aAAA;IACEE,SAAS,EAAElB,UAAU,CACnB,uIAAuI,EACvI;MACE,WAAW,EAAEW,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EAAE,GAEFV,KAAA,CAAAe,aAAA,CAACrB,UAAU,MAAE,CACV,CACN,EACAmB,OAAO,IACNb,KAAA,CAAAe,aAAA;IACEE,SAAS,EAAElB,UAAU,CACnB,uIAAuI,EACvI;MACE,WAAW,EAAEW,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EAAE,GAEFV,KAAA,CAAAe,aAAA,CAACnB,OAAO;IAACa,IAAI,EAAEZ,WAAW,CAACqB;EAAG,CAAE,CAC7B,CACN,EACA,CAACN,OAAO,IAAIE,eAAe,IAC1Bd,KAAA,CAAAe,aAAA;IAAKE,SAAS,EAAC;EAA4D,GACzEjB,KAAA,CAAAe,aAAA,CAACb,KAAK;IAACiB,IAAI,EAAEL;EAAgB,CAAE,CAC5B,CAEJ,CACL,CAAC;AAEP,CAAC;AAED,SAASV,aAAa","ignoreList":[]}
|
|
@@ -1,69 +1,29 @@
|
|
|
1
1
|
import { colorPalette, getGridLines, getLineCommons } from '@oanda/labs-widget-common';
|
|
2
2
|
import * as echarts from 'echarts/core';
|
|
3
|
-
import { CHART_HEIGHT, CHART_WIDTH, INITIAL_END_ZOOM, INITIAL_START_ZOOM,
|
|
3
|
+
import { CHART_HEIGHT, CHART_WIDTH, INITIAL_END_ZOOM, INITIAL_START_ZOOM, X_LABEL_SIZE, Y_LABEL_SIZE_DESKTOP } from './constants';
|
|
4
4
|
import { getLabelData, getRectColor, isDifferenceGreaterThanTwoWeeks } from './utils';
|
|
5
|
-
export const
|
|
6
|
-
let {
|
|
7
|
-
isDark
|
|
8
|
-
} = _ref;
|
|
9
|
-
const desktopGridLines = getGridLines({
|
|
10
|
-
isDark,
|
|
11
|
-
chartWidth: CHART_WIDTH,
|
|
12
|
-
chartHeight: CHART_HEIGHT,
|
|
13
|
-
xLabelsSize: X_LABEL_SIZE,
|
|
14
|
-
yLabelSize: Y_LABEL_SIZE_DESKTOP,
|
|
15
|
-
bottomLeftBox: false
|
|
16
|
-
});
|
|
17
|
-
return {
|
|
18
|
-
yAxis: {
|
|
19
|
-
nameTextStyle: {
|
|
20
|
-
align: 'left',
|
|
21
|
-
padding: [0, 0, 0, 8]
|
|
22
|
-
},
|
|
23
|
-
axisLabel: {
|
|
24
|
-
margin: 8
|
|
25
|
-
}
|
|
26
|
-
},
|
|
27
|
-
grid: [{
|
|
28
|
-
name: 'main-grid',
|
|
29
|
-
top: '0px',
|
|
30
|
-
left: '0px',
|
|
31
|
-
right: `${Y_LABEL_SIZE_DESKTOP}px`,
|
|
32
|
-
bottom: `${X_LABEL_SIZE}px`
|
|
33
|
-
}],
|
|
34
|
-
graphic: [...desktopGridLines, {
|
|
35
|
-
...getLineCommons(isDark),
|
|
36
|
-
top: 0,
|
|
37
|
-
right: 0,
|
|
38
|
-
shape: {
|
|
39
|
-
x1: 0,
|
|
40
|
-
y1: 0,
|
|
41
|
-
x2: 0,
|
|
42
|
-
y2: 0
|
|
43
|
-
}
|
|
44
|
-
}]
|
|
45
|
-
};
|
|
46
|
-
};
|
|
47
|
-
export const getOption = _ref2 => {
|
|
5
|
+
export const getOption = (_ref, isDark) => {
|
|
48
6
|
let {
|
|
49
7
|
xAxisData,
|
|
50
8
|
ordersPositionsChartData,
|
|
51
9
|
ordersPositionsBucketWidth,
|
|
52
10
|
candlesSeriesData
|
|
53
|
-
} =
|
|
11
|
+
} = _ref;
|
|
54
12
|
const visibleXAxisData = xAxisData.slice(xAxisData.length * INITIAL_START_ZOOM / 100, xAxisData.length * INITIAL_END_ZOOM / 100);
|
|
55
13
|
const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(visibleXAxisData[0], visibleXAxisData[visibleXAxisData.length - 1]);
|
|
56
14
|
const labelsData = getLabelData({
|
|
57
15
|
xAxisData,
|
|
58
16
|
isGreaterThanTwoWeeks
|
|
59
17
|
});
|
|
60
|
-
const
|
|
61
|
-
|
|
18
|
+
const gridLines = getGridLines({
|
|
19
|
+
isDark,
|
|
20
|
+
chartWidth: CHART_WIDTH,
|
|
21
|
+
chartHeight: CHART_HEIGHT,
|
|
22
|
+
xLabelsSize: X_LABEL_SIZE,
|
|
23
|
+
yLabelSize: Y_LABEL_SIZE_DESKTOP,
|
|
24
|
+
bottomLeftBox: false
|
|
25
|
+
});
|
|
62
26
|
return {
|
|
63
|
-
title: {
|
|
64
|
-
show: false,
|
|
65
|
-
text: `${initialInterval},${isGreaterThanTwoWeeks}`
|
|
66
|
-
},
|
|
67
27
|
animation: false,
|
|
68
28
|
dataZoom: [{
|
|
69
29
|
type: 'inside',
|
|
@@ -95,7 +55,6 @@ export const getOption = _ref2 => {
|
|
|
95
55
|
axisLabel: {
|
|
96
56
|
padding: [8, 16, 8, 16],
|
|
97
57
|
margin: 0,
|
|
98
|
-
interval: initialInterval,
|
|
99
58
|
formatter: value => {
|
|
100
59
|
const date = new Date(value);
|
|
101
60
|
return isGreaterThanTwoWeeks ? `${date.toLocaleTimeString(undefined, {
|
|
@@ -166,6 +125,24 @@ export const getOption = _ref2 => {
|
|
|
166
125
|
};
|
|
167
126
|
},
|
|
168
127
|
data: ordersPositionsChartData
|
|
128
|
+
}],
|
|
129
|
+
grid: [{
|
|
130
|
+
name: 'main-grid',
|
|
131
|
+
top: '0px',
|
|
132
|
+
left: '0px',
|
|
133
|
+
right: `${Y_LABEL_SIZE_DESKTOP}px`,
|
|
134
|
+
bottom: `${X_LABEL_SIZE}px`
|
|
135
|
+
}],
|
|
136
|
+
graphic: [...gridLines, {
|
|
137
|
+
...getLineCommons(isDark),
|
|
138
|
+
top: 0,
|
|
139
|
+
right: 0,
|
|
140
|
+
shape: {
|
|
141
|
+
x1: 0,
|
|
142
|
+
y1: 0,
|
|
143
|
+
x2: 0,
|
|
144
|
+
y2: 0
|
|
145
|
+
}
|
|
169
146
|
}]
|
|
170
147
|
};
|
|
171
148
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOption.js","names":["colorPalette","getGridLines","getLineCommons","echarts","CHART_HEIGHT","CHART_WIDTH","INITIAL_END_ZOOM","INITIAL_START_ZOOM","MAX_LABELS_COUNT","X_LABEL_SIZE","Y_LABEL_SIZE_DESKTOP","getLabelData","getRectColor","isDifferenceGreaterThanTwoWeeks","getDesktopOption","_ref","isDark","desktopGridLines","chartWidth","chartHeight","xLabelsSize","yLabelSize","bottomLeftBox","yAxis","nameTextStyle","align","padding","axisLabel","margin","grid","name","top","left","right","bottom","graphic","shape","x1","y1","x2","y2","getOption","_ref2","xAxisData","ordersPositionsChartData","ordersPositionsBucketWidth","candlesSeriesData","visibleXAxisData","slice","length","isGreaterThanTwoWeeks","labelsData","visibleItemsCount","Math","round","initialInterval","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","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","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":"AAAA,SACEA,YAAY,EACZC,YAAY,EACZC,cAAc,QACT,2BAA2B;AAClC,OAAO,KAAKC,OAAO,MAAM,cAAc;AAEvC,SACEC,YAAY,EACZC,WAAW,EACXC,gBAAgB,EAChBC,kBAAkB,EAClBC,gBAAgB,EAChBC,YAAY,EACZC,oBAAoB,QACf,aAAa;AAEpB,SACEC,YAAY,EACZC,YAAY,EACZC,+BAA+B,QAC1B,SAAS;AAEhB,OAAO,MAAMC,gBAAgB,GAAGC,IAAA,IAA2C;EAAA,IAA1C;IAAEC;EAAkC,CAAC,GAAAD,IAAA;EACpE,MAAME,gBAAgB,GAAGhB,YAAY,CAAC;IACpCe,MAAM;IACNE,UAAU,EAAEb,WAAW;IACvBc,WAAW,EAAEf,YAAY;IACzBgB,WAAW,EAAEX,YAAY;IACzBY,UAAU,EAAEX,oBAAoB;IAChCY,aAAa,EAAE;EACjB,CAAC,CAAC;EAEF,OAAO;IACLC,KAAK,EAAE;MACLC,aAAa,EAAE;QACbC,KAAK,EAAE,MAAM;QACbC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;MACtB,CAAC;MACDC,SAAS,EAAE;QACTC,MAAM,EAAE;MACV;IACF,CAAC;IACDC,IAAI,EAAE,CACJ;MACEC,IAAI,EAAE,WAAW;MACjBC,GAAG,EAAE,KAAK;MACVC,IAAI,EAAE,KAAK;MACXC,KAAK,EAAE,GAAGvB,oBAAoB,IAAI;MAClCwB,MAAM,EAAE,GAAGzB,YAAY;IACzB,CAAC,CACF;IACD0B,OAAO,EAAE,CACP,GAAGlB,gBAAgB,EACnB;MACE,GAAGf,cAAc,CAACc,MAAM,CAAC;MACzBe,GAAG,EAAE,CAAC;MACNE,KAAK,EAAE,CAAC;MACRG,KAAK,EAAE;QACLC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE;MACN;IACF,CAAC;EAEL,CAAC;AACH,CAAC;AAGD,OAAO,MAAMC,SAAwB,GAAGC,KAAA,IAKlC;EAAA,IALmC;IACvCC,SAAS;IACTC,wBAAwB;IACxBC,0BAA0B;IAC1BC;EACF,CAAC,GAAAJ,KAAA;EACC,MAAMK,gBAAgB,GAAGJ,SAAS,CAACK,KAAK,CACrCL,SAAS,CAACM,MAAM,GAAG1C,kBAAkB,GAAI,GAAG,EAC5CoC,SAAS,CAACM,MAAM,GAAG3C,gBAAgB,GAAI,GAC1C,CAAC;EAED,MAAM4C,qBAAqB,GAAGrC,+BAA+B,CAC3DkC,gBAAgB,CAAC,CAAC,CAAC,EACnBA,gBAAgB,CAACA,gBAAgB,CAACE,MAAM,GAAG,CAAC,CAC9C,CAAC;EACD,MAAME,UAAU,GAAGxC,YAAY,CAAC;IAC9BgC,SAAS;IACTO;EACF,CAAC,CAAC;EAEF,MAAME,iBAAiB,GAAGC,IAAI,CAACC,KAAK,CACjCX,SAAS,CAACM,MAAM,IAAI3C,gBAAgB,GAAGC,kBAAkB,CAAC,GAAI,GACjE,CAAC;EAED,MAAMgD,eAAe,GACnBH,iBAAiB,GAAG5C,gBAAgB,GAChC6C,IAAI,CAACG,KAAK,CAACJ,iBAAiB,GAAG5C,gBAAgB,CAAC,GAChD,CAAC;EAEP,OAAO;IACLiD,KAAK,EAAE;MACLC,IAAI,EAAE,KAAK;MACXC,IAAI,EAAE,GAAGJ,eAAe,IAAIL,qBAAqB;IACnD,CAAC;IACDU,SAAS,EAAE,KAAK;IAChBC,QAAQ,EAAE,CACR;MACEC,IAAI,EAAE,QAAQ;MACdC,UAAU,EAAE,CAAC;MACbC,KAAK,EAAEzD,kBAAkB;MACzB0D,GAAG,EAAE3D;IACP,CAAC,CACF;IACD4D,OAAO,EAAE;MACPC,OAAO,EAAE,MAAM;MACfC,SAAS,EAAGC,GAAG,IAAK;QAElB,MAAMC,SAAS,GAAGD,GAAG,CAAC,CAAC,CAAC,CAACE,SAAmB;QAE5C,OAAO,GAAG,IAAIC,IAAI,CAACF,SAAS,CAAC,CAACG,kBAAkB,CAACC,SAAS,EAAE;UAC1DC,IAAI,EAAE,SAAS;UACfC,MAAM,EAAE;QACV,CAAC,CAAC;AACV,QAAQ,IAAIJ,IAAI,CAACF,SAAS,CAAC,CAACO,kBAAkB,CAACH,SAAS,EAAE;UAClDI,GAAG,EAAE,SAAS;UACdC,KAAK,EAAE;QACT,CAAC,CAAC;AACR,CAAC;MACK;IACF,CAAC;IACDC,KAAK,EAAE;MACLlB,IAAI,EAAE,UAAU;MAChBmB,IAAI,EAAEtC,SAAS;MACfuC,QAAQ,EAAE;QACRxB,IAAI,EAAE;MACR,CAAC;MACD/B,SAAS,EAAE;QACTD,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACvBE,MAAM,EAAE,CAAC;QACTuD,QAAQ,EAAE5B,eAAe;QACzBa,SAAS,EAAGgB,KAAK,IAAK;UACpB,MAAMC,IAAI,GAAG,IAAIb,IAAI,CAACY,KAAK,CAAC;UAC5B,OAAOlC,qBAAqB,GACxB,GAAGmC,IAAI,CAACZ,kBAAkB,CAACC,SAAS,EAAE;YACpCC,IAAI,EAAE,SAAS;YACfC,MAAM,EAAE;UACV,CAAC,CAAC,EAAE,GACJ,GAAGS,IAAI,CAACR,kBAAkB,CAACH,SAAS,EAAE;YACpCI,GAAG,EAAE;UACP,CAAC,CAAC,EAAE;QACV;MACF;IACF,CAAC;IACDvD,KAAK,EAAE;MACLuC,IAAI,EAAE,OAAO;MACbwB,QAAQ,EAAE,OAAO;MACjBC,KAAK,EAAE,IAAI;MACXC,QAAQ,EAAE;QAAE9B,IAAI,EAAE;MAAM,CAAC;MACzBwB,QAAQ,EAAE;QAAExB,IAAI,EAAE;MAAM,CAAC;MACzB/B,SAAS,EAAE;QACT8D,YAAY,EAAE,KAAK;QACnBC,YAAY,EAAE;MAChB;IACF,CAAC;IACDC,MAAM,EAAE,CACN;MACE7B,IAAI,EAAE,aAAa;MACnB8B,EAAE,EAAE,aAAa;MACjBX,IAAI,EAAEnC,iBAAiB;MACvB+C,SAAS,EAAE;QACTC,KAAK,EAAE9F,YAAY,CAAC+F,cAAc;QAClCC,MAAM,EAAEhG,YAAY,CAACiG;MACvB,CAAC;MACDC,SAAS,EAAE;QACTC,MAAM,EAAE,QAAQ;QAChBC,UAAU,EAAE,CAAC;QACbnB,IAAI,EAAE9B;MACR;IACF,CAAC,EACD;MACEW,IAAI,EAAE,QAAQ;MACdhC,IAAI,EAAE,SAAS;MACf8D,EAAE,EAAE,SAAS;MACbS,MAAM,EAAE,IAAI;MACZC,UAAU,EAAEA,CAACC,MAAM,EAAEC,GAAG,KAAK;QAC3B,MAAM;UAAEC;QAAS,CAAC,GAAGF,MAAM;QAC3B,MAAMG,IAAI,GAAGF,GAAG,CAACpB,KAAK,CAAC,CAAC,CAAC;QACzB,MAAMuB,IAAI,GAAGH,GAAG,CAACpB,KAAK,CAAC,CAAC,CAAC;QACzB,MAAMwB,SAAS,GAAGJ,GAAG,CAACpB,KAAK,CAAC,CAAC,CAAW;QACxC,MAAMpB,KAAK,GAAGwC,GAAG,CAACK,KAAK,CAAC,CAACH,IAAI,EAAEC,IAAI,CAAC,CAAC;QACrC,MAAM,CAACG,SAAS,EAAEC,UAAU,CAAC,GAAGP,GAAG,CAACQ,IAAI,CAAE,CACxC,CAAC,EACDnE,0BAA0B,CAC3B,CAAa;QACd,MAAMoE,UAAU,GAAGR,QAKlB;QACD,MAAMrE,KAAK,GAAGjC,OAAO,CAACgC,OAAO,CAAC+E,cAAc,CAC1C;UACEC,CAAC,EAAEnD,KAAK,CAAC,CAAC,CAAC,GAAG8C,SAAS,GAAG,CAAC;UAC3BM,CAAC,EAAEpD,KAAK,CAAC,CAAC,CAAC;UACXqD,KAAK,EAAEP,SAAS;UAChBQ,MAAM,EAAEP;QACV,CAAC,EACDE,UACF,CAAC;QACD,OACE7E,KAAK,IAAI;UACP0B,IAAI,EAAE,MAAM;UACZ1B,KAAK;UACLmF,KAAK,EAAE;YACLC,IAAI,EAAE5G,YAAY,CAACgG,SAAS;UAC9B,CAAC;UACDa,gBAAgB,EAAE;QACpB,CAAC;MAEL,CAAC;MACDxC,IAAI,EAAErC;IACR,CAAC;EAEL,CAAC;AACH,CAAC","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"getOption.js","names":["colorPalette","getGridLines","getLineCommons","echarts","CHART_HEIGHT","CHART_WIDTH","INITIAL_END_ZOOM","INITIAL_START_ZOOM","X_LABEL_SIZE","Y_LABEL_SIZE_DESKTOP","getLabelData","getRectColor","isDifferenceGreaterThanTwoWeeks","getOption","_ref","isDark","xAxisData","ordersPositionsChartData","ordersPositionsBucketWidth","candlesSeriesData","visibleXAxisData","slice","length","isGreaterThanTwoWeeks","labelsData","gridLines","chartWidth","chartHeight","xLabelsSize","yLabelSize","bottomLeftBox","animation","dataZoom","type","xAxisIndex","start","end","tooltip","trigger","formatter","val","timestamp","axisValue","Date","toLocaleTimeString","undefined","hour","minute","toLocaleDateString","day","month","xAxis","data","axisTick","show","axisLabel","padding","margin","value","date","yAxis","position","scale","axisLine","showMaxLabel","showMinLabel","series","id","itemStyle","color","raspberryLight","color0","bottleGreenLight","markPoint","symbol","symbolSize","name","silent","renderItem","params","api","coordSys","xVal","yVal","sentiment","coord","rectWidth","rectHeight","size","boundaries","shape","graphic","clipRectByRect","x","y","width","height","style","fill","emphasisDisabled","grid","top","left","right","bottom","x1","y1","x2","y2"],"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 X_LABEL_SIZE,\n Y_LABEL_SIZE_DESKTOP,\n} from './constants';\nimport type { GetOptionType } from './types';\nimport {\n getLabelData,\n getRectColor,\n isDifferenceGreaterThanTwoWeeks,\n} from './utils';\n\n// @ts-expect-error\nexport const getOption: GetOptionType = (\n {\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth,\n candlesSeriesData,\n },\n isDark\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\n const labelsData = getLabelData({\n xAxisData,\n isGreaterThanTwoWeeks,\n });\n\n const gridLines = 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 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-expect-error\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 formatter: (value) => {\n const date = new Date(value as string);\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 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 ...gridLines,\n {\n ...getLineCommons(isDark as boolean),\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"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
export const getOrderPositionDataMock = _ref => {
|
|
2
|
+
let {
|
|
3
|
+
min = 1.3,
|
|
4
|
+
max = 2.1,
|
|
5
|
+
bucketWidth = 0.005,
|
|
6
|
+
baseValue,
|
|
7
|
+
crossoverValue = baseValue
|
|
8
|
+
} = _ref;
|
|
9
|
+
const results = [];
|
|
10
|
+
const maxDistance = Math.max(baseValue - min, max - baseValue);
|
|
11
|
+
for (let currentPrice = min; currentPrice < max; currentPrice += bucketWidth) {
|
|
12
|
+
const distance = Math.abs(currentPrice - baseValue);
|
|
13
|
+
const proximityFactor = 1 - distance / maxDistance;
|
|
14
|
+
const strongProximityFactor = Math.pow(proximityFactor, 2);
|
|
15
|
+
let shortCountPercent;
|
|
16
|
+
let longCountPercent;
|
|
17
|
+
if (currentPrice === baseValue) {
|
|
18
|
+
shortCountPercent = Math.random() * 0.5;
|
|
19
|
+
longCountPercent = Math.random() * 0.5;
|
|
20
|
+
} else {
|
|
21
|
+
const maxDifference = 0.5;
|
|
22
|
+
const targetDifference = Math.random() * maxDifference * strongProximityFactor;
|
|
23
|
+
const baseRandom = Math.random() * (0.5 - targetDifference);
|
|
24
|
+
if (currentPrice < crossoverValue) {
|
|
25
|
+
shortCountPercent = baseRandom;
|
|
26
|
+
longCountPercent = baseRandom + targetDifference;
|
|
27
|
+
} else {
|
|
28
|
+
longCountPercent = baseRandom;
|
|
29
|
+
shortCountPercent = baseRandom + targetDifference;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
results.push({
|
|
33
|
+
shortCountPercent: Math.round(shortCountPercent * 10000) / 10000,
|
|
34
|
+
longCountPercent: Math.round(longCountPercent * 10000) / 10000,
|
|
35
|
+
price: currentPrice
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
return results;
|
|
39
|
+
};
|
|
40
|
+
//# sourceMappingURL=getOrderPositionDataMock.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getOrderPositionDataMock.js","names":["getOrderPositionDataMock","_ref","min","max","bucketWidth","baseValue","crossoverValue","results","maxDistance","Math","currentPrice","distance","abs","proximityFactor","strongProximityFactor","pow","shortCountPercent","longCountPercent","random","maxDifference","targetDifference","baseRandom","push","round","price"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/getOrderPositionDataMock.ts"],"sourcesContent":["export interface OrderPositionData {\n shortCountPercent: number;\n longCountPercent: number;\n price: number;\n}\n\ninterface GetOrderPositionDataMockParams {\n min?: number;\n max?: number;\n bucketWidth?: number;\n baseValue: number;\n crossoverValue?: number;\n}\n\nexport const getOrderPositionDataMock = ({\n min = 1.3,\n max = 2.1,\n bucketWidth = 0.005,\n baseValue,\n crossoverValue = baseValue,\n}: GetOrderPositionDataMockParams): OrderPositionData[] => {\n const results: OrderPositionData[] = [];\n\n const maxDistance = Math.max(baseValue - min, max - baseValue);\n\n for (\n let currentPrice = min;\n currentPrice < max;\n currentPrice += bucketWidth\n ) {\n const distance = Math.abs(currentPrice - baseValue);\n\n const proximityFactor = 1 - distance / maxDistance;\n const strongProximityFactor = Math.pow(proximityFactor, 2);\n\n let shortCountPercent: number;\n let longCountPercent: number;\n\n if (currentPrice === baseValue) {\n shortCountPercent = Math.random() * 0.5;\n longCountPercent = Math.random() * 0.5;\n } else {\n const maxDifference = 0.5;\n const targetDifference =\n Math.random() * maxDifference * strongProximityFactor;\n\n const baseRandom = Math.random() * (0.5 - targetDifference);\n\n if (currentPrice < crossoverValue) {\n shortCountPercent = baseRandom;\n longCountPercent = baseRandom + targetDifference;\n } else {\n longCountPercent = baseRandom;\n shortCountPercent = baseRandom + targetDifference;\n }\n }\n\n results.push({\n shortCountPercent: Math.round(shortCountPercent * 10000) / 10000,\n longCountPercent: Math.round(longCountPercent * 10000) / 10000,\n price: currentPrice,\n });\n }\n\n return results;\n};\n"],"mappings":"AAcA,OAAO,MAAMA,wBAAwB,GAAGC,IAAA,IAMmB;EAAA,IANlB;IACvCC,GAAG,GAAG,GAAG;IACTC,GAAG,GAAG,GAAG;IACTC,WAAW,GAAG,KAAK;IACnBC,SAAS;IACTC,cAAc,GAAGD;EACa,CAAC,GAAAJ,IAAA;EAC/B,MAAMM,OAA4B,GAAG,EAAE;EAEvC,MAAMC,WAAW,GAAGC,IAAI,CAACN,GAAG,CAACE,SAAS,GAAGH,GAAG,EAAEC,GAAG,GAAGE,SAAS,CAAC;EAE9D,KACE,IAAIK,YAAY,GAAGR,GAAG,EACtBQ,YAAY,GAAGP,GAAG,EAClBO,YAAY,IAAIN,WAAW,EAC3B;IACA,MAAMO,QAAQ,GAAGF,IAAI,CAACG,GAAG,CAACF,YAAY,GAAGL,SAAS,CAAC;IAEnD,MAAMQ,eAAe,GAAG,CAAC,GAAGF,QAAQ,GAAGH,WAAW;IAClD,MAAMM,qBAAqB,GAAGL,IAAI,CAACM,GAAG,CAACF,eAAe,EAAE,CAAC,CAAC;IAE1D,IAAIG,iBAAyB;IAC7B,IAAIC,gBAAwB;IAE5B,IAAIP,YAAY,KAAKL,SAAS,EAAE;MAC9BW,iBAAiB,GAAGP,IAAI,CAACS,MAAM,CAAC,CAAC,GAAG,GAAG;MACvCD,gBAAgB,GAAGR,IAAI,CAACS,MAAM,CAAC,CAAC,GAAG,GAAG;IACxC,CAAC,MAAM;MACL,MAAMC,aAAa,GAAG,GAAG;MACzB,MAAMC,gBAAgB,GACpBX,IAAI,CAACS,MAAM,CAAC,CAAC,GAAGC,aAAa,GAAGL,qBAAqB;MAEvD,MAAMO,UAAU,GAAGZ,IAAI,CAACS,MAAM,CAAC,CAAC,IAAI,GAAG,GAAGE,gBAAgB,CAAC;MAE3D,IAAIV,YAAY,GAAGJ,cAAc,EAAE;QACjCU,iBAAiB,GAAGK,UAAU;QAC9BJ,gBAAgB,GAAGI,UAAU,GAAGD,gBAAgB;MAClD,CAAC,MAAM;QACLH,gBAAgB,GAAGI,UAAU;QAC7BL,iBAAiB,GAAGK,UAAU,GAAGD,gBAAgB;MACnD;IACF;IAEAb,OAAO,CAACe,IAAI,CAAC;MACXN,iBAAiB,EAAEP,IAAI,CAACc,KAAK,CAACP,iBAAiB,GAAG,KAAK,CAAC,GAAG,KAAK;MAChEC,gBAAgB,EAAER,IAAI,CAACc,KAAK,CAACN,gBAAgB,GAAG,KAAK,CAAC,GAAG,KAAK;MAC9DO,KAAK,EAAEd;IACT,CAAC,CAAC;EACJ;EAEA,OAAOH,OAAO;AAChB,CAAC","ignoreList":[]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/types.ts"],"sourcesContent":["import type {
|
|
1
|
+
{"version":3,"file":"types.js","names":[],"sources":["../../../../../src/CrowdViewWidget/components/Chart/types.ts"],"sourcesContent":["import 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 = (\n props: ChartOptionsProps,\n isDark: boolean\n) => EChartsOption;\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 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":[]}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { colorMap } from '../../config';
|
|
2
2
|
import { TimeSpanId } from '../../types';
|
|
3
3
|
import { CHART_HEIGHT } from './constants';
|
|
4
|
+
import { getOrderPositionDataMock } from './getOrderPositionDataMock';
|
|
4
5
|
import { getPriceCandlesMock } from './getPriceCandlesMock';
|
|
5
6
|
export const getRectColor = sentiment => {
|
|
6
7
|
const colors = sentiment < 0 ? colorMap.short : colorMap.long;
|
|
@@ -58,19 +59,15 @@ const temporaryGranularityTimeSpanMap = {
|
|
|
58
59
|
[GranularityId.HOUR_4]: TimeSpanId.MONTH_3,
|
|
59
60
|
[GranularityId.DAY_1]: TimeSpanId.MONTH_6
|
|
60
61
|
};
|
|
61
|
-
const
|
|
62
|
+
const mockXAxisData = granularityId => {
|
|
62
63
|
const granularity = granularityInMilliseconds[granularityId];
|
|
63
64
|
const timeSpan = timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];
|
|
64
|
-
const currentTime =
|
|
65
|
-
const startDate =
|
|
65
|
+
const currentTime = new Date();
|
|
66
|
+
const startDate = currentTime;
|
|
66
67
|
const totalSteps = timeSpan / granularity;
|
|
67
68
|
const orderPositionDataForHistorical = new Array(totalSteps).fill(null).map((_, index) => {
|
|
68
69
|
const newDate = new Date(startDate.getTime() - index * granularity);
|
|
69
|
-
return {
|
|
70
|
-
time: `${newDate.toISOString().slice(0, 19)}Z`,
|
|
71
|
-
buckets: data.orderPositionBooks[0].buckets,
|
|
72
|
-
bucketWidth: data.orderPositionBooks[0].bucketWidth
|
|
73
|
-
};
|
|
70
|
+
return `${newDate.toISOString().slice(0, 19)}Z`;
|
|
74
71
|
}).reverse();
|
|
75
72
|
return orderPositionDataForHistorical;
|
|
76
73
|
};
|
|
@@ -116,37 +113,42 @@ export const isDifferenceGreaterThanTwoWeeks = (startDate, endDate) => {
|
|
|
116
113
|
};
|
|
117
114
|
export const transformDataForChart = _ref2 => {
|
|
118
115
|
let {
|
|
119
|
-
data,
|
|
120
116
|
granularity
|
|
121
117
|
} = _ref2;
|
|
122
|
-
const
|
|
123
|
-
const
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
118
|
+
const bucketWidth = 0.005;
|
|
119
|
+
const mockedXAxisData = mockXAxisData(granularity);
|
|
120
|
+
const mockedCandles = getPriceCandlesMock(mockedXAxisData.length);
|
|
121
|
+
const orderPositionData = mockedCandles.map((item, index) => {
|
|
122
|
+
return {
|
|
123
|
+
time: mockedXAxisData[index],
|
|
124
|
+
buckets: getOrderPositionDataMock({
|
|
125
|
+
baseValue: item.high,
|
|
126
|
+
bucketWidth,
|
|
127
|
+
crossoverValue: item.high + (Math.random() - 0.5) * 0.3
|
|
128
|
+
}),
|
|
129
|
+
bucketWidth: 0.005
|
|
130
|
+
};
|
|
128
131
|
});
|
|
129
|
-
const ordersPositionsChartData =
|
|
132
|
+
const ordersPositionsChartData = orderPositionData.flatMap(_ref3 => {
|
|
130
133
|
let {
|
|
131
134
|
buckets,
|
|
132
135
|
time
|
|
133
|
-
} =
|
|
136
|
+
} = _ref3;
|
|
134
137
|
return buckets.map(bucket => [time, bucket.price, bucket.longCountPercent - bucket.shortCountPercent]);
|
|
135
138
|
}).filter(item => Math.abs(item[2]) > 0.15);
|
|
136
|
-
const
|
|
137
|
-
const candlesSeriesData = mockedCandles.map(_ref5 => {
|
|
139
|
+
const candlesSeriesData = mockedCandles.map(_ref4 => {
|
|
138
140
|
let {
|
|
139
141
|
close,
|
|
140
142
|
open,
|
|
141
143
|
low,
|
|
142
144
|
high
|
|
143
|
-
} =
|
|
145
|
+
} = _ref4;
|
|
144
146
|
return [+close.toFixed(5), +open.toFixed(5), +low.toFixed(5), +high.toFixed(5)];
|
|
145
147
|
});
|
|
146
148
|
return {
|
|
147
|
-
xAxisData,
|
|
149
|
+
xAxisData: mockedXAxisData,
|
|
148
150
|
ordersPositionsChartData,
|
|
149
|
-
ordersPositionsBucketWidth:
|
|
151
|
+
ordersPositionsBucketWidth: bucketWidth,
|
|
150
152
|
candlesSeriesData,
|
|
151
153
|
granularity
|
|
152
154
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["colorMap","TimeSpanId","CHART_HEIGHT","getPriceCandlesMock","getRectColor","sentiment","colors","short","long","absSentiment","Math","abs","GranularityId","timeSpansInMilliseconds","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","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","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":[]}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["colorMap","TimeSpanId","CHART_HEIGHT","getOrderPositionDataMock","getPriceCandlesMock","getRectColor","sentiment","colors","short","long","absSentiment","Math","abs","GranularityId","timeSpansInMilliseconds","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","mockXAxisData","granularityId","granularity","timeSpan","currentTime","Date","startDate","totalSteps","orderPositionDataForHistorical","Array","fill","map","_","index","newDate","getTime","toISOString","slice","reverse","getLabelData","_ref","xAxisData","isGreaterThanTwoWeeks","filter","record","arr","previousTimestamp","currentDate","previousDate","getDate","getMonth","item","name","toLocaleDateString","undefined","month","day","xAxis","y","silent","emphasis","disabled","label","fontFamily","fontSize","position","align","formatter","isDifferenceGreaterThanTwoWeeks","endDate","date1","date2","TWO_WEEKS_IN_MS","differenceInMs","transformDataForChart","_ref2","bucketWidth","mockedXAxisData","mockedCandles","length","orderPositionData","time","buckets","baseValue","high","crossoverValue","random","ordersPositionsChartData","flatMap","_ref3","bucket","price","longCountPercent","shortCountPercent","candlesSeriesData","_ref4","close","open","low","toFixed","ordersPositionsBucketWidth"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/utils.ts"],"sourcesContent":["import { colorMap } from '../../config';\nimport { TimeSpanId } from '../../types';\nimport { CHART_HEIGHT } from './constants';\nimport { getOrderPositionDataMock } from './getOrderPositionDataMock';\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 mockXAxisData = (granularityId: GranularityId) => {\n const granularity = granularityInMilliseconds[granularityId];\n const timeSpan =\n timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];\n\n const currentTime = new Date();\n\n const startDate = currentTime;\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 `${newDate.toISOString().slice(0, 19)}Z`;\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 granularity,\n}) => {\n const bucketWidth = 0.005;\n const mockedXAxisData = mockXAxisData(granularity);\n const mockedCandles = getPriceCandlesMock(mockedXAxisData.length);\n\n const orderPositionData = mockedCandles.map((item, index) => {\n return {\n time: mockedXAxisData[index],\n buckets: getOrderPositionDataMock({\n baseValue: item.high,\n bucketWidth,\n crossoverValue: item.high + (Math.random() - 0.5) * 0.3,\n }),\n bucketWidth: 0.005,\n };\n });\n\n const ordersPositionsChartData = orderPositionData\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 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: mockedXAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth: bucketWidth,\n candlesSeriesData,\n granularity,\n };\n};\n"],"mappings":"AAAA,SAASA,QAAQ,QAAQ,cAAc;AACvC,SAASC,UAAU,QAAQ,aAAa;AACxC,SAASC,YAAY,QAAQ,aAAa;AAC1C,SAASC,wBAAwB,QAAQ,4BAA4B;AACrE,SAASC,mBAAmB,QAAQ,uBAAuB;AAG3D,OAAO,MAAMC,YAAY,GAAIC,SAAiB,IAAK;EACjD,MAAMC,MAAM,GAAGD,SAAS,GAAG,CAAC,GAAGN,QAAQ,CAACQ,KAAK,GAAGR,QAAQ,CAACS,IAAI;EAC7D,MAAMC,YAAY,GAAGC,IAAI,CAACC,GAAG,CAACN,SAAS,CAAC;EAExC,IAAII,YAAY,GAAG,IAAI,EAAE;IACvB,OAAOH,MAAM,CAAC,CAAC,CAAC;EAClB;EAEA,IAAIG,YAAY,GAAG,IAAI,EAAE;IACvB,OAAOH,MAAM,CAAC,CAAC,CAAC;EAClB;EAEA,IAAIG,YAAY,GAAG,GAAG,EAAE;IACtB,OAAOH,MAAM,CAAC,CAAC,CAAC;EAClB;EAEA,IAAIG,YAAY,IAAI,GAAG,EAAE;IACvB,OAAOH,MAAM,CAAC,CAAC,CAAC;EAClB;EAEA,OAAO,aAAa;AACtB,CAAC;AAED,WAAYM,aAAa,aAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AASzB,MAAMC,uBAAmD,GAAG;EAC1D,CAACb,UAAU,CAACc,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EACnC,CAACd,UAAU,CAACe,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EACzC,CAACf,UAAU,CAACgB,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EACvC,CAAChB,UAAU,CAACiB,KAAK,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAC3C,CAACjB,UAAU,CAACkB,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAC5C,CAAClB,UAAU,CAACmB,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAC7C,CAACnB,UAAU,CAACoB,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAC7C,CAACpB,UAAU,CAACqB,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAC9C,CAACrB,UAAU,CAACsB,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAClD,CAACtB,UAAU,CAACuB,OAAO,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAClD,CAACvB,UAAU,CAACwB,MAAM,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAC9C,CAACxB,UAAU,CAACyB,MAAM,GAAG,CAAC,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AAChD,CAAC;AAED,MAAMC,yBAAwD,GAAG;EAC/D,CAACd,aAAa,CAACe,QAAQ,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI;EACvC,CAACf,aAAa,CAACgB,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EACzC,CAAChB,aAAa,CAACiB,SAAS,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EACzC,CAACjB,aAAa,CAACE,MAAM,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EACtC,CAACF,aAAa,CAACkB,MAAM,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAC1C,CAAClB,aAAa,CAACI,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG;AACxC,CAAC;AAED,MAAMe,+BAAkE,GAAG;EACzE,CAACnB,aAAa,CAACe,QAAQ,GAAG3B,UAAU,CAACiB,KAAK;EAC1C,CAACL,aAAa,CAACgB,SAAS,GAAG5B,UAAU,CAACkB,MAAM;EAC5C,CAACN,aAAa,CAACiB,SAAS,GAAG7B,UAAU,CAACmB,MAAM;EAC5C,CAACP,aAAa,CAACE,MAAM,GAAGd,UAAU,CAACqB,OAAO;EAC1C,CAACT,aAAa,CAACkB,MAAM,GAAG9B,UAAU,CAACsB,OAAO;EAC1C,CAACV,aAAa,CAACI,KAAK,GAAGhB,UAAU,CAACuB;AACpC,CAAC;AAED,MAAMS,aAAa,GAAIC,aAA4B,IAAK;EACtD,MAAMC,WAAW,GAAGR,yBAAyB,CAACO,aAAa,CAAC;EAC5D,MAAME,QAAQ,GACZtB,uBAAuB,CAACkB,+BAA+B,CAACE,aAAa,CAAC,CAAC;EAEzE,MAAMG,WAAW,GAAG,IAAIC,IAAI,CAAC,CAAC;EAE9B,MAAMC,SAAS,GAAGF,WAAW;EAC7B,MAAMG,UAAU,GAAGJ,QAAQ,GAAGD,WAAW;EAEzC,MAAMM,8BAA8B,GAAG,IAAIC,KAAK,CAACF,UAAU,CAAC,CACzDG,IAAI,CAAC,IAAI,CAAC,CACVC,GAAG,CAAC,CAACC,CAAC,EAAEC,KAAK,KAAK;IACjB,MAAMC,OAAO,GAAG,IAAIT,IAAI,CAACC,SAAS,CAACS,OAAO,CAAC,CAAC,GAAGF,KAAK,GAAGX,WAAW,CAAC;IAEnE,OAAO,GAAGY,OAAO,CAACE,WAAW,CAAC,CAAC,CAACC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG;EACjD,CAAC,CAAC,CACDC,OAAO,CAAC,CAAC;EAEZ,OAAOV,8BAA8B;AACvC,CAAC;AAED,OAAO,MAAMW,YAAY,GAAGC,IAAA;EAAA,IAAC;IAC3BC,SAAS;IACTC;EACkB,CAAC,GAAAF,IAAA;EAAA,OACnBC,SAAS,CACNE,MAAM,CAAC,CAACC,MAAM,EAAEX,KAAK,EAAEY,GAAG,KAAK;IAC9B,IAAIZ,KAAK,KAAK,CAAC,EAAE;MACf,OAAO,KAAK;IACd;IACA,MAAMa,iBAAiB,GAAGD,GAAG,CAACZ,KAAK,GAAG,CAAC,CAAC;IACxC,MAAMc,WAAW,GAAG,IAAItB,IAAI,CAACmB,MAAM,CAAC;IACpC,MAAMI,YAAY,GAAG,IAAIvB,IAAI,CAACqB,iBAAiB,CAAC;IAEhD,OAAOJ,qBAAqB,GACxBK,WAAW,CAACE,OAAO,CAAC,CAAC,KAAKD,YAAY,CAACC,OAAO,CAAC,CAAC,GAChDF,WAAW,CAACG,QAAQ,CAAC,CAAC,KAAKF,YAAY,CAACE,QAAQ,CAAC,CAAC;EACxD,CAAC,CAAC,CACDnB,GAAG,CAAEoB,IAAI,KAAM;IACdC,IAAI,EAAE,IAAI3B,IAAI,CAAC0B,IAAI,CAAC,CAACE,kBAAkB,CAACC,SAAS,EAAE;MACjDC,KAAK,EAAE,OAAO;MACdC,GAAG,EAAEd,qBAAqB,GAAG,SAAS,GAAGY;IAC3C,CAAC,CAAC;IACFG,KAAK,EAAEN,IAAI;IACXO,CAAC,EAAErE,YAAY,GAAG,EAAE;IACpBsE,MAAM,EAAE,IAAI;IACZC,QAAQ,EAAE;MACRC,QAAQ,EAAE;IACZ,CAAC;IACDC,KAAK,EAAE;MACLC,UAAU,EAAE,WAAW;MACvBC,QAAQ,EAAE,EAAE;MACZC,QAAQ,EAAE,QAAQ;MAClBC,KAAK,EAAE,QAAQ;MACfC,SAAS,EAAE;IACb;EACF,CAAC,CAAC,CAAC;AAAA;AAEP,OAAO,MAAMC,+BAA+B,GAAGA,CAC7C1C,SAAiB,EACjB2C,OAAe,KACZ;EACH,MAAMC,KAAK,GAAG,IAAI7C,IAAI,CAACC,SAAS,CAAC;EACjC,MAAM6C,KAAK,GAAG,IAAI9C,IAAI,CAAC4C,OAAO,CAAC;EAE/B,MAAMG,eAAe,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI;EAEhD,MAAMC,cAAc,GAAG3E,IAAI,CAACC,GAAG,CAACwE,KAAK,CAACpC,OAAO,CAAC,CAAC,GAAGmC,KAAK,CAACnC,OAAO,CAAC,CAAC,CAAC;EAElE,OAAOsC,cAAc,GAAGD,eAAe;AACzC,CAAC;AAED,OAAO,MAAME,qBAAgD,GAAGC,KAAA,IAE1D;EAAA,IAF2D;IAC/DrD;EACF,CAAC,GAAAqD,KAAA;EACC,MAAMC,WAAW,GAAG,KAAK;EACzB,MAAMC,eAAe,GAAGzD,aAAa,CAACE,WAAW,CAAC;EAClD,MAAMwD,aAAa,GAAGvF,mBAAmB,CAACsF,eAAe,CAACE,MAAM,CAAC;EAEjE,MAAMC,iBAAiB,GAAGF,aAAa,CAAC/C,GAAG,CAAC,CAACoB,IAAI,EAAElB,KAAK,KAAK;IAC3D,OAAO;MACLgD,IAAI,EAAEJ,eAAe,CAAC5C,KAAK,CAAC;MAC5BiD,OAAO,EAAE5F,wBAAwB,CAAC;QAChC6F,SAAS,EAAEhC,IAAI,CAACiC,IAAI;QACpBR,WAAW;QACXS,cAAc,EAAElC,IAAI,CAACiC,IAAI,GAAG,CAACtF,IAAI,CAACwF,MAAM,CAAC,CAAC,GAAG,GAAG,IAAI;MACtD,CAAC,CAAC;MACFV,WAAW,EAAE;IACf,CAAC;EACH,CAAC,CAAC;EAEF,MAAMW,wBAAwB,GAAGP,iBAAiB,CAC/CQ,OAAO,CACNC,KAAA;IAAA,IAAC;MAAEP,OAAO;MAAED;IAAK,CAAC,GAAAQ,KAAA;IAAA,OAChBP,OAAO,CAACnD,GAAG,CAAE2D,MAAM,IAAK,CACtBT,IAAI,EACJS,MAAM,CAAEC,KAAK,EACbD,MAAM,CAAEE,gBAAgB,GAAGF,MAAM,CAAEG,iBAAiB,CACrD,CAAC;EAAA,CACN,CAAC,CACAlD,MAAM,CAAEQ,IAAI,IAAKrD,IAAI,CAACC,GAAG,CAACoD,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;EAE7C,MAAM2C,iBAAqD,GACzDhB,aAAa,CAAC/C,GAAG,CAACgE,KAAA;IAAA,IAAC;MAAEC,KAAK;MAAEC,IAAI;MAAEC,GAAG;MAAEd;IAAK,CAAC,GAAAW,KAAA;IAAA,OAAK,CAChD,CAACC,KAAK,CAACG,OAAO,CAAC,CAAC,CAAC,EACjB,CAACF,IAAI,CAACE,OAAO,CAAC,CAAC,CAAC,EAChB,CAACD,GAAG,CAACC,OAAO,CAAC,CAAC,CAAC,EACf,CAACf,IAAI,CAACe,OAAO,CAAC,CAAC,CAAC,CACjB;EAAA,EAAC;EAEJ,OAAO;IACL1D,SAAS,EAAEoC,eAAe;IAC1BU,wBAAwB;IACxBa,0BAA0B,EAAExB,WAAW;IACvCkB,iBAAiB;IACjBxE;EACF,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -1,115 +1,2 @@
|
|
|
1
|
-
import type { GetOptionType
|
|
2
|
-
export declare const getDesktopOption: ({ isDark }: GetResponsiveOptionsProps) => {
|
|
3
|
-
yAxis: {
|
|
4
|
-
nameTextStyle: {
|
|
5
|
-
align: string;
|
|
6
|
-
padding: number[];
|
|
7
|
-
};
|
|
8
|
-
axisLabel: {
|
|
9
|
-
margin: number;
|
|
10
|
-
};
|
|
11
|
-
};
|
|
12
|
-
grid: {
|
|
13
|
-
name: string;
|
|
14
|
-
top: string;
|
|
15
|
-
left: string;
|
|
16
|
-
right: string;
|
|
17
|
-
bottom: string;
|
|
18
|
-
}[];
|
|
19
|
-
graphic: ({
|
|
20
|
-
top: number | undefined;
|
|
21
|
-
bottom: number | undefined;
|
|
22
|
-
left: number | undefined;
|
|
23
|
-
right: number | undefined;
|
|
24
|
-
shape: {
|
|
25
|
-
x1: number;
|
|
26
|
-
y1: number;
|
|
27
|
-
x2: number;
|
|
28
|
-
y2: number;
|
|
29
|
-
};
|
|
30
|
-
type: string;
|
|
31
|
-
silent: boolean;
|
|
32
|
-
z: number;
|
|
33
|
-
style: {
|
|
34
|
-
stroke: string;
|
|
35
|
-
lineWidth: number;
|
|
36
|
-
};
|
|
37
|
-
} | {
|
|
38
|
-
top: number;
|
|
39
|
-
shape: {
|
|
40
|
-
x1: number;
|
|
41
|
-
y1: number;
|
|
42
|
-
x2: number;
|
|
43
|
-
y2: number;
|
|
44
|
-
};
|
|
45
|
-
type: string;
|
|
46
|
-
silent: boolean;
|
|
47
|
-
z: number;
|
|
48
|
-
style: {
|
|
49
|
-
stroke: string;
|
|
50
|
-
lineWidth: number;
|
|
51
|
-
};
|
|
52
|
-
} | {
|
|
53
|
-
right: number;
|
|
54
|
-
shape: {
|
|
55
|
-
x1: number;
|
|
56
|
-
y1: number;
|
|
57
|
-
x2: number;
|
|
58
|
-
y2: number;
|
|
59
|
-
};
|
|
60
|
-
type: string;
|
|
61
|
-
silent: boolean;
|
|
62
|
-
z: number;
|
|
63
|
-
style: {
|
|
64
|
-
stroke: string;
|
|
65
|
-
lineWidth: number;
|
|
66
|
-
};
|
|
67
|
-
} | {
|
|
68
|
-
bottom: number;
|
|
69
|
-
shape: {
|
|
70
|
-
x1: number;
|
|
71
|
-
y1: number;
|
|
72
|
-
x2: number;
|
|
73
|
-
y2: number;
|
|
74
|
-
};
|
|
75
|
-
type: string;
|
|
76
|
-
silent: boolean;
|
|
77
|
-
z: number;
|
|
78
|
-
style: {
|
|
79
|
-
stroke: string;
|
|
80
|
-
lineWidth: number;
|
|
81
|
-
};
|
|
82
|
-
} | {
|
|
83
|
-
left: number;
|
|
84
|
-
shape: {
|
|
85
|
-
x1: number;
|
|
86
|
-
y1: number;
|
|
87
|
-
x2: number;
|
|
88
|
-
y2: number;
|
|
89
|
-
};
|
|
90
|
-
type: string;
|
|
91
|
-
silent: boolean;
|
|
92
|
-
z: number;
|
|
93
|
-
style: {
|
|
94
|
-
stroke: string;
|
|
95
|
-
lineWidth: number;
|
|
96
|
-
};
|
|
97
|
-
} | {
|
|
98
|
-
top: number;
|
|
99
|
-
right: number;
|
|
100
|
-
shape: {
|
|
101
|
-
x1: number;
|
|
102
|
-
y1: number;
|
|
103
|
-
x2: number;
|
|
104
|
-
y2: number;
|
|
105
|
-
};
|
|
106
|
-
type: string;
|
|
107
|
-
silent: boolean;
|
|
108
|
-
z: number;
|
|
109
|
-
style: {
|
|
110
|
-
stroke: string;
|
|
111
|
-
lineWidth: number;
|
|
112
|
-
};
|
|
113
|
-
})[];
|
|
114
|
-
};
|
|
1
|
+
import type { GetOptionType } from './types';
|
|
115
2
|
export declare const getOption: GetOptionType;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface OrderPositionData {
|
|
2
|
+
shortCountPercent: number;
|
|
3
|
+
longCountPercent: number;
|
|
4
|
+
price: number;
|
|
5
|
+
}
|
|
6
|
+
interface GetOrderPositionDataMockParams {
|
|
7
|
+
min?: number;
|
|
8
|
+
max?: number;
|
|
9
|
+
bucketWidth?: number;
|
|
10
|
+
baseValue: number;
|
|
11
|
+
crossoverValue?: number;
|
|
12
|
+
}
|
|
13
|
+
export declare const getOrderPositionDataMock: ({ min, max, bucketWidth, baseValue, crossoverValue, }: GetOrderPositionDataMockParams) => OrderPositionData[];
|
|
14
|
+
export {};
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { GetOrderPositionBooksQuery } from '@oanda/labs-order-book-widget/src/gql/types/graphql';
|
|
2
1
|
import type { EChartsOption } from 'echarts';
|
|
3
2
|
import type { BookType } from '../../../gql/types/graphql';
|
|
4
3
|
import type { GranularityId } from '../../types';
|
|
@@ -12,10 +11,7 @@ interface ChartOptionsProps {
|
|
|
12
11
|
ordersPositionsBucketWidth: number;
|
|
13
12
|
candlesSeriesData: [number, number, number, number][];
|
|
14
13
|
}
|
|
15
|
-
export type GetOptionType = (props: ChartOptionsProps) => EChartsOption;
|
|
16
|
-
export interface GetResponsiveOptionsProps {
|
|
17
|
-
isDark: boolean;
|
|
18
|
-
}
|
|
14
|
+
export type GetOptionType = (props: ChartOptionsProps, isDark: boolean) => EChartsOption;
|
|
19
15
|
export interface ChartProps {
|
|
20
16
|
data: ChartOptionsProps;
|
|
21
17
|
}
|
|
@@ -25,7 +21,6 @@ export interface ChartWithDataProps {
|
|
|
25
21
|
granularity: GranularityId;
|
|
26
22
|
}
|
|
27
23
|
interface TransformDataForChartTypeProps {
|
|
28
|
-
data: GetOrderPositionBooksQuery;
|
|
29
24
|
granularity: GranularityId;
|
|
30
25
|
}
|
|
31
26
|
export type TransformDataForChartType = (props: TransformDataForChartTypeProps) => ChartOptionsProps;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oanda/labs-crowd-view-widget",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.38",
|
|
4
4
|
"description": "Labs Crowd View 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.220",
|
|
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": "84d9bec88af7893f20ccd2d88fcbc28dd30aec22"
|
|
24
24
|
}
|