fix(goview): preserve wrapper geometry when unwrapping
This commit is contained in:
parent
903b0da44a
commit
a10a5eb661
@ -63,22 +63,36 @@ export interface GoViewProjectLike {
|
||||
}
|
||||
|
||||
function unwrapComponent(c: GoViewComponentLike): GoViewComponentLike {
|
||||
// Prefer nested component shapes but keep outer fields as fallback.
|
||||
// Prefer nested component shapes but keep outer geometry/id as fallback.
|
||||
// Some exports wrap components multiple times like:
|
||||
// { id, attr, component: { component: { chartConfig, option } } }
|
||||
// We unwrap iteratively to avoid recursion pitfalls.
|
||||
//
|
||||
// Important: do NOT let `undefined` values from inner layers overwrite outer values.
|
||||
// Some goView exports include wrapper objects where `id/attr` only exist on the outer layer.
|
||||
let out: GoViewComponentLike = c;
|
||||
let depth = 0;
|
||||
|
||||
while (out.component && depth < 6) {
|
||||
const outer = out;
|
||||
const inner = out.component;
|
||||
|
||||
out = {
|
||||
// Prefer outer for geometry/id, but prefer inner for identity/option when present.
|
||||
...out,
|
||||
...inner,
|
||||
// Outer (wrapper) often contains the stable identity/geometry.
|
||||
id: outer.id ?? inner.id,
|
||||
attr: outer.attr ?? inner.attr,
|
||||
status: outer.status ?? inner.status,
|
||||
|
||||
// Inner tends to carry the real widget identity/config.
|
||||
key: inner.key ?? outer.key,
|
||||
componentKey: inner.componentKey ?? outer.componentKey,
|
||||
chartConfig: inner.chartConfig ?? outer.chartConfig,
|
||||
option: inner.option ?? outer.option,
|
||||
|
||||
// keep unwrapping if there are more layers
|
||||
component: inner.component,
|
||||
};
|
||||
|
||||
depth++;
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user