mattermost-mobile-upstream/patches/react-native-walkthrough-tooltip+1.6.0.patch
Elias Nahum b6fc85385e
Migrate from RNN to Expo router (#9402)
* Expo-Router partial migration

* Full migration to ExpoRouter

* i18n

* add tests

* Merge branch 'main' into expo-router

* align package-lock.json

* i18n

* feedback review

* feedback review

* android 16kb patch

* Refactored emoji picker keyboard using a state machine

* set android launch_screen in drawables instead of layout

* no conditional hooks

* remove duplicate call in test

* address feedback

* fix tests and address more feedback

* small corrections

* small corrections

* small corrections

* fix draft test

* fix draft test 2

* remove navigateToScreen in draff test

* fix nit in draft test

* remove doc file

* Feedback review

* fix snapshots

* improve test coverage

* fix i18n

* Upgrade t o RN 0.83, other dependencies and new architecture (#9737)

* library hardware-keyboard android new arch support fix

* library rnshare android new arch support fix

* library rnutils android new arch support fix

* library secure-pdf-viewer add new arch support

* Enable new arch on iOS and Android

* update emm and network client with new-arch

* update intune to use new-arch

* performance improvements

* fix tests

* fixes post input on new-arch

* fix android emoji picker

* remove doc

* run tests in parallel

* upgrade to React Native 0.83.9, Expo 55, React 19, and New Architecture

Bumps core dependencies to their latest versions:
- React Native 0.77.3 → 0.83.9 (New Architecture enabled)
- React 18.3.1 → 19.2.5
- Expo SDK 52 → 55
- TypeScript 5.8.3 → 6.0.3
- Node.js 22.16.0 → 24.15.0
- react-native-reanimated 3.17.3 → 4.3.0
- Various other dependency upgrades

Migrates iOS AppDelegate from Objective-C to Swift, updates Android
build tooling and Gradle wrapper, refreshes all patches and font
assets, and adapts app code, tests, and CI workflows throughout for
API changes introduced by these upgrades.

* remove unecessary dismissKeyboard in notifications

* feedback review

* update intune to use new-arch

* update @mattermost deps

* missing i18n string

* additional fixes

* update fastlane
2026-05-13 17:44:55 +08:00

151 lines
5.2 KiB
Diff

diff --git a/node_modules/react-native-walkthrough-tooltip/src/tooltip.js b/node_modules/react-native-walkthrough-tooltip/src/tooltip.js
index 3098692..f4189aa 100644
--- a/node_modules/react-native-walkthrough-tooltip/src/tooltip.js
+++ b/node_modules/react-native-walkthrough-tooltip/src/tooltip.js
@@ -4,6 +4,8 @@ import {
Dimensions,
InteractionManager,
Modal,
+ Platform,
+ StatusBar,
TouchableWithoutFeedback,
View,
} from 'react-native';
@@ -274,7 +276,9 @@ class Tooltip extends Component {
) {
this.childWrapper.current.measure(
(x, y, width, height, pageX, pageY) => {
- const childRect = new Rect(pageX, pageY, width, height);
+ const notEdgeToEdge = Platform.OS === 'android' && Platform.Version < 30;
+ const offset = notEdgeToEdge ? StatusBar.currentHeight : 0;
+ const childRect = new Rect(pageX, pageY + (offset ?? 0), width, height);
if (
Object.values(childRect).every(value => value !== undefined)
) {
@@ -397,6 +401,35 @@ class Tooltip extends Component {
);
};
+ renderBackgroundWithHole = () => {
+ const { x, y, width, height } = this.state.childRect;
+ const backgroundColor = this.props.backgroundColor;
+
+ const onPress = () => {
+ if (this.props.closeOnBackgroundInteraction) {
+ this.props.onClose();
+ }
+ };
+
+ // Four rectangles surrounding the child rect, leaving it exposed
+ const rects = [
+ // top
+ { top: 0, left: 0, right: 0, height: y },
+ // bottom
+ { top: y + height, left: 0, right: 0, bottom: 0 },
+ // left
+ { top: y, left: 0, width: x, height },
+ // right
+ { top: y, left: x + width, right: 0, height },
+ ];
+
+ return rects.map((rect, i) => (
+ <TouchableWithoutFeedback key={i} onPress={onPress}>
+ <View style={[{ position: 'absolute', backgroundColor }, rect]} />
+ </TouchableWithoutFeedback>
+ ));
+ };
+
renderContentForTooltip = () => {
const generatedStyles = styleGenerator({
adjustedContentSize: this.state.adjustedContentSize,
@@ -412,12 +445,6 @@ class Tooltip extends Component {
const hasChildren = React.Children.count(this.props.children) > 0;
- const onPressBackground = () => {
- if (this.props.closeOnBackgroundInteraction) {
- this.props.onClose();
- }
- };
-
const onPressContent = () => {
if (this.props.closeOnContentInteraction) {
this.props.onClose();
@@ -425,32 +452,36 @@ class Tooltip extends Component {
};
return (
- <TouchableWithoutFeedback
- onPress={onPressBackground}
- accessible={this.props.accessible}
- >
- <View style={generatedStyles.containerStyle}>
- <View style={[generatedStyles.backgroundStyle]}>
- <View style={generatedStyles.tooltipStyle}>
- {hasChildren ? <View style={generatedStyles.arrowStyle} /> : null}
- <View
- onLayout={this.measureContent}
- style={generatedStyles.contentStyle}
- >
- <TouchableWithoutFeedback
- onPress={onPressContent}
- accessible={this.props.accessible}
- >
- {this.props.content}
- </TouchableWithoutFeedback>
- </View>
- </View>
+ <View style={generatedStyles.containerStyle}>
+ {hasChildren && this.state.childRect.width > 0
+ ? this.renderBackgroundWithHole()
+ : (
+ <TouchableWithoutFeedback
+ onPress={() => this.props.closeOnBackgroundInteraction && this.props.onClose()}
+ accessible={this.props.accessible}
+ >
+ <View style={generatedStyles.backgroundStyle} />
+ </TouchableWithoutFeedback>
+ )
+ }
+ <View style={generatedStyles.tooltipStyle}>
+ {hasChildren ? <View style={generatedStyles.arrowStyle} /> : null}
+ <View
+ onLayout={this.measureContent}
+ style={generatedStyles.contentStyle}
+ >
+ <TouchableWithoutFeedback
+ onPress={onPressContent}
+ accessible={this.props.accessible}
+ >
+ {this.props.content}
+ </TouchableWithoutFeedback>
</View>
- {hasChildren && this.props.showChildInTooltip
- ? this.renderChildInTooltip()
- : null}
</View>
- </TouchableWithoutFeedback>
+ {hasChildren && this.props.showChildInTooltip
+ ? this.renderChildInTooltip()
+ : null}
+ </View>
);
};
@@ -474,6 +505,7 @@ class Tooltip extends Component {
visible={showTooltip}
onRequestClose={this.props.onClose}
supportedOrientations={this.props.supportedOrientations}
+ statusBarTranslucent={true}
>
{this.renderContentForTooltip()}
</ModalComponent>
@@ -483,6 +515,7 @@ class Tooltip extends Component {
{hasChildren ? (
<View
ref={this.childWrapper}
+ collapsable={false}
onLayout={this.measureChildRect}
style={this.props.parentWrapperStyle}
>