legend.js 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { Util } from '@antv/g2';
  2. import { get, isEmpty, isFunction, reduce } from '@antv/util';
  3. import { deepAssign, findGeometry } from '../../../utils';
  4. import { isLine } from './option';
  5. /**
  6. * 获取 view 的 legendItem,供存在不含有 seriesField 的图形使用
  7. * @param params
  8. */
  9. export function getViewLegendItems(params) {
  10. var view = params.view, geometryOption = params.geometryOption, yField = params.yField, legend = params.legend;
  11. var userMarker = get(legend, 'marker');
  12. var geometry = findGeometry(view, isLine(geometryOption) ? 'line' : 'interval');
  13. if (!geometryOption.seriesField) {
  14. var legendItemName = get(view, "options.scales.".concat(yField, ".alias")) || yField;
  15. // 返回 g2 设置的图例
  16. var colorAttribute = geometry.getAttribute('color');
  17. var color = view.getTheme().defaultColor;
  18. if (colorAttribute) {
  19. color = Util.getMappingValue(colorAttribute, legendItemName, get(colorAttribute, ['values', 0], color));
  20. }
  21. var marker = (isFunction(userMarker)
  22. ? userMarker
  23. : !isEmpty(userMarker) &&
  24. deepAssign({}, {
  25. style: {
  26. stroke: color,
  27. fill: color,
  28. },
  29. }, userMarker)) ||
  30. (isLine(geometryOption)
  31. ? {
  32. symbol: function (x, y, r) {
  33. return [
  34. ['M', x - r, y],
  35. ['L', x + r, y],
  36. ];
  37. },
  38. style: {
  39. lineWidth: 2,
  40. r: 6,
  41. stroke: color,
  42. },
  43. }
  44. : {
  45. symbol: 'square',
  46. style: {
  47. fill: color,
  48. },
  49. });
  50. return [
  51. {
  52. value: yField,
  53. name: legendItemName,
  54. marker: marker,
  55. isGeometry: true,
  56. viewId: view.id,
  57. },
  58. ];
  59. }
  60. var attributes = geometry.getGroupAttributes();
  61. return reduce(attributes, function (items, attr) {
  62. var attrItems = Util.getLegendItems(view, geometry, attr, view.getTheme(), userMarker);
  63. return items.concat(attrItems);
  64. }, []);
  65. }
  66. //# sourceMappingURL=legend.js.map