victory-chart
Version:
Chart Component for Victory
224 lines (180 loc) • 7.96 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});var _pick2=require("lodash/pick");var _pick3=_interopRequireDefault(_pick2);var _flatten2=require("lodash/flatten");var _flatten3=_interopRequireDefault(_flatten2);var _isArray2=require("lodash/isArray");var _isArray3=_interopRequireDefault(_isArray2);var _defaults2=require("lodash/defaults");var _defaults3=_interopRequireDefault(_defaults2);var _omit2=require("lodash/omit");var _omit3=_interopRequireDefault(_omit2);var _assign2=require("lodash/assign");var _assign3=_interopRequireDefault(_assign2);
var _victoryCore=require("victory-core");function _interopRequireDefault(obj){return obj&&obj.__esModule?obj:{default:obj};}function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i];}return arr2;}else{return Array.from(arr);}}exports.default=
{
getBaseProps:function getBaseProps(props,fallbackProps){
props=_victoryCore.Helpers.modifyProps(props,fallbackProps,"errorbar");var _getCalculatedValues=
this.getCalculatedValues(props,fallbackProps),data=_getCalculatedValues.data,style=_getCalculatedValues.style,scale=_getCalculatedValues.scale;var _props=
props,groupComponent=_props.groupComponent,height=_props.height,width=_props.width,borderWidth=_props.borderWidth;
var childProps={parent:{style:style.parent,scale:scale,data:data,height:height,width:width}};
for(var index=0,len=data.length;index<len;index++){
var datum=data[index];
var eventKey=datum.eventKey||index;
var x=scale.x(datum.x1||datum.x);
var y=scale.y(datum.y1||datum.y);
var dataProps={
x:x,y:y,scale:scale,datum:datum,data:data,index:index,groupComponent:groupComponent,borderWidth:borderWidth,
style:this.getDataStyles(datum,style.data),
errorX:this.getErrors(datum,scale,"x"),
errorY:this.getErrors(datum,scale,"y")};
childProps[eventKey]={
data:dataProps};
var text=this.getLabelText(props,datum,index);
if(text!==undefined&&text!==null||props.events||props.sharedEvents){
childProps[eventKey].labels=this.getLabelProps(dataProps,text,style);
}
}
return childProps;
},
getLabelProps:function getLabelProps(dataProps,text,calculatedStyle){var
x=dataProps.x,index=dataProps.index,scale=dataProps.scale,errorY=dataProps.errorY;
var error=errorY&&Array.isArray(errorY)?errorY[0]:errorY;
var y=error||dataProps.y;
var labelStyle=this.getLabelStyle(calculatedStyle.labels,dataProps)||{};
return{
style:labelStyle,
y:y-(labelStyle.padding||0),
x:x,
text:text,
index:index,
scale:scale,
datum:dataProps.datum,
data:dataProps.data,
textAnchor:labelStyle.textAnchor,
verticalAnchor:labelStyle.verticalAnchor||"end",
angle:labelStyle.angle};
},
getErrorData:function getErrorData(props){
if(props.data){
if(props.data.length<1){
_victoryCore.Log.warn("This is an empty dataset.");
return[];
}
return this.formatErrorData(props.data,props);
}else{
var generatedData=(props.errorX||props.errorY)&&this.generateData(props);
return this.formatErrorData(generatedData,props);
}
},
getErrors:function getErrors(datum,scale,axis){
var errorNames={x:"errorX",y:"errorY"};
var errors=datum[errorNames[axis]];
if(errors===0){
return false;
}
return(0,_isArray3.default)(errors)?
[errors[0]===0?false:scale[axis](errors[0]+datum[axis]),
errors[1]===0?false:scale[axis](datum[axis]-errors[1])]:
[scale[axis](errors+datum[axis]),scale[axis](datum[axis]-errors)];
},
formatErrorData:function formatErrorData(dataset,props){
if(!dataset){
return[];
}
var accessor={
x:_victoryCore.Helpers.createAccessor(props.x!==undefined?props.x:"x"),
y:_victoryCore.Helpers.createAccessor(props.y!==undefined?props.y:"y"),
errorX:_victoryCore.Helpers.createAccessor(props.errorX!==undefined?props.errorX:"errorX"),
errorY:_victoryCore.Helpers.createAccessor(props.errorY!==undefined?props.errorY:"errorY")};
var replaceNegatives=function replaceNegatives(errors){
var replaceNeg=function replaceNeg(val){return!val||val<0?0:val;};
return(0,_isArray3.default)(errors)?errors.map(function(err){return replaceNeg(err);}):replaceNeg(errors);
};
var stringMap={
x:_victoryCore.Data.createStringMap(props,"x"),
y:_victoryCore.Data.createStringMap(props,"y")};
return dataset.map(function(datum,index){
var evaluatedX=accessor.x(datum);
var evaluatedY=accessor.y(datum);
var x=evaluatedX!==undefined?evaluatedX:index;
var y=evaluatedY!==undefined?evaluatedY:datum;
var errorX=replaceNegatives(accessor.errorX(datum));
var errorY=replaceNegatives(accessor.errorY(datum));
return(0,_assign3.default)(
{},
datum,
{x:x,y:y,errorX:errorX,errorY:errorY},
typeof x==="string"?{x:stringMap.x[x],xName:x}:{},
typeof y==="string"?{y:stringMap.y[y],yName:y}:{});
});
},
getDomain:function getDomain(props,axis){
var propsDomain=_victoryCore.Domain.getDomainFromProps(props,axis);
if(propsDomain){
return _victoryCore.Domain.padDomain(propsDomain,props,axis);
}
var categoryDomain=_victoryCore.Domain.getDomainFromCategories(props,axis);
if(categoryDomain){
return _victoryCore.Domain.padDomain(categoryDomain,props,axis);
}
var dataset=this.getErrorData(props);
if(dataset.length<1){
return _victoryCore.Scale.getBaseScale(props,axis).domain();
}
var domain=this.getDomainFromData(props,axis,dataset);
return _victoryCore.Domain.cleanDomain(_victoryCore.Domain.padDomain(domain,props,axis),props);
},
getDomainFromData:function getDomainFromData(props,axis,dataset){
var currentAxis=_victoryCore.Helpers.getCurrentAxis(axis,props.horizontal);
var error=void 0;
if(currentAxis==="x"){
error="errorX";
}else if(currentAxis==="y"){
error="errorY";
}
var axisData=(0,_flatten3.default)(dataset).map(function(datum){return datum[currentAxis];});
var errorData=(0,_flatten3.default)((0,_flatten3.default)(dataset).map(function(datum){
var errorMax=void 0;
var errorMin=void 0;
if((0,_isArray3.default)(datum[error])){
errorMax=datum[error][0]+datum[currentAxis];
errorMin=datum[currentAxis]-datum[error][1];
}else{
errorMax=datum[error]+datum[currentAxis];
errorMin=datum[currentAxis]-datum[error];
}
return[errorMax,errorMin];
}));
var allData=axisData.concat(errorData);
var min=Math.min.apply(Math,_toConsumableArray(allData));
var max=Math.max.apply(Math,_toConsumableArray(allData));
if(min===max){
var adjustedMax=max===0?1:max;
return[0,adjustedMax];
}
return[min,max];
},
getCalculatedValues:function getCalculatedValues(props){
var defaultStyles=props.theme&&props.theme.errorbar&&props.theme.errorbar.style?
props.theme.errorbar.style:{};
var style=_victoryCore.Helpers.getStyles(props.style,defaultStyles,"auto","100%")||{};
var dataWithErrors=(0,_assign3.default)(_victoryCore.Data.getData(props),this.getErrorData(props));
var data=_victoryCore.Data.addEventKeys(props,dataWithErrors);
var range={
x:_victoryCore.Helpers.getRange(props,"x"),
y:_victoryCore.Helpers.getRange(props,"y")};
var domain={
x:this.getDomain(props,"x"),
y:this.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{data:data,scale:scale,style:style};
},
getDataStyles:function getDataStyles(datum,style){
var stylesFromData=(0,_omit3.default)(datum,[
"x","y","name","errorX","errorY","eventKey"]);
var baseDataStyle=(0,_defaults3.default)({},stylesFromData,style);
return _victoryCore.Helpers.evaluateStyle(baseDataStyle,datum);
},
getLabelText:function getLabelText(props,datum,index){
return datum.label||(Array.isArray(props.labels)?
props.labels[index]:_victoryCore.Helpers.evaluateProp(props.labels,datum));
},
getLabelStyle:function getLabelStyle(labelStyle,dataProps){
labelStyle=labelStyle||{};var
datum=dataProps.datum,size=dataProps.size,style=dataProps.style;
var matchedStyle=(0,_pick3.default)(style,["opacity","fill"]);
var padding=labelStyle.padding||size*0.25;
var baseLabelStyle=(0,_defaults3.default)({},labelStyle,matchedStyle,{padding:padding});
return _victoryCore.Helpers.evaluateStyle(baseLabelStyle,datum)||{};
}};