diff --git a/native/tooltip/nux-tips-overlay.react.js b/native/tooltip/nux-tips-overlay.react.js
--- a/native/tooltip/nux-tips-overlay.react.js
+++ b/native/tooltip/nux-tips-overlay.react.js
@@ -8,7 +8,6 @@
import type { AppNavigationProp } from '../navigation/app-navigator.react.js';
import { OverlayContext } from '../navigation/overlay-context.js';
import type { NavigationRoute } from '../navigation/route-names.js';
-import { type DimensionsInfo } from '../redux/dimensions-updater.react.js';
import { useSelector } from '../redux/redux-utils.js';
import { useStyles } from '../themes/colors.js';
import type {
@@ -18,8 +17,6 @@
import type { LayoutEvent } from '../types/react-native.js';
import {
AnimatedView,
- type ViewStyle,
- type AnimatedViewStyle,
type WritableAnimatedStyleObj,
type ReanimatedTransform,
} from '../types/styles.js';
@@ -76,24 +73,6 @@
...Base,
+progress: Node,
};
-type NUXTipsOverlayProps = {
- ...Base,
- // Redux state
- +dimensions: DimensionsInfo,
- +position: Animated.Node,
- +styles: $ReadOnly,
- +closeTip: () => mixed,
- +contentContainerStyle: ViewStyle,
- +opacityStyle: AnimatedViewStyle,
- +buttonStyle: ViewStyle,
- +tipHorizontalOffset: Value,
- +onTipContainerLayout: (event: LayoutEvent) => void,
- +tipContainerOpacity: Node,
- +tipVerticalBelow: Node,
- +tipHorizontal: Node,
- +tipScale: Node,
- +tipContainerStyle: AnimatedViewStyle,
-};
const tipHeight: number = 30;
const margin: number = 20;
@@ -102,86 +81,20 @@
ButtonComponent: React.ComponentType>,
MenuComponent: React.ComponentType,
): React.ComponentType {
- class NUXTipsOverlay extends React.PureComponent<
- NUXTipsOverlayProps,
- > {
- constructor(props: NUXTipsOverlayProps) {
- super(props);
- }
-
- render(): React.Node {
- const {
- dimensions,
- position,
- styles,
- opacityStyle,
- buttonStyle,
- tipContainerStyle,
- navigation,
- route,
- } = this.props;
-
- let triangleStyle;
- const { initialCoordinates } = route.params;
- const { x, width } = initialCoordinates;
- const extraLeftSpace = x;
- const extraRightSpace = dimensions.width - width - x;
- if (extraLeftSpace < extraRightSpace) {
- triangleStyle = {
- alignSelf: 'flex-start',
- left: extraLeftSpace + (width - 20) / 2,
- };
- } else {
- triangleStyle = {
- alignSelf: 'flex-end',
- right: extraRightSpace + (width - 20) / 2,
- };
- }
-
- return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- );
- }
- }
-
function ConnectedNUXTipsOverlay(props: BaseNUXTipsOverlayProps) {
const dimensions = useSelector(state => state.dimensions);
const overlayContext = React.useContext(OverlayContext);
invariant(overlayContext, 'NUXTipsOverlay should have OverlayContext');
const { position } = overlayContext;
- const { goBackOnce } = props.navigation;
+ const { navigation, route } = props;
+
+ const { goBackOnce } = navigation;
const styles = useStyles(unboundStyles);
const contentContainerStyle = React.useMemo(() => {
- const { verticalBounds } = props.route.params;
+ const { verticalBounds } = route.params;
const fullScreenHeight = dimensions.height;
const top = verticalBounds.y;
const bottom =
@@ -191,7 +104,7 @@
marginTop: top,
marginBottom: bottom,
};
- }, [dimensions.height, props.route.params, styles.contentContainer]);
+ }, [dimensions.height, route.params, styles.contentContainer]);
const opacityStyle = React.useMemo(() => {
const backdropOpacity = interpolateNode(position, {
@@ -206,7 +119,7 @@
}, [position, styles.backdrop]);
const buttonStyle = React.useMemo(() => {
- const { initialCoordinates, verticalBounds } = props.route.params;
+ const { initialCoordinates, verticalBounds } = route.params;
const { x, y, width, height } = initialCoordinates;
return {
width: Math.ceil(width),
@@ -214,13 +127,12 @@
marginTop: y - verticalBounds.y,
marginLeft: x,
};
- }, [props.route.params]);
+ }, [route.params]);
const tipHorizontalOffset = React.useMemo(() => new Value(0), []);
const onTipContainerLayout = React.useCallback(
(event: LayoutEvent) => {
- const { route } = props;
const { x, width } = route.params.initialCoordinates;
const extraLeftSpace = x;
@@ -235,7 +147,7 @@
tipHorizontalOffset.setValue((actualWidth - minWidth) / 2);
}
},
- [dimensions.width, props, tipHorizontalOffset],
+ [dimensions.width, route, tipHorizontalOffset],
);
const tipContainerOpacity = React.useMemo(
@@ -274,7 +186,6 @@
);
const tipContainerStyle = React.useMemo(() => {
- const { route } = props;
const { initialCoordinates, verticalBounds } = route.params;
const { x, y, width, height } = initialCoordinates;
@@ -306,31 +217,55 @@
return style;
}, [
dimensions.width,
- props,
+ route,
tipContainerOpacity,
tipHorizontal,
tipScale,
tipVerticalBelow,
]);
+ const triangleStyle = React.useMemo(() => {
+ const { initialCoordinates } = route.params;
+ const { x, width } = initialCoordinates;
+ const extraLeftSpace = x;
+ const extraRightSpace = dimensions.width - width - x;
+ if (extraLeftSpace < extraRightSpace) {
+ return {
+ alignSelf: 'flex-start',
+ left: extraLeftSpace + (width - 20) / 2,
+ };
+ } else {
+ return {
+ alignSelf: 'flex-end',
+ right: extraRightSpace + (width - 20) / 2,
+ };
+ }
+ }, [dimensions.width, route.params]);
+
return (
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
return React.memo(ConnectedNUXTipsOverlay);