UNPKG

rn-custom-style-sheet

Version:

React Native component to select a specific value from a range of values.

49 lines (47 loc) 2.33 kB
import { Dimensions } from 'react-native'; import { OrientationEnum } from '../../Reducer'; export function getScreenResolution(window, withPortraitBehaviorInLandscapeMode) { const orientation = window.width < window.height ? OrientationEnum.Portrait : OrientationEnum.Landscape; const isPortrait = orientation === OrientationEnum.Portrait || orientation === OrientationEnum.Landscape && !withPortraitBehaviorInLandscapeMode; const windowWidth = isPortrait ? window.width : window.height; const windowHeight = isPortrait ? window.height : window.width; const shortDimension = Math.min(windowWidth, windowHeight); const longDimension = Math.max(windowWidth, windowHeight); return { orientation, screenResolution: { windowWidth, windowHeight, shortDimension, longDimension } }; } /** * Event listener function that detects orientation change (every time it occurs) and triggers * screen rerendering. It does that, by changing the state of the screen where the function is * called. State changing occurs for a new state variable with the name 'orientation' that will * always hold the current value of the orientation after the 1st orientation change. * Invoke it inside the screen's constructor or in componentDidMount lifecycle method. * @param {object} that Screen's class component this variable. The function needs it to * invoke setState method and trigger screen rerender (this.setState()). */ export function listenOrientationChange(withPortraitBehaviorInLandscapeMode, callback) { const subscription = Dimensions.addEventListener('change', ({ window }) => { // Trigger screen's rerender with a state update of the orientation variable callback?.(getScreenResolution(window, withPortraitBehaviorInLandscapeMode)); }); return subscription; } /** * Wrapper function that removes orientation change listener and should be invoked in * componentWillUnmount lifecycle method of every class component (UI screen) that * listenOrientationChange function has been invoked. This should be done in order to * avoid adding new listeners every time the same component is re-mounted. */ export function removeOrientationListener(subscription) { subscription?.remove(); } //# sourceMappingURL=UseDeviceOrientationUtils.js.map