UNPKG

victory-chart

Version:
117 lines (95 loc) 4.41 kB
Object.defineProperty(exports,"__esModule",{value:true});var _last2=require("lodash/last");var _last3=_interopRequireDefault(_last2);var _defaults2=require("lodash/defaults");var _defaults3=_interopRequireDefault(_defaults2);var _sortBy2=require("lodash/sortBy");var _sortBy3=_interopRequireDefault(_sortBy2); var _victoryCore=require("victory-core");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}exports.default= { getBaseProps:function getBaseProps(props,fallbackProps){ props=_victoryCore.Helpers.modifyProps(props,fallbackProps,"line"); var defaultStyles=props.theme&&props.theme.line&&props.theme.line.style? props.theme.line.style:{}; var calculatedValues=this.getCalculatedValues(props);var scale=calculatedValues.scale,dataset=calculatedValues.dataset,dataSegments=calculatedValues.dataSegments; var style=_victoryCore.Helpers.getStyles(props.style,defaultStyles,"auto","100%");var _props= props,interpolation=_props.interpolation,label=_props.label,width=_props.width,height=_props.height,events=_props.events,sharedEvents=_props.sharedEvents; var dataStyle=_victoryCore.Helpers.evaluateStyle(style.data,dataset); var childProps={parent:{ style:style.parent,scale:scale,data:dataset,height:height,width:width}}; for(var index=0,len=dataSegments.length;index<len;index++){ var dataProps={ scale:scale, interpolation:_victoryCore.Helpers.evaluateProp(interpolation,dataset), style:dataStyle, data:dataSegments[index]}; var text=index===dataSegments.length-1? _victoryCore.Helpers.evaluateProp(label,dataset):undefined; var addLabels=text!==undefined&&text!==null||events||sharedEvents; var labelProps=addLabels? this.getLabelProps(dataProps,text,calculatedValues,style):undefined; childProps[index]={data:dataProps,labels:labelProps}; } return childProps; }, getLabelProps:function getLabelProps(dataProps,text,calculatedValues,style){var dataSegments=calculatedValues.dataSegments,dataset=calculatedValues.dataset,scale=calculatedValues.scale;var dataStyle=dataProps.style; var lastData=(0,_last3.default)((0,_last3.default)(dataSegments)); var baseLabelStyle=_victoryCore.Helpers.evaluateStyle(style.labels,dataset)||{}; var labelStyle=this.getLabelStyle(baseLabelStyle,dataStyle); return{ x:lastData?scale.x(lastData.x1||lastData.x)+(labelStyle.padding||0):0, y:lastData?scale.y(lastData.y1||lastData.y):0, style:labelStyle, textAnchor:labelStyle.textAnchor||"start", verticalAnchor:labelStyle.verticalAnchor||"middle", angle:labelStyle.angle, data:dataset, scale:scale, text:text}; }, getScale:function getScale(props,fallbackProps){ if(fallbackProps){ props=_victoryCore.Helpers.modifyProps(props,fallbackProps); } var range={ x:_victoryCore.Helpers.getRange(props,"x"), y:_victoryCore.Helpers.getRange(props,"y")}; var domain={ x:_victoryCore.Domain.getDomain(props,"x"), y:_victoryCore.Domain.getDomain(props,"y")}; var scale={ x:_victoryCore.Scale.getBaseScale(props,"x").domain(domain.x).range(range.x), y:_victoryCore.Scale.getBaseScale(props,"y").domain(domain.y).range(range.y)}; return scale; }, getCalculatedValues:function getCalculatedValues(props){ var dataset=_victoryCore.Data.getData(props); if(_victoryCore.Data.getData(props).length<2){ _victoryCore.Log.warn("VictoryLine needs at least two data points to render properly."); dataset=[]; } var dataSegments=this.getDataSegments(dataset,props.sortKey); var scale=this.getScale(props); return{dataset:dataset,dataSegments:dataSegments,scale:scale}; }, getLabelStyle:function getLabelStyle(labelStyle,dataStyle){ var opacity=dataStyle.opacity; var fill=dataStyle.stroke; var padding=labelStyle.padding||0; return(0,_defaults3.default)({},labelStyle,{opacity:opacity,fill:fill,padding:padding}); }, getDataSegments:function getDataSegments(dataset){var sortKey=arguments.length>1&&arguments[1]!==undefined?arguments[1]:"x"; var orderedData=(0,_sortBy3.default)(dataset,sortKey); var segments=[]; var segmentStartIndex=0; var segmentIndex=0; for(var index=0,len=orderedData.length;index<len;index++){ var datum=orderedData[index]; if(datum.y===null||typeof datum.y==="undefined"){ segments[segmentIndex]=orderedData.slice(segmentStartIndex,index); segmentIndex++; segmentStartIndex=index+1; } } segments[segmentIndex]=orderedData.slice(segmentStartIndex,orderedData.length); return segments.filter(function(segment){ return Array.isArray(segment)&&segment.length>0; }); }};