victory-chart
Version:
Chart Component for Victory
129 lines (112 loc) • 5.09 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});var _defaults2=require("lodash/defaults");var _defaults3=_interopRequireDefault(_defaults2);var _omit2=require("lodash/omit");var _omit3=_interopRequireDefault(_omit2);var _pick2=require("lodash/pick");var _pick3=_interopRequireDefault(_pick2);var _values2=require("lodash/values");var _values3=_interopRequireDefault(_values2);
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,"scatter");
var calculatedValues=this.getCalculatedValues(props);var
data=calculatedValues.data,style=calculatedValues.style,scale=calculatedValues.scale;
var childProps={parent:{
style:style.parent,scale:scale,data:data,height:props.height,width:props.width}};
for(var index=0,len=data.length;index<len;index++){
var datum=data[index];
var eventKey=datum.eventKey;
var x=scale.x(datum.x1||datum.x);
var y=scale.y(datum.y1||datum.y);
var dataProps={
x:x,y:y,datum:datum,data:data,index:index,scale:scale,
size:this.getSize(datum,props,calculatedValues),
symbol:this.getSymbol(datum,props),
style:this.getDataStyles(datum,style.data)};
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,y=dataProps.y,index=dataProps.index,scale=dataProps.scale,datum=dataProps.datum,data=dataProps.data;
var labelStyle=this.getLabelStyle(calculatedStyle.labels,dataProps)||{};
return{
style:labelStyle,
x:x,
y:y-(labelStyle.padding||0),
text:text,
index:index,
scale:scale,
datum:datum,
data:data,
textAnchor:labelStyle.textAnchor,
verticalAnchor:labelStyle.verticalAnchor||"end",
angle:labelStyle.angle};
},
getCalculatedValues:function getCalculatedValues(props){
var defaultStyles=props.theme&&props.theme.scatter&&props.theme.scatter.style?
props.theme.scatter.style:{};
var style=_victoryCore.Helpers.getStyles(props.style,defaultStyles,"auto","100%");
var data=_victoryCore.Data.getData(props);
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)};
var z=props.bubbleProperty||"z";
return{data:data,scale:scale,style:style,z:z};
},
getDataStyles:function getDataStyles(datum,style){
var stylesFromData=(0,_omit3.default)(datum,[
"x","y","z","size","symbol","name","label","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){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);
},
getSymbol:function getSymbol(data,props){
if(props.bubbleProperty){
return"circle";
}
var symbol=data.symbol||props.symbol;
return _victoryCore.Helpers.evaluateProp(symbol,data);
},
getBubbleSize:function getBubbleSize(datum,props,calculatedValues){var
data=calculatedValues.data,z=calculatedValues.z;
var getMaxRadius=function getMaxRadius(){
var minPadding=Math.min.apply(Math,_toConsumableArray((0,_values3.default)(_victoryCore.Helpers.getPadding(props))));
return Math.max(minPadding,5);
};
var zData=data.map(function(point){return point[z];});
var zMin=Math.min.apply(Math,_toConsumableArray(zData));
var zMax=Math.max.apply(Math,_toConsumableArray(zData));
var maxRadius=props.maxBubbleSize||getMaxRadius();
var maxArea=Math.PI*Math.pow(maxRadius,2);
var area=(datum[z]-zMin)/(zMax-zMin)*maxArea;
var radius=Math.sqrt(area/Math.PI);
return Math.max(radius,1);
},
getSize:function getSize(data,props,calculatedValues){
var size=void 0;
if(data.size){
size=typeof data.size==="function"?data.size:Math.max(data.size,1);
}else if(typeof props.size==="function"){
size=props.size;
}else if(data[calculatedValues.z]){
size=this.getBubbleSize(data,props,calculatedValues);
}else{
size=Math.max(props.size,1);
}
return _victoryCore.Helpers.evaluateProp(size,data);
}};