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);