UNPKG

8.97 kBSource Map (JSON)View Raw
1{"version":3,"file":"legend.js","sourceRoot":"","sources":["../../src/util/legend.ts"],"names":[],"mappings":"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","sourcesContent":["import { LegendMarkerCfg } from '@antv/component';\nimport { deepMix, isString, each, get, isFunction } from '@antv/util';\nimport View from '../chart/view';\nimport { DIRECTION } from '../constant';\nimport { Attribute, ShapeAttrs, Tick } from '../dependents';\nimport Geometry from '../geometry/base';\nimport { LegendItem, MarkerCfg } from '../interface';\nimport { getMappingValue } from './attr';\nimport { omit } from './helper';\nimport { MarkerSymbols } from './marker';\n\n/** 线条形 marker symbol */\nconst STROKES_SYMBOLS = ['line', 'cross', 'tick', 'plus', 'hyphen'];\n\n/**\n * 处理用户配置的 marker style\n * @param markerStyle\n * @param userMarker.style\n * @returns {ShapeAttrs} newStyle\n */\nfunction handleUserMarkerStyle(markerStyle: ShapeAttrs, style: MarkerCfg['style']): ShapeAttrs {\n if (isFunction(style)) {\n return style(markerStyle);\n }\n return deepMix({}, markerStyle, style);\n}\n\n/**\n * 根据 marker 是否为线条形 symbol, 来调整下样式\n * @param symbol\n * @param style\n * @param color\n */\nfunction adpatorMarkerStyle(marker: LegendMarkerCfg, color: string): void {\n const symbol = marker.symbol;\n if (isString(symbol) && STROKES_SYMBOLS.indexOf(symbol) !== -1) {\n const markerStyle = get(marker, 'style', {});\n const lineWidth = get(markerStyle, 'lineWidth', 1);\n const stroke = markerStyle.stroke || markerStyle.fill || color;\n marker.style = deepMix({}, marker.style, { lineWidth, stroke, fill: null });\n }\n}\n\n/**\n * 设置 marker 的 symbol,将 字符串的 symbol 转换为真正的绘制命令\n * @param marker\n */\nfunction setMarkerSymbol(marker: LegendMarkerCfg): void {\n const symbol = marker.symbol;\n if (isString(symbol) && MarkerSymbols[symbol]) {\n marker.symbol = MarkerSymbols[symbol];\n }\n}\n\n/**\n * @ignore\n * get the legend layout from direction\n * @param direction\n * @returns layout 'horizontal' | 'vertical'\n */\nexport function getLegendLayout(direction: DIRECTION): 'vertical' | 'horizontal' {\n return direction.startsWith(DIRECTION.LEFT) || direction.startsWith(DIRECTION.RIGHT) ? 'vertical' : 'horizontal';\n}\n\n/** item of @antv/component legend */\ntype ComponentLegendItem = Omit<LegendItem, 'marker'> & {\n marker: any;\n};\n\n/**\n * @ignore\n * get the legend items\n * @param view\n * @param geometry\n * @param attr\n * @param themeMarker\n * @param userMarker\n * @returns legend items\n */\nexport function getLegendItems(\n view: View,\n geometry: Geometry,\n attr: Attribute,\n themeMarker: object,\n userMarker\n): ComponentLegendItem[] {\n const scale = attr.getScale(attr.type);\n if (scale.isCategory) {\n const field = scale.field;\n const colorAttr = geometry.getAttribute('color');\n const shapeAttr = geometry.getAttribute('shape');\n const defaultColor = view.getTheme().defaultColor;\n const isInPolar = geometry.coordinate.isPolar;\n\n return scale.getTicks().map((tick: Tick) => {\n const { text, value: scaleValue } = tick;\n const name = text;\n const value = scale.invert(scaleValue);\n\n // 通过过滤图例项的数据,来看是否 unchecked\n let unchecked = view.filterFieldData(field, [{ [field]: value }]).length === 0;\n each(view.views, (subView) => {\n if (!subView.filterFieldData(field, [{ [field]: value }]).length) {\n unchecked = true;\n }\n });\n\n // @ts-ignore\n const color = getMappingValue(colorAttr, value, defaultColor);\n const shape = getMappingValue(shapeAttr, value, 'point');\n let marker = geometry.getShapeMarker(shape, {\n color,\n isInPolar,\n });\n // the marker configure order should be ensure\n marker = deepMix({}, themeMarker, marker, omit({ ...userMarker }, ['style']));\n adpatorMarkerStyle(marker, color);\n if (userMarker && userMarker.style) {\n // handle user's style settings\n marker.style = handleUserMarkerStyle(marker.style, userMarker.style);\n }\n setMarkerSymbol(marker);\n\n return { id: value, name, value, marker, unchecked };\n });\n }\n return [];\n}\n\n/**\n *\n * @ignore\n * custom legend 的 items 获取\n * @param themeMarker\n * @param userMarker\n * @param customItems\n */\nexport function getCustomLegendItems(themeMarker: object, userMarker: object, customItems: LegendItem[]) {\n // 如果有自定义的 item,那么就直接使用,并合并主题的 marker 配置\n return customItems.map((item: LegendItem) => {\n const marker = deepMix({}, themeMarker, userMarker, item.marker);\n setMarkerSymbol(marker);\n\n item.marker = marker;\n return item;\n });\n}\n\n/**\n * get the legend cfg from theme, will mix the common cfg of legend theme\n *\n * @param theme view theme object\n * @param direction legend direction\n * @returns legend theme cfg\n */\nexport function getLegendThemeCfg(theme: object, direction: string): object {\n const legendTheme = get(theme, ['components', 'legend'], {});\n return deepMix({}, get(legendTheme, ['common'], {}), deepMix({}, get(legendTheme, [direction], {})));\n}\n"]}
\No newline at end of file