@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.
Files changed (50) hide show
  1. package/CHANGELOG.md +252 -0
  2. package/dist/main/CrowdViewWidget/Main.js +1 -0
  3. package/dist/main/CrowdViewWidget/Main.js.map +1 -1
  4. package/dist/main/CrowdViewWidget/components/Chart/Chart.js +68 -2
  5. package/dist/main/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  6. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js +7 -3
  7. package/dist/main/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  8. package/dist/main/CrowdViewWidget/components/Chart/constants.js +4 -1
  9. package/dist/main/CrowdViewWidget/components/Chart/constants.js.map +1 -1
  10. package/dist/main/CrowdViewWidget/components/Chart/getOption.js +44 -12
  11. package/dist/main/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
  12. package/dist/main/CrowdViewWidget/components/Chart/types.js.map +1 -1
  13. package/dist/main/CrowdViewWidget/components/Chart/utils.js +103 -16
  14. package/dist/main/CrowdViewWidget/components/Chart/utils.js.map +1 -1
  15. package/dist/main/CrowdViewWidget/config.js +10 -4
  16. package/dist/main/CrowdViewWidget/config.js.map +1 -1
  17. package/dist/main/CrowdViewWidget/types.js +22 -5
  18. package/dist/main/CrowdViewWidget/types.js.map +1 -1
  19. package/dist/module/CrowdViewWidget/Main.js +1 -0
  20. package/dist/module/CrowdViewWidget/Main.js.map +1 -1
  21. package/dist/module/CrowdViewWidget/components/Chart/Chart.js +70 -4
  22. package/dist/module/CrowdViewWidget/components/Chart/Chart.js.map +1 -1
  23. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js +7 -3
  24. package/dist/module/CrowdViewWidget/components/Chart/ChartWithData.js.map +1 -1
  25. package/dist/module/CrowdViewWidget/components/Chart/constants.js +3 -0
  26. package/dist/module/CrowdViewWidget/components/Chart/constants.js.map +1 -1
  27. package/dist/module/CrowdViewWidget/components/Chart/getOption.js +46 -14
  28. package/dist/module/CrowdViewWidget/components/Chart/getOption.js.map +1 -1
  29. package/dist/module/CrowdViewWidget/components/Chart/types.js.map +1 -1
  30. package/dist/module/CrowdViewWidget/components/Chart/utils.js +100 -15
  31. package/dist/module/CrowdViewWidget/components/Chart/utils.js.map +1 -1
  32. package/dist/module/CrowdViewWidget/config.js +10 -4
  33. package/dist/module/CrowdViewWidget/config.js.map +1 -1
  34. package/dist/module/CrowdViewWidget/types.js +21 -4
  35. package/dist/module/CrowdViewWidget/types.js.map +1 -1
  36. package/dist/types/CrowdViewWidget/components/Chart/ChartWithData.d.ts +1 -1
  37. package/dist/types/CrowdViewWidget/components/Chart/constants.d.ts +3 -0
  38. package/dist/types/CrowdViewWidget/components/Chart/types.d.ts +11 -1
  39. package/dist/types/CrowdViewWidget/components/Chart/utils.d.ts +26 -1
  40. package/dist/types/CrowdViewWidget/types.d.ts +20 -4
  41. package/package.json +3 -3
  42. package/src/CrowdViewWidget/Main.tsx +5 -1
  43. package/src/CrowdViewWidget/components/Chart/Chart.tsx +99 -2
  44. package/src/CrowdViewWidget/components/Chart/ChartWithData.tsx +7 -3
  45. package/src/CrowdViewWidget/components/Chart/constants.tsx +4 -0
  46. package/src/CrowdViewWidget/components/Chart/getOption.ts +72 -19
  47. package/src/CrowdViewWidget/components/Chart/types.ts +13 -2
  48. package/src/CrowdViewWidget/components/Chart/utils.ts +110 -11
  49. package/src/CrowdViewWidget/config.ts +12 -4
  50. package/src/CrowdViewWidget/types.ts +21 -4
