private renderLabels()

in src/chordChart.ts [1185:1236]


  private renderLabels(
    filteredData: ChordLabelEnabledDataPoint[],
    layout: ILabelLayout,
    isDonut: boolean = false,
    forAnimation: boolean = false
  ): void {
    // Check for a case where resizing leaves no labels - then we need to remove the labels "g"
    if (filteredData.length === 0) {
      dataLabelUtils.cleanDataLabels(this.labels, true);

      return null;
    }

    // line chart ViewModel has a special "key" property for point identification since the "identity" field is set to the series identity
    let hasKey: boolean = (<any>filteredData)[0].key !== null;
    let hasDataPointIdentity: boolean =
      (<any>filteredData)[0].identity !== null;

    let dataLabels: Selection<
      any,
      ChordLabelEnabledDataPoint,
      any,
      any
    > = this.labels
      .selectAll(ChordChart.labelsClass.selectorName)
      .data(filteredData);

    dataLabels.exit().remove();

    dataLabels = dataLabels.merge(
      dataLabels
        .enter()
        .append("text")
        .classed(ChordChart.labelsClass.className, true)
    );

    let newLabels = dataLabels;

    if (forAnimation) {
      newLabels.style("opacity", 0);
    }

    dataLabels
      .attr("x", (d: LabelEnabledDataPoint) => d.labelX)
      .attr("y", (d: LabelEnabledDataPoint) => d.labelY)
      .attr("dy", ChordChart.DefaultDY)
      .text((d: LabelEnabledDataPoint) => d.labeltext);

    Object.keys(layout.style).forEach((x) =>
      dataLabels.style(x, layout.style[x])
    );
  }