Skip to content

Commit 53f9a6d

Browse files
committed
Fix PR comments
1 parent 1033d21 commit 53f9a6d

3 files changed

Lines changed: 14 additions & 17 deletions

File tree

src/components/FeatureTrainingModal.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {Image, InteractionManager, View} from 'react-native';
66
import type {ImageResizeMode, ImageSourcePropType, LayoutChangeEvent, ScrollView as RNScrollView, StyleProp, TextStyle, ViewStyle} from 'react-native';
77
import {GestureHandlerRootView} from 'react-native-gesture-handler';
88
import type {MergeExclusive} from 'type-fest';
9+
import useKeyboardState from '@hooks/useKeyboardState';
910
import useLocalize from '@hooks/useLocalize';
1011
import useNetwork from '@hooks/useNetwork';
1112
import useResponsiveLayout from '@hooks/useResponsiveLayout';
@@ -215,6 +216,7 @@ function FeatureTrainingModal({
215216
const [containerHeight, setContainerHeight] = useState(0);
216217
const [contentHeight, setContentHeight] = useState(0);
217218
const insets = useSafeAreaInsets();
219+
const {isKeyboardActive} = useKeyboardState();
218220

219221
useEffect(() => {
220222
InteractionManager.runAfterInteractions(() => {
@@ -371,7 +373,10 @@ function FeatureTrainingModal({
371373

372374
const Wrapper = shouldUseScrollView ? ScrollView : View;
373375

374-
const wrapperStyles = useMemo(() => (shouldUseScrollView ? StyleUtils.getScrollableFeatureTrainingModalStyles(insets) : {}), [shouldUseScrollView, StyleUtils, insets]);
376+
const wrapperStyles = useMemo(
377+
() => (shouldUseScrollView ? StyleUtils.getScrollableFeatureTrainingModalStyles(insets, isKeyboardActive) : {}),
378+
[shouldUseScrollView, StyleUtils, insets, isKeyboardActive],
379+
);
375380

376381
return (
377382
<Modal

src/components/Modal/BaseModal.tsx

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import useTheme from '@hooks/useTheme';
2020
import useThemeStyles from '@hooks/useThemeStyles';
2121
import useWindowDimensions from '@hooks/useWindowDimensions';
2222
import ComposerFocusManager from '@libs/ComposerFocusManager';
23-
import getPlatform from '@libs/getPlatform';
23+
import {canUseTouchScreen as canUseTouchScreenCheck} from '@libs/DeviceCapabilities';
2424
import NarrowPaneContext from '@libs/Navigation/AppNavigator/Navigators/NarrowPaneContext';
2525
import Overlay from '@libs/Navigation/AppNavigator/Navigators/Overlay';
2626
import Navigation from '@libs/Navigation/Navigation';
@@ -110,6 +110,7 @@ function BaseModal(
110110
const StyleUtils = useStyleUtils();
111111
const {windowWidth, windowHeight} = useWindowDimensions();
112112
// We need to use isSmallScreenWidth instead of shouldUseNarrowLayout to apply correct modal width
113+
const canUseTouchScreen = canUseTouchScreenCheck();
113114
// eslint-disable-next-line rulesdir/prefer-shouldUseNarrowLayout-instead-of-isSmallScreenWidth
114115
const {isSmallScreenWidth, shouldUseNarrowLayout} = useResponsiveLayout();
115116
const {sidePanelOffset} = useSidePanel();
@@ -216,23 +217,13 @@ function BaseModal(
216217

217218
// Checks if modal overlaps with topSafeArea. Used to offset tall bottom docked modals with keyboard.
218219
useEffect(() => {
219-
if (type !== CONST.MODAL.MODAL_TYPE.BOTTOM_DOCKED || getPlatform() === CONST.PLATFORM.WEB) {
220+
if (type !== CONST.MODAL.MODAL_TYPE.BOTTOM_DOCKED || !canUseTouchScreen || !isSmallScreenWidth) {
220221
return;
221222
}
222223
const {paddingTop} = StyleUtils.getPlatformSafeAreaPadding(insets);
223224
const availableHeight = windowHeight - modalHeight - keyboardStateContextValue.keyboardActiveHeight - paddingTop;
224225
setModalOverlapsWithTopSafeArea((keyboardStateContextValue.isKeyboardAnimatingRef.current || keyboardStateContextValue.isKeyboardActive) && Math.floor(availableHeight) <= 0);
225-
}, [
226-
StyleUtils,
227-
insets,
228-
keyboardStateContextValue.isKeyboardActive,
229-
keyboardStateContextValue.isKeyboardAnimatingRef,
230-
keyboardStateContextValue.keyboardActiveHeight,
231-
modalHeight,
232-
type,
233-
windowHeight,
234-
modalOverlapsWithTopSafeArea,
235-
]);
226+
}, [StyleUtils, insets, keyboardStateContextValue.isKeyboardActive, keyboardStateContextValue.isKeyboardAnimatingRef, keyboardStateContextValue.keyboardActiveHeight, modalHeight, type, windowHeight, modalOverlapsWithTopSafeArea, canUseTouchScreen, isSmallScreenWidth]);
236227

237228
const onViewLayout = (e: LayoutChangeEvent) => {
238229
setModalHeight(e.nativeEvent.layout.height);
@@ -264,7 +255,7 @@ function BaseModal(
264255
shouldUseModalPaddingStyle,
265256
{
266257
modalOverlapsWithTopSafeArea,
267-
shouldDisableBottomSafeAreaPadding,
258+
shouldDisableBottomSafeAreaPadding: !!shouldDisableBottomSafeAreaPadding,
268259
},
269260
shouldUseReanimatedModal,
270261
),

src/styles/utils/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1834,13 +1834,14 @@ const createStyleUtils = (theme: ThemeColors, styles: ThemeStyles) => ({
18341834
}, {} as Nullable<K>) as K,
18351835
getScrollableFeatureTrainingModalStyles: (
18361836
insets: EdgeInsets,
1837+
isKeyboardOpen = false,
18371838
): {
18381839
style?: ViewStyle;
18391840
containerStyle?: ViewStyle;
18401841
} => {
18411842
const {paddingBottom: safeAreaPaddingBottom} = getPlatformSafeAreaPadding(insets);
1842-
1843-
const paddingBottom = getCombinedSpacing(styles.pb5.paddingBottom, safeAreaPaddingBottom, true);
1843+
// When keyboard is open and we want to disregard safeAreaPaddingBottom.
1844+
const paddingBottom = getCombinedSpacing(styles.pb5.paddingBottom, safeAreaPaddingBottom, !isKeyboardOpen);
18441845
// Forces scroll on modal when keyboard is open and the modal larger than remaining screen height.
18451846
return {
18461847
style: isMobileChrome()

0 commit comments

Comments
 (0)