UNPKG

viser

Version:

viser is a toolkit fit for data vis engineer.

410 lines (307 loc) 11.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _get2 = _interopRequireDefault(require("lodash/get")); var _isFunction2 = _interopRequireDefault(require("lodash/isFunction")); var _omit2 = _interopRequireDefault(require("lodash/omit")); var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty")); var _isNil2 = _interopRequireDefault(require("lodash/isNil")); var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep")); var setAxisConfig = _interopRequireWildcard(require("../components/setAxisConfig")); var setCoordConfig = _interopRequireWildcard(require("../components/setCoordConfig")); var setFilterConfig = _interopRequireWildcard(require("../components/setFilterConfig")); var setGuideConfig = _interopRequireWildcard(require("../components/setGuideConfig")); var setLegendConfig = _interopRequireWildcard(require("../components/setLegendConfig")); var setScaleConfig = _interopRequireWildcard(require("../components/setScaleConfig")); var setSeriesConfig = _interopRequireWildcard(require("../components/setSeriesConfig")); var setTooltipConfig = _interopRequireWildcard(require("../components/setTooltipConfig")); var _loadShapes = _interopRequireDefault(require("../shapes/loadShapes")); var EventUtils = _interopRequireWildcard(require("../utils/EventUtils")); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function _getRequireWildcardCache() { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; if (obj != null) { var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var __assign = void 0 && (void 0).__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); }; 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 = (0, _cloneDeep2.default)(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; (0, _loadShapes.default)(); 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 = (0, _cloneDeep2.default)(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 (!(0, _isNil2.default)(data) && !(0, _isEmpty2.default)(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 (!(0, _isNil2.default)(item.coord)) { this.setCoord(view, item); } if (!(0, _isNil2.default)(item.tooltip)) { this.setTooltip(view, item, isUpdate); } if (!(0, _isNil2.default)(item.axis)) { this.setAxis(view, item, isUpdate); } if (!(0, _isNil2.default)(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 = (0, _cloneDeep2.default)(config.views); var isArr = Array.isArray(cViews); if ((0, _isNil2.default)(cViews) || (0, _isEmpty2.default)(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 (!(0, _isNil2.default)(views.coord)) { this.setCoord(chart, views); } if (!(0, _isNil2.default)(views.tooltip)) { this.setTooltip(chart, views, isUpdate); } if (!(0, _isNil2.default)(views.axis)) { this.setAxis(chart, views, isUpdate); } if (!(0, _isNil2.default)(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 = (0, _cloneDeep2.default)(config.facet); if ((0, _isNil2.default)(cFacet) || (0, _isEmpty2.default)(cFacet)) { return; } var options = (0, _omit2.default)(cFacet, ['type', 'views']); if ((0, _isEmpty2.default)(cFacet.views) && !(0, _isFunction2.default)(cFacet.views)) { return chart.facet(cFacet.type, options); } if ((0, _isFunction2.default)(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 ((0, _isNil2.default)(config.brush) || (0, _isEmpty2.default)(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 = (0, _get2.default)(config, 'chart.width'); if (width) { chart.changeWidth(width); } var height = (0, _get2.default)(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; }(); var _default = CommonChart; exports.default = _default;