| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.adaptor = exports.axis = exports.legend = exports.LEGEND_SPACE = void 0;
- var tslib_1 = require("tslib");
- var util_1 = require("@antv/util");
- var common_1 = require("../../adaptor/common");
- var geometries_1 = require("../../adaptor/geometries");
- var utils_1 = require("../../utils");
- var constant_1 = require("./constant");
- require("./interactions");
- require("./label");
- require("./shape");
- var utils_2 = require("./utils");
- /** 图例默认预留空间 */
- exports.LEGEND_SPACE = 40;
- /**
- * 获取 color 映射
- */
- function colorMap(params, data, colorPalette) {
- var chart = params.chart, options = params.options;
- var blendMode = options.blendMode, setsField = options.setsField;
- var _a = chart.getTheme(), colors10 = _a.colors10, colors20 = _a.colors20;
- var palette = colorPalette;
- if (!(0, util_1.isArray)(palette)) {
- palette = data.filter(function (d) { return d[setsField].length === 1; }).length <= 10 ? colors10 : colors20;
- }
- var map = (0, utils_2.getColorMap)(palette, data, blendMode, setsField);
- return function (id) { return map.get(id) || palette[0]; };
- }
- /**
- * color options 转换
- */
- function transformColor(params, data) {
- var options = params.options;
- var color = options.color;
- if (typeof color !== 'function') {
- var colorPalette = typeof color === 'string' ? [color] : color;
- var map_1 = colorMap(params, data, colorPalette);
- return function (datum) { return map_1(datum[constant_1.ID_FIELD]); };
- }
- return color;
- }
- /**
- * 处理 padding
- */
- function padding(params) {
- var chart = params.chart, options = params.options;
- var legend = options.legend, appendPadding = options.appendPadding, padding = options.padding;
- // 处理 legend 的位置. 默认预留 40px, 业务上可以通过 appendPadding 增加
- var tempPadding = (0, utils_1.normalPadding)(appendPadding);
- if (legend !== false) {
- tempPadding = (0, utils_1.getAdjustAppendPadding)(appendPadding, (0, util_1.get)(legend, 'position'), exports.LEGEND_SPACE);
- }
- chart.appendPadding = (0, utils_1.resolveAllPadding)([tempPadding, padding]);
- return params;
- }
- /**
- * 处理非法数据
- * @param params
- */
- function data(params) {
- var options = params.options;
- /* 如遇到 交集 中存在 非法元素 的情况,就过滤掉
- * 如:
- * data = [
- * { sets: ['A'], size: 3 }, // 集合
- * { sets: ['B'], size: 4 }, // 集合
- * { sets: ['A', 'B'], size: 2 }, // 交集
- * { sets: ['A', 'B', 'C'], size: 2 }, // 交集 (存在非法 C,过滤该条数据)
- * ...
- * ]
- */
- var data = options['data'];
- if (!data) {
- (0, utils_1.log)(utils_1.LEVEL.WARN, false, 'warn: %s', '数据不能为空');
- data = [];
- }
- // 合法元素的集合:['A', 'B']
- var currSets = data.filter(function (datum) { return datum.sets.length === 1; }).map(function (datum) { return datum.sets[0]; });
- // 过滤 data
- var filterSets = data.filter(function (datum) {
- var sets = datum.sets;
- // 存在非法元素,就过滤这条数据
- return (0, utils_2.islegalSets)(currSets, sets);
- });
- if (!(0, util_1.isEqual)(filterSets, data))
- (0, utils_1.log)(utils_1.LEVEL.WARN, false, 'warn: %s', '交集中不能出现不存在的集合, 请输入合法数据');
- return (0, util_1.deepMix)({}, params, {
- options: {
- data: filterSets,
- },
- });
- }
- /**
- * geometry 处理
- * @param params
- */
- function geometry(params) {
- var chart = params.chart, options = params.options;
- var pointStyle = options.pointStyle, setsField = options.setsField, sizeField = options.sizeField;
- // 获取容器大小
- var _a = (0, utils_1.normalPadding)(chart.appendPadding), t = _a[0], r = _a[1], b = _a[2], l = _a[3];
- // 处理 legend 的位置. 默认预留 40px, 业务上可以通过 appendPadding 增加
- var customInfo = { offsetX: l, offsetY: t };
- // coordinateBBox + appendPadding = viewBBox, 不需要再计算 appendPadding 部分,因此直接使用 viewBBox
- var _b = chart.viewBBox, width = _b.width, height = _b.height;
- // 处理padding输入不合理的情况, w 和 h 不能为负数
- var vennData = (0, utils_2.layoutVennData)(options, Math.max(width - (r + l), 0), Math.max(height - (t + b), 0), 0);
- chart.data(vennData);
- var ext = (0, geometries_1.schema)((0, utils_1.deepAssign)({}, params, {
- options: {
- xField: 'x',
- yField: 'y',
- sizeField: sizeField,
- seriesField: constant_1.ID_FIELD,
- rawFields: [setsField, sizeField],
- schema: {
- shape: 'venn',
- style: pointStyle,
- },
- },
- })).ext;
- var geometry = ext.geometry;
- geometry.customInfo(customInfo);
- var colorOptions = transformColor(params, vennData);
- // 韦恩图试点, color 通道只能映射一个字段. 通过外部查找获取 datum
- if (typeof colorOptions === 'function') {
- geometry.color(constant_1.ID_FIELD, function (id) {
- var datum = vennData.find(function (d) { return d[constant_1.ID_FIELD] === id; });
- var defaultColor = colorMap(params, vennData)(id);
- return colorOptions(datum, defaultColor);
- });
- }
- return params;
- }
- /**
- * 处理 label
- * @param params
- */
- function label(params) {
- var chart = params.chart, options = params.options;
- var label = options.label;
- // 获取容器大小
- var _a = (0, utils_1.normalPadding)(chart.appendPadding), t = _a[0], l = _a[3];
- // 传入 label 布局函数所需的 自定义参数
- var customLabelInfo = { offsetX: l, offsetY: t };
- var geometry = (0, utils_1.findGeometry)(chart, 'schema');
- if (!label) {
- geometry.label(false);
- }
- else {
- var callback = label.callback, cfg = tslib_1.__rest(label, ["callback"]);
- geometry.label({
- fields: ['id'],
- callback: callback,
- cfg: (0, util_1.deepMix)({}, (0, utils_1.transformLabel)(cfg), {
- // 使用 G2 的 自定义label 修改位置
- type: 'venn',
- customLabelInfo: customLabelInfo,
- }),
- });
- }
- return params;
- }
- /**
- * legend 配置
- * @param params
- */
- function legend(params) {
- var chart = params.chart, options = params.options;
- var legend = options.legend, sizeField = options.sizeField;
- chart.legend(constant_1.ID_FIELD, legend);
- // 强制不开启 连续图例
- chart.legend(sizeField, false);
- return params;
- }
- exports.legend = legend;
- /**
- * 默认关闭坐标轴
- * @param params
- */
- function axis(params) {
- var chart = params.chart;
- chart.axis(false);
- return params;
- }
- exports.axis = axis;
- /**
- * 韦恩图 interaction 交互适配器
- */
- function vennInteraction(params) {
- var options = params.options, chart = params.chart;
- var interactions = options.interactions;
- if (interactions) {
- var MAP_1 = {
- 'legend-active': 'venn-legend-active',
- 'legend-highlight': 'venn-legend-highlight',
- };
- (0, common_1.interaction)((0, utils_1.deepAssign)({}, params, {
- options: {
- interactions: interactions.map(function (i) { return (tslib_1.__assign(tslib_1.__assign({}, i), { type: MAP_1[i.type] || i.type })); }),
- },
- }));
- }
- chart.removeInteraction('legend-active');
- chart.removeInteraction('legend-highlight');
- return params;
- }
- /**
- * 图适配器
- * @param chart
- * @param options
- */
- function adaptor(params) {
- // flow 的方式处理所有的配置到 G2 API
- return (0, utils_1.flow)(padding, common_1.theme, data, geometry, label, (0, common_1.scale)({}), legend, axis, common_1.tooltip, vennInteraction, common_1.animation
- // ... 其他的 adaptor flow
- )(params);
- }
- exports.adaptor = adaptor;
- //# sourceMappingURL=adaptor.js.map
|