UNPKG

@fusioncharts/fusiontime

Version:

FusionCharts JavaScript time-series charting framework

1 lines 13.2 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule=true;exports.default=void 0;var _transpose=_interopRequireDefault(require("ramda/es/transpose"));var _line=_interopRequireDefault(require("../components/dataset/line"));var _column=_interopRequireDefault(require("../components/dataset/column"));var _candlestick=_interopRequireDefault(require("../components/dataset/candlestick"));var _ohlc=_interopRequireDefault(require("../components/dataset/ohlc"));var _stackGenerator=_interopRequireDefault(require("@fusioncharts/utils/src/stack-generator"));var _diverge=_interopRequireDefault(require("@fusioncharts/utils/src/stack-generator/offsets/diverge"));var _null=_interopRequireDefault(require("@fusioncharts/utils/src/stack-generator/offsets/null"));var _lib=require("@fusioncharts/core/src/lib");var _columnRange=_interopRequireDefault(require("../components/dataset/column-range"));var _areaRange=_interopRequireDefault(require("../components/dataset/area-range"));var _fcTimeSeparator=_interopRequireDefault(require("@fusioncharts/utils/src/string/fc-time-separator"));var LINE="line",getDataset=function getDataset(plotType){switch(plotType){case"column":return _column.default;case"candlestick":return _candlestick.default;case"column-range":return _columnRange.default;case"area-range":return _areaRange.default;case"ohlc":return _ohlc.default;default:return _line.default}},getSeriesName=function getSeriesName(str){return str.split(_fcTimeSeparator.default)[0]},getMeasureOpName=function getMeasureOpName(str){return str.split(_fcTimeSeparator.default).slice(1).join(_fcTimeSeparator.default)},getVisibility=function getVisibility(bool){return bool?"visible":"hidden"},isOHLC=function isOHLC(plotType){return plotType==="ohlc"||plotType==="candlestick"},isRangedPlot=function isRangedPlot(plotType){return plotType==="column-range"||plotType==="area-range"},isPlotStackable=function isPlotStackable(plotType){return plotType==="area"||plotType==="smooth-area"||plotType==="step-area"||plotType==="column"},getAggregationName=function getAggregationName(str){if(str==="avg"){return"average"}return str},getAggregationType=function getAggregationType(input){var aggObj={},values;if(typeof input==="string"){values=input.split(_fcTimeSeparator.default);return getAggregationName(values[values.length-1])}input.forEach((function(currInput){if(currInput){values=currInput.split(_fcTimeSeparator.default);aggObj[values[0].trim()]=getAggregationName(values[1].trim())}}));return aggObj},selector=function selector(plot){var _ref2;if(plot.stack||!plot.tableInfo.filterItem){var _ref;return _ref={},_ref[plot.value[0]]=getSeriesName(plot.value[0]),_ref}return _ref2={},_ref2[plot.value[0]]=plot.tableInfo.filterItem,_ref2};var _default=exports.default=function _default(canvas){var chart=canvas.getFromEnv("chart"),legendMap=canvas.getFromEnv("legendMap"),canvasConf=canvas.config,dataSource=canvas.getFromEnv("dataSource"),plotConfigurations=dataSource.plotconfig||{},ordinalScale=canvas.getFromEnv("ordinalScale"),isContext=canvasConf.isContext,msDsMap=canvasConf.multiSeriesDatasetMap,enableMarkers=canvasConf.enableMarkers,xConfigs=isContext?chart.config.contextAxesX:chart.config.focusAxesX,yConfigs=isContext?chart.config.contextAxesY:chart.config.focusAxesY,prediction=canvas.getFromEnv("prediction"),predictiveDate=prediction?canvas.getFromEnv("baseTimeConverter").parse(prediction.date):_lib.UNDEF;prediction.dateMs=prediction.enabled?predictiveDate?predictiveDate.getTime():Date.now():_lib.UNDEF;if(isContext){canvasConf.plotConfigs.forEach((function(_ref3){var plots=_ref3.plots;var isArea=plots.filter((function(_ref4){var plottype=_ref4.plottype;return plottype==="column"})).length>1?"area":null;plots.forEach((function(ob){if(isRangedPlot(ob.plottype)){ob.value=ob.high;ob.isRange=true;ob.plottype=typeof ob.typeinnavigator==="string"&&ob.typeinnavigator||"line"}else if(isOHLC(ob.plottype)){ob.value=ob.close||ob.low||ob.high||ob.open||[];ob.plottype=typeof ob.typeinnavigator==="string"&&ob.typeinnavigator||"line"}else if(ob.plottype==="column"){ob.plottype=ob.typeinnavigator||isArea||(ob.value.length>1?"area":"line")}}))}))}canvasConf.plotConfigs.forEach((function(plotConfig,k){var xConfig=xConfigs[plotConfig.x],yConfig=yConfigs[plotConfig.y],binDecider=xConfig.binDecider,scaleX=xConfig.scale,scaleY=yConfig.scale,plotGenericStyle=yConfig.plotstyle||{},columnPlotInfo=plotConfig.plots.filter((function(_ref5){var plottype=_ref5.plottype;return plottype==="column"})),totalColumnPlots=columnPlotInfo.length,columnSeriesNames=columnPlotInfo.map(selector);var currentColumnIndex=0;plotConfig.plots.forEach((function(plot,j){var nodeInfo=plot.tableInfo,nodeTable=nodeInfo.table,filterItem=nodeInfo.filterItem,oriPlotInfo=yConfig.plot[plot.plotInAxisIndex],plotInlineStyle=oriPlotInfo.style||{},mergedInlineStyle,connectNullData=oriPlotInfo.connectnulldata,plotCosmetics,genericCosmetics,tableData=nodeTable.getData(),data=tableData.data,dataTable=nodeTable,timeFormatterFn=xConfig.timeFormatterFn,plotType,groupIndex,totalGroups,Dataset,isVisible,measures=[oriPlotInfo.value],seriesInfo={};oriPlotInfo.group&&(seriesInfo[oriPlotInfo.group]=filterItem);mergedInlineStyle=(0,_lib.extend2)((0,_lib.extend2)({},plotGenericStyle),plotInlineStyle);if(!isContext&&(isOHLC(plot.plottype)||isRangedPlot(plot.plottype))){var arr=plot.close||plot.open||plot.high||plot.low;if(arr.length>1||filterItem){plot.plottype=LINE;plot.value=arr}}plotType=plot.plottype;plotCosmetics=plotConfigurations[plotType]||{};genericCosmetics=plotConfigurations.generic||{};Dataset=getDataset(plotType);if(plotType==="column"){groupIndex=currentColumnIndex++;totalGroups=totalColumnPlots}if(isOHLC(plotType)){var ohlcs=(0,_transpose.default)([plot.open||[plot.open],plot.high||[plot.high],plot.low||[plot.low],plot.close||[plot.close]].filter((function(s){return!!s}))),open=oriPlotInfo.open,high=oriPlotInfo.high,low=oriPlotInfo.low,close=oriPlotInfo.close;if(open||high||low||close){measures[0]={open:open,high:high,low:low,close:close}}ohlcs.forEach((function(ohlc,i){var dsInstance=canvas.attachChild(Dataset,"dataset",""+plot.value+plotType+i+j+k);dsInstance.addToEnv("binDecider",binDecider);dsInstance.addToEnv("xScale",scaleX);dsInstance.addToEnv("yScale",scaleY);dsInstance.configure({data:data,scaleX:scaleX,scaleY:scaleY,formatterFn:yConfig.formatterFn,timeFormatterFn:timeFormatterFn,yAxisAlign:(0,_lib.pluck)(yConfig.align,"left"),styleConfig:mergedInlineStyle,plotCosmetics:plotCosmetics,genericCosmetics:genericCosmetics,aggregation:getAggregationType(ohlc),prefix:yConfig.formatLabelPrefix,suffix:yConfig.formatLabelSuffix,indices:[dataTable.indexOf(nodeInfo.position)].concat(ohlc.map((function(name){return dataTable.indexOf(name)}))),enableMarkers:enableMarkers,primaryColor:true,type:plotType,series:plot.value,measures:measures,calculateFromContext:isContext,prediction:prediction,useNullStyles:!isContext})}))}else if(isRangedPlot(plotType)){var ranges=(0,_transpose.default)([plot.high||[plot.high],plot.low||[plot.low]].filter((function(s){return!!s}))),_high=oriPlotInfo.high,_low=oriPlotInfo.low;if(_high||_low){measures[0]={high:_high,low:_low}}if(plot.name){isVisible=legendMap[plot.name]&&legendMap[plot.name].visibility;isVisible===_lib.UNDEF&&(isVisible=true)}else{isVisible=true}ranges.forEach((function(range,i){var dsInstance=canvas.attachChild(Dataset,"dataset",""+plot.value+plotType+i+j+k);dsInstance.addToEnv("binDecider",binDecider);dsInstance.addToEnv("xScale",scaleX);dsInstance.addToEnv("yScale",scaleY);dsInstance.configure({data:data,scaleX:scaleX,scaleY:scaleY,visibility:getVisibility(isVisible),formatterFn:yConfig.formatterFn,timeFormatterFn:timeFormatterFn,yAxisAlign:(0,_lib.pluck)(yConfig.align,"left"),styleConfig:mergedInlineStyle,plotCosmetics:plotCosmetics,genericCosmetics:genericCosmetics,aggregation:getAggregationType(range),prefix:yConfig.formatLabelPrefix,suffix:yConfig.formatLabelSuffix,connectNullData:connectNullData,indices:[dataTable.indexOf(nodeInfo.position)].concat(range.map((function(name){return dataTable.indexOf(name)}))),enableMarkers:enableMarkers,primaryColor:plot.name?ordinalScale.getRangeValue(plot.name):ordinalScale.getRangeValue(plot.high[0]+_fcTimeSeparator.default+plot.low[0]),type:plotType,series:plot.value,measures:measures,calculateFromContext:isContext,prediction:prediction,useNullStyles:!isContext})}))}else{if(plot.stack&&isPlotStackable(plotType)){var xIndex=dataTable.indexOf(nodeInfo.position),sumColumn=""+getMeasureOpName(plot.value[0])+_fcTimeSeparator.default+"sum",generator=(new _stackGenerator.default).setValueAccessor((function(d,key){if((legendMap[getSeriesName(key)]||{}).visibility){return d[dataTable.indexOf(key)]}return 0})).setKeysAccessor((function(){return plot.value.filter((function(name){return dataTable.indexOf(name)>=0}))})).setOffset(scaleY.getType()==="log"?_null.default:_diverge.default);dataTable.addColumns({name:sumColumn,type:"number",calcFn:function calcFn(row,cols){return plot.value.reduce((function(acc,val){if((legendMap[getSeriesName(val)]||{}).visibility){return acc+row[cols[val]]}return acc}),0)}});var series=generator.generate(dataTable.getData().data),seriesLength=series.length;series.forEach((function(serie,index){var dsInstance=canvas.attachChild(Dataset,"dataset",serie.key+plotType+index+j+k),seriesName=getSeriesName(serie.key),serieData=serie.map((function(s){return[s.data[xIndex],s[0],s[1],s.data[dataTable.indexOf(sumColumn)]]}));isVisible=legendMap[seriesName]&&legendMap[seriesName].visibility;isVisible===_lib.UNDEF&&(isVisible=true);oriPlotInfo.stack&&(seriesInfo[oriPlotInfo.stack]=seriesName);dsInstance.addToEnv("binDecider",binDecider);dsInstance.addToEnv("xScale",scaleX);dsInstance.addToEnv("yScale",scaleY);if(filterItem){msDsMap[""+filterItem+_fcTimeSeparator.default+serie.key]=dsInstance}else{msDsMap[serie.key]=dsInstance}dsInstance.configure({data:serieData,datasetIndex:index,seriesLength:seriesLength,aggregation:getAggregationType(serie.key),visibility:getVisibility(isVisible),scaleX:scaleX,scaleY:scaleY,timeFormatterFn:timeFormatterFn,legendInteracted:canvasConf.legendInteracted,groupIndex:groupIndex,yAxisAlign:(0,_lib.pluck)(yConfig.align,"left"),totalGroups:totalGroups,formatterFn:yConfig.formatterFn,prefix:yConfig.formatLabelPrefix,suffix:yConfig.formatLabelSuffix,styleConfig:mergedInlineStyle,plotCosmetics:plotCosmetics,genericCosmetics:genericCosmetics,connectNullData:connectNullData,indices:[0,2,1,3],primaryColor:ordinalScale.getRangeValue(seriesName),type:plotType,series:seriesName,enableMarkers:enableMarkers,measures:measures,calculateFromContext:isContext,seriesInfo:Object.assign({},seriesInfo),prediction:prediction,useNullStyles:!isContext})}))}else{var meanColumn;if(plot.isRange){var _ranges=(0,_transpose.default)([plot.high||[plot.high],plot.low||[plot.low]].filter((function(s){return!!s})));var indices;meanColumn=""+getMeasureOpName(plot.high[0])+_fcTimeSeparator.default+getMeasureOpName(plot.low[0])+_fcTimeSeparator.default+"mean";_ranges.forEach((function(range){indices=range.map((function(name){return dataTable.indexOf(name)}));dataTable.addColumns({type:"number",name:meanColumn,calcFn:function calcFn(row){return(row[indices[0]]+row[indices[1]])/2}})}))}plot.value.forEach((function(name,i){var seriesName=plot.stack?getSeriesName(name):plot.isRange?plot.name?plot.name:plot.high[0]+_fcTimeSeparator.default+plot.low[0]:filterItem||getSeriesName(name),dsInstance=canvas.attachChild(Dataset,"dataset",seriesName+plotType+i+j+k),status,currentGroupIndex,currentTotalGroups;isVisible=legendMap[seriesName]&&legendMap[seriesName].visibility;isVisible===_lib.UNDEF&&(isVisible=true);if(plotType==="column"){status=columnSeriesNames.filter((function(obj){return legendMap[Object.values(obj)[0]].visibility}));currentGroupIndex=status.findIndex((function(obj){var key=Object.keys(obj)[0];if(filterItem){if(key===name&&obj[key]===filterItem){return true}return false}return key===name}));if(currentGroupIndex!==-1){currentTotalGroups=status.length}else{currentGroupIndex=_lib.UNDEF}}if(plot.stack){seriesInfo[plot.stack]=seriesName}dsInstance.addToEnv("binDecider",binDecider);dsInstance.addToEnv("xScale",scaleX);dsInstance.addToEnv("yScale",scaleY);dsInstance.configure({data:data,scaleX:scaleX,scaleY:scaleY,timeFormatterFn:timeFormatterFn,legendInteracted:canvasConf.legendInteracted,groupIndex:currentGroupIndex,totalGroups:currentTotalGroups,visibility:getVisibility(isVisible),yAxisAlign:(0,_lib.pluck)(yConfig.align,"left"),formatterFn:yConfig.formatterFn,prefix:yConfig.formatLabelPrefix,suffix:yConfig.formatLabelSuffix,styleConfig:mergedInlineStyle,aggregation:getAggregationType(name),plotCosmetics:plotCosmetics,genericCosmetics:genericCosmetics,connectNullData:connectNullData,indices:[dataTable.indexOf(nodeInfo.position),plot.isRange?dataTable.indexOf(meanColumn):dataTable.indexOf(name)],primaryColor:ordinalScale.getRangeValue(seriesName),type:plotType,series:seriesName,enableMarkers:enableMarkers,measures:measures,calculateFromContext:isContext,seriesInfo:Object.assign({},seriesInfo),prediction:prediction,useNullStyles:!isContext})}))}}}))}))};