UNPKG

6.05 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.getLegendThemeCfg = exports.getCustomLegendItems = exports.getLegendItems = exports.getLegendLayout = void 0;
4var tslib_1 = require("tslib");
5var util_1 = require("@antv/util");
6var constant_1 = require("../constant");
7var attr_1 = require("./attr");
8var helper_1 = require("./helper");
9var marker_1 = require("./marker");
10/** 线条形 marker symbol */
11var STROKES_SYMBOLS = ['line', 'cross', 'tick', 'plus', 'hyphen'];
12/**
13 * 处理用户配置的 marker style
14 * @param markerStyle
15 * @param userMarker.style
16 * @returns {ShapeAttrs} newStyle
17 */
18function handleUserMarkerStyle(markerStyle, style) {
19 if ((0, util_1.isFunction)(style)) {
20 return style(markerStyle);
21 }
22 return (0, util_1.deepMix)({}, markerStyle, style);
23}
24/**
25 * 根据 marker 是否为线条形 symbol, 来调整下样式
26 * @param symbol
27 * @param style
28 * @param color
29 */
30function adpatorMarkerStyle(marker, color) {
31 var symbol = marker.symbol;
32 if ((0, util_1.isString)(symbol) && STROKES_SYMBOLS.indexOf(symbol) !== -1) {
33 var markerStyle = (0, util_1.get)(marker, 'style', {});
34 var lineWidth = (0, util_1.get)(markerStyle, 'lineWidth', 1);
35 var stroke = markerStyle.stroke || markerStyle.fill || color;
36 marker.style = (0, util_1.deepMix)({}, marker.style, { lineWidth: lineWidth, stroke: stroke, fill: null });
37 }
38}
39/**
40 * 设置 marker 的 symbol,将 字符串的 symbol 转换为真正的绘制命令
41 * @param marker
42 */
43function setMarkerSymbol(marker) {
44 var symbol = marker.symbol;
45 if ((0, util_1.isString)(symbol) && marker_1.MarkerSymbols[symbol]) {
46 marker.symbol = marker_1.MarkerSymbols[symbol];
47 }
48}
49/**
50 * @ignore
51 * get the legend layout from direction
52 * @param direction
53 * @returns layout 'horizontal' | 'vertical'
54 */
55function getLegendLayout(direction) {
56 return direction.startsWith(constant_1.DIRECTION.LEFT) || direction.startsWith(constant_1.DIRECTION.RIGHT) ? 'vertical' : 'horizontal';
57}
58exports.getLegendLayout = getLegendLayout;
59/**
60 * @ignore
61 * get the legend items
62 * @param view
63 * @param geometry
64 * @param attr
65 * @param themeMarker
66 * @param markerCfg
67 * @returns legend items
68 */
69function getLegendItems(view, geometry, attr, themeMarker, userMarker) {
70 var scale = attr.getScale(attr.type);
71 if (scale.isCategory) {
72 var field_1 = scale.field;
73 var colorAttr_1 = geometry.getAttribute('color');
74 var shapeAttr_1 = geometry.getAttribute('shape');
75 var defaultColor_1 = view.getTheme().defaultColor;
76 var isInPolar_1 = geometry.coordinate.isPolar;
77 return scale.getTicks().map(function (tick, index) {
78 var _a;
79 var text = tick.text, scaleValue = tick.value;
80 var name = text;
81 var value = scale.invert(scaleValue);
82 // 通过过滤图例项的数据,来看是否 unchecked
83 var unchecked = view.filterFieldData(field_1, [(_a = {}, _a[field_1] = value, _a)]).length === 0;
84 (0, util_1.each)(view.views, function (subView) {
85 var _a;
86 if (!subView.filterFieldData(field_1, [(_a = {}, _a[field_1] = value, _a)]).length) {
87 unchecked = true;
88 }
89 });
90 // @ts-ignore
91 var color = (0, attr_1.getMappingValue)(colorAttr_1, value, defaultColor_1);
92 var shape = (0, attr_1.getMappingValue)(shapeAttr_1, value, 'point');
93 var marker = geometry.getShapeMarker(shape, {
94 color: color,
95 isInPolar: isInPolar_1,
96 });
97 var markerCfg = userMarker;
98 if ((0, util_1.isFunction)(markerCfg)) {
99 markerCfg = markerCfg(name, index, (0, tslib_1.__assign)({ name: name, value: value }, (0, util_1.deepMix)({}, themeMarker, marker)));
100 }
101 // the marker configure order should be ensure
102 marker = (0, util_1.deepMix)({}, themeMarker, marker, (0, helper_1.omit)((0, tslib_1.__assign)({}, markerCfg), ['style']));
103 adpatorMarkerStyle(marker, color);
104 if (markerCfg && markerCfg.style) {
105 // handle user's style settings
106 marker.style = handleUserMarkerStyle(marker.style, markerCfg.style);
107 }
108 setMarkerSymbol(marker);
109 return { id: value, name: name, value: value, marker: marker, unchecked: unchecked };
110 });
111 }
112 return [];
113}
114exports.getLegendItems = getLegendItems;
115/**
116 *
117 * @ignore
118 * custom legend 的 items 获取
119 * @param themeMarker
120 * @param userMarker
121 * @param customItems
122 */
123function getCustomLegendItems(themeMarker, userMarker, customItems) {
124 // 如果有自定义的 item,那么就直接使用,并合并主题的 marker 配置
125 return customItems.map(function (item, index) {
126 var markerCfg = userMarker;
127 if ((0, util_1.isFunction)(markerCfg)) {
128 markerCfg = markerCfg(item.name, index, (0, util_1.deepMix)({}, themeMarker, item));
129 }
130 var itemMarker = (0, util_1.isFunction)(item.marker)
131 ? item.marker(item.name, index, (0, util_1.deepMix)({}, themeMarker, item))
132 : item.marker;
133 var marker = (0, util_1.deepMix)({}, themeMarker, markerCfg, itemMarker);
134 setMarkerSymbol(marker);
135 item.marker = marker;
136 return item;
137 });
138}
139exports.getCustomLegendItems = getCustomLegendItems;
140/**
141 * get the legend cfg from theme, will mix the common cfg of legend theme
142 *
143 * @param theme view theme object
144 * @param direction legend direction
145 * @returns legend theme cfg
146 */
147function getLegendThemeCfg(theme, direction) {
148 var legendTheme = (0, util_1.get)(theme, ['components', 'legend'], {});
149 return (0, util_1.deepMix)({}, (0, util_1.get)(legendTheme, ['common'], {}), (0, util_1.deepMix)({}, (0, util_1.get)(legendTheme, [direction], {})));
150}
151exports.getLegendThemeCfg = getLegendThemeCfg;
152//# sourceMappingURL=legend.js.map
\No newline at end of file