victory-chart
Version:
Chart Component for Victory
319 lines (266 loc) • 12.5 kB
JavaScript
Object.defineProperty(exports,"__esModule",{value:true});var _uniq2=require("lodash/uniq");var _uniq3=_interopRequireDefault(_uniq2);var _partialRight2=require("lodash/partialRight");var _partialRight3=_interopRequireDefault(_partialRight2);var _isFunction2=require("lodash/isFunction");var _isFunction3=_interopRequireDefault(_isFunction2);var _flatten2=require("lodash/flatten");var _flatten3=_interopRequireDefault(_flatten2);var _defaults2=require("lodash/defaults");var _defaults3=_interopRequireDefault(_defaults2);var _assign2=require("lodash/assign");var _assign3=_interopRequireDefault(_assign2);
var _react=require("react");var _react2=_interopRequireDefault(_react);
var _axis=require("./axis");var _axis2=_interopRequireDefault(_axis);
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=
{
getData:function getData(props,childComponents){
if(props.data){
return _victoryCore.Data.getData(props);
}
childComponents=childComponents||_react2.default.Children.toArray(props.children);
return this.getDataFromChildren(childComponents);
},
getDomain:function getDomain(props,axis,childComponents){
childComponents=childComponents||_react2.default.Children.toArray(props.children);
var propsDomain=_victoryCore.Domain.getDomainFromProps(props,axis);
if(propsDomain){
return propsDomain;
}
var dataset=(props.data||props.y)&&_victoryCore.Data.getData(props);
var dataDomain=dataset?_victoryCore.Domain.getDomainFromData(props,axis,dataset):[];
var childDomain=this.getDomainFromChildren(props,axis,childComponents);
var min=_victoryCore.Collection.getMinValue([].concat(_toConsumableArray(dataDomain),_toConsumableArray(childDomain)));
var max=_victoryCore.Collection.getMaxValue([].concat(_toConsumableArray(dataDomain),_toConsumableArray(childDomain)));
return _victoryCore.Domain.cleanDomain([min,max],props,axis);
},
setAnimationState:function setAnimationState(props,nextProps){
if(!props.animate){
return;
}
if(props.animate.parentState){
var nodesWillExit=props.animate.parentState.nodesWillExit;
var nodesDoneClipPathExit=props.animate.parentState.nodesDoneClipPathExit;
var oldProps=nodesWillExit&&!nodesDoneClipPathExit?props:null;
this.setState((0,_defaults3.default)({oldProps:oldProps},props.animate.parentState));
}else{
var oldChildren=_react2.default.Children.toArray(props.children);
var nextChildren=_react2.default.Children.toArray(nextProps.children);var _Transitions$getIniti=
_victoryCore.Transitions.getInitialTransitionState(oldChildren,nextChildren),_nodesWillExit=_Transitions$getIniti.nodesWillExit,nodesWillEnter=_Transitions$getIniti.nodesWillEnter,childrenTransitions=_Transitions$getIniti.childrenTransitions,nodesShouldEnter=_Transitions$getIniti.nodesShouldEnter,nodesShouldLoad=_Transitions$getIniti.nodesShouldLoad,nodesDoneLoad=_Transitions$getIniti.nodesDoneLoad,nodesDoneClipPathLoad=_Transitions$getIniti.nodesDoneClipPathLoad,nodesDoneClipPathEnter=_Transitions$getIniti.nodesDoneClipPathEnter,_nodesDoneClipPathExit=_Transitions$getIniti.nodesDoneClipPathExit;
this.setState({
nodesWillExit:_nodesWillExit,
nodesWillEnter:nodesWillEnter,
nodesShouldEnter:nodesShouldEnter,
nodesDoneClipPathEnter:nodesDoneClipPathEnter,
nodesDoneClipPathExit:_nodesDoneClipPathExit,
childrenTransitions:_victoryCore.Collection.isArrayOfArrays(childrenTransitions)?
childrenTransitions[0]:childrenTransitions,
nodesShouldLoad:nodesShouldLoad||this.state.nodesShouldLoad,
nodesDoneLoad:nodesDoneLoad||this.state.nodesDoneLoad,
nodesDoneClipPathLoad:nodesDoneClipPathLoad||this.state.nodesDoneClipPathLoad,
oldProps:_nodesWillExit&&!_nodesDoneClipPathExit?props:null});
}
},
getAnimationProps:function getAnimationProps(props,child,index){var _this=this;
if(!props.animate){
return child.props.animate;
}
var getFilteredState=function getFilteredState(){
var childrenTransitions=_this.state&&_this.state.childrenTransitions;
childrenTransitions=_victoryCore.Collection.isArrayOfArrays(childrenTransitions)?
childrenTransitions[index]:childrenTransitions;
return(0,_defaults3.default)({childrenTransitions:childrenTransitions},_this.state);
};
var getTransitions=props.animate&&props.animate.getTransitions;
var state=getFilteredState();
var parentState=props.animate&&props.animate.parentState||state;
if(!getTransitions){
var getTransitionProps=_victoryCore.Transitions.getTransitionPropsFactory(
props,
state,
function(newState){return _this.setState(newState);});
getTransitions=(0,_partialRight3.default)(getTransitionProps,index);
}
return(0,_defaults3.default)({getTransitions:getTransitions,parentState:parentState},props.animate,child.props.animate);
},
getDomainFromChildren:function getDomainFromChildren(props,axis,childComponents){
var childDomains=[];
var childDomainsLength=0;
var children=childComponents?
childComponents.slice(0):
_react2.default.Children.toArray(props.children);
var childrenLength=children.length;
var horizontalChildren=childComponents.some(function(child){return child.props.horizontal;});
var horizontal=props&&props.horizontal||horizontalChildren.length>0;
var currentAxis=_axis2.default.getCurrentAxis(axis,horizontal);
while(childrenLength>0){
var child=children[--childrenLength];
if(child.type&&(0,_isFunction3.default)(child.type.getDomain)){
var parentData=props.data?_victoryCore.Data.getData(props,axis):undefined;
var sharedProps=parentData?
(0,_assign3.default)({},child.props,{data:parentData}):child.props;
var childDomain=child.props&&child.type.getDomain(sharedProps,currentAxis);
if(childDomain){
var childDomainLength=childDomain.length;
for(var index=0;index<childDomainLength;index++){
childDomains[childDomainsLength++]=childDomain[index];
}
}
}else if(child.props&&child.props.children){
var newChildren=_react2.default.Children.toArray(child.props.children);
var newChildrenLength=newChildren.length;
for(var _index=0;_index<newChildrenLength;_index++){
children[childrenLength++]=newChildren[_index];
}
}
}
var min=_victoryCore.Collection.getMinValue(childDomains);
var max=_victoryCore.Collection.getMaxValue(childDomains);
return childDomains.length===0?
[0,1]:[min,max];
},
getDataFromChildren:function getDataFromChildren(props,childComponents){
var getData=function getData(childProps){
var data=_victoryCore.Data.getData(childProps);
return Array.isArray(data)&&data.length>0?data:undefined;
};
var children=childComponents?
childComponents.slice(0).reverse():
_react2.default.Children.toArray(props.children).reverse();
var childrenLength=children.length;
var dataArr=[];
var dataArrLength=0;
while(childrenLength>0){
var child=children[--childrenLength];
if(child.type&&(0,_isFunction3.default)(child.type.getData)){
dataArr[dataArrLength++]=child.props&&child.type.getData(child.props);
}else if(child.props&&child.props.children){
var newChildren=_react2.default.Children.toArray(child.props.children);
var newChildrenLength=newChildren.length;
for(var index=0;index<newChildrenLength;index++){
children[childrenLength++]=newChildren[index];
}
}else{
dataArr[dataArrLength++]=getData(child.props);
}
}
return dataArr;
},
getStackedDomain:function getStackedDomain(props,axis){
var propsDomain=_victoryCore.Domain.getDomainFromProps(props,axis);
if(propsDomain){
return propsDomain;
}var
horizontal=props.horizontal;
var ensureZero=function ensureZero(domain){
var isDependent=axis==="y"&&!horizontal||axis==="x"&&horizontal;
return isDependent?
[_victoryCore.Collection.getMinValue(domain,0),_victoryCore.Collection.getMaxValue(domain,0)]:domain;
};
var datasets=this.getDataFromChildren(props);
return ensureZero(_victoryCore.Domain.getDomainFromGroupedData(props,axis,datasets));
},
getColor:function getColor(calculatedProps,child,index){var
style=calculatedProps.style;var
colorScale=calculatedProps.colorScale,color=calculatedProps.color;
if(style&&style.data&&style.data.fill){
return style.data.fill;
}
colorScale=child.props&&child.props.colorScale?child.props.colorScale:colorScale;
color=child.props&&child.props.color?child.props.color:color;
if(!colorScale&&!color){
return undefined;
}
var colors=Array.isArray(colorScale)?
colorScale:_victoryCore.Style.getColorScale(colorScale);
return color||colors[index%colors.length];
},
getChildStyle:function getChildStyle(child,index,calculatedProps){var
style=calculatedProps.style;
var role=child.type&&child.type.role;
var defaultFill=role==="stack"?
undefined:this.getColor(calculatedProps,child,index);
var defaultColor=role==="line"?
{fill:"none",stroke:defaultFill}:{fill:defaultFill};
var childStyle=child.props.style||{};
var dataStyle=(0,_defaults3.default)({},childStyle.data,(0,_assign3.default)({},style.data,defaultColor));
var labelsStyle=(0,_defaults3.default)({},childStyle.labels,style.labels);
return{
parent:style.parent,
data:dataStyle,
labels:labelsStyle};
},
getStringsFromCategories:function getStringsFromCategories(childComponents,axis){
var strings=[];
var stringsLength=0;
var children=childComponents.slice(0).reverse();
var childrenLength=children.length;
while(childrenLength>0){
var child=children[--childrenLength];
if(child.props&&child.props.categories){
var newStrings=_victoryCore.Data.getStringsFromCategories(child.props,axis);
var newStringsLength=newStrings.length;
for(var index=0;index<newStringsLength;index++){
strings[stringsLength++]=newStrings[index];
}
}else if(child.props&&child.props.children){
var newChildren=_react2.default.Children.toArray(child.props.children);
var newChildrenLength=newChildren.length;
for(var _index2=0;_index2<newChildrenLength;_index2++){
children[childrenLength++]=newChildren[_index2];
}
}
}
return strings;
},
getStringsFromData:function getStringsFromData(childComponents,axis){
var strings=[];
var stringsLength=0;
var children=childComponents.slice(0).reverse();
var childrenLength=children.length;
while(childrenLength>0){
var child=children[--childrenLength];
if(child.props&&child.props.data){
var newStrings=_victoryCore.Data.getStringsFromData(child.props,axis);
var newStringsLength=newStrings.length;
for(var index=0;index<newStringsLength;index++){
strings[stringsLength++]=newStrings[index];
}
}else if(child.type&&(0,_isFunction3.default)(child.type.getData)){
var data=(0,_flatten3.default)(child.type.getData(child.props));
var attr=axis==="x"?"xName":"yName";
for(var _index3=0;_index3<data.length;_index3++){
var datum=data[_index3];
if(datum[attr]){
strings[stringsLength++]=datum[attr];
}
}
}else if(child.props&&child.props.children){
var newChildren=_react2.default.Children.toArray(child.props.children);
var newChildrenLength=newChildren.length;
for(var _index4=0;_index4<newChildrenLength;_index4++){
children[childrenLength++]=newChildren[_index4];
}
}
}
return strings;
},
getStringsFromChildren:function getStringsFromChildren(props,axis,childComponents){
childComponents=childComponents||_react2.default.Children.toArray(props.children);
var axisComponent=_axis2.default.getAxisComponent(childComponents,axis);
var axisStrings=axisComponent?_victoryCore.Data.getStringsFromAxes(axisComponent.props,axis):[];
var categoryStrings=this.getStringsFromCategories(childComponents,axis);
var dataStrings=this.getStringsFromData(childComponents,axis);
return(0,_uniq3.default)((0,_flatten3.default)([].concat(_toConsumableArray(categoryStrings),_toConsumableArray(dataStrings),_toConsumableArray(axisStrings))));
},
getCategories:function getCategories(props,axis){
var categories=_victoryCore.Data.getCategories(props,axis)||
this.getStringsFromChildren(props,axis);
return categories.length>0?categories:undefined;
},
getY0:function getY0(datum,index,calculatedProps){var
datasets=calculatedProps.datasets;
var y=datum.y;
var previousDataSets=datasets.slice(0,index);
var previousPoints=previousDataSets.reduce(function(prev,dataset){
return prev.concat(dataset.
filter(function(previousDatum){return datum.x instanceof Date?
previousDatum.x.getTime()===datum.x.getTime():
previousDatum.x===datum.x;}).
map(function(previousDatum){return previousDatum.y||0;}));
},[]);
var y0=previousPoints.length&&previousPoints.reduce(function(memo,value){
var sameSign=y<0&&value<0||y>=0&&value>=0;
return sameSign?+value+memo:memo;
},0);
return previousPoints.some(function(point){return point instanceof Date;})?new Date(y0):y0;
}};