import _dimensionType from './_dimensionType';
/**
* If dimensions is specified, sets dimensions and returns the instance itself. If dimensions is an object or string, it would be turned into an array with a dimension. If dimensions is not specified, returns the instance's current dimensions.
* A dimenension(key) acts as an index that is used to look up measure(value). A synonym for dimension is independent attribute. Jelly-chart has {@link Core#data data} in an array to be grouped into a hierarchical tree structure with dimensions; multi-dimensions can make multiple levels of grouping. The combination of all dimensions would be unique for each item. Each dimension is converted into a region or a node according to its chart type and level.
* @memberOf Core#
* @function
* @example
* bar.data([
* {category:'Blue', name: 'A', value: 10},
* {category:'Blue', name: 'B', value: 20},
* {category:'Blue', name: 'C', value: 30},
* {category:'Blue', name: 'D', value: 40},
* {category:'Red', name: 'A', value: 20},
* {category:'Red', name: 'B', value: 10},
* {category:'Red', name: 'C', value: 40},
* {category:'Red', name: 'D', value: 10},
* ]) //sets data
* .dimensions(['category', {field:'name', order:'ascending'}])
* //generates a grouped bar chart which has 2 regions (Red, Blue) with 4 bars(A,B,C,D) each.
* @param {(string|object|Object[])} [dimensions] sets a {@link Core#dimension dimension} array which are objects has properties for aggregation(grouping).
* @return {(dimensions|Core)}
*/
function dimensions (dimensions) {
if (!arguments.length) return this.__attrs__.dimensions;
if (!Array.isArray(dimensions)) {
dimensions = [dimensions];
}
this.__attrs__.dimensions = dimensions.map(function (v) { return _dimensionType(v); });
return this;
}
export default dimensions;