Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F3343054
D12947.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
11 KB
Referenced Files
None
Subscribers
None
D12947.diff
View Options
diff --git a/native/navigation/route-names.js b/native/navigation/route-names.js
--- a/native/navigation/route-names.js
+++ b/native/navigation/route-names.js
@@ -53,6 +53,7 @@
import type { CommunityRolesScreenParams } from '../roles/community-roles-screen.react.js';
import type { CreateRolesScreenParams } from '../roles/create-roles-screen.react.js';
import type { MessageSearchParams } from '../search/message-search.react.js';
+import type { NUXTipsOverlayParams } from '../tooltip/nux-tips-overlay.react.js';
import type { UserProfileAvatarModalParams } from '../user-profile/user-profile-avatar-modal.react.js';
import type { UserProfileBottomSheetParams } from '../user-profile/user-profile-bottom-sheet.react.js';
@@ -166,6 +167,7 @@
export const TagFarcasterChannelByNameRouteName = 'TagFarcasterChannelByName';
export const ThreadSettingsNotificationsRouteName =
'ThreadSettingsNotifications';
+export const NUXTipsOverlayRouteName = 'NUXTipsOverlay';
export type RootParamList = {
+LoggedOutModal: void,
@@ -222,6 +224,7 @@
+ThreadAvatarCameraModal: ThreadAvatarCameraModalParams,
+VideoPlaybackModal: VideoPlaybackModalParams,
+TogglePinModal: TogglePinModalParams,
+ +NUXTipsOverlay: NUXTipsOverlayParams,
...TooltipModalParamList,
};
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
@@ -1,6 +1,5 @@
// @flow
-import type { RouteProp } from '@react-navigation/core';
import invariant from 'invariant';
import * as React from 'react';
import { View, TouchableWithoutFeedback, Platform } from 'react-native';
@@ -11,7 +10,7 @@
OverlayContext,
type OverlayContextType,
} from '../navigation/overlay-context.js';
-import type { TooltipModalParamList } from '../navigation/route-names.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';
@@ -67,63 +66,51 @@
},
};
-export type TooltipParams<CustomProps> = {
- ...CustomProps,
+export type NUXTipsOverlayParams = {
+initialCoordinates: LayoutCoordinates,
+verticalBounds: VerticalBounds,
};
-export type TooltipRoute<RouteName: $Keys<TooltipModalParamList>> = RouteProp<
- TooltipModalParamList,
- RouteName,
->;
-
-export type BaseTooltipProps<RouteName> = {
- +navigation: AppNavigationProp<RouteName>,
- +route: TooltipRoute<RouteName>,
+
+export type BaseNUXTipsOverlayProps = {
+ +navigation: AppNavigationProp<'NUXTipsOverlay'>,
+ +route: NavigationRoute<'NUXTipsOverlay'>,
};
type ButtonProps<Base> = {
...Base,
+progress: Node,
};
-type TooltipProps<Base> = {
+type NUXTipsOverlayProps<Base> = {
...Base,
// Redux state
+dimensions: DimensionsInfo,
+overlayContext: ?OverlayContextType,
+styles: $ReadOnly<typeof unboundStyles>,
- +closeTooltip: () => mixed,
-};
-
-export type TooltipMenuProps<RouteName> = {
- ...BaseTooltipProps<RouteName>,
+ +closeTip: () => mixed,
};
-function createTooltip<
- RouteName: $Keys<TooltipModalParamList>,
- BaseTooltipPropsType: BaseTooltipProps<RouteName> = BaseTooltipProps<RouteName>,
->(
- ButtonComponent: React.ComponentType<ButtonProps<BaseTooltipPropsType>>,
- MenuComponent: React.ComponentType<TooltipMenuProps<RouteName>>,
-): React.ComponentType<BaseTooltipPropsType> {
- class Tooltip extends React.PureComponent<
- TooltipProps<BaseTooltipPropsType>,
+function createNUXTipsOverlay(
+ ButtonComponent: React.ComponentType<ButtonProps<BaseNUXTipsOverlayProps>>,
+ MenuComponent: React.ComponentType<BaseNUXTipsOverlayProps>,
+): React.ComponentType<BaseNUXTipsOverlayProps> {
+ class NUXTipsOverlay extends React.PureComponent<
+ NUXTipsOverlayProps<BaseNUXTipsOverlayProps>,
> {
backdropOpacity: Node;
- tooltipContainerOpacity: Node;
- tooltipVerticalAbove: Node;
- tooltipVerticalBelow: Node;
- tooltipHorizontalOffset: Value = new Value(0);
- tooltipHorizontal: Node;
- tooltipScale: Node;
- fixedTooltipVertical: Node;
- tooltipHeight: number = 30;
+ tipContainerOpacity: Node;
+ tipVerticalAbove: Node;
+ tipVerticalBelow: Node;
+ tipHorizontalOffset: Value = new Value(0);
+ tipHorizontal: Node;
+ tipScale: Node;
+ fixedTipVertical: Node;
+ tipHeight: number = 30;
margin: number = 20;
- constructor(props: TooltipProps<BaseTooltipPropsType>) {
+ constructor(props: NUXTipsOverlayProps<BaseNUXTipsOverlayProps>) {
super(props);
const { overlayContext } = props;
- invariant(overlayContext, 'Tooltip should have OverlayContext');
+ invariant(overlayContext, 'NUXTipsOverlay should have OverlayContext');
const { position } = overlayContext;
this.backdropOpacity = interpolateNode(position, {
@@ -131,38 +118,35 @@
outputRange: [0, 0.7],
extrapolate: Extrapolate.CLAMP,
});
- this.tooltipContainerOpacity = interpolateNode(position, {
+ this.tipContainerOpacity = interpolateNode(position, {
inputRange: [0, 0.1],
outputRange: [0, 1],
extrapolate: Extrapolate.CLAMP,
});
const { margin } = this;
- this.tooltipVerticalAbove = interpolateNode(position, {
+ this.tipVerticalAbove = interpolateNode(position, {
inputRange: [0, 1],
- outputRange: [margin + this.tooltipHeight / 2, 0],
+ outputRange: [margin + this.tipHeight / 2, 0],
extrapolate: Extrapolate.CLAMP,
});
- this.tooltipVerticalBelow = interpolateNode(position, {
+ this.tipVerticalBelow = interpolateNode(position, {
inputRange: [0, 1],
- outputRange: [-margin - this.tooltipHeight / 2, 0],
+ outputRange: [-margin - this.tipHeight / 2, 0],
extrapolate: Extrapolate.CLAMP,
});
const invertedPosition = add(1, multiply(-1, position));
- this.tooltipHorizontal = multiply(
- invertedPosition,
- this.tooltipHorizontalOffset,
- );
+ this.tipHorizontal = multiply(invertedPosition, this.tipHorizontalOffset);
- this.tooltipScale = interpolateNode(position, {
+ this.tipScale = interpolateNode(position, {
inputRange: [0, 0.2, 0.8, 1],
outputRange: [0, 0, 1, 1],
extrapolate: Extrapolate.CLAMP,
});
- this.fixedTooltipVertical = multiply(
+ this.fixedTipVertical = multiply(
invertedPosition,
props.dimensions.height,
);
@@ -200,7 +184,7 @@
};
}
- get tooltipContainerStyle(): AnimatedViewStyle {
+ get tipContainerStyle(): AnimatedViewStyle {
const { dimensions, route } = this.props;
const { initialCoordinates, verticalBounds } = route.params;
const { x, y, width, height } = initialCoordinates;
@@ -209,11 +193,11 @@
const style: WritableAnimatedStyleObj = {};
style.position = 'absolute';
style.alignItems = 'center';
- style.opacity = this.tooltipContainerOpacity;
+ style.opacity = this.tipContainerOpacity;
const transform: Array<ReanimatedTransform> = [];
- transform.push({ translateX: this.tooltipHorizontal });
+ transform.push({ translateX: this.tipHorizontal });
const extraLeftSpace = x;
const extraRightSpace = dimensions.width - width - x;
@@ -227,8 +211,8 @@
style.top =
Math.min(y + height, verticalBounds.y + verticalBounds.height) + margin;
- transform.push({ translateY: this.tooltipVerticalBelow });
- transform.push({ scale: this.tooltipScale });
+ transform.push({ translateY: this.tipVerticalBelow });
+ transform.push({ scale: this.tipScale });
style.transform = transform;
return style;
@@ -239,7 +223,7 @@
dimensions,
overlayContext,
styles,
- closeTooltip,
+ closeTip,
...navAndRouteForFlow
} = this.props;
@@ -263,20 +247,20 @@
const triangleUp = <View style={[styles.triangleUp, triangleStyle]} />;
- invariant(overlayContext, 'Tooltip should have OverlayContext');
+ invariant(overlayContext, 'NUXTipsOverlay should have OverlayContext');
const { position } = overlayContext;
- const buttonProps: ButtonProps<BaseTooltipPropsType> = {
+ const buttonProps: ButtonProps<BaseNUXTipsOverlayProps> = {
...navAndRouteForFlow,
progress: position,
};
- let tooltip = null;
+ let tip = null;
- tooltip = (
+ tip = (
<AnimatedView
- style={this.tooltipContainerStyle}
- onLayout={this.onTooltipContainerLayout}
+ style={this.tipContainerStyle}
+ onLayout={this.onTipContainerLayout}
>
{triangleUp}
<View style={styles.items}>
@@ -286,7 +270,7 @@
);
return (
- <TouchableWithoutFeedback onPress={this.props.closeTooltip}>
+ <TouchableWithoutFeedback onPress={this.props.closeTip}>
<View style={styles.container}>
<AnimatedView style={this.opacityStyle} />
<View style={this.contentContainerStyle}>
@@ -294,13 +278,13 @@
<ButtonComponent {...buttonProps} />
</View>
</View>
- {tooltip}
+ {tip}
</View>
</TouchableWithoutFeedback>
);
}
- onTooltipContainerLayout = (event: LayoutEvent) => {
+ onTipContainerLayout = (event: LayoutEvent) => {
const { route, dimensions } = this.props;
const { x, width } = route.params.initialCoordinates;
@@ -310,19 +294,15 @@
const actualWidth = event.nativeEvent.layout.width;
if (extraLeftSpace < extraRightSpace) {
const minWidth = width + 2 * extraLeftSpace;
- this.tooltipHorizontalOffset.setValue((minWidth - actualWidth) / 2);
+ this.tipHorizontalOffset.setValue((minWidth - actualWidth) / 2);
} else {
const minWidth = width + 2 * extraRightSpace;
- this.tooltipHorizontalOffset.setValue((actualWidth - minWidth) / 2);
+ this.tipHorizontalOffset.setValue((actualWidth - minWidth) / 2);
}
};
}
- function ConnectedTooltip(
- props: $ReadOnly<{
- ...BaseTooltipPropsType,
- }>,
- ) {
+ function ConnectedNUXTipsOverlay(props: BaseNUXTipsOverlayProps) {
const dimensions = useSelector(state => state.dimensions);
const overlayContext = React.useContext(OverlayContext);
@@ -331,19 +311,16 @@
const styles = useStyles(unboundStyles);
return (
- <Tooltip
+ <NUXTipsOverlay
{...props}
dimensions={dimensions}
overlayContext={overlayContext}
styles={styles}
- closeTooltip={goBackOnce}
+ closeTip={goBackOnce}
/>
);
}
- function MemoizedTooltip(props: BaseTooltipPropsType) {
- return <ConnectedTooltip {...props} />;
- }
- return React.memo<BaseTooltipPropsType>(MemoizedTooltip);
+ return React.memo<BaseNUXTipsOverlayProps>(ConnectedNUXTipsOverlay);
}
-export { createTooltip };
+export { createNUXTipsOverlay };
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, Nov 23, 2:30 AM (17 h, 21 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2567526
Default Alt Text
D12947.diff (11 KB)
Attached To
Mode
D12947: [native] Rename Nux Tips Overlay (and simplify types)
Attached
Detach File
Event Timeline
Log In to Comment