Skip to content

Commit

Permalink
fix: separate PointerWrapper component from TooltipWrapper
Browse files Browse the repository at this point in the history
  • Loading branch information
Stringsaeed committed Nov 5, 2022
1 parent f4a4b7c commit 84eef08
Show file tree
Hide file tree
Showing 6 changed files with 53 additions and 17 deletions.
31 changes: 31 additions & 0 deletions src/components/PointerWrapper/PointerWrapper.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
import React, { useMemo } from 'react';
import { StyleSheet, View } from 'react-native';

import { getPointerWrapperStyle } from '../../utils';
import type { PointerWrapperProps } from '../../types';

import Pointer from '../Pointer';

import styles from './styles';

const PointerWrapper: React.FC<PointerWrapperProps> = ({
tooltipLayout,
...pointerProps
}) => {
const pointerStyles = useMemo(
() =>
StyleSheet.flatten([
styles.wrapper,
getPointerWrapperStyle(pointerProps, tooltipLayout),
]),
[pointerProps, tooltipLayout]
);

return (
<View style={pointerStyles}>
<Pointer {...pointerProps} />
</View>
);
};

export default PointerWrapper;
1 change: 1 addition & 0 deletions src/components/PointerWrapper/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export { default } from './PointerWrapper';
9 changes: 9 additions & 0 deletions src/components/PointerWrapper/styles.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { StyleSheet } from 'react-native';

const pointerWrapperStyles = StyleSheet.create({
wrapper: {
position: 'absolute',
},
});

export default pointerWrapperStyles;
20 changes: 7 additions & 13 deletions src/components/TooltipWrapper/TooltipWrapper.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,11 @@
import React, { useMemo } from 'react';
import { StyleSheet, View, ViewStyle } from 'react-native';
import Animated, { useAnimatedStyle } from 'react-native-reanimated';

import { useLayout } from '../../hooks';
import { getPositionStyles } from '../../utils';
import type { TooltipWrapperProps } from '../../types';
import { getPointerWrapperStyle, getPositionStyles } from '../../utils';

import Pointer from '../Pointer';
import PointerWrapper from '../PointerWrapper';

import styles from './styles';

Expand Down Expand Up @@ -37,22 +36,17 @@ const TooltipWrapperComponent: React.FC<TooltipWrapperProps> = (props) => {
});
}, [layout, position, props]);

const pointerStyles = useMemo(() => {
return StyleSheet.flatten<ViewStyle>([
styles.pointer,
getPointerWrapperStyle({ position, ...pointerProps }, layout),
]);
}, [position, pointerProps, layout]);

return (
<Animated.View
onLayout={onLayout}
style={[styles.tooltipWrapper, positionStyles, stylez]}
>
{children}
<View style={pointerStyles}>
<Pointer {...pointerProps} position={position} />
</View>
<PointerWrapper
{...pointerProps}
tooltipLayout={layout}
position={position}
/>
</Animated.View>
);
};
Expand Down
3 changes: 0 additions & 3 deletions src/components/TooltipWrapper/styles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ const tooltipWrapperStyles = StyleSheet.create({
position: 'absolute',
opacity: 0,
},
pointer: {
position: 'absolute',
},
});

export default tooltipWrapperStyles;
6 changes: 5 additions & 1 deletion src/types/ComponentsProps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,14 @@ export interface OverlayProps
overlayStyle?: ViewStyle;
}

export interface PointerWrapperProps extends PointerProps {
tooltipLayout?: LayoutRectangle;
}

export interface TooltipWrapperProps
extends RequiredChildrenProp,
AnimatedPresenceProp,
PointerProps {
Omit<PointerWrapperProps, 'tooltipLayout'> {
offset?: number;
childrenLayout?: LayoutRectangle;
}
Expand Down

0 comments on commit 84eef08

Please sign in to comment.