Skip to content

Commit 6a29872

Browse files
authored
fix: Merge metadata properly (#1092)
1 parent 6767134 commit 6a29872

File tree

2 files changed

+11
-21
lines changed

2 files changed

+11
-21
lines changed

packages/base/src/UI5Element.js

+9-20
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import merge from "@ui5/webcomponents-utils/dist/sap/base/util/merge.js";
2+
13
import boot from "./boot.js";
24
import { skipOriginalEvent } from "./config/NoConflict.js";
35
import { getCompactSize } from "./config/CompactSize.js";
@@ -335,35 +337,22 @@ class UI5Element extends HTMLElement {
335337
}
336338

337339
static getMetadata() {
338-
let klass = this; // eslint-disable-line
339-
340-
if (klass.hasOwnProperty("_metadata")) { // eslint-disable-line
341-
return klass._metadata;
340+
if (this.hasOwnProperty("_metadata")) { // eslint-disable-line
341+
return this._metadata;
342342
}
343343

344-
const metadatas = [Object.assign(klass.metadata, {})];
344+
const metadataObjects = [this.metadata];
345+
let klass = this; // eslint-disable-line
345346
while (klass !== UI5Element) {
346347
klass = Object.getPrototypeOf(klass);
347-
metadatas.push(klass.metadata);
348+
metadataObjects.unshift(klass.metadata);
348349
}
350+
const mergedMetadata = merge({}, ...metadataObjects);
349351

350-
const result = metadatas[0];
351-
352-
result.properties = this._mergeMetadataEntry(metadatas, "properties"); // merge properties
353-
result.slots = this._mergeMetadataEntry(metadatas, "slots"); // merge slots
354-
result.events = this._mergeMetadataEntry(metadatas, "events"); // merge events
355-
356-
this._metadata = new UI5ElementMetadata(result);
352+
this._metadata = new UI5ElementMetadata(mergedMetadata);
357353
return this._metadata;
358354
}
359355

360-
static _mergeMetadataEntry(metadatas, prop) {
361-
return metadatas.reverse().reduce((result, current) => { // eslint-disable-line
362-
Object.assign(result, current[prop] || {});
363-
return result;
364-
}, {});
365-
}
366-
367356
_attachChildPropertyUpdated(child, propData) {
368357
const listenFor = propData.listenFor,
369358
childMetadata = child.constructor.getMetadata(),

packages/utils/used-modules.txt

+2-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ sap/base/util/LoaderExtensions.js
55
sap/base/util/ObjectPath.js
66
sap/base/util/array/uniqueSort.js
77
sap/base/util/deepEqual.js
8+
sap/base/util/merge.js
89
sap/base/util/isPlainObject.js
910
sap/base/util/now.js
1011
sap/ui/base/Interface.js
@@ -23,4 +24,4 @@ sap/ui/core/date/UniversalDate.js
2324
sap/ui/core/format/DateFormat.js
2425
sap/ui/events/KeyCodes.js
2526
sap/ui/thirdparty/jquery.js
26-
sap/ui/thirdparty/es6-string-methods.js
27+
sap/ui/thirdparty/es6-string-methods.js

0 commit comments

Comments
 (0)