@oanda/labs-crowd-view-widget 1.0.35 → 1.0.37
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 +300 -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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getOption.js","names":["_labsWidgetCommon","require","echarts","_interopRequireWildcard","_constants","_utils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","getDesktopOption","_ref","isDark","desktopGridLines","getGridLines","chartWidth","CHART_WIDTH","chartHeight","CHART_HEIGHT","xLabelsSize","X_LABEL_SIZE","yLabelSize","Y_LABEL_SIZE_DESKTOP","bottomLeftBox","yAxis","nameTextStyle","align","padding","axisLabel","margin","grid","name","top","left","right","bottom","graphic","getLineCommons","shape","x1","y1","x2","y2","exports","getOption","_ref2","xAxisData","ordersPositionsChartData","ordersPositionsBucketWidth","candlesSeriesData","visibleXAxisData","slice","length","INITIAL_START_ZOOM","INITIAL_END_ZOOM","isGreaterThanTwoWeeks","isDifferenceGreaterThanTwoWeeks","labelsData","getLabelData","visibleItemsCount","Math","round","initialInterval","MAX_LABELS_COUNT","floor","title","show","text","animation","dataZoom","type","xAxisIndex","start","end","tooltip","trigger","formatter","val","timestamp","axisValue","Date","toLocaleTimeString","undefined","hour","minute","toLocaleDateString","day","month","xAxis","data","axisTick","interval","value","date","position","scale","axisLine","showMaxLabel","showMinLabel","series","id","itemStyle","color","colorPalette","raspberryLight","color0","bottleGreenLight","markPoint","symbol","symbolSize","silent","renderItem","params","api","coordSys","xVal","yVal","sentiment","coord","rectWidth","rectHeight","size","boundaries","clipRectByRect","x","y","width","height","style","fill","getRectColor","emphasisDisabled"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/getOption.ts"],"sourcesContent":["import {\n colorPalette,\n getGridLines,\n getLineCommons,\n} from '@oanda/labs-widget-common';\nimport * as echarts from 'echarts/core';\n\nimport {\n CHART_HEIGHT,\n CHART_WIDTH,\n INITIAL_END_ZOOM,\n INITIAL_START_ZOOM,\n MAX_LABELS_COUNT,\n X_LABEL_SIZE,\n Y_LABEL_SIZE_DESKTOP,\n} from './constants';\nimport type { GetOptionType, GetResponsiveOptionsProps } from './types';\nimport {\n getLabelData,\n getRectColor,\n isDifferenceGreaterThanTwoWeeks,\n} from './utils';\n\nexport const getDesktopOption = ({ isDark }: GetResponsiveOptionsProps) => {\n const desktopGridLines = getGridLines({\n isDark,\n chartWidth: CHART_WIDTH,\n chartHeight: CHART_HEIGHT,\n xLabelsSize: X_LABEL_SIZE,\n yLabelSize: Y_LABEL_SIZE_DESKTOP,\n bottomLeftBox: false,\n });\n\n return {\n yAxis: {\n nameTextStyle: {\n align: 'left',\n padding: [0, 0, 0, 8],\n },\n axisLabel: {\n margin: 8,\n },\n },\n grid: [\n {\n name: 'main-grid',\n top: '0px',\n left: '0px',\n right: `${Y_LABEL_SIZE_DESKTOP}px`,\n bottom: `${X_LABEL_SIZE}px`,\n },\n ],\n graphic: [\n ...desktopGridLines,\n {\n ...getLineCommons(isDark),\n top: 0,\n right: 0,\n shape: {\n x1: 0,\n y1: 0,\n x2: 0,\n y2: 0,\n },\n },\n ],\n };\n};\n\n// @ts-ignore\nexport const getOption: GetOptionType = ({\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth,\n candlesSeriesData,\n}) => {\n const visibleXAxisData = xAxisData.slice(\n (xAxisData.length * INITIAL_START_ZOOM) / 100,\n (xAxisData.length * INITIAL_END_ZOOM) / 100\n );\n\n const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(\n visibleXAxisData[0],\n visibleXAxisData[visibleXAxisData.length - 1]\n );\n const labelsData = getLabelData({\n xAxisData,\n isGreaterThanTwoWeeks,\n });\n\n const visibleItemsCount = Math.round(\n (xAxisData.length * (INITIAL_END_ZOOM - INITIAL_START_ZOOM)) / 100\n );\n\n const initialInterval =\n visibleItemsCount > MAX_LABELS_COUNT\n ? Math.floor(visibleItemsCount / MAX_LABELS_COUNT)\n : 0;\n\n return {\n title: {\n show: false,\n text: `${initialInterval},${isGreaterThanTwoWeeks}`,\n },\n animation: false,\n dataZoom: [\n {\n type: 'inside',\n xAxisIndex: 0,\n start: INITIAL_START_ZOOM,\n end: INITIAL_END_ZOOM,\n },\n ],\n tooltip: {\n trigger: 'axis',\n formatter: (val) => {\n // @ts-ignore\n const timestamp = val[0].axisValue as string;\n\n return `${new Date(timestamp).toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}\n ${new Date(timestamp).toLocaleDateString(undefined, {\n day: 'numeric',\n month: 'short',\n })}\n`;\n },\n },\n xAxis: {\n type: 'category',\n data: xAxisData,\n axisTick: {\n show: false,\n },\n axisLabel: {\n padding: [8, 16, 8, 16],\n margin: 0,\n interval: initialInterval,\n formatter: (value) => {\n const date = new Date(value);\n return isGreaterThanTwoWeeks\n ? `${date.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}`\n : `${date.toLocaleDateString(undefined, {\n day: 'numeric',\n })}`;\n },\n },\n },\n yAxis: {\n type: 'value',\n position: 'right',\n scale: true,\n axisLine: { show: false },\n axisTick: { show: false },\n axisLabel: {\n showMaxLabel: false,\n showMinLabel: false,\n },\n },\n series: [\n {\n type: 'candlestick',\n id: 'candlestick',\n data: candlesSeriesData,\n itemStyle: {\n color: colorPalette.raspberryLight,\n color0: colorPalette.bottleGreenLight,\n },\n markPoint: {\n symbol: 'circle',\n symbolSize: 0,\n data: labelsData,\n },\n },\n {\n type: 'custom',\n name: 'heatmap',\n id: 'heatmap',\n silent: true,\n renderItem: (params, api) => {\n const { coordSys } = params;\n const xVal = api.value(0);\n const yVal = api.value(1);\n const sentiment = api.value(2) as number;\n const start = api.coord([xVal, yVal]);\n const [rectWidth, rectHeight] = api.size!([\n 0,\n ordersPositionsBucketWidth,\n ]) as number[];\n const boundaries = coordSys as unknown as {\n x: number;\n y: number;\n width: number;\n height: number;\n };\n const shape = echarts.graphic.clipRectByRect(\n {\n x: start[0] - rectWidth / 2,\n y: start[1],\n width: rectWidth,\n height: rectHeight,\n },\n boundaries\n );\n return (\n shape && {\n type: 'rect',\n shape,\n style: {\n fill: getRectColor(sentiment),\n },\n emphasisDisabled: true,\n }\n );\n },\n data: ordersPositionsChartData,\n },\n ],\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"getOption.js","names":["_labsWidgetCommon","require","echarts","_interopRequireWildcard","_constants","_utils","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","getOption","_ref","isDark","xAxisData","ordersPositionsChartData","ordersPositionsBucketWidth","candlesSeriesData","visibleXAxisData","slice","length","INITIAL_START_ZOOM","INITIAL_END_ZOOM","isGreaterThanTwoWeeks","isDifferenceGreaterThanTwoWeeks","labelsData","getLabelData","gridLines","getGridLines","chartWidth","CHART_WIDTH","chartHeight","CHART_HEIGHT","xLabelsSize","X_LABEL_SIZE","yLabelSize","Y_LABEL_SIZE_DESKTOP","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","colorPalette","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","getRectColor","emphasisDisabled","grid","top","left","right","bottom","getLineCommons","x1","y1","x2","y2","exports"],"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":";;;;;;AAAA,IAAAA,iBAAA,GAAAC,OAAA;AAKA,IAAAC,OAAA,GAAAC,uBAAA,CAAAF,OAAA;AAEA,IAAAG,UAAA,GAAAH,OAAA;AASA,IAAAI,MAAA,GAAAJ,OAAA;AAIiB,SAAAK,yBAAAC,CAAA,6BAAAC,OAAA,mBAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAF,wBAAA,YAAAA,CAAAC,CAAA,WAAAA,CAAA,GAAAG,CAAA,GAAAD,CAAA,KAAAF,CAAA;AAAA,SAAAJ,wBAAAI,CAAA,EAAAE,CAAA,SAAAA,CAAA,IAAAF,CAAA,IAAAA,CAAA,CAAAI,UAAA,SAAAJ,CAAA,eAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,WAAAK,OAAA,EAAAL,CAAA,QAAAG,CAAA,GAAAJ,wBAAA,CAAAG,CAAA,OAAAC,CAAA,IAAAA,CAAA,CAAAG,GAAA,CAAAN,CAAA,UAAAG,CAAA,CAAAI,GAAA,CAAAP,CAAA,OAAAQ,CAAA,KAAAC,SAAA,UAAAC,CAAA,GAAAC,MAAA,CAAAC,cAAA,IAAAD,MAAA,CAAAE,wBAAA,WAAAC,CAAA,IAAAd,CAAA,oBAAAc,CAAA,OAAAC,cAAA,CAAAC,IAAA,CAAAhB,CAAA,EAAAc,CAAA,SAAAG,CAAA,GAAAP,CAAA,GAAAC,MAAA,CAAAE,wBAAA,CAAAb,CAAA,EAAAc,CAAA,UAAAG,CAAA,KAAAA,CAAA,CAAAV,GAAA,IAAAU,CAAA,CAAAC,GAAA,IAAAP,MAAA,CAAAC,cAAA,CAAAJ,CAAA,EAAAM,CAAA,EAAAG,CAAA,IAAAT,CAAA,CAAAM,CAAA,IAAAd,CAAA,CAAAc,CAAA,YAAAN,CAAA,CAAAH,OAAA,GAAAL,CAAA,EAAAG,CAAA,IAAAA,CAAA,CAAAe,GAAA,CAAAlB,CAAA,EAAAQ,CAAA,GAAAA,CAAA;AAGV,MAAMW,SAAwB,GAAGA,CAAAC,IAAA,EAOtCC,MAAM,KACH;EAAA,IAPH;IACEC,SAAS;IACTC,wBAAwB;IACxBC,0BAA0B;IAC1BC;EACF,CAAC,GAAAL,IAAA;EAGD,MAAMM,gBAAgB,GAAGJ,SAAS,CAACK,KAAK,CACrCL,SAAS,CAACM,MAAM,GAAGC,6BAAkB,GAAI,GAAG,EAC5CP,SAAS,CAACM,MAAM,GAAGE,2BAAgB,GAAI,GAC1C,CAAC;EAED,MAAMC,qBAAqB,GAAG,IAAAC,sCAA+B,EAC3DN,gBAAgB,CAAC,CAAC,CAAC,EACnBA,gBAAgB,CAACA,gBAAgB,CAACE,MAAM,GAAG,CAAC,CAC9C,CAAC;EAED,MAAMK,UAAU,GAAG,IAAAC,mBAAY,EAAC;IAC9BZ,SAAS;IACTS;EACF,CAAC,CAAC;EAEF,MAAMI,SAAS,GAAG,IAAAC,8BAAY,EAAC;IAC7Bf,MAAM;IACNgB,UAAU,EAAEC,sBAAW;IACvBC,WAAW,EAAEC,uBAAY;IACzBC,WAAW,EAAEC,uBAAY;IACzBC,UAAU,EAAEC,+BAAoB;IAChCC,aAAa,EAAE;EACjB,CAAC,CAAC;EAEF,OAAO;IACLC,SAAS,EAAE,KAAK;IAChBC,QAAQ,EAAE,CACR;MACEC,IAAI,EAAE,QAAQ;MACdC,UAAU,EAAE,CAAC;MACbC,KAAK,EAAErB,6BAAkB;MACzBsB,GAAG,EAAErB;IACP,CAAC,CACF;IACDsB,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,EAAE7C,SAAS;MACf8C,QAAQ,EAAE;QACRC,IAAI,EAAE;MACR,CAAC;MACDC,SAAS,EAAE;QACTC,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QACvBC,MAAM,EAAE,CAAC;QACTlB,SAAS,EAAGmB,KAAK,IAAK;UACpB,MAAMC,IAAI,GAAG,IAAIhB,IAAI,CAACe,KAAe,CAAC;UACtC,OAAO1C,qBAAqB,GACxB,GAAG2C,IAAI,CAACf,kBAAkB,CAACC,SAAS,EAAE;YACpCC,IAAI,EAAE,SAAS;YACfC,MAAM,EAAE;UACV,CAAC,CAAC,EAAE,GACJ,GAAGY,IAAI,CAACX,kBAAkB,CAACH,SAAS,EAAE;YACpCI,GAAG,EAAE;UACP,CAAC,CAAC,EAAE;QACV;MACF;IACF,CAAC;IACDW,KAAK,EAAE;MACL3B,IAAI,EAAE,OAAO;MACb4B,QAAQ,EAAE,OAAO;MACjBC,KAAK,EAAE,IAAI;MACXC,QAAQ,EAAE;QAAET,IAAI,EAAE;MAAM,CAAC;MACzBD,QAAQ,EAAE;QAAEC,IAAI,EAAE;MAAM,CAAC;MACzBC,SAAS,EAAE;QACTS,YAAY,EAAE,KAAK;QACnBC,YAAY,EAAE;MAChB;IACF,CAAC;IACDC,MAAM,EAAE,CACN;MACEjC,IAAI,EAAE,aAAa;MACnBkC,EAAE,EAAE,aAAa;MACjBf,IAAI,EAAE1C,iBAAiB;MACvB0D,SAAS,EAAE;QACTC,KAAK,EAAEC,8BAAY,CAACC,cAAc;QAClCC,MAAM,EAAEF,8BAAY,CAACG;MACvB,CAAC;MACDC,SAAS,EAAE;QACTC,MAAM,EAAE,QAAQ;QAChBC,UAAU,EAAE,CAAC;QACbxB,IAAI,EAAElC;MACR;IACF,CAAC,EACD;MACEe,IAAI,EAAE,QAAQ;MACd4C,IAAI,EAAE,SAAS;MACfV,EAAE,EAAE,SAAS;MACbW,MAAM,EAAE,IAAI;MACZC,UAAU,EAAEA,CAACC,MAAM,EAAEC,GAAG,KAAK;QAC3B,MAAM;UAAEC;QAAS,CAAC,GAAGF,MAAM;QAC3B,MAAMG,IAAI,GAAGF,GAAG,CAACvB,KAAK,CAAC,CAAC,CAAC;QACzB,MAAM0B,IAAI,GAAGH,GAAG,CAACvB,KAAK,CAAC,CAAC,CAAC;QACzB,MAAM2B,SAAS,GAAGJ,GAAG,CAACvB,KAAK,CAAC,CAAC,CAAW;QACxC,MAAMvB,KAAK,GAAG8C,GAAG,CAACK,KAAK,CAAC,CAACH,IAAI,EAAEC,IAAI,CAAC,CAAC;QACrC,MAAM,CAACG,SAAS,EAAEC,UAAU,CAAC,GAAGP,GAAG,CAACQ,IAAI,CAAE,CACxC,CAAC,EACDhF,0BAA0B,CAC3B,CAAa;QACd,MAAMiF,UAAU,GAAGR,QAKlB;QACD,MAAMS,KAAK,GAAG/G,OAAO,CAACgH,OAAO,CAACC,cAAc,CAC1C;UACEC,CAAC,EAAE3D,KAAK,CAAC,CAAC,CAAC,GAAGoD,SAAS,GAAG,CAAC;UAC3BQ,CAAC,EAAE5D,KAAK,CAAC,CAAC,CAAC;UACX6D,KAAK,EAAET,SAAS;UAChBU,MAAM,EAAET;QACV,CAAC,EACDE,UACF,CAAC;QACD,OACEC,KAAK,IAAI;UACP1D,IAAI,EAAE,MAAM;UACZ0D,KAAK;UACLO,KAAK,EAAE;YACLC,IAAI,EAAE,IAAAC,mBAAY,EAACf,SAAS;UAC9B,CAAC;UACDgB,gBAAgB,EAAE;QACpB,CAAC;MAEL,CAAC;MACDjD,IAAI,EAAE5C;IACR,CAAC,CACF;IACD8F,IAAI,EAAE,CACJ;MACEzB,IAAI,EAAE,WAAW;MACjB0B,GAAG,EAAE,KAAK;MACVC,IAAI,EAAE,KAAK;MACXC,KAAK,EAAE,GAAG5E,+BAAoB,IAAI;MAClC6E,MAAM,EAAE,GAAG/E,uBAAY;IACzB,CAAC,CACF;IACDiE,OAAO,EAAE,CACP,GAAGxE,SAAS,EACZ;MACE,GAAG,IAAAuF,gCAAc,EAACrG,MAAiB,CAAC;MACpCiG,GAAG,EAAE,CAAC;MACNE,KAAK,EAAE,CAAC;MACRd,KAAK,EAAE;QACLiB,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE,CAAC;QACLC,EAAE,EAAE;MACN;IACF,CAAC;EAEL,CAAC;AACH,CAAC;AAACC,OAAA,CAAA5G,SAAA,GAAAA,SAAA","ignoreList":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.getOrderPositionDataMock = void 0;
|
|
7
|
+
const getOrderPositionDataMock = _ref => {
|
|
8
|
+
let {
|
|
9
|
+
min = 1.3,
|
|
10
|
+
max = 2.1,
|
|
11
|
+
bucketWidth = 0.005,
|
|
12
|
+
baseValue,
|
|
13
|
+
crossoverValue = baseValue
|
|
14
|
+
} = _ref;
|
|
15
|
+
const results = [];
|
|
16
|
+
const maxDistance = Math.max(baseValue - min, max - baseValue);
|
|
17
|
+
for (let currentPrice = min; currentPrice < max; currentPrice += bucketWidth) {
|
|
18
|
+
const distance = Math.abs(currentPrice - baseValue);
|
|
19
|
+
const proximityFactor = 1 - distance / maxDistance;
|
|
20
|
+
const strongProximityFactor = Math.pow(proximityFactor, 2);
|
|
21
|
+
let shortCountPercent;
|
|
22
|
+
let longCountPercent;
|
|
23
|
+
if (currentPrice === baseValue) {
|
|
24
|
+
shortCountPercent = Math.random() * 0.5;
|
|
25
|
+
longCountPercent = Math.random() * 0.5;
|
|
26
|
+
} else {
|
|
27
|
+
const maxDifference = 0.5;
|
|
28
|
+
const targetDifference = Math.random() * maxDifference * strongProximityFactor;
|
|
29
|
+
const baseRandom = Math.random() * (0.5 - targetDifference);
|
|
30
|
+
if (currentPrice < crossoverValue) {
|
|
31
|
+
shortCountPercent = baseRandom;
|
|
32
|
+
longCountPercent = baseRandom + targetDifference;
|
|
33
|
+
} else {
|
|
34
|
+
longCountPercent = baseRandom;
|
|
35
|
+
shortCountPercent = baseRandom + targetDifference;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
results.push({
|
|
39
|
+
shortCountPercent: Math.round(shortCountPercent * 10000) / 10000,
|
|
40
|
+
longCountPercent: Math.round(longCountPercent * 10000) / 10000,
|
|
41
|
+
price: currentPrice
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
return results;
|
|
45
|
+
};
|
|
46
|
+
exports.getOrderPositionDataMock = getOrderPositionDataMock;
|
|
47
|
+
//# 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","exports"],"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":";;;;;;AAcO,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;AAACkB,OAAA,CAAAzB,wBAAA,GAAAA,wBAAA","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":[]}
|
|
@@ -7,6 +7,7 @@ exports.transformDataForChart = exports.isDifferenceGreaterThanTwoWeeks = export
|
|
|
7
7
|
var _config = require("../../config");
|
|
8
8
|
var _types = require("../../types");
|
|
9
9
|
var _constants = require("./constants");
|
|
10
|
+
var _getOrderPositionDataMock = require("./getOrderPositionDataMock");
|
|
10
11
|
var _getPriceCandlesMock = require("./getPriceCandlesMock");
|
|
11
12
|
const getRectColor = sentiment => {
|
|
12
13
|
const colors = sentiment < 0 ? _config.colorMap.short : _config.colorMap.long;
|
|
@@ -65,19 +66,15 @@ const temporaryGranularityTimeSpanMap = {
|
|
|
65
66
|
[GranularityId.HOUR_4]: _types.TimeSpanId.MONTH_3,
|
|
66
67
|
[GranularityId.DAY_1]: _types.TimeSpanId.MONTH_6
|
|
67
68
|
};
|
|
68
|
-
const
|
|
69
|
+
const mockXAxisData = granularityId => {
|
|
69
70
|
const granularity = granularityInMilliseconds[granularityId];
|
|
70
71
|
const timeSpan = timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];
|
|
71
|
-
const currentTime =
|
|
72
|
-
const startDate =
|
|
72
|
+
const currentTime = new Date();
|
|
73
|
+
const startDate = currentTime;
|
|
73
74
|
const totalSteps = timeSpan / granularity;
|
|
74
75
|
const orderPositionDataForHistorical = new Array(totalSteps).fill(null).map((_, index) => {
|
|
75
76
|
const newDate = new Date(startDate.getTime() - index * granularity);
|
|
76
|
-
return {
|
|
77
|
-
time: `${newDate.toISOString().slice(0, 19)}Z`,
|
|
78
|
-
buckets: data.orderPositionBooks[0].buckets,
|
|
79
|
-
bucketWidth: data.orderPositionBooks[0].bucketWidth
|
|
80
|
-
};
|
|
77
|
+
return `${newDate.toISOString().slice(0, 19)}Z`;
|
|
81
78
|
}).reverse();
|
|
82
79
|
return orderPositionDataForHistorical;
|
|
83
80
|
};
|
|
@@ -125,37 +122,42 @@ const isDifferenceGreaterThanTwoWeeks = (startDate, endDate) => {
|
|
|
125
122
|
exports.isDifferenceGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks;
|
|
126
123
|
const transformDataForChart = _ref2 => {
|
|
127
124
|
let {
|
|
128
|
-
data,
|
|
129
125
|
granularity
|
|
130
126
|
} = _ref2;
|
|
131
|
-
const
|
|
132
|
-
const
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
127
|
+
const bucketWidth = 0.005;
|
|
128
|
+
const mockedXAxisData = mockXAxisData(granularity);
|
|
129
|
+
const mockedCandles = (0, _getPriceCandlesMock.getPriceCandlesMock)(mockedXAxisData.length);
|
|
130
|
+
const orderPositionData = mockedCandles.map((item, index) => {
|
|
131
|
+
return {
|
|
132
|
+
time: mockedXAxisData[index],
|
|
133
|
+
buckets: (0, _getOrderPositionDataMock.getOrderPositionDataMock)({
|
|
134
|
+
baseValue: item.high,
|
|
135
|
+
bucketWidth,
|
|
136
|
+
crossoverValue: item.high + (Math.random() - 0.5) * 0.3
|
|
137
|
+
}),
|
|
138
|
+
bucketWidth: 0.005
|
|
139
|
+
};
|
|
137
140
|
});
|
|
138
|
-
const ordersPositionsChartData =
|
|
141
|
+
const ordersPositionsChartData = orderPositionData.flatMap(_ref3 => {
|
|
139
142
|
let {
|
|
140
143
|
buckets,
|
|
141
144
|
time
|
|
142
|
-
} =
|
|
145
|
+
} = _ref3;
|
|
143
146
|
return buckets.map(bucket => [time, bucket.price, bucket.longCountPercent - bucket.shortCountPercent]);
|
|
144
147
|
}).filter(item => Math.abs(item[2]) > 0.15);
|
|
145
|
-
const
|
|
146
|
-
const candlesSeriesData = mockedCandles.map(_ref5 => {
|
|
148
|
+
const candlesSeriesData = mockedCandles.map(_ref4 => {
|
|
147
149
|
let {
|
|
148
150
|
close,
|
|
149
151
|
open,
|
|
150
152
|
low,
|
|
151
153
|
high
|
|
152
|
-
} =
|
|
154
|
+
} = _ref4;
|
|
153
155
|
return [+close.toFixed(5), +open.toFixed(5), +low.toFixed(5), +high.toFixed(5)];
|
|
154
156
|
});
|
|
155
157
|
return {
|
|
156
|
-
xAxisData,
|
|
158
|
+
xAxisData: mockedXAxisData,
|
|
157
159
|
ordersPositionsChartData,
|
|
158
|
-
ordersPositionsBucketWidth:
|
|
160
|
+
ordersPositionsBucketWidth: bucketWidth,
|
|
159
161
|
candlesSeriesData,
|
|
160
162
|
granularity
|
|
161
163
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":["_config","require","_types","_constants","_getPriceCandlesMock","getRectColor","sentiment","colors","colorMap","short","long","absSentiment","Math","abs","exports","GranularityId","timeSpansInMilliseconds","TimeSpanId","HOUR_1","HOUR_12","DAY_1","DAY_2","WEEK_1","WEEK_2","WEEK_3","MONTH_1","MONTH_3","MONTH_6","YEAR_1","YEAR_5","granularityInMilliseconds","MINUTE_5","MINUTE_15","MINUTE_30","HOUR_4","temporaryGranularityTimeSpanMap","mockOrderPositionDataForHistoricalData","data","granularityId","granularity","timeSpan","currentTime","orderPositionBooks","time","startDate","Date","totalSteps","orderPositionDataForHistorical","Array","fill","map","_","index","newDate","getTime","toISOString","slice","buckets","bucketWidth","reverse","getLabelData","_ref","xAxisData","isGreaterThanTwoWeeks","filter","record","arr","previousTimestamp","currentDate","previousDate","getDate","getMonth","item","name","toLocaleDateString","undefined","month","day","xAxis","y","CHART_HEIGHT","silent","emphasis","disabled","label","fontFamily","fontSize","position","align","formatter","isDifferenceGreaterThanTwoWeeks","endDate","date1","date2","TWO_WEEKS_IN_MS","differenceInMs","transformDataForChart","_ref2","mockedData","_ref3","ordersPositionsChartData","flatMap","_ref4","bucket","price","longCountPercent","shortCountPercent","mockedCandles","getPriceCandlesMock","length","candlesSeriesData","_ref5","close","open","low","high","toFixed","ordersPositionsBucketWidth"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/utils.ts"],"sourcesContent":["import type { GetOrderPositionBooksQuery } from '../../../gql/types/graphql';\nimport { colorMap } from '../../config';\nimport { TimeSpanId } from '../../types';\nimport { CHART_HEIGHT } from './constants';\nimport { getPriceCandlesMock } from './getPriceCandlesMock';\nimport type { GetLabelsDataProps, TransformDataForChartType } from './types';\n\nexport const getRectColor = (sentiment: number) => {\n const colors = sentiment < 0 ? colorMap.short : colorMap.long;\n const absSentiment = Math.abs(sentiment);\n\n if (absSentiment < 0.15) {\n return colors[3];\n }\n\n if (absSentiment < 0.25) {\n return colors[2];\n }\n\n if (absSentiment < 0.4) {\n return colors[1];\n }\n\n if (absSentiment >= 0.4) {\n return colors[0];\n }\n\n return 'transparent';\n};\n\nexport enum GranularityId {\n MINUTE_5 = 'MINUTE_5',\n MINUTE_15 = 'MINUTE_15',\n MINUTE_30 = 'MINUTE_30',\n HOUR_1 = 'HOUR_1',\n HOUR_4 = 'HOUR_4',\n DAY_1 = 'DAY_1',\n}\n\nconst timeSpansInMilliseconds: Record<TimeSpanId, number> = {\n [TimeSpanId.HOUR_1]: 60 * 60 * 1000,\n [TimeSpanId.HOUR_12]: 12 * 60 * 60 * 1000,\n [TimeSpanId.DAY_1]: 24 * 60 * 60 * 1000,\n [TimeSpanId.DAY_2]: 2 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_1]: 7 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_2]: 14 * 24 * 60 * 60 * 1000,\n [TimeSpanId.WEEK_3]: 21 * 24 * 60 * 60 * 1000,\n [TimeSpanId.MONTH_1]: 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.MONTH_3]: 3 * 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.MONTH_6]: 6 * 30 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.YEAR_1]: 365 * 24 * 60 * 60 * 1000, // Approximation\n [TimeSpanId.YEAR_5]: 5 * 365 * 24 * 60 * 60 * 1000, // Approximation\n};\n\nconst granularityInMilliseconds: Record<GranularityId, number> = {\n [GranularityId.MINUTE_5]: 5 * 60 * 1000,\n [GranularityId.MINUTE_15]: 15 * 60 * 1000,\n [GranularityId.MINUTE_30]: 30 * 60 * 1000,\n [GranularityId.HOUR_1]: 60 * 60 * 1000,\n [GranularityId.HOUR_4]: 4 * 60 * 60 * 1000,\n [GranularityId.DAY_1]: 24 * 60 * 60 * 1000,\n};\n\nconst temporaryGranularityTimeSpanMap: Record<GranularityId, TimeSpanId> = {\n [GranularityId.MINUTE_5]: TimeSpanId.DAY_2,\n [GranularityId.MINUTE_15]: TimeSpanId.WEEK_1,\n [GranularityId.MINUTE_30]: TimeSpanId.WEEK_2,\n [GranularityId.HOUR_1]: TimeSpanId.MONTH_1,\n [GranularityId.HOUR_4]: TimeSpanId.MONTH_3,\n [GranularityId.DAY_1]: TimeSpanId.MONTH_6,\n};\n\nconst mockOrderPositionDataForHistoricalData = (\n data: GetOrderPositionBooksQuery,\n granularityId: GranularityId\n) => {\n const granularity = granularityInMilliseconds[granularityId];\n const timeSpan =\n timeSpansInMilliseconds[temporaryGranularityTimeSpanMap[granularityId]];\n\n const currentTime = data.orderPositionBooks[0]!.time;\n\n const startDate = new Date(currentTime as string);\n const totalSteps = timeSpan / granularity;\n\n const orderPositionDataForHistorical = new Array(totalSteps)\n .fill(null)\n .map((_, index) => {\n const newDate = new Date(startDate.getTime() - index * granularity);\n\n return {\n time: `${newDate.toISOString().slice(0, 19)}Z`,\n buckets: data.orderPositionBooks[0]!.buckets,\n bucketWidth: data.orderPositionBooks[0]!.bucketWidth,\n };\n })\n .reverse();\n\n return orderPositionDataForHistorical;\n};\n\nexport const getLabelData = ({\n xAxisData,\n isGreaterThanTwoWeeks,\n}: GetLabelsDataProps) =>\n xAxisData\n .filter((record, index, arr) => {\n if (index === 0) {\n return false;\n }\n const previousTimestamp = arr[index - 1];\n const currentDate = new Date(record);\n const previousDate = new Date(previousTimestamp);\n\n return isGreaterThanTwoWeeks\n ? currentDate.getDate() !== previousDate.getDate()\n : currentDate.getMonth() !== previousDate.getMonth();\n })\n .map((item) => ({\n name: new Date(item).toLocaleDateString(undefined, {\n month: 'short',\n day: isGreaterThanTwoWeeks ? 'numeric' : undefined,\n }),\n xAxis: item,\n y: CHART_HEIGHT - 22,\n silent: true,\n emphasis: {\n disabled: true,\n },\n label: {\n fontFamily: 'Sofia W03',\n fontSize: 10,\n position: 'bottom',\n align: 'center',\n formatter: '{b}',\n },\n }));\n\nexport const isDifferenceGreaterThanTwoWeeks = (\n startDate: string,\n endDate: string\n) => {\n const date1 = new Date(startDate);\n const date2 = new Date(endDate);\n\n const TWO_WEEKS_IN_MS = 14 * 24 * 60 * 60 * 1000;\n\n const differenceInMs = Math.abs(date2.getTime() - date1.getTime());\n\n return differenceInMs < TWO_WEEKS_IN_MS;\n};\n\nexport const transformDataForChart: TransformDataForChartType = ({\n data,\n granularity,\n}) => {\n const mockedData = mockOrderPositionDataForHistoricalData(data, granularity);\n\n const xAxisData = mockedData.map(({ time }) => time);\n const ordersPositionsChartData = mockedData\n .flatMap(\n ({ buckets, time }) =>\n buckets.map((bucket) => [\n time,\n bucket!.price,\n bucket!.longCountPercent - bucket!.shortCountPercent,\n ]) as [string, number, number][]\n )\n .filter((item) => Math.abs(item[2]) > 0.15);\n\n const mockedCandles = getPriceCandlesMock(xAxisData.length);\n\n const candlesSeriesData: [number, number, number, number][] =\n mockedCandles.map(({ close, open, low, high }) => [\n +close.toFixed(5),\n +open.toFixed(5),\n +low.toFixed(5),\n +high.toFixed(5),\n ]);\n\n return {\n xAxisData,\n ordersPositionsChartData,\n ordersPositionsBucketWidth: mockedData[0]!.bucketWidth,\n candlesSeriesData,\n granularity,\n };\n};\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"utils.js","names":["_config","require","_types","_constants","_getOrderPositionDataMock","_getPriceCandlesMock","getRectColor","sentiment","colors","colorMap","short","long","absSentiment","Math","abs","exports","GranularityId","timeSpansInMilliseconds","TimeSpanId","HOUR_1","HOUR_12","DAY_1","DAY_2","WEEK_1","WEEK_2","WEEK_3","MONTH_1","MONTH_3","MONTH_6","YEAR_1","YEAR_5","granularityInMilliseconds","MINUTE_5","MINUTE_15","MINUTE_30","HOUR_4","temporaryGranularityTimeSpanMap","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","CHART_HEIGHT","silent","emphasis","disabled","label","fontFamily","fontSize","position","align","formatter","isDifferenceGreaterThanTwoWeeks","endDate","date1","date2","TWO_WEEKS_IN_MS","differenceInMs","transformDataForChart","_ref2","bucketWidth","mockedXAxisData","mockedCandles","getPriceCandlesMock","length","orderPositionData","time","buckets","getOrderPositionDataMock","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":"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","ignoreList":[]}
|
|
@@ -3,9 +3,9 @@ import { BarChart, CandlestickChart, CustomChart } from 'echarts/charts';
|
|
|
3
3
|
import { DataZoomInsideComponent, GraphicComponent, GridSimpleComponent, MarkPointComponent, TooltipComponent } from 'echarts/components';
|
|
4
4
|
import * as echarts from 'echarts/core';
|
|
5
5
|
import { CanvasRenderer } from 'echarts/renderers';
|
|
6
|
-
import React
|
|
7
|
-
import { CHART_HEIGHT
|
|
8
|
-
import {
|
|
6
|
+
import React from 'react';
|
|
7
|
+
import { CHART_HEIGHT } from './constants';
|
|
8
|
+
import { getOption } from './getOption';
|
|
9
9
|
import { getLabelData, isDifferenceGreaterThanTwoWeeks } from './utils';
|
|
10
10
|
echarts.use([GridSimpleComponent, GraphicComponent, BarChart, CanvasRenderer, DataZoomInsideComponent, CustomChart, TooltipComponent, CandlestickChart, MarkPointComponent]);
|
|
11
11
|
echarts.registerTheme('dark_theme', getChartTheme(Theme.Dark));
|
|
@@ -17,86 +17,49 @@ const Chart = _ref => {
|
|
|
17
17
|
const {
|
|
18
18
|
isDark
|
|
19
19
|
} = useLayoutProvider();
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
echartInstance.on('datazoom', () => {
|
|
20
|
+
return React.createElement(BaseChart, {
|
|
21
|
+
chartHeight: CHART_HEIGHT,
|
|
22
|
+
echarts: echarts,
|
|
23
|
+
isDark: isDark,
|
|
24
|
+
lazyUpdate: true,
|
|
25
|
+
option: getOption(data, isDark),
|
|
26
|
+
onEvents: {
|
|
27
|
+
datazoom: (_params, instance) => {
|
|
29
28
|
const {
|
|
30
|
-
dataZoom
|
|
31
|
-
|
|
32
|
-
text
|
|
33
|
-
}
|
|
34
|
-
} = echartInstance.getOption();
|
|
29
|
+
dataZoom
|
|
30
|
+
} = instance.getOption();
|
|
35
31
|
const {
|
|
36
|
-
|
|
37
|
-
|
|
32
|
+
startValue,
|
|
33
|
+
endValue
|
|
38
34
|
} = dataZoom[0];
|
|
39
|
-
const
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
35
|
+
const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(data.xAxisData[startValue], data.xAxisData[endValue]);
|
|
36
|
+
const labelsData = getLabelData({
|
|
37
|
+
xAxisData: data.xAxisData,
|
|
38
|
+
isGreaterThanTwoWeeks
|
|
39
|
+
});
|
|
40
|
+
instance.setOption({
|
|
41
|
+
xAxis: {
|
|
42
|
+
axisLabel: {
|
|
43
|
+
formatter: value => {
|
|
44
|
+
const date = new Date(value);
|
|
45
|
+
return isGreaterThanTwoWeeks ? `${date.toLocaleTimeString(undefined, {
|
|
46
|
+
hour: '2-digit',
|
|
47
|
+
minute: '2-digit'
|
|
48
|
+
})}` : `${date.toLocaleDateString(undefined, {
|
|
49
|
+
day: 'numeric'
|
|
50
|
+
})}`;
|
|
48
51
|
}
|
|
49
52
|
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
const labelsData = getLabelData({
|
|
56
|
-
xAxisData: data.xAxisData,
|
|
57
|
-
isGreaterThanTwoWeeks
|
|
58
|
-
});
|
|
59
|
-
echartInstance.setOption({
|
|
60
|
-
series: [{
|
|
61
|
-
id: 'candlestick',
|
|
62
|
-
markPoint: {
|
|
63
|
-
data: labelsData
|
|
64
|
-
}
|
|
65
|
-
}]
|
|
66
|
-
});
|
|
67
|
-
echartInstance.setOption({
|
|
68
|
-
xAxis: {
|
|
69
|
-
axisLabel: {
|
|
70
|
-
formatter: value => {
|
|
71
|
-
const date = new Date(value);
|
|
72
|
-
return isGreaterThanTwoWeeks ? `${date.toLocaleTimeString(undefined, {
|
|
73
|
-
hour: '2-digit',
|
|
74
|
-
minute: '2-digit'
|
|
75
|
-
})}` : `${date.toLocaleDateString(undefined, {
|
|
76
|
-
day: 'numeric'
|
|
77
|
-
})}`;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
53
|
+
},
|
|
54
|
+
series: [{
|
|
55
|
+
id: 'candlestick',
|
|
56
|
+
markPoint: {
|
|
57
|
+
data: labelsData
|
|
80
58
|
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
echartInstance.setOption({
|
|
85
|
-
title: {
|
|
86
|
-
text: `${interval},${isGreaterThanTwoWeeks ? 1 : 0}`
|
|
87
|
-
}
|
|
88
|
-
});
|
|
89
|
-
}
|
|
90
|
-
});
|
|
59
|
+
}]
|
|
60
|
+
});
|
|
61
|
+
}
|
|
91
62
|
}
|
|
92
|
-
}, [echartRef, isDark, data]);
|
|
93
|
-
return React.createElement(BaseChart, {
|
|
94
|
-
ref: echartRef,
|
|
95
|
-
chartHeight: CHART_HEIGHT,
|
|
96
|
-
echarts: echarts,
|
|
97
|
-
isDark: isDark,
|
|
98
|
-
lazyUpdate: true,
|
|
99
|
-
option: getOption(data)
|
|
100
63
|
});
|
|
101
64
|
};
|
|
102
65
|
export { Chart };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Chart.js","names":["BaseChart","getChartTheme","Theme","useLayoutProvider","BarChart","CandlestickChart","CustomChart","DataZoomInsideComponent","GraphicComponent","GridSimpleComponent","MarkPointComponent","TooltipComponent","echarts","CanvasRenderer","React","
|
|
1
|
+
{"version":3,"file":"Chart.js","names":["BaseChart","getChartTheme","Theme","useLayoutProvider","BarChart","CandlestickChart","CustomChart","DataZoomInsideComponent","GraphicComponent","GridSimpleComponent","MarkPointComponent","TooltipComponent","echarts","CanvasRenderer","React","CHART_HEIGHT","getOption","getLabelData","isDifferenceGreaterThanTwoWeeks","use","registerTheme","Dark","Light","Chart","_ref","data","isDark","createElement","chartHeight","lazyUpdate","option","onEvents","datazoom","_params","instance","dataZoom","startValue","endValue","isGreaterThanTwoWeeks","xAxisData","labelsData","setOption","xAxis","axisLabel","formatter","value","date","Date","toLocaleTimeString","undefined","hour","minute","toLocaleDateString","day","series","id","markPoint"],"sources":["../../../../../src/CrowdViewWidget/components/Chart/Chart.tsx"],"sourcesContent":["import {\n BaseChart,\n getChartTheme,\n Theme,\n useLayoutProvider,\n} from '@oanda/labs-widget-common';\nimport type { EChartsType } from 'echarts';\nimport { BarChart, CandlestickChart, CustomChart } from 'echarts/charts';\nimport {\n DataZoomInsideComponent,\n GraphicComponent,\n GridSimpleComponent,\n MarkPointComponent,\n TooltipComponent,\n} from 'echarts/components';\nimport * as echarts from 'echarts/core';\nimport { CanvasRenderer } from 'echarts/renderers';\nimport React from 'react';\n\nimport { CHART_HEIGHT } from './constants';\nimport { getOption } from './getOption';\nimport type { ChartProps } from './types';\nimport { getLabelData, isDifferenceGreaterThanTwoWeeks } from './utils';\n\necharts.use([\n GridSimpleComponent,\n GraphicComponent,\n BarChart,\n CanvasRenderer,\n DataZoomInsideComponent,\n CustomChart,\n TooltipComponent,\n CandlestickChart,\n MarkPointComponent,\n]);\n\necharts.registerTheme('dark_theme', getChartTheme(Theme.Dark));\necharts.registerTheme('light_theme', getChartTheme(Theme.Light));\n\nconst Chart = ({ data }: ChartProps) => {\n const { isDark } = useLayoutProvider();\n\n return (\n <BaseChart\n chartHeight={CHART_HEIGHT}\n echarts={echarts}\n isDark={isDark}\n lazyUpdate={true}\n option={getOption(data, isDark)}\n onEvents={{\n datazoom: (_params: unknown, instance: EChartsType) => {\n const { dataZoom } = instance.getOption();\n\n const { startValue, endValue } = (\n dataZoom as { startValue: number; endValue: number }[]\n )[0];\n\n const isGreaterThanTwoWeeks = isDifferenceGreaterThanTwoWeeks(\n data.xAxisData[startValue],\n data.xAxisData[endValue]\n );\n\n const labelsData = getLabelData({\n xAxisData: data.xAxisData,\n isGreaterThanTwoWeeks,\n });\n\n instance.setOption({\n xAxis: {\n axisLabel: {\n formatter: (value: string) => {\n const date = new Date(value);\n return isGreaterThanTwoWeeks\n ? `${date.toLocaleTimeString(undefined, {\n hour: '2-digit',\n minute: '2-digit',\n })}`\n : `${date.toLocaleDateString(undefined, {\n day: 'numeric',\n })}`;\n },\n },\n },\n series: [\n {\n id: 'candlestick',\n markPoint: {\n data: labelsData,\n },\n },\n ],\n });\n },\n }}\n />\n );\n};\n\nexport { Chart };\n"],"mappings":"AAAA,SACEA,SAAS,EACTC,aAAa,EACbC,KAAK,EACLC,iBAAiB,QACZ,2BAA2B;AAElC,SAASC,QAAQ,EAAEC,gBAAgB,EAAEC,WAAW,QAAQ,gBAAgB;AACxE,SACEC,uBAAuB,EACvBC,gBAAgB,EAChBC,mBAAmB,EACnBC,kBAAkB,EAClBC,gBAAgB,QACX,oBAAoB;AAC3B,OAAO,KAAKC,OAAO,MAAM,cAAc;AACvC,SAASC,cAAc,QAAQ,mBAAmB;AAClD,OAAOC,KAAK,MAAM,OAAO;AAEzB,SAASC,YAAY,QAAQ,aAAa;AAC1C,SAASC,SAAS,QAAQ,aAAa;AAEvC,SAASC,YAAY,EAAEC,+BAA+B,QAAQ,SAAS;AAEvEN,OAAO,CAACO,GAAG,CAAC,CACVV,mBAAmB,EACnBD,gBAAgB,EAChBJ,QAAQ,EACRS,cAAc,EACdN,uBAAuB,EACvBD,WAAW,EACXK,gBAAgB,EAChBN,gBAAgB,EAChBK,kBAAkB,CACnB,CAAC;AAEFE,OAAO,CAACQ,aAAa,CAAC,YAAY,EAAEnB,aAAa,CAACC,KAAK,CAACmB,IAAI,CAAC,CAAC;AAC9DT,OAAO,CAACQ,aAAa,CAAC,aAAa,EAAEnB,aAAa,CAACC,KAAK,CAACoB,KAAK,CAAC,CAAC;AAEhE,MAAMC,KAAK,GAAGC,IAAA,IAA0B;EAAA,IAAzB;IAAEC;EAAiB,CAAC,GAAAD,IAAA;EACjC,MAAM;IAAEE;EAAO,CAAC,GAAGvB,iBAAiB,CAAC,CAAC;EAEtC,OACEW,KAAA,CAAAa,aAAA,CAAC3B,SAAS;IACR4B,WAAW,EAAEb,YAAa;IAC1BH,OAAO,EAAEA,OAAQ;IACjBc,MAAM,EAAEA,MAAO;IACfG,UAAU,EAAE,IAAK;IACjBC,MAAM,EAAEd,SAAS,CAACS,IAAI,EAAEC,MAAM,CAAE;IAChCK,QAAQ,EAAE;MACRC,QAAQ,EAAEA,CAACC,OAAgB,EAAEC,QAAqB,KAAK;QACrD,MAAM;UAAEC;QAAS,CAAC,GAAGD,QAAQ,CAAClB,SAAS,CAAC,CAAC;QAEzC,MAAM;UAAEoB,UAAU;UAAEC;QAAS,CAAC,GAC5BF,QAAQ,CACR,CAAC,CAAC;QAEJ,MAAMG,qBAAqB,GAAGpB,+BAA+B,CAC3DO,IAAI,CAACc,SAAS,CAACH,UAAU,CAAC,EAC1BX,IAAI,CAACc,SAAS,CAACF,QAAQ,CACzB,CAAC;QAED,MAAMG,UAAU,GAAGvB,YAAY,CAAC;UAC9BsB,SAAS,EAAEd,IAAI,CAACc,SAAS;UACzBD;QACF,CAAC,CAAC;QAEFJ,QAAQ,CAACO,SAAS,CAAC;UACjBC,KAAK,EAAE;YACLC,SAAS,EAAE;cACTC,SAAS,EAAGC,KAAa,IAAK;gBAC5B,MAAMC,IAAI,GAAG,IAAIC,IAAI,CAACF,KAAK,CAAC;gBAC5B,OAAOP,qBAAqB,GACxB,GAAGQ,IAAI,CAACE,kBAAkB,CAACC,SAAS,EAAE;kBACpCC,IAAI,EAAE,SAAS;kBACfC,MAAM,EAAE;gBACV,CAAC,CAAC,EAAE,GACJ,GAAGL,IAAI,CAACM,kBAAkB,CAACH,SAAS,EAAE;kBACpCI,GAAG,EAAE;gBACP,CAAC,CAAC,EAAE;cACV;YACF;UACF,CAAC;UACDC,MAAM,EAAE,CACN;YACEC,EAAE,EAAE,aAAa;YACjBC,SAAS,EAAE;cACT/B,IAAI,EAAEe;YACR;UACF,CAAC;QAEL,CAAC,CAAC;MACJ;IACF;EAAE,CACH,CAAC;AAEN,CAAC;AAED,SAASjB,KAAK","ignoreList":[]}
|
|
@@ -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":[]}
|