UNPKG

react-native-keyboard-controller

Version:

Keyboard manager which works in identical way on both iOS and Android

58 lines (52 loc) 2.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.revertMonkeyPatch = exports.applyMonkeyPatch = void 0; var NativeAndroidManager = _interopRequireWildcard(require("react-native/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid")); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } // @ts-expect-error because there is no corresponding type definition const RCTStatusBarManagerCompat = // eslint-disable-next-line @typescript-eslint/no-var-requires require("./specs/NativeStatusBarManagerCompat").default; // Copy original default manager to keep its original state and methods const OriginalNativeAndroidManager = { ...NativeAndroidManager.default }; // Create a new object that modifies the necessary methods // On Android < 11 RN uses legacy API which breaks EdgeToEdge mode in RN, so // in order to use library on all available platforms we have to monkey patch // default RN implementation and use modern `WindowInsetsControllerCompat`. const ModifiedNativeAndroidManager = { ...NativeAndroidManager.default, // Spread original properties to keep existing functionality setColor: (color, animated) => { RCTStatusBarManagerCompat.setColor(color, animated); }, setTranslucent: translucent => { RCTStatusBarManagerCompat.setTranslucent(translucent); }, /** * - statusBarStyles can be: * - 'default' * - 'dark-content' */ setStyle: statusBarStyle => { RCTStatusBarManagerCompat.setStyle(statusBarStyle); }, setHidden: hidden => { RCTStatusBarManagerCompat.setHidden(hidden); } }; // Define a function to apply the monkey patch const applyMonkeyPatch = () => { Object.assign(NativeAndroidManager.default, ModifiedNativeAndroidManager); }; // Define a function to revert changes back to the original state exports.applyMonkeyPatch = applyMonkeyPatch; const revertMonkeyPatch = () => { Object.assign(NativeAndroidManager.default, OriginalNativeAndroidManager); }; exports.revertMonkeyPatch = revertMonkeyPatch; //# sourceMappingURL=monkey-patch.android.js.map