Loading modules/charts_highcharts/src/Plugin/chart/Library/Highcharts.php +1 −1 Original line number Diff line number Diff line Loading @@ -492,7 +492,7 @@ class Highcharts extends ChartBase implements ContainerFactoryPluginInterface { if ($element[$key][$sub_key]['#type'] === 'chart_data_item') { // Make sure defaults are loaded. if (empty($element[$key][$sub_key]['#defaults_loaded'])) { $element[$key][$sub_key] += $element_info->getInfo($element[$key][$sub_key]['#type']); $element[$key][$sub_key] += $this->elementInfo->getInfo($element[$key][$sub_key]['#type']); } $data_item = $element[$key][$sub_key]; Loading src/Element/BaseSettings.php +20 −19 Original line number Diff line number Diff line Loading @@ -1167,21 +1167,23 @@ class BaseSettings extends FormElement { private static function processSeriesForm(array $element, array $options, FormStateInterface $form_state) { // Chart preview. $parents = $element['#parents']; $id_prefix = implode('-', $parents); $css_id_prefix = implode('-', $parents); $id_prefix = str_replace('-', '_', $css_id_prefix); $open_preview_elt_state_key = $id_prefix . '__open_preview'; $element_state = ChartDataCollectorTable::getElementState($parents, $form_state); if (!$element_state) { $element_state = $options; // Closing preview here cause this is probably initial form load. $open_preview = FALSE; $element_state[$id_prefix . '__open_preview'] = $open_preview; $element_state[$open_preview_elt_state_key] = $open_preview; ChartDataCollectorTable::setElementState($parents, $form_state, $element_state); } else { $open_preview = $element_state[$id_prefix . '__open_preview']; $open_preview = $element_state[$open_preview_elt_state_key]; } $wrapper_id = $element['#wrapper_id'] . '--preview'; $wrapper_id = $css_id_prefix . '--preview--ajax-wrapper'; $element['preview'] = [ '#type' => 'details', '#title' => new TranslatableMarkup('Preview'), Loading @@ -1193,9 +1195,9 @@ class BaseSettings extends FormElement { $element['preview']['submit'] = [ '#type' => 'submit', '#value' => new TranslatableMarkup('Update Preview'), '#name' => $id_prefix . '--preview-submit', '#name' => $id_prefix . '__preview_submit', '#attributes' => [ 'class' => [Html::cleanCssIdentifier($id_prefix . '--preview-submit')], 'class' => [$css_id_prefix . '--preview-submit'], ], '#submit' => [[get_called_class(), 'chartPreviewSubmit']], '#limit_validation_errors' => [$parents], Loading @@ -1206,22 +1208,22 @@ class BaseSettings extends FormElement { 'effect' => 'fade', ], '#operation' => 'preview', '#open_preview_elt_state_key' => $open_preview_elt_state_key, ]; $preview_content = new TranslatableMarkup('<p>Please fill up the required value below then update the preview.</p>'); if (!empty($element_state['library']) && !empty($element_state['series'])) { /** @var \Drupal\Core\Render\RendererInterface $renderer */ $renderer = \Drupal::service('renderer'); $chart_build = Chart::buildElement($options, $wrapper_id); $chart_id = $id_prefix . '__preview_chart'; $chart_build = Chart::buildElement($options, $chart_id); $chart_build['#id'] = $id_prefix . '--preview-chart'; // @todo check if this would work with various hooks. $chart_build['#id'] = $wrapper_id; $chart_build['#chart_id'] = $id_prefix; $preview_content = $renderer->render($chart_build); $chart_build['#chart_id'] = $chart_id; $element['preview']['content'] = $chart_build; } else { $element['preview']['content'] = [ '#markup' => $preview_content, '#markup' => new TranslatableMarkup('<p>Please fill up the required value below then update the preview.</p>'), ]; } $element['series'] = [ '#type' => 'chart_data_collector_table', Loading Loading @@ -1249,11 +1251,10 @@ class BaseSettings extends FormElement { public static function chartPreviewSubmit(array $form, FormStateInterface $form_state) { $triggering_element = $form_state->getTriggeringElement(); $element_parents = array_slice($triggering_element['#parents'], 0, -2); $id_prefix = implode('-', $element_parents); // Getting the current element state. $element_state = ChartDataCollectorTable::getElementState($element_parents, $form_state); $element_state[$id_prefix . '__open_preview'] = TRUE; $element_state[$triggering_element['#open_preview_elt_state_key']] = TRUE; // Updating form state storage. ChartDataCollectorTable::setElementState($element_parents, $form_state, $element_state); $form_state->setRebuild(); Loading src/Element/Chart.php +89 −85 Original line number Diff line number Diff line Loading @@ -305,7 +305,7 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { * @return array * The element. */ public static function buildElement(array $settings, $chart_id) { public static function buildElement(array $settings, string $chart_id): array { $type = $settings['type']; $single_axis = in_array($type, ['pie', 'donut']); $display_colors = $settings['display']['colors'] ?? []; Loading @@ -332,7 +332,10 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { '#height_units' => $settings['display']['dimensions']['height_units'], ]; if (!empty($settings['series'])) { if (empty($settings['series'])) { return $element; } $table = $settings['series']; // Extracting the categories. $categories = ChartDataCollectorTable::getCategoriesFromCollectedTable($table, $type); Loading @@ -346,7 +349,9 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { '#labels_rotation' => $settings['xaxis']['labels_rotation'], ]; if (!empty($series_data)) { if (empty($series_data)) { return $element; } $element['yaxis'] = [ '#type' => 'chart_yaxis', Loading Loading @@ -378,6 +383,7 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { // Overriding element colors for pie and donut chart types when the // settings display colors is empty. $overrides_element_colors = !$display_colors && ($type === 'pie' || $type === 'donut'); $series_key = $chart_id . '__series'; if ($single_axis) { $new_series = []; $labels = []; Loading @@ -390,7 +396,7 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { } $element['xaxis']['#labels'] = $labels; // @todo Address more than one series. $element[$chart_id] = [ $element[$series_key] = [ '#type' => 'chart_data', '#data' => $new_series, '#title' => $series_data[0]['title'] ?? '', Loading @@ -399,7 +405,7 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { else { $series_counter = 0; foreach ($series_data as $data_index => $data) { $key = $chart_id . '_' . $data_index; $key = $series_key . '__' . $data_index; $element[$key] = [ '#type' => 'chart_data', '#data' => $data['data'], Loading @@ -422,8 +428,6 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { $series_counter++; } } } } return $element; } Loading Loading
modules/charts_highcharts/src/Plugin/chart/Library/Highcharts.php +1 −1 Original line number Diff line number Diff line Loading @@ -492,7 +492,7 @@ class Highcharts extends ChartBase implements ContainerFactoryPluginInterface { if ($element[$key][$sub_key]['#type'] === 'chart_data_item') { // Make sure defaults are loaded. if (empty($element[$key][$sub_key]['#defaults_loaded'])) { $element[$key][$sub_key] += $element_info->getInfo($element[$key][$sub_key]['#type']); $element[$key][$sub_key] += $this->elementInfo->getInfo($element[$key][$sub_key]['#type']); } $data_item = $element[$key][$sub_key]; Loading
src/Element/BaseSettings.php +20 −19 Original line number Diff line number Diff line Loading @@ -1167,21 +1167,23 @@ class BaseSettings extends FormElement { private static function processSeriesForm(array $element, array $options, FormStateInterface $form_state) { // Chart preview. $parents = $element['#parents']; $id_prefix = implode('-', $parents); $css_id_prefix = implode('-', $parents); $id_prefix = str_replace('-', '_', $css_id_prefix); $open_preview_elt_state_key = $id_prefix . '__open_preview'; $element_state = ChartDataCollectorTable::getElementState($parents, $form_state); if (!$element_state) { $element_state = $options; // Closing preview here cause this is probably initial form load. $open_preview = FALSE; $element_state[$id_prefix . '__open_preview'] = $open_preview; $element_state[$open_preview_elt_state_key] = $open_preview; ChartDataCollectorTable::setElementState($parents, $form_state, $element_state); } else { $open_preview = $element_state[$id_prefix . '__open_preview']; $open_preview = $element_state[$open_preview_elt_state_key]; } $wrapper_id = $element['#wrapper_id'] . '--preview'; $wrapper_id = $css_id_prefix . '--preview--ajax-wrapper'; $element['preview'] = [ '#type' => 'details', '#title' => new TranslatableMarkup('Preview'), Loading @@ -1193,9 +1195,9 @@ class BaseSettings extends FormElement { $element['preview']['submit'] = [ '#type' => 'submit', '#value' => new TranslatableMarkup('Update Preview'), '#name' => $id_prefix . '--preview-submit', '#name' => $id_prefix . '__preview_submit', '#attributes' => [ 'class' => [Html::cleanCssIdentifier($id_prefix . '--preview-submit')], 'class' => [$css_id_prefix . '--preview-submit'], ], '#submit' => [[get_called_class(), 'chartPreviewSubmit']], '#limit_validation_errors' => [$parents], Loading @@ -1206,22 +1208,22 @@ class BaseSettings extends FormElement { 'effect' => 'fade', ], '#operation' => 'preview', '#open_preview_elt_state_key' => $open_preview_elt_state_key, ]; $preview_content = new TranslatableMarkup('<p>Please fill up the required value below then update the preview.</p>'); if (!empty($element_state['library']) && !empty($element_state['series'])) { /** @var \Drupal\Core\Render\RendererInterface $renderer */ $renderer = \Drupal::service('renderer'); $chart_build = Chart::buildElement($options, $wrapper_id); $chart_id = $id_prefix . '__preview_chart'; $chart_build = Chart::buildElement($options, $chart_id); $chart_build['#id'] = $id_prefix . '--preview-chart'; // @todo check if this would work with various hooks. $chart_build['#id'] = $wrapper_id; $chart_build['#chart_id'] = $id_prefix; $preview_content = $renderer->render($chart_build); $chart_build['#chart_id'] = $chart_id; $element['preview']['content'] = $chart_build; } else { $element['preview']['content'] = [ '#markup' => $preview_content, '#markup' => new TranslatableMarkup('<p>Please fill up the required value below then update the preview.</p>'), ]; } $element['series'] = [ '#type' => 'chart_data_collector_table', Loading Loading @@ -1249,11 +1251,10 @@ class BaseSettings extends FormElement { public static function chartPreviewSubmit(array $form, FormStateInterface $form_state) { $triggering_element = $form_state->getTriggeringElement(); $element_parents = array_slice($triggering_element['#parents'], 0, -2); $id_prefix = implode('-', $element_parents); // Getting the current element state. $element_state = ChartDataCollectorTable::getElementState($element_parents, $form_state); $element_state[$id_prefix . '__open_preview'] = TRUE; $element_state[$triggering_element['#open_preview_elt_state_key']] = TRUE; // Updating form state storage. ChartDataCollectorTable::setElementState($element_parents, $form_state, $element_state); $form_state->setRebuild(); Loading
src/Element/Chart.php +89 −85 Original line number Diff line number Diff line Loading @@ -305,7 +305,7 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { * @return array * The element. */ public static function buildElement(array $settings, $chart_id) { public static function buildElement(array $settings, string $chart_id): array { $type = $settings['type']; $single_axis = in_array($type, ['pie', 'donut']); $display_colors = $settings['display']['colors'] ?? []; Loading @@ -332,7 +332,10 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { '#height_units' => $settings['display']['dimensions']['height_units'], ]; if (!empty($settings['series'])) { if (empty($settings['series'])) { return $element; } $table = $settings['series']; // Extracting the categories. $categories = ChartDataCollectorTable::getCategoriesFromCollectedTable($table, $type); Loading @@ -346,7 +349,9 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { '#labels_rotation' => $settings['xaxis']['labels_rotation'], ]; if (!empty($series_data)) { if (empty($series_data)) { return $element; } $element['yaxis'] = [ '#type' => 'chart_yaxis', Loading Loading @@ -378,6 +383,7 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { // Overriding element colors for pie and donut chart types when the // settings display colors is empty. $overrides_element_colors = !$display_colors && ($type === 'pie' || $type === 'donut'); $series_key = $chart_id . '__series'; if ($single_axis) { $new_series = []; $labels = []; Loading @@ -390,7 +396,7 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { } $element['xaxis']['#labels'] = $labels; // @todo Address more than one series. $element[$chart_id] = [ $element[$series_key] = [ '#type' => 'chart_data', '#data' => $new_series, '#title' => $series_data[0]['title'] ?? '', Loading @@ -399,7 +405,7 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { else { $series_counter = 0; foreach ($series_data as $data_index => $data) { $key = $chart_id . '_' . $data_index; $key = $series_key . '__' . $data_index; $element[$key] = [ '#type' => 'chart_data', '#data' => $data['data'], Loading @@ -422,8 +428,6 @@ class Chart extends RenderElement implements ContainerFactoryPluginInterface { $series_counter++; } } } } return $element; } Loading