UNPKG

5.32 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 (util_1.isFunction(style)) {
20 return style(markerStyle);
21 }
22 return 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 (util_1.isString(symbol) && STROKES_SYMBOLS.indexOf(symbol) !== -1) {
33 var markerStyle = util_1.get(marker, 'style', {});
34 var lineWidth = util_1.get(markerStyle, 'lineWidth', 1);
35 var stroke = markerStyle.stroke || markerStyle.fill || color;
36 marker.style = 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 (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 userMarker
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) {
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 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 = attr_1.getMappingValue(colorAttr_1, value, defaultColor_1);
92 var shape = attr_1.getMappingValue(shapeAttr_1, value, 'point');
93 var marker = geometry.getShapeMarker(shape, {
94 color: color,
95 isInPolar: isInPolar_1,
96 });
97 // the marker configure order should be ensure
98 marker = util_1.deepMix({}, themeMarker, marker, helper_1.omit(tslib_1.__assign({}, userMarker), ['style']));
99 adpatorMarkerStyle(marker, color);
100 if (userMarker && userMarker.style) {
101 // handle user's style settings
102 marker.style = handleUserMarkerStyle(marker.style, userMarker.style);
103 }
104 setMarkerSymbol(marker);
105 return { id: value, name: name, value: value, marker: marker, unchecked: unchecked };
106 });
107 }
108 return [];
109}
110exports.getLegendItems = getLegendItems;
111/**
112 *
113 * @ignore
114 * custom legend 的 items 获取
115 * @param themeMarker
116 * @param userMarker
117 * @param customItems
118 */
119function getCustomLegendItems(themeMarker, userMarker, customItems) {
120 // 如果有自定义的 item,那么就直接使用,并合并主题的 marker 配置
121 return customItems.map(function (item) {
122 var marker = util_1.deepMix({}, themeMarker, userMarker, item.marker);
123 setMarkerSymbol(marker);
124 item.marker = marker;
125 return item;
126 });
127}
128exports.getCustomLegendItems = getCustomLegendItems;
129/**
130 * get the legend cfg from theme, will mix the common cfg of legend theme
131 *
132 * @param theme view theme object
133 * @param direction legend direction
134 * @returns legend theme cfg
135 */
136function getLegendThemeCfg(theme, direction) {
137 var legendTheme = util_1.get(theme, ['components', 'legend'], {});
138 return util_1.deepMix({}, util_1.get(legendTheme, ['common'], {}), util_1.deepMix({}, util_1.get(legendTheme, [direction], {})));
139}
140exports.getLegendThemeCfg = getLegendThemeCfg;
141//# sourceMappingURL=legend.js.map
\No newline at end of file