diff --git a/packages/base/src/features/OpenUI5Support.ts b/packages/base/src/features/OpenUI5Support.ts index 8bf7827e5082..8b557dad4075 100644 --- a/packages/base/src/features/OpenUI5Support.ts +++ b/packages/base/src/features/OpenUI5Support.ts @@ -165,9 +165,9 @@ class OpenUI5Support { animationMode: config.getAnimationMode(), language: config.getLanguage(), theme: config.getTheme(), - themeRoot: config.getThemeRoot(), + themeRoot: typeof config.getThemeRoot === "function" ? config.getThemeRoot() : undefined, rtl: config.getRTL(), - timezone: config.getTimezone(), + timezone: typeof config.getTimezone === "function" ? config.getTimezone() : undefined, calendarType: config.getCalendarType(), formatSettings: { firstDayOfWeek: LocaleData ? LocaleData.getInstance(config.getLocale()).getFirstDayOfWeek() : undefined, diff --git a/packages/base/src/features/patchPatcher.ts b/packages/base/src/features/patchPatcher.ts index 051d124902bb..eac76e7c37ac 100644 --- a/packages/base/src/features/patchPatcher.ts +++ b/packages/base/src/features/patchPatcher.ts @@ -1,19 +1,30 @@ -type OpenUI5Patcher = { - prototype: { - _mAttributes: { [key: string]: string }, - openEnd: () => OpenUI5Patcher, - } +type PatcherTarget = { + _mAttributes: { [key: string]: string }, + openEnd: () => OpenUI5Patcher, }; -const patchPatcher = (Patcher: OpenUI5Patcher) => { - const origOpenEnd = Patcher.prototype.openEnd; - Patcher.prototype.openEnd = function openEnd() { - if (this._mAttributes.popover) { +type OpenUI5Patcher = { prototype: PatcherTarget } // newer versions (on prototype) + | PatcherTarget; // older versions (on constructor directly) + +const patchOpenEnd = (target: PatcherTarget) => { + const origOpenEnd = target.openEnd; + target.openEnd = function openEnd() { + if (this._mAttributes?.popover) { delete this._mAttributes.popover; // The "popover" attribute will be managed externally, don't let Patcher remove it } return origOpenEnd.apply(this); }; }; +const patchPatcher = (Patcher: OpenUI5Patcher) => { + // Newer version: properties are on prototype + if ("prototype" in Patcher && "openEnd" in Patcher.prototype) { + patchOpenEnd(Patcher.prototype); + } else if ("openEnd" in Patcher) { + // Older version: properties are on constructor directly + patchOpenEnd(Patcher); + } +}; + export default patchPatcher; export type { OpenUI5Patcher };