UNPKG

@fusioncharts/fusiontime

Version:

FusionCharts JavaScript time-series charting framework

1 lines 18.1 kB
"use strict";var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _extends=require("@babel/runtime/helpers/extends");exports.__esModule=true;exports.default=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _binDecider=_interopRequireWildcard(require("@fusioncharts/utils/src/bin-decider"));var _index=require("@fusioncharts/core/src/lib/index");var _index2=require("@fusioncharts/utils/src/clip-utils/index.js");var _timeIntervals2=require("@fusioncharts/utils/src/time-intervals");var _utc=require("@fusioncharts/utils/src/time-intervals/utc");var _ftLog=_interopRequireDefault(require("@fusioncharts/utils/src/scales/ft-log"));var _extent=_interopRequireDefault(require("@fusioncharts/utils/src/array/extent"));var _linear=_interopRequireDefault(require("@fusioncharts/utils/src/scales/linear"));var _isObject=_interopRequireDefault(require("@fusioncharts/utils/src/type/is-object"));var _timeBin=_interopRequireDefault(require("@fusioncharts/utils/src/scales/time-bin"));var _timeConverter=_interopRequireDefault(require("@fusioncharts/utils/src/time-converter"));var _utcBin=_interopRequireDefault(require("@fusioncharts/utils/src/scales/utc-bin"));var _capsFirst=_interopRequireDefault(require("@fusioncharts/utils/src/string/caps-first.js"));var _standardBins=require("@fusioncharts/utils/src/bin-decider/standard-bins");var _atomicity=require("../../_utils/atomicity");var _time=require("@fusioncharts/utils/src/defaults/time");var _operators=require("@fusioncharts/datatable/src/operators");var _timeBucket=require("@fusioncharts/utils/src/time-bucket");var _timeInterval=_interopRequireDefault(require("@fusioncharts/utils/src/time-intervals/time-interval"));var _time2=_interopRequireDefault(require("@fusioncharts/utils/src/scales/time"));var _utc2=_interopRequireDefault(require("@fusioncharts/utils/src/scales/utc"));var _isArray=_interopRequireDefault(require("@fusioncharts/utils/src/type/is-array"));function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap,t=new WeakMap;return(_getRequireWildcardCache=function _getRequireWildcardCache(e){return e?t:r})(e)}function _interopRequireWildcard(e,r){if(!r&&e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var t=_getRequireWildcardCache(r);if(t&&t.has(e))return t.get(e);var n=_extends({},null),a=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var u in e)if("default"!==u&&{}.hasOwnProperty.call(e,u)){var i=a?Object.getOwnPropertyDescriptor(e,u):null;i&&(i.get||i.set)?Object.defineProperty(n,u,i):n[u]=e[u]}return n.default=e,t&&t.set(e,n),n}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter((function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable}))),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach((function(r){(0,_defineProperty2.default)(e,r,t[r])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach((function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))}))}return e}var TYPES={time:_timeBin.default,utctime:_utcBin.default,scaletime:_time2.default,scaleutctime:_utc2.default,numeric:_linear.default,log:_ftLog.default},SHARE_RATIO=.8;var _default=exports.default=function _default(chart){var _ref6;var config=chart.config,contextAxesX=config.contextAxesX,clipDatesObj=(0,_isArray.default)(contextAxesX[0].clip)?contextAxesX[0].clip:[],focusAxesX=config.focusAxesX,focusAxesY=config.focusAxesY,dateColumnName=chart.getFromEnv("dateColumn").name,customBin=focusAxesX[0].binning,table=config.dataTable,_table$getData=table.getData(),data=_table$getData.data,schema=_table$getData.schema,isUTC=chart.getFromEnv("UTC"),autoClipNullData=contextAxesX[0].autoclipnulldata?contextAxesX[0].autoclipnulldata.toLowerCase():null,autoClipMultiplier=contextAxesX[0].autoclipmultiplier||1,clipFormat="%b %d %Y %H:%M:%S:%L",timeConstant,firstDate,timeIntervals=isUTC?{Year:new _timeInterval.default(_utc.utcYearObj),Month:new _timeInterval.default(_utc.utcMonthObj),Week:new _timeInterval.default(_utc.utcWeekObj),Day:new _timeInterval.default(_utc.utcDayObj),Hour:new _timeInterval.default(_utc.utcHourObj),Minute:new _timeInterval.default(_utc.utcMinuteObj),Second:new _timeInterval.default(_timeIntervals2.secondObj),Millisecond:new _timeInterval.default(_timeIntervals2.millisecondObj)}:{Year:new _timeInterval.default(_timeIntervals2.yearObj),Month:new _timeInterval.default(_timeIntervals2.monthObj),Week:new _timeInterval.default(_timeIntervals2.weekObj),Day:new _timeInterval.default(_timeIntervals2.dayObj),Hour:new _timeInterval.default(_timeIntervals2.hourObj),Minute:new _timeInterval.default(_timeIntervals2.minuteObj),Second:new _timeInterval.default(_timeIntervals2.secondObj),Millisecond:new _timeInterval.default(_timeIntervals2.millisecondObj)},isWeekFormat=function isWeekFormat(format){return/^(%w[^%y]*%y)$/i.test(format)},weekDefaultBining={week:0},unclippedTimeIntervals=isUTC?{Day:_utc.utcDay,Hour:_utc.utcHour,Week:_utc.utcWeek,Year:_utc.utcYear,Month:_utc.utcMonth,Minute:_utc.utcMinute,Second:_utc.utcSecond,Millisecond:_utc.utcMillisecond}:{Day:_timeIntervals2.timeDay,Hour:_timeIntervals2.timeHour,Week:_timeIntervals2.timeWeek,Year:_timeIntervals2.timeYear,Month:_timeIntervals2.timeMonth,Minute:_timeIntervals2.timeMinute,Second:_timeIntervals2.timeSecond,Millisecond:_timeIntervals2.timeMillisecond},chartWidth=chart.getFromEnv("chartWidth"),range=[0,SHARE_RATIO*chartWidth/focusAxesX.length],parsedClipDates,repeatClips,singleClips,clippedRows,UNDEF,makeScale=function makeScale(_ref){var _ref$type=_ref.type,type=_ref$type===void 0?"time":_ref$type;var Scale=(type==="time"&&isUTC?TYPES["utc"+type]:TYPES[type])||TYPES.time;return new Scale},makeBin=function makeBin(_ref2,index){var _schema$dateColumnInd;var _ref2$type=_ref2.type,type=_ref2$type===void 0?"time":_ref2$type,plot=_ref2.plot;var Scale=(type==="time"&&isUTC?TYPES["scaleutc"+type]:TYPES["scale"+type])||TYPES.scaletime,scale=new Scale,dateColumnIndex=config==null?void 0:config.dateColumnIndex,format=dateColumnIndex!==UNDEF?(_schema$dateColumnInd=schema[dateColumnIndex])==null?void 0:_schema$dateColumnInd.format:null,bin;if(!customBin&&format&&isWeekFormat(format)){customBin=weekDefaultBining}if(customBin){bin=new _binDecider.default((0,_standardBins.getCustomBins)(timeIntervals.Year,timeIntervals.Month,timeIntervals.Week,timeIntervals.Day,timeIntervals.Hour,timeIntervals.Minute,timeIntervals.Second,timeIntervals.Millisecond,customBin))}else{bin=new _binDecider.default((0,_standardBins.getDefaultBins)(timeIntervals.Year,timeIntervals.Month,timeIntervals.Week,timeIntervals.Day,timeIntervals.Hour,timeIntervals.Minute,timeIntervals.Second,timeIntervals.Millisecond))}bin.setScale(scale);bin.setBinRange(range);bin.setRangeThreshold(config.pixelMultiplier*_binDecider.DEFAULT_THRESHOLD_PIXELS);return bin},makeScalesBins=function makeScalesBins(axesX){var scales=[],bins=[],i,len=axesX.length;for(i=0;i<len;i++){scales[i]=makeScale(axesX[i]);scales[i].setTimeInterval(timeIntervals);scales[i].setUnclippedTimeIntervals(unclippedTimeIntervals);bins[i]=makeBin(axesX[i],i);if(parsedClipDates.length)scales[i].setClippings(parsedClipDates);scales[i].setThresholdIntervals((0,_standardBins.getDefaultBins)(timeIntervals.Year,timeIntervals.Month,timeIntervals.Week,timeIntervals.Day,timeIntervals.Hour,timeIntervals.Minute,timeIntervals.Second,timeIntervals.Millisecond))}return{scales:scales,bins:bins}},contextInfo,focusInfo,minMaxFn=function minMaxFn(_ref3){var value=_ref3.value;return[table.min(value),table.max(value)]},calculateDomain=function calculateDomain(axis){var _ref4;var arr=axis.plot.map(minMaxFn),context=(0,_extent.default)((_ref4=[]).concat.apply(_ref4,arr),Number),minBinDuration=contextInfo.bins[0].getBinMin()[2],value=axis.plot[0].value,format=axis.format||schema.find((function(_ref5){var name=_ref5.name;return name===value})).format,parser=isUTC?_timeConverter.default.utcParser(format):_timeConverter.default.parser(format),initialInterval=(0,_isObject.default)(axis.initialinterval)?axis.initialinterval:{},setMin=function setMin(userMin,dataMin){var min=parser.parse(userMin);if(min===null){return dataMin}return min<dataMin?+min:dataMin},setMax=function setMax(userMax,dataMax){var max=parser.parse(userMax);if(max===null){return dataMax}return max>dataMax?+max:dataMax},focus;config.rawDataXStart=context[0];if(!data.length&&(typeof context[0]==="undefined"||typeof context[1]==="undefined")){context[0]=+_time.TIME_SPAN[0];context[1]=+_time.TIME_SPAN[1]}if(config.timeSpread&&config.timeSpread.duration>=minBinDuration*3){context[0]=+timeIntervals[config.timeSpread.unit.name].offset(context[1],-config.timeSpread.multiplier)}else if(data.length<3){if(data.length===0){context[0]=+_time.TIME_SPAN[0];context[1]=context[0]+minBinDuration*3}else{context[0]=context[1]-minBinDuration*2}}focus=context.slice();focus[0]=setMax(initialInterval.from,focus[0]);focus[1]=setMin(initialInterval.to,focus[1]);focus=(0,_extent.default)(focus);return{focus:focus,context:context}},setClipObjects=function setClipObjects(_clipDates,_timeIntervals,rawDataXStart,rawDataXEnd){var clipDates=_clipDates,timeInterval=_timeIntervals;timeInterval.Day.setClipDates(clipDates);timeInterval.Day.setTimeUniverse([rawDataXStart,rawDataXEnd]);timeInterval.Hour.setClipDates(clipDates);timeInterval.Hour.setTimeUniverse([rawDataXStart,rawDataXEnd]);timeInterval.Week.setClipDates(clipDates);timeInterval.Week.setTimeUniverse([rawDataXStart,rawDataXEnd]);timeInterval.Year.setClipDates(clipDates);timeInterval.Year.setTimeUniverse([rawDataXStart,rawDataXEnd]);timeInterval.Month.setClipDates(clipDates);timeInterval.Month.setTimeUniverse([rawDataXStart,rawDataXEnd]);timeInterval.Minute.setClipDates(clipDates);timeInterval.Minute.setTimeUniverse([rawDataXStart,rawDataXEnd]);timeInterval.Second.setClipDates(clipDates);timeInterval.Second.setTimeUniverse([rawDataXStart,rawDataXEnd]);timeInterval.Millisecond.setClipDates(clipDates);timeInterval.Millisecond.setTimeUniverse([rawDataXStart,rawDataXEnd])},getFormattedDate=function getFormattedDate(timestamp){var addedHours=0,date,hour,min,sec,millisec;date=new Date(timestamp);hour=date.getHours()-addedHours;min=date.getMinutes();sec=date.getSeconds();millisec=date.getMilliseconds();return date.toDateString().slice(4)+" "+hour+":"+min+":"+sec+":"+millisec},updateTimeVars=function updateTimeVars(){switch(autoClipNullData){case"year":timeConstant=31536e6;break;case"month":timeConstant=26784e5;break;case"day":timeConstant=864e5;break;case"hour":timeConstant=36e5;break;case"minute":timeConstant=6e4;break;case"second":timeConstant=1e3;break;case"millisecond":timeConstant=1;break;default:timeConstant=0}},selectIntervalRange=function selectIntervalRange(){var intervalRange=6e4,timeDelta=1,formatString=schema[0].format;if(formatString.search(/%[-,_,0]?[L]/)!==-1){intervalRange=1}else if(formatString.search(/%[-,_,0]?[s,S]/)!==-1){intervalRange=1e3}else if(formatString.search(/%[-,_,0]?[M]/)!==-1){intervalRange=6e4}else if(formatString.search(/%[-,_,0]?[H,I]/)!==-1){intervalRange=36e5}else if(formatString.search(/%[-,_,0]?[d,a,A,j]/)!==-1){intervalRange=864e5}else if(formatString.search(/%[-,_,0]?[b,B,m]/)!==-1){intervalRange=26784e5}else if(formatString.search(/%[-,_,0]?[y,Y]/)!==-1){intervalRange=31536e6}return{intervalRange:intervalRange,timeDelta:timeDelta}},setDateForDynamicInterval=function setDateForDynamicInterval(minDate){if(autoClipNullData==="year"){return minDate.setFullYear(minDate.getFullYear()+autoClipMultiplier)-1}else if(autoClipNullData==="month"){return minDate.setMonth(minDate.getMonth()+autoClipMultiplier)-1}},addAutoClipping=function addAutoClipping(rangeInterval,timeDelta,valueIndex){var chartIndex=0,maxChartIndex=data.length,currentMax,currentIntervalMin=dataXStart,currentIntervalMax=currentMax=currentIntervalMin+timeConstant*autoClipMultiplier-timeDelta;if(rangeInterval===26784e5||rangeInterval===31536e6){setDateForDynamicInterval(new Date(currentIntervalMin))}while(currentIntervalMax<=dataXEnd){if(chartIndex<maxChartIndex){if(data[chartIndex][0]>=currentIntervalMin&&data[chartIndex][0]<=currentIntervalMax&&(data[chartIndex][valueIndex]===0||data[chartIndex][valueIndex])){currentMax=currentIntervalMax;while(currentIntervalMin<=currentMax){var dt=new Date(currentIntervalMin);if(rangeInterval===26784e5){currentIntervalMin=dt.setMonth(dt.getMonth()+1);currentIntervalMax=setDateForDynamicInterval(new Date(currentIntervalMin))}else if(rangeInterval===31536e6){currentIntervalMin=dt.setFullYear(dt.getFullYear()+1);currentIntervalMax=setDateForDynamicInterval(new Date(currentIntervalMin))}else{currentIntervalMin=currentIntervalMin+rangeInterval;currentIntervalMax=currentIntervalMax+rangeInterval}while(data[chartIndex][0]<currentIntervalMin){chartIndex++;if(chartIndex===maxChartIndex||!(data[chartIndex][valueIndex]===0||data[chartIndex][valueIndex])){break}}if(data[chartIndex][0]>currentIntervalMax||currentIntervalMin===dataXEnd||!(data[chartIndex][valueIndex]===0||data[chartIndex][valueIndex])){currentMax=currentIntervalMax;break}}}else{if(data[chartIndex][0]<currentIntervalMin||data[chartIndex][0]>=currentIntervalMin&&data[chartIndex][0]<=currentIntervalMax){chartIndex++}else{var obj={format:clipFormat,from:getFormattedDate(currentIntervalMin),to:getFormattedDate(currentIntervalMax)};clipDatesObj.push(obj);currentIntervalMin=currentIntervalMax+timeDelta;if(rangeInterval===26784e5||rangeInterval===31536e6){currentIntervalMax=setDateForDynamicInterval(new Date(currentIntervalMin))}else{currentIntervalMax=currentIntervalMax+timeConstant*autoClipMultiplier}currentMax=currentIntervalMax}}}}},calculatedDomains,dataXStart,dataXEnd,context,arr,clips={},ops=[];arr=contextAxesX[0].plot.map(minMaxFn);context=(0,_extent.default)((_ref6=[]).concat.apply(_ref6,arr),Number);dataXStart=context[0];dataXEnd=context[1];if(autoClipNullData){updateTimeVars();if(timeConstant!==0){if(typeof autoClipMultiplier==="number"&&isFinite(autoClipMultiplier)&&Math.floor(autoClipMultiplier)===autoClipMultiplier&&autoClipMultiplier>0){var timeVars=selectIntervalRange(),yValueIndex;for(var yValues=0;yValues<focusAxesY.length;yValues++){for(var posn=0;posn<schema.length;posn++){if(focusAxesY[yValues].plot[0].value===schema[posn].name){yValueIndex=posn;addAutoClipping(timeVars.intervalRange,timeVars.timeDelta,yValueIndex);break}}}}}}parsedClipDates=clipDatesObj.map((function(clip){var parser=config.baseTimeConverter,parsedRepeat,parsedClipObj,level=_index.BLANKSTRING,timeInterval,from,to;if(clip.format){parser=isUTC?_timeConverter.default.utcParser(clip.format):_timeConverter.default.parser(clip.format)}level=(0,_timeBucket.getMinPlaceHolder)(parser.toString());timeInterval=timeIntervals[(0,_capsFirst.default)(level)];if(clip.repeat){parsedRepeat=_objectSpread({},clip.repeat);parsedRepeat.multiplier=Math.abs(parseInt(parsedRepeat.multiplier,10))}from=+parser.parse(clip.from);to=+parser.parse(clip.to);if(from>to){var _ref7=[to,from];from=_ref7[0];to=_ref7[1]}to=+timeInterval.offset(to);parsedClipObj=_objectSpread(_objectSpread({},clip),{},{format:parser.toString(),to:to,from:from,level:(0,_timeBucket.getMinPlaceHolder)(parser.toString())});if(parsedRepeat){parsedClipObj.repeat=parsedRepeat}return parsedClipObj}));clips=(0,_index2.segregateClips)(parsedClipDates);repeatClips=clips.repeatClips;singleClips=clips.singleClips;clippedRows=function clippedRows(row,col){var t=row[col[dateColumnName]];return t!==(0,_index2.getUnclippedValue)(t,repeatClips,singleClips)};if(parsedClipDates.length){ops=[(0,_operators.filter)(clippedRows)];setClipObjects(parsedClipDates,timeIntervals,dataXStart,dataXEnd);chart.cloneTable();table=config.dataTable;var _table$getData2=table.getData();data=_table$getData2.data;schema=_table$getData2.schema}contextInfo=makeScalesBins(contextAxesX);focusInfo=makeScalesBins(focusAxesX);table.getDataStore().on("itemsAdded",chart._onDataUpdate);chart.addEventListener("beforeremove",chart._offDataUpdate);chart.addToEnv("timeIntervals",timeIntervals);chart.addToEnv("unclippedTimeIntervals",unclippedTimeIntervals);if(config.timeSpread&&config.timeSpread.duration){firstDate=data.length?data[data.length-1][config.dateColumnIndex]:+_time.TIME_SPAN[0];ops=ops.concat((0,_operators.less)(dateColumnName,Math.min(config.timeSpread.interval.offset(firstDate,-config.timeSpread.multiplier),contextInfo.bins[0].getRangeThreshold()[0].offset(firstDate,-2))))}if(ops.length){table.getDataStore().deleteRows(_operators.pipe.apply(void 0,ops),table.getID())}data=table.getData().data;if(!config.atomicity){var info=config.atomicity=_objectSpread({},(0,_atomicity.getFormatStore)(schema[config.dateColumnIndex].format));info.minBin=(0,_atomicity.getAtomicity)(_objectSpread(_objectSpread({},info),{},{index:config.dateColumnIndex,data:data,bins:contextInfo.bins[0].getStandardBins(),intervalIndexMap:contextInfo.bins[0].intervalIndexMap,ms:timeIntervals.Millisecond}))}focusInfo.bins[0].setBinMin(config.atomicity.minBin);focusInfo.scales[0].setBinMin(focusInfo.bins[0].getBinMin()).setRangeThreshold(focusInfo.bins[0].getRangeThreshold());contextInfo.bins[0].setBinMin(config.atomicity.minBin);contextInfo.scales[0].setBinMin(contextInfo.bins[0].getBinMin()).setRangeThreshold(contextInfo.bins[0].getRangeThreshold());calculatedDomains=calculateDomain(contextAxesX[0]);contextInfo.scales.forEach((function(scale){scale.setFirstData(config.rawDataXStart)}));focusInfo.scales.forEach((function(scale){scale.setFirstData(config.rawDataXStart)}));chart.addToEnv("contextScalesX",contextInfo.scales);chart.addToEnv("focusScalesX",focusInfo.scales);chart.addToEnv("contextBins",contextInfo.bins);chart.addToEnv("focusBins",focusInfo.bins);config.clipDates=parsedClipDates;chart.setContextLimit(calculatedDomains.context);chart.setFocusLimit(calculatedDomains.focus)};