1 | import { __assign } from "tslib";
|
2 | import { deepMix, isString, each, get, isFunction } from '@antv/util';
|
3 | import { DIRECTION } from '../constant';
|
4 | import { getMappingValue } from './attr';
|
5 | import { omit } from './helper';
|
6 | import { MarkerSymbols } from './marker';
|
7 |
|
8 | var STROKES_SYMBOLS = ['line', 'cross', 'tick', 'plus', 'hyphen'];
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | function handleUserMarkerStyle(markerStyle, style) {
|
16 | if (isFunction(style)) {
|
17 | return style(markerStyle);
|
18 | }
|
19 | return deepMix({}, markerStyle, style);
|
20 | }
|
21 |
|
22 |
|
23 |
|
24 |
|
25 |
|
26 |
|
27 | function adpatorMarkerStyle(marker, color) {
|
28 | var symbol = marker.symbol;
|
29 | if (isString(symbol) && STROKES_SYMBOLS.indexOf(symbol) !== -1) {
|
30 | var markerStyle = get(marker, 'style', {});
|
31 | var lineWidth = get(markerStyle, 'lineWidth', 1);
|
32 | var stroke = markerStyle.stroke || markerStyle.fill || color;
|
33 | marker.style = deepMix({}, marker.style, { lineWidth: lineWidth, stroke: stroke, fill: null });
|
34 | }
|
35 | }
|
36 |
|
37 |
|
38 |
|
39 |
|
40 | function setMarkerSymbol(marker) {
|
41 | var symbol = marker.symbol;
|
42 | if (isString(symbol) && MarkerSymbols[symbol]) {
|
43 | marker.symbol = MarkerSymbols[symbol];
|
44 | }
|
45 | }
|
46 |
|
47 |
|
48 |
|
49 |
|
50 |
|
51 |
|
52 | export function getLegendLayout(direction) {
|
53 | return direction.startsWith(DIRECTION.LEFT) || direction.startsWith(DIRECTION.RIGHT) ? 'vertical' : 'horizontal';
|
54 | }
|
55 |
|
56 |
|
57 |
|
58 |
|
59 |
|
60 |
|
61 |
|
62 |
|
63 |
|
64 |
|
65 | export function getLegendItems(view, geometry, attr, themeMarker, userMarker) {
|
66 | var scale = attr.getScale(attr.type);
|
67 | if (scale.isCategory) {
|
68 | var field_1 = scale.field;
|
69 | var colorAttr_1 = geometry.getAttribute('color');
|
70 | var shapeAttr_1 = geometry.getAttribute('shape');
|
71 | var defaultColor_1 = view.getTheme().defaultColor;
|
72 | var isInPolar_1 = geometry.coordinate.isPolar;
|
73 | return scale.getTicks().map(function (tick, index) {
|
74 | var _a;
|
75 | var text = tick.text, scaleValue = tick.value;
|
76 | var name = text;
|
77 | var value = scale.invert(scaleValue);
|
78 |
|
79 | var unchecked = view.filterFieldData(field_1, [(_a = {}, _a[field_1] = value, _a)]).length === 0;
|
80 | each(view.views, function (subView) {
|
81 | var _a;
|
82 | if (!subView.filterFieldData(field_1, [(_a = {}, _a[field_1] = value, _a)]).length) {
|
83 | unchecked = true;
|
84 | }
|
85 | });
|
86 |
|
87 | var color = getMappingValue(colorAttr_1, value, defaultColor_1);
|
88 | var shape = getMappingValue(shapeAttr_1, value, 'point');
|
89 | var marker = geometry.getShapeMarker(shape, {
|
90 | color: color,
|
91 | isInPolar: isInPolar_1,
|
92 | });
|
93 | var markerCfg = userMarker;
|
94 | if (isFunction(markerCfg)) {
|
95 | markerCfg = markerCfg(name, index, __assign({ name: name, value: value }, deepMix({}, themeMarker, marker)));
|
96 | }
|
97 |
|
98 | marker = deepMix({}, themeMarker, marker, omit(__assign({}, markerCfg), ['style']));
|
99 | adpatorMarkerStyle(marker, color);
|
100 | if (markerCfg && markerCfg.style) {
|
101 |
|
102 | marker.style = handleUserMarkerStyle(marker.style, markerCfg.style);
|
103 | }
|
104 | setMarkerSymbol(marker);
|
105 | return { id: value, name: name, value: value, marker: marker, unchecked: unchecked };
|
106 | });
|
107 | }
|
108 | return [];
|
109 | }
|
110 |
|
111 |
|
112 |
|
113 |
|
114 |
|
115 |
|
116 |
|
117 |
|
118 | export function getCustomLegendItems(themeMarker, userMarker, customItems) {
|
119 |
|
120 | return customItems.map(function (item, index) {
|
121 | var markerCfg = userMarker;
|
122 | if (isFunction(markerCfg)) {
|
123 | markerCfg = markerCfg(item.name, index, deepMix({}, themeMarker, item));
|
124 | }
|
125 | var itemMarker = isFunction(item.marker)
|
126 | ? item.marker(item.name, index, deepMix({}, themeMarker, item))
|
127 | : item.marker;
|
128 | var marker = deepMix({}, themeMarker, markerCfg, itemMarker);
|
129 | setMarkerSymbol(marker);
|
130 | item.marker = marker;
|
131 | return item;
|
132 | });
|
133 | }
|
134 |
|
135 |
|
136 |
|
137 |
|
138 |
|
139 |
|
140 |
|
141 | export function getLegendThemeCfg(theme, direction) {
|
142 | var legendTheme = get(theme, ['components', 'legend'], {});
|
143 | return deepMix({}, get(legendTheme, ['common'], {}), deepMix({}, get(legendTheme, [direction], {})));
|
144 | }
|
145 |
|
\ | No newline at end of file |