viser
Version:
viser is a toolkit fit for data vis engineer.
267 lines • 10.4 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
import * as _ from 'lodash';
import * as setAxisConfig from '../components/setAxisConfig';
import * as setCoordConfig from '../components/setCoordConfig';
import * as setFilterConfig from '../components/setFilterConfig';
import * as setGuideConfig from '../components/setGuideConfig';
import * as setLegendConfig from '../components/setLegendConfig';
import * as setScaleConfig from '../components/setScaleConfig';
import * as setSeriesConfig from '../components/setSeriesConfig';
import * as setTooltipConfig from '../components/setTooltipConfig';
import loadShapes from '../shapes/loadShapes';
import * as EventUtils from '../utils/EventUtils';
var G2 = require('@antv/g2');
var Brush = require('@antv/g2-brush');
function firstUpperCase(str) {
return str.toLowerCase().replace(/( |^)[a-z]/g, function (L) { return L.toUpperCase(); });
}
var CommonChart = (function () {
function CommonChart(config) {
this.viewInstance = {};
this.config = _.cloneDeep(config);
this.checkChartConfig(this.config);
this.chartInstance = new G2.Chart(this.config.chart);
}
CommonChart.prototype.getWidth = function () {
return this.chartInstance.get('width');
};
CommonChart.prototype.getHeight = function () {
return this.chartInstance.get('height');
};
CommonChart.prototype.render = function () {
var config = this.config;
var chart = this.chartInstance;
loadShapes();
this.setEvents(chart, config);
this.setDataSource(chart, config.data);
this.setCoord(chart, config);
this.setTooltip(chart, config);
this.setAxis(chart, config);
this.setContent(chart, config);
this.setLegend(chart, config);
this.setViews(chart, config);
this.setFacet(chart, config);
chart.render();
this.setDefaultTooltip(chart, config);
this.setBrush(chart, config);
};
CommonChart.prototype.repaint = function (config) {
var newConfig = _.cloneDeep(config);
this.checkChartConfig(newConfig);
this.renderDiffConfig(newConfig);
};
CommonChart.prototype.destroy = function (chart) {
if (chart) {
chart.destroy();
}
};
CommonChart.prototype.clear = function (chart) {
if (chart) {
chart.clear();
}
};
CommonChart.prototype.checkChartConfig = function (config) {
var chart = config.chart;
if (!chart || !chart.height) {
throw new Error('please set correct chart option');
}
};
CommonChart.prototype.createView = function (chart, config) {
var opts = {};
if (config.start) {
opts.start = config.start;
}
if (config.end) {
opts.end = config.end;
}
var view = chart.view(opts);
if (!config.viewId) {
throw new Error('you must set viewId');
}
this.viewInstance[config.viewId] = view;
return view;
};
CommonChart.prototype.setEvents = function (chart, config) {
EventUtils.setEvent(chart, '', config.chart);
};
CommonChart.prototype.setDataSource = function (chart, data) {
if (!_.isNil(data) && !_.isEmpty(data)) {
chart.source(data);
}
};
CommonChart.prototype.setFilter = function (chart, config) {
return setFilterConfig.process(chart, config);
};
CommonChart.prototype.setScale = function (chart, config) {
return setScaleConfig.process(chart, config);
};
CommonChart.prototype.setCoord = function (chart, config) {
return setCoordConfig.process(chart, config);
};
CommonChart.prototype.setSeries = function (chart, config, isUpdate) {
if (isUpdate === void 0) { isUpdate = false; }
return setSeriesConfig.process(chart, config, isUpdate);
};
CommonChart.prototype.setAxis = function (chart, config, isUpdate) {
if (isUpdate === void 0) { isUpdate = false; }
return setAxisConfig.process(chart, config, isUpdate);
};
CommonChart.prototype.setTooltip = function (chart, config, isUpdate) {
if (isUpdate === void 0) { isUpdate = false; }
return setTooltipConfig.process(chart, config, isUpdate);
};
CommonChart.prototype.setDefaultTooltip = function (chart, config) {
return setTooltipConfig.setDefaultPoint(chart, config);
};
CommonChart.prototype.setGuide = function (chart, config, isUpdate) {
if (isUpdate === void 0) { isUpdate = false; }
return setGuideConfig.process(chart, config, isUpdate);
};
CommonChart.prototype.setLegend = function (chart, config, isUpdate) {
if (isUpdate === void 0) { isUpdate = false; }
return setLegendConfig.process(chart, config, isUpdate);
};
CommonChart.prototype.setContent = function (chart, config, isUpdate) {
if (isUpdate === void 0) { isUpdate = false; }
this.setScale(chart, config);
this.setFilter(chart, config);
this.setSeries(chart, config, isUpdate);
this.setGuide(chart, config, isUpdate);
};
CommonChart.prototype.setView = function (item, chart, config, isUpdate) {
if (isUpdate === void 0) { isUpdate = false; }
var view = this.createView(chart, item);
var viewData = item.data ? item.data : config.data;
this.setDataSource(view, viewData);
if (!_.isNil(item.coord)) {
this.setCoord(view, item);
}
if (!_.isNil(item.tooltip)) {
this.setTooltip(view, item, isUpdate);
}
if (!_.isNil(item.axis)) {
this.setAxis(view, item, isUpdate);
}
if (!_.isNil(item.guide)) {
this.setGuide(view, item, isUpdate);
}
this.setContent(view, item, isUpdate);
return view;
};
CommonChart.prototype.setViews = function (chart, config, isUpdate) {
if (isUpdate === void 0) { isUpdate = false; }
var cViews = _.cloneDeep(config.views);
var isArr = Array.isArray(cViews);
if (_.isNil(cViews) || _.isEmpty(cViews)) {
return;
}
var arrViews = isArr ? cViews : [cViews];
for (var _i = 0, arrViews_1 = arrViews; _i < arrViews_1.length; _i++) {
var item = arrViews_1[_i];
this.setView(item, chart, config, isUpdate);
}
};
CommonChart.prototype.setFacetViews = function (chart, facet, views, isUpdate) {
if (isUpdate === void 0) { isUpdate = false; }
this.setDataSource(chart, views.data);
if (!_.isNil(views.coord)) {
this.setCoord(chart, views);
}
if (!_.isNil(views.tooltip)) {
this.setTooltip(chart, views, isUpdate);
}
if (!_.isNil(views.axis)) {
this.setAxis(chart, views, isUpdate);
}
if (!_.isNil(views.guide)) {
this.setGuide(chart, views, isUpdate);
}
this.setContent(chart, views);
};
CommonChart.prototype.setFacet = function (chart, config, isUpdate) {
var _this = this;
if (isUpdate === void 0) { isUpdate = false; }
var cFacet = _.cloneDeep(config.facet);
if (_.isNil(cFacet) || _.isEmpty(cFacet)) {
return;
}
var options = _.omit(cFacet, ['type', 'views']);
if (_.isEmpty(cFacet.views) && !_.isFunction(cFacet.views)) {
return chart.facet(cFacet.type, options);
}
if (_.isFunction(cFacet.views)) {
options.eachView = function (v, f) {
_this.setFacetViews(v, f, cFacet.views(v, f), isUpdate);
};
}
else {
cFacet.views = Array.isArray(cFacet.views) ? cFacet.views : [cFacet.views];
options.eachView = function (v, f) {
_this.setFacetViews(v, f, cFacet.views[0], isUpdate);
};
}
return chart.facet(cFacet.type, options);
};
CommonChart.prototype.setBrush = function (chart, config) {
if (_.isNil(config.brush) || _.isEmpty(config.brush)) {
return;
}
var brush = config.brush;
var brushConfig = __assign({}, config.brush, { canvas: chart.get('canvas'), chart: chart });
var regEvents = /on(BrushStart|BrushMove|BrushEnd|DragStart|DragMove|DragEnd)/;
var events = Object.keys(brush).filter(function (entry) { return regEvents.test(entry); });
events.forEach(function (entry) {
var item = regEvents.exec(entry);
if (item && item.length) {
var oriEventName = 'on' + firstUpperCase(item[0]);
brushConfig[oriEventName] = function (ev) {
brush[entry](ev, chart);
};
}
});
new Brush(brushConfig);
};
CommonChart.prototype.repaintWidthHeight = function (chart, config) {
var width = _.get(config, 'chart.width');
if (width) {
chart.changeWidth(width);
}
var height = _.get(config, 'chart.height');
if (height) {
chart.changeHeight(height);
}
};
CommonChart.prototype.renderDiffConfig = function (config) {
var chart = this.chartInstance;
this.clear(chart);
this.setScale(chart, config);
this.setCoord(chart, config);
this.setFilter(chart, config);
this.setAxis(chart, config, true);
this.setSeries(chart, config, true);
this.setTooltip(chart, config, true);
this.setGuide(chart, config, true);
this.setViews(chart, config, true);
this.setLegend(chart, config, true);
this.setFacet(chart, config, true);
this.repaintWidthHeight(chart, config);
if (config.data) {
chart.changeData(config.data);
}
chart.repaint();
this.setBrush(chart, config);
};
return CommonChart;
}());
export default CommonChart;
//# sourceMappingURL=CommonChart.js.map