Skip to content

Commit 86440aa

Browse files
authored
chore(framework): allow patchPatcher to work with old OpenUI5 versions (#12792)
1 parent 9eb128d commit 86440aa

File tree

2 files changed

+22
-11
lines changed

2 files changed

+22
-11
lines changed

packages/base/src/features/OpenUI5Support.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -165,9 +165,9 @@ class OpenUI5Support {
165165
animationMode: config.getAnimationMode(),
166166
language: config.getLanguage(),
167167
theme: config.getTheme(),
168-
themeRoot: config.getThemeRoot(),
168+
themeRoot: typeof config.getThemeRoot === "function" ? config.getThemeRoot() : undefined,
169169
rtl: config.getRTL(),
170-
timezone: config.getTimezone(),
170+
timezone: typeof config.getTimezone === "function" ? config.getTimezone() : undefined,
171171
calendarType: config.getCalendarType(),
172172
formatSettings: {
173173
firstDayOfWeek: LocaleData ? LocaleData.getInstance(config.getLocale()).getFirstDayOfWeek() : undefined,
Lines changed: 20 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,30 @@
1-
type OpenUI5Patcher = {
2-
prototype: {
3-
_mAttributes: { [key: string]: string },
4-
openEnd: () => OpenUI5Patcher,
5-
}
1+
type PatcherTarget = {
2+
_mAttributes: { [key: string]: string },
3+
openEnd: () => OpenUI5Patcher,
64
};
75

8-
const patchPatcher = (Patcher: OpenUI5Patcher) => {
9-
const origOpenEnd = Patcher.prototype.openEnd;
10-
Patcher.prototype.openEnd = function openEnd() {
11-
if (this._mAttributes.popover) {
6+
type OpenUI5Patcher = { prototype: PatcherTarget } // newer versions (on prototype)
7+
| PatcherTarget; // older versions (on constructor directly)
8+
9+
const patchOpenEnd = (target: PatcherTarget) => {
10+
const origOpenEnd = target.openEnd;
11+
target.openEnd = function openEnd() {
12+
if (this._mAttributes?.popover) {
1213
delete this._mAttributes.popover; // The "popover" attribute will be managed externally, don't let Patcher remove it
1314
}
1415
return origOpenEnd.apply(this);
1516
};
1617
};
1718

19+
const patchPatcher = (Patcher: OpenUI5Patcher) => {
20+
// Newer version: properties are on prototype
21+
if ("prototype" in Patcher && "openEnd" in Patcher.prototype) {
22+
patchOpenEnd(Patcher.prototype);
23+
} else if ("openEnd" in Patcher) {
24+
// Older version: properties are on constructor directly
25+
patchOpenEnd(Patcher);
26+
}
27+
};
28+
1829
export default patchPatcher;
1930
export type { OpenUI5Patcher };

0 commit comments

Comments
 (0)