Changeset View
Changeset View
Standalone View
Standalone View
native/chat/reaction-selection-popover.react.js
// @flow | // @flow | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { View, TouchableOpacity, Text } from 'react-native'; | import { View, TouchableOpacity, Text } from 'react-native'; | ||||
import { useReactionSelectionPopoverPosition } from './reaction-message-utils.js'; | |||||
import SWMansionIcon from '../components/swmansion-icon.react.js'; | import SWMansionIcon from '../components/swmansion-icon.react.js'; | ||||
import type { AppNavigationProp } from '../navigation/app-navigator.react.js'; | import type { AppNavigationProp } from '../navigation/app-navigator.react.js'; | ||||
import type { TooltipModalParamList } from '../navigation/route-names.js'; | import type { TooltipModalParamList } from '../navigation/route-names.js'; | ||||
import { useStyles } from '../themes/colors.js'; | import { useStyles } from '../themes/colors.js'; | ||||
import { useTooltipActions } from '../tooltip/tooltip-hooks.js'; | import { useTooltipActions } from '../tooltip/tooltip-hooks.js'; | ||||
import type { TooltipRoute } from '../tooltip/tooltip.react.js'; | import type { TooltipRoute } from '../tooltip/tooltip.react.js'; | ||||
import type { ViewStyle } from '../types/styles.js'; | |||||
type Props<RouteName: $Keys<TooltipModalParamList>> = { | type Props<RouteName: $Keys<TooltipModalParamList>> = { | ||||
+navigation: AppNavigationProp<RouteName>, | +navigation: AppNavigationProp<RouteName>, | ||||
+route: TooltipRoute<RouteName>, | +route: TooltipRoute<RouteName>, | ||||
+openEmojiPicker: () => mixed, | +openEmojiPicker: () => mixed, | ||||
+reactionSelectionPopoverContainerStyle: ViewStyle, | |||||
+sendReaction: (reaction: string) => mixed, | +sendReaction: (reaction: string) => mixed, | ||||
}; | }; | ||||
function ReactionSelectionPopover<RouteName: $Keys<TooltipModalParamList>>( | function ReactionSelectionPopover<RouteName: $Keys<TooltipModalParamList>>( | ||||
props: Props<RouteName>, | props: Props<RouteName>, | ||||
): React.Node { | ): React.Node { | ||||
const { | const { navigation, route, openEmojiPicker, sendReaction } = props; | ||||
navigation, | |||||
route, | const { verticalBounds, initialCoordinates, margin } = route.params; | ||||
openEmojiPicker, | const reactionSelectionPopoverContainerStyle = | ||||
reactionSelectionPopoverContainerStyle, | useReactionSelectionPopoverPosition({ | ||||
sendReaction, | initialCoordinates, | ||||
} = props; | verticalBounds, | ||||
margin, | |||||
}); | |||||
const styles = useStyles(unboundStyles); | const styles = useStyles(unboundStyles); | ||||
const containerStyle = React.useMemo( | const containerStyle = React.useMemo( | ||||
() => [ | () => [ | ||||
styles.reactionSelectionPopoverContainer, | styles.reactionSelectionPopoverContainer, | ||||
reactionSelectionPopoverContainerStyle, | reactionSelectionPopoverContainerStyle, | ||||
], | ], | ||||
▲ Show 20 Lines • Show All 90 Lines • Show Last 20 Lines |