Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions packages/base/src/features/OpenUI5Support.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
29 changes: 20 additions & 9 deletions packages/base/src/features/patchPatcher.ts
Original file line number Diff line number Diff line change
@@ -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 };
Loading