fix: preserve custom style extensions (wordcloud config) in ensureStyle

ensureStyle() was stripping unknown properties like 'wordcloud'.
Now collects and preserves all non-standard style keys so chart-type
specific configs survive Redux state updates.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
hailin 2026-04-05 20:13:00 -07:00
parent 026fe11dff
commit 3bb6dc85c0
1 changed files with 8 additions and 1 deletions

View File

@ -16,8 +16,14 @@ const DEFAULT_STYLE: StyleConfig = {
animation: { enabled: true, duration: 500, easing: 'ease-out' }, animation: { enabled: true, duration: 500, easing: 'ease-out' },
}; };
function ensureStyle(style: any): StyleConfig { function ensureStyle(style: any): StyleConfig & Record<string, any> {
if (!style || typeof style !== 'object') return { ...DEFAULT_STYLE }; if (!style || typeof style !== 'object') return { ...DEFAULT_STYLE };
// Collect any custom/extension properties (like wordcloud)
const known = new Set(['title','colors','legend','xAxis','yAxis','dataLabel','background','border','animation']);
const custom: Record<string, any> = {};
for (const key of Object.keys(style)) {
if (!known.has(key)) custom[key] = style[key];
}
return { return {
title: { ...DEFAULT_STYLE.title, ...(style.title ?? {}) }, title: { ...DEFAULT_STYLE.title, ...(style.title ?? {}) },
colors: (Array.isArray(style.colors) && style.colors.length > 0) ? style.colors : DEFAULT_STYLE.colors, colors: (Array.isArray(style.colors) && style.colors.length > 0) ? style.colors : DEFAULT_STYLE.colors,
@ -28,6 +34,7 @@ function ensureStyle(style: any): StyleConfig {
background: { ...DEFAULT_STYLE.background, ...(style.background ?? {}) }, background: { ...DEFAULT_STYLE.background, ...(style.background ?? {}) },
border: { ...DEFAULT_STYLE.border, ...(style.border ?? {}) }, border: { ...DEFAULT_STYLE.border, ...(style.border ?? {}) },
animation: { ...DEFAULT_STYLE.animation, ...(style.animation ?? {}) }, animation: { ...DEFAULT_STYLE.animation, ...(style.animation ?? {}) },
...custom, // Preserve wordcloud and any other custom extensions
}; };
} }