mopinion-react-native-sdk
Version:
Collect in-app feedback with Mopinion for React Native. Built fully in React Native for optimal integration with your React Native app.
1 lines • 5.15 kB
JavaScript
var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(exports,"__esModule",{value:true});exports.KeyboardScrollView=void 0;var _slicedToArray2=_interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _jsxRuntime=require("react/jsx-runtime");var _excluded=["children","additionalScrollHeight","contentContainerStyle","innerRef"];function _getRequireWildcardCache(e){if("function"!=typeof WeakMap)return null;var r=new WeakMap(),t=new WeakMap();return(_getRequireWildcardCache=function _getRequireWildcardCache(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;}var KeyboardScrollView=exports.KeyboardScrollView=function KeyboardScrollView(_ref){var children=_ref.children,additionalScrollHeight=_ref.additionalScrollHeight,contentContainerStyle=_ref.contentContainerStyle,_ref$innerRef=_ref.innerRef,innerRef=_ref$innerRef===void 0?function(){}:_ref$innerRef,props=(0,_objectWithoutProperties2.default)(_ref,_excluded);var scrollViewRef=(0,_react.useRef)(null);var scrollPositionRef=(0,_react.useRef)(0);var scrollContentSizeRef=(0,_react.useRef)(0);var scrollViewSizeRef=(0,_react.useRef)(0);var _useState=(0,_react.useState)(false),_useState2=(0,_slicedToArray2.default)(_useState,2),isKeyboardVisible=_useState2[0],setIsKeyboardVisible=_useState2[1];var _useState3=(0,_react.useState)(0),_useState4=(0,_slicedToArray2.default)(_useState3,2),additionalPadding=_useState4[0],setAdditionalPadding=_useState4[1];var scrollToPosition=(0,_react.useCallback)(function(toPosition,animated){var _scrollViewRef$curren;(_scrollViewRef$curren=scrollViewRef.current)==null?void 0:_scrollViewRef$curren.scrollTo({y:toPosition,animated:!!animated});scrollPositionRef.current=toPosition;},[]);var additionalScroll=(0,_react.useMemo)(function(){return additionalScrollHeight!=null?additionalScrollHeight:0;},[additionalScrollHeight]);var androidStatusBarOffset=(0,_react.useMemo)(function(){var _StatusBar$currentHei;return(_StatusBar$currentHei=_reactNative.StatusBar.currentHeight)!=null?_StatusBar$currentHei:0;},[]);(0,_react.useEffect)(function(){var didShowListener=_reactNative.Keyboard.addListener('keyboardDidShow',function(frames){var keyboardY=frames.endCoordinates.screenY;if(_reactNative.Platform.OS==='ios'){var keyboardHeight=frames.endCoordinates.height;setAdditionalPadding(keyboardHeight);}setTimeout(function(){setIsKeyboardVisible(true);},100);var currentlyFocusedInput=_reactNative.TextInput.State.currentlyFocusedInput();var currentScrollY=scrollPositionRef.current;currentlyFocusedInput==null?void 0:currentlyFocusedInput.measureInWindow(function(_x,y,_width,height){var endOfInputY=y+height+androidStatusBarOffset;var deltaToScroll=endOfInputY-keyboardY;if(deltaToScroll<0)return;var scrollPositionTarget=currentScrollY+deltaToScroll+additionalScroll;scrollToPosition(scrollPositionTarget,true);});});var didHideListener=_reactNative.Keyboard.addListener('keyboardDidHide',function(){setAdditionalPadding(0);setIsKeyboardVisible(false);});var willHideListener=_reactNative.Keyboard.addListener('keyboardWillHide',function(frames){var keyboardHeight=frames.endCoordinates.height;var currentScrollY=scrollPositionRef.current;if(currentScrollY<=0)return;var scrollPositionTarget=currentScrollY-keyboardHeight;scrollToPosition(scrollPositionTarget,true);});return function(){didShowListener.remove();didHideListener.remove();willHideListener.remove();};},[additionalScroll,androidStatusBarOffset,scrollToPosition]);return(0,_jsxRuntime.jsx)(_reactNative.ScrollView,Object.assign({ref:function ref(_ref2){scrollViewRef.current=_ref2;innerRef(_ref2);},contentContainerStyle:[contentContainerStyle],contentInset:{bottom:additionalPadding},keyboardShouldPersistTaps:"handled",onMomentumScrollEnd:function onMomentumScrollEnd(event){scrollPositionRef.current=event.nativeEvent.contentOffset.y;},onScrollEndDrag:function onScrollEndDrag(event){scrollPositionRef.current=event.nativeEvent.contentOffset.y;},onLayout:function onLayout(event){scrollViewSizeRef.current=event.nativeEvent.layout.height;},onContentSizeChange:function onContentSizeChange(_width,height){var currentContentHeight=scrollContentSizeRef.current;var contentSizeDelta=height-currentContentHeight;scrollContentSizeRef.current=height;if(!isKeyboardVisible)return;var currentScrollY=scrollPositionRef.current;var scrollPositionTarget=currentScrollY+contentSizeDelta;scrollToPosition(scrollPositionTarget,true);}},props,{children:children}));};