chore: Add option to set a custom color scheme as default (#16540)
* upgrade superset-ui for new flag
* configurable default categorical scheme
* dry refactor
* doc example
* Update superset-frontend/src/setup/setupColors.ts
Co-authored-by: Geido <60598000+geido@users.noreply.github.com>
* re-adding # type: ignore (suggestion from ville)
* ugh... missed a space.
Co-authored-by: Geido <60598000+geido@users.noreply.github.com>
Co-authored-by: Evan Rusackas <evan@preset.io>
diff --git a/superset-frontend/src/setup/setupColors.ts b/superset-frontend/src/setup/setupColors.ts
index 4068dd0..0e83d7a 100644
--- a/superset-frontend/src/setup/setupColors.ts
+++ b/superset-frontend/src/setup/setupColors.ts
@@ -31,44 +31,43 @@
SequentialScheme,
} from '@superset-ui/core';
import superset from '@superset-ui/core/lib/color/colorSchemes/categorical/superset';
+import ColorSchemeRegistry from '@superset-ui/core/lib/color/ColorSchemeRegistry';
+
+function registerColorSchemes(
+ registry: ColorSchemeRegistry<unknown>,
+ colorSchemes: (CategoricalScheme | SequentialScheme)[],
+ standardDefaultKey: string,
+) {
+ colorSchemes.forEach(scheme => {
+ registry.registerValue(scheme.id, scheme);
+ });
+
+ const defaultKey =
+ colorSchemes.find(scheme => scheme.isDefault)?.id || standardDefaultKey;
+ registry.setDefaultKey(defaultKey);
+}
export default function setupColors(
- extraCategoricalColorSchemas: CategoricalScheme[] = [],
+ extraCategoricalColorSchemes: CategoricalScheme[] = [],
extraSequentialColorSchemes: SequentialScheme[] = [],
) {
- // Register color schemes
- const categoricalSchemeRegistry = getCategoricalSchemeRegistry();
-
- if (extraCategoricalColorSchemas?.length > 0) {
- extraCategoricalColorSchemas.forEach(scheme => {
- categoricalSchemeRegistry.registerValue(scheme.id, scheme);
- });
- }
-
- [superset, airbnb, categoricalD3, echarts, google, lyft, preset].forEach(
- group => {
- group.forEach(scheme => {
- categoricalSchemeRegistry.registerValue(scheme.id, scheme);
- });
- },
+ registerColorSchemes(
+ getCategoricalSchemeRegistry(),
+ [
+ ...superset,
+ ...airbnb,
+ ...categoricalD3,
+ ...echarts,
+ ...google,
+ ...lyft,
+ ...preset,
+ ...extraCategoricalColorSchemes,
+ ],
+ 'supersetColors',
);
- categoricalSchemeRegistry.setDefaultKey('supersetColors');
-
- const sequentialSchemeRegistry = getSequentialSchemeRegistry();
-
- if (extraSequentialColorSchemes?.length > 0) {
- extraSequentialColorSchemes.forEach(scheme => {
- sequentialSchemeRegistry.registerValue(
- scheme.id,
- new SequentialScheme(scheme),
- );
- });
- }
-
- [sequentialCommon, sequentialD3].forEach(group => {
- group.forEach(scheme => {
- sequentialSchemeRegistry.registerValue(scheme.id, scheme);
- });
- });
- sequentialSchemeRegistry.setDefaultKey('superset_seq_1');
+ registerColorSchemes(
+ getSequentialSchemeRegistry(),
+ [...sequentialCommon, ...sequentialD3, ...extraSequentialColorSchemes],
+ 'superset_seq_1',
+ );
}
diff --git a/superset/config.py b/superset/config.py
index 36c6e04..98566cb 100644
--- a/superset/config.py
+++ b/superset/config.py
@@ -461,6 +461,7 @@
# "id": 'myVisualizationColors',
# "description": '',
# "label": 'My Visualization Colors',
+# "isDefault": True,
# "colors":
# ['#006699', '#009DD9', '#5AAA46', '#44AAAA', '#DDAA77', '#7799BB', '#88AA77',
# '#552288', '#5AAA46', '#CC7788', '#EEDD55', '#9977BB', '#BBAA44', '#DDCCDD']
@@ -495,6 +496,7 @@
# "description": '',
# "isDiverging": True,
# "label": 'My custom warm to hot',
+# "isDefault": True,
# "colors":
# ['#552288', '#5AAA46', '#CC7788', '#EEDD55', '#9977BB', '#BBAA44', '#DDCCDD',
# '#006699', '#009DD9', '#5AAA46', '#44AAAA', '#DDAA77', '#7799BB', '#88AA77']