This is an automated email from the ASF dual-hosted git repository.

maximebeauchemin pushed a commit to branch default_chart_settings
in repository https://gitbox.apache.org/repos/asf/superset.git

commit eead618d867a87e60c2f66a2bd5761663cdb2beb
Author: Maxime Beauchemin <maximebeauche...@gmail.com>
AuthorDate: Sun Aug 3 17:58:45 2025 -0700

    refactor: Simplify Chart Defaults extra field parsing
    
    Replaced complex IIFE pattern with a clean helper function for parsing
    the datasource.extra field in Chart Defaults form controls.
    
    Changes:
    - Added parseExtra() helper function to handle string/object parsing
    - Simplified all value props to use 
parseExtra(datasource.extra).default_chart_metadata?.field
    - Streamlined onChange handlers to use the same helper consistently
    - Improved code readability and maintainability
    - Fixed issue with saved defaults not displaying when reopening 
DatasetEditor
    
    The helper function handles all edge cases (null, string, object) and 
provides
    safe fallbacks, making the Chart Defaults section more robust.
    
    🤖 Generated with [Claude Code](https://claude.ai/code)
    
    Co-Authored-By: Claude <nore...@anthropic.com>
---
 .../src/components/Datasource/DatasourceEditor.jsx | 111 +++++++--------------
 1 file changed, 36 insertions(+), 75 deletions(-)

diff --git a/superset-frontend/src/components/Datasource/DatasourceEditor.jsx 
b/superset-frontend/src/components/Datasource/DatasourceEditor.jsx
index d1ea76ba24..26e30b219e 100644
--- a/superset-frontend/src/components/Datasource/DatasourceEditor.jsx
+++ b/superset-frontend/src/components/Datasource/DatasourceEditor.jsx
@@ -77,6 +77,17 @@ import { fetchSyncedColumns, updateColumns } from './utils';
 
 const extensionsRegistry = getExtensionsRegistry();
 
+// Helper function to safely parse extra field
+const parseExtra = extra => {
+  if (!extra) return {};
+  if (typeof extra === 'object') return extra;
+  try {
+    return JSON.parse(extra);
+  } catch {
+    return {};
+  }
+};
+
 const DatasourceContainer = styled.div`
   .change-warning {
     margin: 16px 10px 0;
@@ -1061,22 +1072,12 @@ class DatasourceEditor extends PureComponent {
                     label: metric.verbose_name || metric.metric_name,
                   })) || []
                 }
-                value={(() => {
-                  try {
-                    const extra =
-                      typeof datasource.extra === 'string'
-                        ? JSON.parse(datasource.extra || '{}')
-                        : datasource.extra || {};
-                    return extra.default_chart_metadata?.default_metric;
-                  } catch {
-                    return undefined;
-                  }
-                })()}
+                value={
+                  parseExtra(datasource.extra).default_chart_metadata
+                    ?.default_metric
+                }
                 onChange={value => {
-                  const extra =
-                    typeof datasource.extra === 'string'
-                      ? JSON.parse(datasource.extra || '{}')
-                      : { ...(datasource.extra || {}) };
+                  const extra = { ...parseExtra(datasource.extra) };
                   if (!extra.default_chart_metadata) {
                     extra.default_chart_metadata = {};
                   }
@@ -1105,22 +1106,12 @@ class DatasourceEditor extends PureComponent {
                       label: column.verbose_name || column.column_name,
                     })) || []
                 }
-                value={(() => {
-                  try {
-                    const extra =
-                      typeof datasource.extra === 'string'
-                        ? JSON.parse(datasource.extra || '{}')
-                        : datasource.extra || {};
-                    return extra.default_chart_metadata?.default_dimension;
-                  } catch {
-                    return undefined;
-                  }
-                })()}
+                value={
+                  parseExtra(datasource.extra).default_chart_metadata
+                    ?.default_dimension
+                }
                 onChange={value => {
-                  const extra =
-                    typeof datasource.extra === 'string'
-                      ? JSON.parse(datasource.extra || '{}')
-                      : { ...(datasource.extra || {}) };
+                  const extra = { ...parseExtra(datasource.extra) };
                   if (!extra.default_chart_metadata) {
                     extra.default_chart_metadata = {};
                   }
@@ -1154,22 +1145,12 @@ class DatasourceEditor extends PureComponent {
                   { value: 'P1M', label: t('Month') },
                   { value: 'P1Y', label: t('Year') },
                 ]}
-                value={(() => {
-                  try {
-                    const extra =
-                      typeof datasource.extra === 'string'
-                        ? JSON.parse(datasource.extra || '{}')
-                        : datasource.extra || {};
-                    return extra.default_chart_metadata?.default_time_grain;
-                  } catch {
-                    return undefined;
-                  }
-                })()}
+                value={
+                  parseExtra(datasource.extra).default_chart_metadata
+                    ?.default_time_grain
+                }
                 onChange={value => {
-                  const extra =
-                    typeof datasource.extra === 'string'
-                      ? JSON.parse(datasource.extra || '{}')
-                      : { ...(datasource.extra || {}) };
+                  const extra = { ...parseExtra(datasource.extra) };
                   if (!extra.default_chart_metadata) {
                     extra.default_chart_metadata = {};
                   }
@@ -1198,22 +1179,12 @@ class DatasourceEditor extends PureComponent {
                   { value: 'Last year', label: t('Last year') },
                   { value: 'No filter', label: t('No filter') },
                 ]}
-                value={(() => {
-                  try {
-                    const extra =
-                      typeof datasource.extra === 'string'
-                        ? JSON.parse(datasource.extra || '{}')
-                        : datasource.extra || {};
-                    return extra.default_chart_metadata?.default_time_range;
-                  } catch {
-                    return undefined;
-                  }
-                })()}
+                value={
+                  parseExtra(datasource.extra).default_chart_metadata
+                    ?.default_time_range
+                }
                 onChange={value => {
-                  const extra =
-                    typeof datasource.extra === 'string'
-                      ? JSON.parse(datasource.extra || '{}')
-                      : { ...(datasource.extra || {}) };
+                  const extra = { ...parseExtra(datasource.extra) };
                   if (!extra.default_chart_metadata) {
                     extra.default_chart_metadata = {};
                   }
@@ -1234,22 +1205,12 @@ class DatasourceEditor extends PureComponent {
             control={
               <TextControl
                 name="default_row_limit"
-                value={(() => {
-                  try {
-                    const extra =
-                      typeof datasource.extra === 'string'
-                        ? JSON.parse(datasource.extra || '{}')
-                        : datasource.extra || {};
-                    return extra.default_chart_metadata?.default_row_limit;
-                  } catch {
-                    return undefined;
-                  }
-                })()}
+                value={
+                  parseExtra(datasource.extra).default_chart_metadata
+                    ?.default_row_limit
+                }
                 onChange={value => {
-                  const extra =
-                    typeof datasource.extra === 'string'
-                      ? JSON.parse(datasource.extra || '{}')
-                      : { ...(datasource.extra || {}) };
+                  const extra = { ...parseExtra(datasource.extra) };
                   if (!extra.default_chart_metadata) {
                     extra.default_chart_metadata = {};
                   }

Reply via email to