@@ -1 +1 @@
1
- {"version":3,"file":"ChartWithData.js","names":["useQuery","ChartError","Size","Spinner","SpinnerSize","useLayoutProvider","classnames","React","useMemo","getOrderPositionBooks","Chart","transformDataForChart","ChartWithData","_ref","instrument","bookType","size","isDesktop","DESKTOP","loading","data","error","variables","recentHours","fetchPolicy","isError","transformedData","undefined","createElement","Fragment","className","lg"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/ChartWithData.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport type {\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables,\n} from '@oanda/labs-order-book-widget/src/gql/types/graphql';\nimport {\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 { getOrderPositionBooks } from '../../../gql/getOrderPositionBooks';\nimport { Chart } from './Chart';\nimport type { ChartWithDataProps } from './types';\nimport { transformDataForChart } from './utils';\n\nconst ChartWithData = ({ instrument, bookType }: ChartWithDataProps) => {\n const { size } = useLayoutProvider();\n const isDesktop = size === Size.DESKTOP;\n\n const { loading, data, error } = useQuery<\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables\n >(getOrderPositionBooks, {\n variables: {\n instrument,\n bookType,\n recentHours: 1,\n },\n fetchPolicy: 'network-only',\n });\n\n const isError = !!error;\n\n const transformedData = useMemo(() => {\n if (!data) return undefined;\n return transformDataForChart(data);\n }, [data]);\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,SAASA,QAAQ,QAAQ,gBAAgB;AAKzC,SACEC,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,qBAAqB,QAAQ,oCAAoC;AAC1E,SAASC,KAAK,QAAQ,SAAS;AAE/B,SAASC,qBAAqB,QAAQ,SAAS;AAE/C,MAAMC,aAAa,GAAGC,IAAA,IAAkD;EAAA,IAAjD;IAAEC,UAAU;IAAEC;EAA6B,CAAC,GAAAF,IAAA;EACjE,MAAM;IAAEG;EAAK,CAAC,GAAGX,iBAAiB,CAAC,CAAC;EACpC,MAAMY,SAAS,GAAGD,IAAI,KAAKd,IAAI,CAACgB,OAAO;EAEvC,MAAM;IAAEC,OAAO;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGrB,QAAQ,CAGvCS,qBAAqB,EAAE;IACvBa,SAAS,EAAE;MACTR,UAAU;MACVC,QAAQ;MACRQ,WAAW,EAAE;IACf,CAAC;IACDC,WAAW,EAAE;EACf,CAAC,CAAC;EAEF,MAAMC,OAAO,GAAG,CAAC,CAACJ,KAAK;EAEvB,MAAMK,eAAe,GAAGlB,OAAO,CAAC,MAAM;IACpC,IAAI,CAACY,IAAI,EAAE,OAAOO,SAAS;IAC3B,OAAOhB,qBAAqB,CAACS,IAAI,CAAC;EACpC,CAAC,EAAE,CAACA,IAAI,CAAC,CAAC;EAEV,OACEb,KAAA,CAAAqB,aAAA,CAAArB,KAAA,CAAAsB,QAAA,QACEtB,KAAA,CAAAqB,aAAA;IACEE,SAAS,EAAExB,UAAU,CAAC,uBAAuB,EAAE;MAC7C,cAAc,EAAEW,SAAS;MACzB,cAAc,EAAE,CAACA;IACnB,CAAC;EAAE,GAEFQ,OAAO,IACNlB,KAAA,CAAAqB,aAAA;IACEE,SAAS,EAAExB,UAAU,CACnB,uIAAuI,EACvI;MACE,WAAW,EAAEW,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EAAE,GAEFV,KAAA,CAAAqB,aAAA,CAAC3B,UAAU,MAAE,CACV,CACN,EACAkB,OAAO,IACNZ,KAAA,CAAAqB,aAAA;IACEE,SAAS,EAAExB,UAAU,CACnB,uIAAuI,EACvI;MACE,WAAW,EAAEW,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EAAE,GAEFV,KAAA,CAAAqB,aAAA,CAACzB,OAAO;IAACa,IAAI,EAAEZ,WAAW,CAAC2B;EAAG,CAAE,CAC7B,CACN,EACA,CAACN,OAAO,IAAIC,eAAe,IAC1BnB,KAAA,CAAAqB,aAAA;IAAKE,SAAS,EAAC;EAA4D,GACzEvB,KAAA,CAAAqB,aAAA,CAAClB,KAAK;IAACU,IAAI,EAAEM;EAAgB,CAAE,CAC5B,CAEJ,CACL,CAAC;AAEP,CAAC;AAED,SAASd,aAAa","ignoreList":[]}
1
+ {"version":3,"file":"ChartWithData.js","names":["useQuery","ChartError","Size","Spinner","SpinnerSize","useLayoutProvider","classnames","React","useMemo","getOrderPositionBooks","Chart","transformDataForChart","ChartWithData","_ref","instrument","bookType","granularity","size","isDesktop","DESKTOP","loading","data","error","variables","recentHours","fetchPolicy","isError","transformedData","undefined","createElement","Fragment","className","lg"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/ChartWithData.tsx"],"sourcesContent":["import { useQuery } from '@apollo/client';\nimport type {\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables,\n} from '@oanda/labs-order-book-widget/src/gql/types/graphql';\nimport {\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 { getOrderPositionBooks } from '../../../gql/getOrderPositionBooks';\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 { loading, data, error } = useQuery<\n GetOrderPositionBooksQuery,\n GetOrderPositionBooksQueryVariables\n >(getOrderPositionBooks, {\n variables: {\n instrument,\n bookType,\n recentHours: 1,\n },\n fetchPolicy: 'network-only',\n });\n\n const isError = !!error;\n\n const transformedData = useMemo(() => {\n if (!data) return undefined;\n return transformDataForChart({ data, granularity });\n }, [data, granularity]);\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,SAASA,QAAQ,QAAQ,gBAAgB;AAKzC,SACEC,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,qBAAqB,QAAQ,oCAAoC;AAC1E,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,GAAGZ,iBAAiB,CAAC,CAAC;EACpC,MAAMa,SAAS,GAAGD,IAAI,KAAKf,IAAI,CAACiB,OAAO;EAEvC,MAAM;IAAEC,OAAO;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAGtB,QAAQ,CAGvCS,qBAAqB,EAAE;IACvBc,SAAS,EAAE;MACTT,UAAU;MACVC,QAAQ;MACRS,WAAW,EAAE;IACf,CAAC;IACDC,WAAW,EAAE;EACf,CAAC,CAAC;EAEF,MAAMC,OAAO,GAAG,CAAC,CAACJ,KAAK;EAEvB,MAAMK,eAAe,GAAGnB,OAAO,CAAC,MAAM;IACpC,IAAI,CAACa,IAAI,EAAE,OAAOO,SAAS;IAC3B,OAAOjB,qBAAqB,CAAC;MAAEU,IAAI;MAAEL;IAAY,CAAC,CAAC;EACrD,CAAC,EAAE,CAACK,IAAI,EAAEL,WAAW,CAAC,CAAC;EAEvB,OACET,KAAA,CAAAsB,aAAA,CAAAtB,KAAA,CAAAuB,QAAA,QACEvB,KAAA,CAAAsB,aAAA;IACEE,SAAS,EAAEzB,UAAU,CAAC,uBAAuB,EAAE;MAC7C,cAAc,EAAEY,SAAS;MACzB,cAAc,EAAE,CAACA;IACnB,CAAC;EAAE,GAEFQ,OAAO,IACNnB,KAAA,CAAAsB,aAAA;IACEE,SAAS,EAAEzB,UAAU,CACnB,uIAAuI,EACvI;MACE,WAAW,EAAEY,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EAAE,GAEFX,KAAA,CAAAsB,aAAA,CAAC5B,UAAU,MAAE,CACV,CACN,EACAmB,OAAO,IACNb,KAAA,CAAAsB,aAAA;IACEE,SAAS,EAAEzB,UAAU,CACnB,uIAAuI,EACvI;MACE,WAAW,EAAEY,SAAS;MACtB,wBAAwB,EAAE,CAACA;IAC7B,CACF;EAAE,GAEFX,KAAA,CAAAsB,aAAA,CAAC1B,OAAO;IAACc,IAAI,EAAEb,WAAW,CAAC4B;EAAG,CAAE,CAC7B,CACN,EACA,CAACN,OAAO,IAAIC,eAAe,IAC1BpB,KAAA,CAAAsB,aAAA;IAAKE,SAAS,EAAC;EAA4D,GACzExB,KAAA,CAAAsB,aAAA,CAACnB,KAAK;IAACW,IAAI,EAAEM;EAAgB,CAAE,CAC5B,CAEJ,CACL,CAAC;AAEP,CAAC;AAED,SAASf,aAAa","ignoreList":[]}
@@ -2,4 +2,7 @@ export const X_LABEL_SIZE = 40;
2
2
  export const Y_LABEL_SIZE_DESKTOP = 60;
3
3
  export const CHART_WIDTH = 9999;
4
4
  export const CHART_HEIGHT = 425;
5
+ export const INITIAL_START_ZOOM = 80;
6
+ export const INITIAL_END_ZOOM = 100;
7
+ export const MAX_LABELS_COUNT = 14;
5
8
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","names":["X_LABEL_SIZE","Y_LABEL_SIZE_DESKTOP","CHART_WIDTH","CHART_HEIGHT"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/constants.tsx"],"sourcesContent":["export const X_LABEL_SIZE = 40;\nexport const Y_LABEL_SIZE_DESKTOP = 60;\nexport const CHART_WIDTH = 9999;\nexport const CHART_HEIGHT = 425;\n"],"mappings":"AAAA,OAAO,MAAMA,YAAY,GAAG,EAAE;AAC9B,OAAO,MAAMC,oBAAoB,GAAG,EAAE;AACtC,OAAO,MAAMC,WAAW,GAAG,IAAI;AAC/B,OAAO,MAAMC,YAAY,GAAG,GAAG","ignoreList":[]}
1
+ {"version":3,"file":"constants.js","names":["X_LABEL_SIZE","Y_LABEL_SIZE_DESKTOP","CHART_WIDTH","CHART_HEIGHT","INITIAL_START_ZOOM","INITIAL_END_ZOOM","MAX_LABELS_COUNT"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/constants.tsx"],"sourcesContent":["export const X_LABEL_SIZE = 40;\nexport const Y_LABEL_SIZE_DESKTOP = 60;\nexport const CHART_WIDTH = 9999;\nexport const CHART_HEIGHT = 425;\n\nexport const INITIAL_START_ZOOM = 80;\nexport const INITIAL_END_ZOOM = 100;\nexport const MAX_LABELS_COUNT = 14;\n"],"mappings":"AAAA,OAAO,MAAMA,YAAY,GAAG,EAAE;AAC9B,OAAO,MAAMC,oBAAoB,GAAG,EAAE;AACtC,OAAO,MAAMC,WAAW,GAAG,IAAI;AAC/B,OAAO,MAAMC,YAAY,GAAG,GAAG;AAE/B,OAAO,MAAMC,kBAAkB,GAAG,EAAE;AACpC,OAAO,MAAMC,gBAAgB,GAAG,GAAG;AACnC,OAAO,MAAMC,gBAAgB,GAAG,EAAE","ignoreList":[]}
@@ -1,7 +1,7 @@
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, X_LABEL_SIZE, Y_LABEL_SIZE_DESKTOP } from './constants';
4
- import { getRectColor } from './utils';
3
+ import { CHART_HEIGHT, CHART_WIDTH, INITIAL_END_ZOOM, INITIAL_START_ZOOM, MAX_LABELS_COUNT, X_LABEL_SIZE, Y_LABEL_SIZE_DESKTOP } from './constants';
4
+ import { getLabelData, getRectColor, isDifferenceGreaterThanTwoWeeks } from './utils';
5
5
  export const getDesktopOption = _ref => {
6
6
  let {
7
7
  isDark
@@ -51,22 +51,40 @@ export const getOption = _ref2 => {
51
51
  ordersPositionsBucketWidth,
52
52
  candlesSeriesData
53
53
  } = _ref2;
54
+ const visibleXAxisData = xAxisData.slice(xAxisData.length * INITIAL_START_ZOOM / 100, xAxisData.length * INITIAL_END_ZOOM / 100);
55
+ const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(visibleXAxisData[0], visibleXAxisData[visibleXAxisData.length - 1]);
56
+ const labelsData = getLabelData({
57
+ xAxisData,
58
+ isGreaterThanTwoWeeks
59
+ });
60
+ const visibleItemsCount = Math.round(xAxisData.length * (INITIAL_END_ZOOM - INITIAL_START_ZOOM) / 100);
61
+ const initialInterval = visibleItemsCount > MAX_LABELS_COUNT ? Math.floor(visibleItemsCount / MAX_LABELS_COUNT) : 0;
54
62
  return {
63
+ title: {
64
+ show: false,
65
+ text: `${initialInterval},${isGreaterThanTwoWeeks}`
66
+ },
55
67
  animation: false,
56
68
  dataZoom: [{
57
69
  type: 'inside',
58
70
  xAxisIndex: 0,
59
- start: 80,
60
- end: 100
61
- }, {
62
- type: 'inside',
63
- yAxisIndex: 0,
64
- startValue: 1.5,
65
- endValue: 1.7
71
+ start: INITIAL_START_ZOOM,
72
+ end: INITIAL_END_ZOOM
66
73
  }],
67
74
  tooltip: {
68
75
  trigger: 'axis',
69
- formatter: '{c}'
76
+ formatter: val => {
77
+ const timestamp = val[0].axisValue;
78
+ return `${new Date(timestamp).toLocaleTimeString(undefined, {
79
+ hour: '2-digit',
80
+ minute: '2-digit'
81
+ })}
82
+ ${new Date(timestamp).toLocaleDateString(undefined, {
83
+ day: 'numeric',
84
+ month: 'short'
85
+ })}
86
+ `;
87
+ }
70
88
  },
71
89
  xAxis: {
72
90
  type: 'category',
@@ -77,15 +95,22 @@ export const getOption = _ref2 => {
77
95
  axisLabel: {
78
96
  padding: [8, 16, 8, 16],
79
97
  margin: 0,
80
- formatter: value => `${new Date(value).toLocaleTimeString(undefined, {
81
- hour: '2-digit',
82
- minute: '2-digit'
83
- })}`
98
+ interval: initialInterval,
99
+ formatter: value => {
100
+ const date = new Date(value);
101
+ return isGreaterThanTwoWeeks ? `${date.toLocaleTimeString(undefined, {
102
+ hour: '2-digit',
103
+ minute: '2-digit'
104
+ })}` : `${date.toLocaleDateString(undefined, {
105
+ day: 'numeric'
106
+ })}`;
107
+ }
84
108
  }
85
109
  },
86
110
  yAxis: {
87
111
  type: 'value',
88
112
  position: 'right',
113
+ scale: true,
89
114
  axisLine: {
90
115
  show: false
91
116
  },
@@ -99,14 +124,21 @@ export const getOption = _ref2 => {
99
124
  },
100
125
  series: [{
101
126
  type: 'candlestick',
127
+ id: 'candlestick',
102
128
  data: candlesSeriesData,
103
129
  itemStyle: {
104
130
  color: colorPalette.raspberryLight,
105
131
  color0: colorPalette.bottleGreenLight
132
+ },
133
+ markPoint: {
134
+ symbol: 'circle',
135
+ symbolSize: 0,
136
+ data: labelsData
106
137
  }
107
138
  }, {
108
139
  type: 'custom',
109
140
  name: 'heatmap',
141
+ id: 'heatmap',
110
142
  silent: true,
111
143
  renderItem: (params, api) => {
112
144
  const {
@@ -1 +1 @@
1
- {"version":3,"file":"getOption.js","names":["colorPalette","getGridLines","getLineCommons","echarts","CHART_HEIGHT","CHART_WIDTH","X_LABEL_SIZE","Y_LABEL_SIZE_DESKTOP","getRectColor","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","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","raspberryLight","color0","bottleGreenLight","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 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":["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 +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;\n\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}\n\nexport type TransformDataForChartType = (\n props: GetOrderPositionBooksQuery\n) => ChartOptionsProps;\n"],"mappings":"","ignoreList":[]}
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":[]}
@@ -1,4 +1,6 @@
1
1
  import { colorMap } from '../../config';
2
+ import { TimeSpanId } from '../../types';
3
+ import { CHART_HEIGHT } from './constants';
2
4
  import { getPriceCandlesMock } from './getPriceCandlesMock';
3
5
  export const getRectColor = sentiment => {
4
6
  const colors = sentiment < 0 ? colorMap.short : colorMap.long;
@@ -17,10 +19,48 @@ export const getRectColor = sentiment => {
17
19
  }
18
20
  return 'transparent';
19
21
  };
20
- const mockOrderPositionDataForHistoricalData = data => {
21
- const oneMinuteInMilliseconds = 60000;
22
- const granularity = oneMinuteInMilliseconds * 5;
23
- const timeSpan = oneMinuteInMilliseconds * 60 * 24;
22
+ export let GranularityId = function (GranularityId) {
23
+ GranularityId["MINUTE_5"] = "MINUTE_5";
24
+ GranularityId["MINUTE_15"] = "MINUTE_15";
25
+ GranularityId["MINUTE_30"] = "MINUTE_30";
26
+ GranularityId["HOUR_1"] = "HOUR_1";
27
+ GranularityId["HOUR_4"] = "HOUR_4";
28
+ GranularityId["DAY_1"] = "DAY_1";
29
+ return GranularityId;
30
+ }({});
31
+ const timeSpansInMilliseconds = {
32
+ [TimeSpanId.HOUR_1]: 60 * 60 * 1000,
33
+ [TimeSpanId.HOUR_12]: 12 * 60 * 60 * 1000,
34
+ [TimeSpanId.DAY_1]: 24 * 60 * 60 * 1000,
35
+ [TimeSpanId.DAY_2]: 2 * 24 * 60 * 60 * 1000,
36
+ [TimeSpanId.WEEK_1]: 7 * 24 * 60 * 60 * 1000,
37
+ [TimeSpanId.WEEK_2]: 14 * 24 * 60 * 60 * 1000,
38
+ [TimeSpanId.WEEK_3]: 21 * 24 * 60 * 60 * 1000,
39
+ [TimeSpanId.MONTH_1]: 30 * 24 * 60 * 60 * 1000,
40
+ [TimeSpanId.MONTH_3]: 3 * 30 * 24 * 60 * 60 * 1000,
41
+ [TimeSpanId.MONTH_6]: 6 * 30 * 24 * 60 * 60 * 1000,
42
+ [TimeSpanId.YEAR_1]: 365 * 24 * 60 * 60 * 1000,
43
+ [TimeSpanId.YEAR_5]: 5 * 365 * 24 * 60 * 60 * 1000
44
+ };
45
+ const granularityInMilliseconds = {
46
+ [GranularityId.MINUTE_5]: 5 * 60 * 1000,
47
+ [GranularityId.MINUTE_15]: 15 * 60 * 1000,
48
+ [GranularityId.MINUTE_30]: 30 * 60 * 1000,
49
+ [GranularityId.HOUR_1]: 60 * 60 * 1000,
50
+ [GranularityId.HOUR_4]: 4 * 60 * 60 * 1000,
51
+ [GranularityId.DAY_1]: 24 * 60 * 60 * 1000
52
+ };
53
+ const temporaryGranularityTimeSpanMap = {
54
+ [GranularityId.MINUTE_5]: TimeSpanId.DAY_2,
55
+ [GranularityId.MINUTE_15]: TimeSpanId.WEEK_1,
56
+ [GranularityId.MINUTE_30]: TimeSpanId.WEEK_2,
57
+ [GranularityId.HOUR_1]: TimeSpanId.MONTH_1,
58
+ [GranularityId.HOUR_4]: TimeSpanId.MONTH_3,
59
+ [GranularityId.DAY_1]: TimeSpanId.MONTH_6
60
+ };
61
+ const mockOrderPositionDataForHistoricalData = (data, granularityId) => {
62
+ const granularity = granularityInMilliseconds[granularityId];
63
+ const timeSpan = timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];
24
64
  const currentTime = data.orderPositionBooks[0].time;
25
65
  const startDate = new Date(currentTime);
26
66
  const totalSteps = timeSpan / granularity;
@@ -31,39 +71,84 @@ const mockOrderPositionDataForHistoricalData = data => {
31
71
  buckets: data.orderPositionBooks[0].buckets,
32
72
  bucketWidth: data.orderPositionBooks[0].bucketWidth
33
73
  };
34
- });
74
+ }).reverse();
35
75
  return orderPositionDataForHistorical;
36
76
  };
37
- export const transformDataForChart = data => {
38
- const mockedData = mockOrderPositionDataForHistoricalData(data);
39
- const xAxisData = mockedData.map(_ref => {
77
+ export const getLabelData = _ref => {
78
+ let {
79
+ xAxisData,
80
+ isGreaterThanTwoWeeks
81
+ } = _ref;
82
+ return xAxisData.filter((record, index, arr) => {
83
+ if (index === 0) {
84
+ return false;
85
+ }
86
+ const previousTimestamp = arr[index - 1];
87
+ const currentDate = new Date(record);
88
+ const previousDate = new Date(previousTimestamp);
89
+ return isGreaterThanTwoWeeks ? currentDate.getDate() !== previousDate.getDate() : currentDate.getMonth() !== previousDate.getMonth();
90
+ }).map(item => ({
91
+ name: new Date(item).toLocaleDateString(undefined, {
92
+ month: 'short',
93
+ day: isGreaterThanTwoWeeks ? 'numeric' : undefined
94
+ }),
95
+ xAxis: item,
96
+ y: CHART_HEIGHT - 22,
97
+ silent: true,
98
+ emphasis: {
99
+ disabled: true
100
+ },
101
+ label: {
102
+ fontFamily: 'Sofia W03',
103
+ fontSize: 10,
104
+ position: 'bottom',
105
+ align: 'center',
106
+ formatter: '{b}'
107
+ }
108
+ }));
109
+ };
110
+ export const isDifferenceGreaterThanTwoWeeks = (startDate, endDate) => {
111
+ const date1 = new Date(startDate);
112
+ const date2 = new Date(endDate);
113
+ const TWO_WEEKS_IN_MS = 14 * 24 * 60 * 60 * 1000;
114
+ const differenceInMs = Math.abs(date2.getTime() - date1.getTime());
115
+ return differenceInMs < TWO_WEEKS_IN_MS;
116
+ };
117
+ export const transformDataForChart = _ref2 => {
118
+ let {
119
+ data,
120
+ granularity
121
+ } = _ref2;
122
+ const mockedData = mockOrderPositionDataForHistoricalData(data, granularity);
123
+ const xAxisData = mockedData.map(_ref3 => {
40
124
  let {
41
125
  time
42
- } = _ref;
126
+ } = _ref3;
43
127
  return time;
44
128
  });
45
- const ordersPositionsChartData = mockedData.flatMap(_ref2 => {
129
+ const ordersPositionsChartData = mockedData.flatMap(_ref4 => {
46
130
  let {
47
131
  buckets,
48
132
  time
49
- } = _ref2;
133
+ } = _ref4;
50
134
  return buckets.map(bucket => [time, bucket.price, bucket.longCountPercent - bucket.shortCountPercent]);
51
135
  }).filter(item => Math.abs(item[2]) > 0.15);
52
- const mockedCandles = getPriceCandlesMock(ordersPositionsChartData.length);
53
- const candlesSeriesData = mockedCandles.map(_ref3 => {
136
+ const mockedCandles = getPriceCandlesMock(xAxisData.length);
137
+ const candlesSeriesData = mockedCandles.map(_ref5 => {
54
138
  let {
55
139
  close,
56
140
  open,
57
141
  low,
58
142
  high
59
- } = _ref3;
143
+ } = _ref5;
60
144
  return [+close.toFixed(5), +open.toFixed(5), +low.toFixed(5), +high.toFixed(5)];
61
145
  });
62
146
  return {
63
147
  xAxisData,
64
148
  ordersPositionsChartData,
65
149
  ordersPositionsBucketWidth: mockedData[0].bucketWidth,
66
- candlesSeriesData
150
+ candlesSeriesData,
151
+ granularity
67
152
  };
68
153
  };
69
154
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","names":["colorMap","getPriceCandlesMock","getRectColor","sentiment","colors","short","long","absSentiment","Math","abs","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","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":["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":[]}
@@ -76,16 +76,22 @@ const instrumentPrecisionConfig = {
76
76
  [InstrumentId.XAG_USD]: 5
77
77
  };
78
78
  const granularitySelectConfig = [{
79
- id: GranularityId.M5,
79
+ id: GranularityId.MINUTE_5,
80
80
  label: '5_minutes'
81
81
  }, {
82
- id: GranularityId.M15,
82
+ id: GranularityId.MINUTE_15,
83
83
  label: '15_minutes'
84
84
  }, {
85
- id: GranularityId.H1,
85
+ id: GranularityId.MINUTE_30,
86
+ label: '30_minutes'
87
+ }, {
88
+ id: GranularityId.HOUR_1,
86
89
  label: '1_hour'
87
90
  }, {
88
- id: GranularityId.D1,
91
+ id: GranularityId.HOUR_4,
92
+ label: '4_hours'
93
+ }, {
94
+ id: GranularityId.DAY_1,
89
95
  label: '1_day'
90
96
  }];
91
97
  export { granularitySelectConfig, instrumentPrecisionConfig, instrumentSelectConfig, instrumentSelectConfigOC, navigationConfig };
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","names":["BookType","GranularityId","InstrumentId","navigationConfig","id","Order","label","Position","instrumentSelectConfigOC","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","M5","M15","H1","D1","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.M5,\n label: '5_minutes',\n },\n {\n id: GranularityId.M15,\n label: '15_minutes',\n },\n {\n id: GranularityId.H1,\n label: '1_hour',\n },\n {\n id: GranularityId.D1,\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":"AAAA,SAASA,QAAQ,QAAQ,sBAAsB;AAE/C,SAASC,aAAa,EAAEC,YAAY,QAAQ,SAAS;AAErD,MAAMC,gBAAgB,GAAG,CACvB;EACEC,EAAE,EAAEJ,QAAQ,CAACK,KAAK;EAClBC,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEJ,QAAQ,CAACO,QAAQ;EACrBD,KAAK,EAAE;AACT,CAAC,CACF;AAED,MAAME,wBAAwB,GAAG,CAC/B;EACEJ,EAAE,EAAEF,YAAY,CAACO,OAAO;EACxBH,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACQ,OAAO;EACxBJ,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACS,OAAO;EACxBL,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACU,OAAO;EACxBN,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACW,OAAO;EACxBP,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACY,OAAO;EACxBR,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACa,OAAO;EACxBT,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACc,OAAO;EACxBV,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACe,OAAO;EACxBX,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACgB,OAAO;EACxBZ,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACiB,OAAO;EACxBb,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACkB,OAAO;EACxBd,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACmB,OAAO;EACxBf,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACoB,OAAO;EACxBhB,KAAK,EAAE;AACT,CAAC,CACF;AAED,MAAMiB,sBAAsB,GAAG,CAC7B,GAAGf,wBAAwB,EAC3B;EACEJ,EAAE,EAAEF,YAAY,CAACsB,OAAO;EACxBlB,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEF,YAAY,CAACuB,OAAO;EACxBnB,KAAK,EAAE;AACT,CAAC,CACF;AAED,MAAMoB,yBAAuD,GAAG;EAC9D,CAACxB,YAAY,CAACO,OAAO,GAAG,CAAC;EACzB,CAACP,YAAY,CAACQ,OAAO,GAAG,CAAC;EACzB,CAACR,YAAY,CAACS,OAAO,GAAG,CAAC;EACzB,CAACT,YAAY,CAACU,OAAO,GAAG,CAAC;EACzB,CAACV,YAAY,CAACW,OAAO,GAAG,CAAC;EACzB,CAACX,YAAY,CAACY,OAAO,GAAG,CAAC;EACzB,CAACZ,YAAY,CAACa,OAAO,GAAG,CAAC;EACzB,CAACb,YAAY,CAACc,OAAO,GAAG,CAAC;EACzB,CAACd,YAAY,CAACe,OAAO,GAAG,CAAC;EACzB,CAACf,YAAY,CAACgB,OAAO,GAAG,CAAC;EACzB,CAAChB,YAAY,CAACiB,OAAO,GAAG,CAAC;EACzB,CAACjB,YAAY,CAACkB,OAAO,GAAG,CAAC;EACzB,CAAClB,YAAY,CAACmB,OAAO,GAAG,CAAC;EACzB,CAACnB,YAAY,CAACoB,OAAO,GAAG,CAAC;EACzB,CAACpB,YAAY,CAACsB,OAAO,GAAG,CAAC;EACzB,CAACtB,YAAY,CAACuB,OAAO,GAAG;AAC1B,CAAC;AAED,MAAME,uBAAuB,GAAG,CAC9B;EACEvB,EAAE,EAAEH,aAAa,CAAC2B,EAAE;EACpBtB,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEH,aAAa,CAAC4B,GAAG;EACrBvB,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEH,aAAa,CAAC6B,EAAE;EACpBxB,KAAK,EAAE;AACT,CAAC,EACD;EACEF,EAAE,EAAEH,aAAa,CAAC8B,EAAE;EACpBzB,KAAK,EAAE;AACT,CAAC,CACF;AAED,SACEqB,uBAAuB,EACvBD,yBAAyB,EACzBH,sBAAsB,EACtBf,wBAAwB,EACxBL,gBAAgB;AAElB,OAAO,MAAM6B,QAAsC,GAAG;EACpDC,IAAI,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,CAAC;EAC1DC,KAAK,EAAE,CAAC,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS;AAC1D,CAAC","ignoreList":[]}
1
+ {"version":3,"file":"config.js","names":["BookType","GranularityId","InstrumentId","navigationConfig","id","Order","label","Position","instrumentSelectConfigOC","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","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":[]}
@@ -18,10 +18,27 @@ export let InstrumentId = function (InstrumentId) {
18
18
  return InstrumentId;
19
19
  }({});
20
20
  export let GranularityId = function (GranularityId) {
21
- GranularityId["M5"] = "5M";
22
- GranularityId["M15"] = "15M";
23
- GranularityId["H1"] = "1H";
24
- GranularityId["D1"] = "1D";
21
+ GranularityId["MINUTE_5"] = "MINUTE_5";
22
+ GranularityId["MINUTE_15"] = "MINUTE_15";
23
+ GranularityId["MINUTE_30"] = "MINUTE_30";
24
+ GranularityId["HOUR_1"] = "HOUR_1";
25
+ GranularityId["HOUR_4"] = "HOUR_4";
26
+ GranularityId["DAY_1"] = "DAY_1";
25
27
  return GranularityId;
26
28
  }({});
29
+ export let TimeSpanId = function (TimeSpanId) {
30
+ TimeSpanId["HOUR_1"] = "HOUR_1";
31
+ TimeSpanId["HOUR_12"] = "HOUR_12";
32
+ TimeSpanId["DAY_1"] = "DAY_1";
33
+ TimeSpanId["DAY_2"] = "DAY_2";
34
+ TimeSpanId["WEEK_1"] = "WEEK_1";
35
+ TimeSpanId["WEEK_2"] = "WEEK_2";
36
+ TimeSpanId["WEEK_3"] = "WEEK_3";
37
+ TimeSpanId["MONTH_1"] = "MONTH_1";
38
+ TimeSpanId["MONTH_3"] = "MONTH_3";
39
+ TimeSpanId["MONTH_6"] = "MONTH_6";
40
+ TimeSpanId["YEAR_1"] = "YEAR_1";
41
+ TimeSpanId["YEAR_5"] = "YEAR_5";
42
+ return TimeSpanId;
43
+ }({});
27
44
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":["InstrumentId","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 M5 = '5M',\n M15 = '15M',\n H1 = '1H',\n D1 = '1D',\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":"AAWA,WAAYA,YAAY,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;AAmBxB,WAAYC,aAAa,aAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":["InstrumentId","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":"AAWA,WAAYA,YAAY,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;AAmBxB,WAAYC,aAAa,aAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAbA,aAAa;EAAA,OAAbA,aAAa;AAAA;AASzB,WAAYC,UAAU,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":[]}
@@ -1,4 +1,4 @@
1
1
  import React from 'react';
2
2
  import type { ChartWithDataProps } from './types';
3
- declare const ChartWithData: ({ instrument, bookType }: ChartWithDataProps) => React.JSX.Element;
3
+ declare const ChartWithData: ({ instrument, bookType, granularity, }: ChartWithDataProps) => React.JSX.Element;
4
4
  export { ChartWithData };
@@ -2,3 +2,6 @@ export declare const X_LABEL_SIZE = 40;
2
2
  export declare const Y_LABEL_SIZE_DESKTOP = 60;
3
3
  export declare const CHART_WIDTH = 9999;
4
4
  export declare const CHART_HEIGHT = 425;
5
+ export declare const INITIAL_START_ZOOM = 80;
6
+ export declare const INITIAL_END_ZOOM = 100;
7
+ export declare const MAX_LABELS_COUNT = 14;
@@ -1,6 +1,7 @@
1
1
  import type { GetOrderPositionBooksQuery } from '@oanda/labs-order-book-widget/src/gql/types/graphql';
2
2
  import type { EChartsOption } from 'echarts';
3
3
  import type { BookType } from '../../../gql/types/graphql';
4
+ import type { GranularityId } from '../../types';
4
5
  interface ChartOptionsProps {
5
6
  xAxisData: string[];
6
7
  ordersPositionsChartData: [
@@ -21,6 +22,15 @@ export interface ChartProps {
21
22
  export interface ChartWithDataProps {
22
23
  bookType: BookType;
23
24
  instrument: string;
25
+ granularity: GranularityId;
26
+ }
27
+ interface TransformDataForChartTypeProps {
28
+ data: GetOrderPositionBooksQuery;
29
+ granularity: GranularityId;
30
+ }
31
+ export type TransformDataForChartType = (props: TransformDataForChartTypeProps) => ChartOptionsProps;
32
+ export interface GetLabelsDataProps {
33
+ xAxisData: string[];
34
+ isGreaterThanTwoWeeks: boolean;
24
35
  }
25
- export type TransformDataForChartType = (props: GetOrderPositionBooksQuery) => ChartOptionsProps;
26
36
  export {};
@@ -1,3 +1,28 @@
1
- import type { TransformDataForChartType } from './types';
1
+ import type { GetLabelsDataProps, TransformDataForChartType } from './types';
2
2
  export declare const getRectColor: (sentiment: number) => string;
3
+ export declare enum GranularityId {
4
+ MINUTE_5 = "MINUTE_5",
5
+ MINUTE_15 = "MINUTE_15",
6
+ MINUTE_30 = "MINUTE_30",
7
+ HOUR_1 = "HOUR_1",
8
+ HOUR_4 = "HOUR_4",
9
+ DAY_1 = "DAY_1"
10
+ }
11
+ export declare const getLabelData: ({ xAxisData, isGreaterThanTwoWeeks, }: GetLabelsDataProps) => {
12
+ name: string;
13
+ xAxis: string;
14
+ y: number;
15
+ silent: boolean;
16
+ emphasis: {
17
+ disabled: boolean;
18
+ };
19
+ label: {
20
+ fontFamily: string;
21
+ fontSize: number;
22
+ position: string;
23
+ align: string;
24
+ formatter: string;
25
+ };
26
+ }[];
27
+ export declare const isDifferenceGreaterThanTwoWeeks: (startDate: string, endDate: string) => boolean;
3
28
  export declare const transformDataForChart: TransformDataForChartType;
@@ -25,10 +25,26 @@ export declare enum InstrumentId {
25
25
  XAG_USD = "XAGUSD"
26
26
  }
27
27
  export declare enum GranularityId {
28
- M5 = "5M",
29
- M15 = "15M",
30
- H1 = "1H",
31
- D1 = "1D"
28
+ MINUTE_5 = "MINUTE_5",
29
+ MINUTE_15 = "MINUTE_15",
30
+ MINUTE_30 = "MINUTE_30",
31
+ HOUR_1 = "HOUR_1",
32
+ HOUR_4 = "HOUR_4",
33
+ DAY_1 = "DAY_1"
34
+ }
35
+ export declare enum TimeSpanId {
36
+ HOUR_1 = "HOUR_1",
37
+ HOUR_12 = "HOUR_12",
38
+ DAY_1 = "DAY_1",
39
+ DAY_2 = "DAY_2",
40
+ WEEK_1 = "WEEK_1",
41
+ WEEK_2 = "WEEK_2",
42
+ WEEK_3 = "WEEK_3",
43
+ MONTH_1 = "MONTH_1",
44
+ MONTH_3 = "MONTH_3",
45
+ MONTH_6 = "MONTH_6",
46
+ YEAR_1 = "YEAR_1",
47
+ YEAR_5 = "YEAR_5"
32
48
  }
33
49
  export interface OrdersPositionsData {
34
50
  price: number;