@antv/g2
Version: 
the Grammar of Graphics in Javascript
34 lines (27 loc) • 940 B
text/typescript
import { DisplayObject } from '@antv/g';
import { LabelTransformComponent as LLC } from '../runtime';
import { OverlapHideLabelTransform } from '../spec';
import { isOverlap, parseAABB } from '../utils/bounds';
import { hide, show } from '../utils/style';
export type OverlapHideOptions = Omit<OverlapHideLabelTransform, 'type'>;
/**
 * Hide the label when overlap.
 */
export const OverlapHide: LLC<OverlapHideOptions> = (options) => {
  const { priority } = options;
  return (labels: DisplayObject[]) => {
    const displayLabels = [];
    // When overlap, will hide the next label.
    if (priority) labels.sort(priority);
    labels.forEach((l) => {
      show(l);
      const b1 = l.getLocalBounds();
      const overlaping = displayLabels.some((dl) =>
        isOverlap(parseAABB(b1), parseAABB(dl.getLocalBounds())),
      );
      if (overlaping) hide(l);
      else displayLabels.push(l);
    });
    return labels;
  };
};