From 796e566d145dfcc85fcdc6ed0e009e251600ef18 Mon Sep 17 00:00:00 2001 From: Damian Pendrak Date: Mon, 6 Oct 2025 19:47:48 +0200 Subject: [PATCH 1/4] Fix categorical color --- .../src/layers/Scatter/buildQuery.ts | 8 ++++---- .../src/layers/Scatter/transformProps.ts | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/buildQuery.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/buildQuery.ts index 66b714619022..73c1482a0444 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/buildQuery.ts +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/buildQuery.ts @@ -46,14 +46,14 @@ export interface DeckScatterFormData min_radius?: number; max_radius?: number; color_picker?: { r: number; g: number; b: number; a: number }; - category_name?: string; + dimension?: string; } export default function buildQuery(formData: DeckScatterFormData) { const { spatial, point_radius_fixed, - category_name, + dimension, js_columns, tooltip_contents, } = formData; @@ -67,8 +67,8 @@ export default function buildQuery(formData: DeckScatterFormData) { const spatialColumns = getSpatialColumns(spatial); let columns = [...(baseQueryObject.columns || []), ...spatialColumns]; - if (category_name) { - columns.push(category_name); + if (dimension) { + columns.push(dimension); } const columnStrings = columns.map(col => diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/transformProps.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/transformProps.ts index baadec33c91a..7f4a300886a2 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/transformProps.ts +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/transformProps.ts @@ -95,7 +95,7 @@ function processScatterData( export default function transformProps(chartProps: ChartProps) { const { rawFormData: formData } = chartProps; - const { spatial, point_radius_fixed, category_name, js_columns } = + const { spatial, point_radius_fixed, dimension, js_columns } = formData as DeckScatterFormData; const radiusMetricLabel = getMetricLabelFromFormData(point_radius_fixed); @@ -104,7 +104,7 @@ export default function transformProps(chartProps: ChartProps) { records, spatial, radiusMetricLabel, - category_name, + dimension, js_columns, ); From fc5273974c97bc7550b3da3c0c40d26a5f1c66a8 Mon Sep 17 00:00:00 2001 From: Damian Pendrak Date: Mon, 6 Oct 2025 20:10:46 +0200 Subject: [PATCH 2/4] Fall back to fixed color when no dimension selected --- .../src/CategoricalDeckGLContainer.tsx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx index 1400a1513347..10cfe4a6aa68 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx @@ -163,6 +163,25 @@ const CategoricalDeckGLContainer = (props: CategoricalDeckGLContainerProps) => { })); } case COLOR_SCHEME_TYPES.categorical_palette: { + // If no dimension selected, fall back to fixed color + if (!fd.dimension) { + const fallbackColor = fd.color_picker || { + r: 0, + g: 0, + b: 0, + a: 100, + }; + return data.map(d => ({ + ...d, + color: [ + fallbackColor.r, + fallbackColor.g, + fallbackColor.b, + fallbackColor.a * 255, + ], + })); + } + return data.map(d => ({ ...d, color: hexToRGB(colorFn(d.cat_color, fd.slice_id)), From 45e3af3566ab6f92638e603c7ae2538c34c509b8 Mon Sep 17 00:00:00 2001 From: Damian Pendrak Date: Mon, 6 Oct 2025 20:13:36 +0200 Subject: [PATCH 3/4] Change the default color palette from fixed to categorical --- .../src/layers/Scatter/controlPanel.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.ts index 9545dcd1be4d..c86196ba2c34 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.ts +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.ts @@ -134,9 +134,7 @@ const config: ControlPanelConfig = { controlSetRows: [ [legendPosition], [legendFormat], - ...generateDeckGLColorSchemeControls({ - defaultSchemeType: COLOR_SCHEME_TYPES.fixed_color, - }), + ...generateDeckGLColorSchemeControls({}), ], }, { From 2f529d7cc0284763401916109b7d4f0e58a23ba5 Mon Sep 17 00:00:00 2001 From: Damian Pendrak Date: Mon, 6 Oct 2025 20:31:31 +0200 Subject: [PATCH 4/4] Code improvements --- .../src/CategoricalDeckGLContainer.tsx | 45 +++++++++---------- .../src/layers/Scatter/controlPanel.ts | 1 - 2 files changed, 20 insertions(+), 26 deletions(-) diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx index 10cfe4a6aa68..e032aefe2824 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/CategoricalDeckGLContainer.tsx @@ -156,14 +156,11 @@ const CategoricalDeckGLContainer = (props: CategoricalDeckGLContainerProps) => { switch (selectedColorScheme) { case COLOR_SCHEME_TYPES.fixed_color: { color = fd.color_picker || { r: 0, g: 0, b: 0, a: 100 }; + const colorArray = [color.r, color.g, color.b, color.a * 255]; - return data.map(d => ({ - ...d, - color: [color.r, color.g, color.b, color.a * 255], - })); + return data.map(d => ({ ...d, color: colorArray })); } case COLOR_SCHEME_TYPES.categorical_palette: { - // If no dimension selected, fall back to fixed color if (!fd.dimension) { const fallbackColor = fd.color_picker || { r: 0, @@ -171,15 +168,13 @@ const CategoricalDeckGLContainer = (props: CategoricalDeckGLContainerProps) => { b: 0, a: 100, }; - return data.map(d => ({ - ...d, - color: [ - fallbackColor.r, - fallbackColor.g, - fallbackColor.b, - fallbackColor.a * 255, - ], - })); + const colorArray = [ + fallbackColor.r, + fallbackColor.g, + fallbackColor.b, + fallbackColor.a * 255, + ]; + return data.map(d => ({ ...d, color: colorArray })); } return data.map(d => ({ @@ -209,17 +204,17 @@ const CategoricalDeckGLContainer = (props: CategoricalDeckGLContainerProps) => { d.metric <= breakpoint.maxValue, ); - return { - ...d, - color: breakpointForPoint - ? [ - breakpointForPoint?.color.r, - breakpointForPoint?.color.g, - breakpointForPoint?.color.b, - breakpointForPoint?.color.a * 255, - ] - : defaultBreakpointColor, - }; + if (breakpointForPoint) { + const pointColor = [ + breakpointForPoint.color.r, + breakpointForPoint.color.g, + breakpointForPoint.color.b, + breakpointForPoint.color.a * 255, + ]; + return { ...d, color: pointColor }; + } + + return { ...d, color: defaultBreakpointColor }; }); } default: { diff --git a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.ts b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.ts index c86196ba2c34..f3c369ef3474 100644 --- a/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.ts +++ b/superset-frontend/plugins/legacy-preset-chart-deckgl/src/layers/Scatter/controlPanel.ts @@ -37,7 +37,6 @@ import { tooltipContents, tooltipTemplate, } from '../../utilities/Shared_DeckGL'; -import { COLOR_SCHEME_TYPES } from '../../utilities/utils'; const config: ControlPanelConfig = { onInit: controlState => ({