UNPKG

react-native-ui-lib

Version:

[![Build Status](https://travis-ci.org/wix/react-native-ui-lib.svg?branch=master)](https://travis-ci.org/wix/react-native-ui-lib) [![npm](https://img.shields.io/npm/v/react-native-ui-lib.svg)](https://www.npmjs.com/package/react-native-ui-lib) [![NPM Down

54 lines (53 loc) 2.16 kB
/* eslint no-underscore-dangle: 0 */ import { NativeModules, NativeEventEmitter } from "react-native"; import _ from "lodash"; let SafeAreaInsetsCache = null; const NativeSafeAreaManager = NativeModules.SafeAreaManager; class SafeAreaInsetsManager { constructor() { this._defaultInsets = { top: 0, left: 0, bottom: 0, right: 0 }; this._safeAreaInsets = this._defaultInsets; this._safeAreaChangedDelegates = []; this.addSafeAreaChangedListener(); } addSafeAreaChangedListener() { if (!NativeSafeAreaManager) { return; } const NativeSafeAreaEvents = new NativeEventEmitter(NativeSafeAreaManager); NativeSafeAreaEvents.addListener("SafeAreaInsetsDidChangeEvent", safeAreaInsets => { SafeAreaInsetsCache = safeAreaInsets; this._safeAreaInsets = SafeAreaInsetsCache; _.forEach(this._safeAreaChangedDelegates, delegate => { if (delegate.onSafeAreaInsetsDidChangeEvent) { delegate.onSafeAreaInsetsDidChangeEvent(this._safeAreaInsets); } else { console.warn("ERROR", "SafeAreaInsetsManager", "safe area changed delegate was added, but it does not implement the onSafeAreaInsetsDidChangeEvent method"); //eslint-disable-line } }); }); } async _updateInsets() { if (NativeSafeAreaManager && SafeAreaInsetsCache === null) { SafeAreaInsetsCache = await NativeSafeAreaManager.getSafeAreaInsets(); this._safeAreaInsets = SafeAreaInsetsCache; } } async getSafeAreaInsets() { await this._updateInsets(); return this._safeAreaInsets; } addSafeAreaChangedDelegate(delegate) { this._safeAreaChangedDelegates.push(delegate); } removeSafeAreaChangedDelegate(delegateToRemove) { _.remove(this._safeAreaChangedDelegates, currentDelegate => { return currentDelegate === delegateToRemove; }); } get defaultInsets() { return this._defaultInsets; } } export default new SafeAreaInsetsManager();