victory-chart
Version:
Chart Component for Victory
117 lines (95 loc) • 4.41 kB
JavaScript
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;
});
}};