Commit 442ecb3e authored by Daniel Cothran's avatar Daniel Cothran Committed by Daniel Cothran
Browse files

Issue #3263984 by nikathone, andileco: Ensure chart_attachment data are appropriately placed

parent 2054092d
Loading
Loading
Loading
Loading
+35 −0
Original line number Diff line number Diff line
@@ -383,6 +383,7 @@ class ChartsPluginStyleChart extends StylePluginBase implements ContainerFactory
              $element_key = $this->view->current_display . '__' . $field_key . '_' . $series_index;
              $value = $this->processNumberValueFromField($result_number, $field_key);
              $chart[$element_key]['#data'][] = $value;
              $chart[$element_key]['#mapped_data'][$xaxis_label] = $value;
              if (strpos($field_handler['id'], 'field_charts_fields_scatter') === 0) {
                $chart['xaxis']['#labels'] = [];
              }
@@ -450,6 +451,13 @@ class ChartsPluginStyleChart extends StylePluginBase implements ContainerFactory
      // Merge in the child chart data.
      foreach (Element::children($subchart) as $key) {
        if ($subchart[$key]['#type'] === 'chart_data') {
          // This ensures that chart attachment data are placed correctly,
          // but it doesn't allow for chart attachment data to have x-axis
          // labels not already present in the parent chart.
          if (!empty($chart['xaxis']['#labels'])) {
            $processed_data = $this->alignSubchartData($chart['xaxis']['#labels'], $subchart[$key]['#mapped_data'], $subchart[$key]['#data']);
            $subchart[$key]['#data'] = $processed_data;
          }
          $chart[$key] = $subchart[$key];
          // If the subchart is a different type than the parent chart, set
          // the #chart_type property on the individual chart data elements.
@@ -696,6 +704,7 @@ class ChartsPluginStyleChart extends StylePluginBase implements ContainerFactory
          }
          else {
            $chart[$element_key]['#data'][$set_id] = $value;
            $chart[$element_key]['#mapped_data'][$set_id] = $value;
          }
        }
      }
@@ -757,4 +766,30 @@ class ChartsPluginStyleChart extends StylePluginBase implements ContainerFactory
    return $color_field->getFieldDefinition()->getType() === 'color_field_type' ? $color_field->color : '';
  }

  /**
   * Ensures chart attachments are placed correctly on chart.
   *
   * @param array
   *   $parent_labels
   * @param array
   *   $child_mapped_data
   * @param array
   *   $data
   *
   * @return array
   *   $processed_data
   */
  private function alignSubchartData(array $parent_labels, array $child_mapped_data, array $data) {
    $child_labels = array_keys($child_mapped_data);
    if ($parent_labels === $child_labels) {
      return $data;
    }
    $processed_data = [];
    foreach ($parent_labels as $parent_label) {
      $processed_data[] = $child_mapped_data[$parent_label] ?? NULL;
    }

    return $processed_data;
  }

}