Loading src/Plugin/views/style/ChartsPluginStyleChart.php +35 −0 Original line number Diff line number Diff line Loading @@ -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'] = []; } Loading Loading @@ -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. Loading Loading @@ -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; } } } Loading Loading @@ -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; } } Loading
src/Plugin/views/style/ChartsPluginStyleChart.php +35 −0 Original line number Diff line number Diff line Loading @@ -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'] = []; } Loading Loading @@ -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. Loading Loading @@ -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; } } } Loading Loading @@ -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; } }