Changeset View
Changeset View
Standalone View
Standalone View
native/chat/text-message-tooltip-modal.react.js
// @flow | // @flow | ||||
import Clipboard from '@react-native-clipboard/clipboard'; | import Clipboard from '@react-native-clipboard/clipboard'; | ||||
import invariant from 'invariant'; | import invariant from 'invariant'; | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { createMessageReply } from 'lib/shared/message-utils.js'; | import { createMessageReply } from 'lib/shared/message-utils.js'; | ||||
import { useNavigateToThread } from './message-list-types.js'; | |||||
import { useOnPressReport } from './message-report-utils.js'; | import { useOnPressReport } from './message-report-utils.js'; | ||||
import { useAnimatedNavigateToSidebar } from './sidebar-navigation.js'; | import { useAnimatedNavigateToSidebar } from './sidebar-navigation.js'; | ||||
import TextMessageTooltipButton from './text-message-tooltip-button.react.js'; | import TextMessageTooltipButton from './text-message-tooltip-button.react.js'; | ||||
import CommIcon from '../components/comm-icon.react.js'; | import CommIcon from '../components/comm-icon.react.js'; | ||||
import SWMansionIcon from '../components/swmansion-icon.react.js'; | import SWMansionIcon from '../components/swmansion-icon.react.js'; | ||||
import { InputStateContext } from '../input/input-state.js'; | import { InputStateContext } from '../input/input-state.js'; | ||||
import { displayActionResultModal } from '../navigation/action-result-modal.js'; | import { displayActionResultModal } from '../navigation/action-result-modal.js'; | ||||
import { OverlayContext } from '../navigation/overlay-context.js'; | import { OverlayContext } from '../navigation/overlay-context.js'; | ||||
Show All 12 Lines | |||||
}>; | }>; | ||||
const confirmCopy = () => displayActionResultModal('copied!'); | const confirmCopy = () => displayActionResultModal('copied!'); | ||||
function TooltipMenu( | function TooltipMenu( | ||||
props: TooltipMenuProps<'TextMessageTooltipModal'>, | props: TooltipMenuProps<'TextMessageTooltipModal'>, | ||||
): React.Node { | ): React.Node { | ||||
const { route, tooltipItem: TooltipItem } = props; | const { route, tooltipItem: TooltipItem } = props; | ||||
const { threadInfo } = route.params.item; | |||||
const overlayContext = React.useContext(OverlayContext); | const overlayContext = React.useContext(OverlayContext); | ||||
const inputState = React.useContext(InputStateContext); | const inputState = React.useContext(InputStateContext); | ||||
const { text } = route.params.item.messageInfo; | const { text } = route.params.item.messageInfo; | ||||
const navigateToThread = useNavigateToThread(); | |||||
const onPressReply = React.useCallback(() => { | const onPressReply = React.useCallback(() => { | ||||
invariant( | invariant( | ||||
inputState, | inputState, | ||||
'inputState should be set in TextMessageTooltipModal.onPressReply', | 'inputState should be set in TextMessageTooltipModal.onPressReply', | ||||
); | ); | ||||
navigateToThread({ threadInfo }); | |||||
inputState.editInputMessage({ | inputState.editInputMessage({ | ||||
message: createMessageReply(text), | message: createMessageReply(text), | ||||
mode: 'prepend', | mode: 'prepend', | ||||
}); | }); | ||||
}, [inputState, text]); | }, [inputState, navigateToThread, threadInfo, text]); | ||||
const renderReplyIcon = React.useCallback( | const renderReplyIcon = React.useCallback( | ||||
style => <CommIcon name="reply" style={style} size={12} />, | style => <CommIcon name="reply" style={style} size={12} />, | ||||
[], | [], | ||||
); | ); | ||||
const onPressSidebar = useAnimatedNavigateToSidebar(route.params.item); | const onPressSidebar = useAnimatedNavigateToSidebar(route.params.item); | ||||
const renderSidebarIcon = React.useCallback( | const renderSidebarIcon = React.useCallback( | ||||
style => ( | style => ( | ||||
▲ Show 20 Lines • Show All 120 Lines • Show Last 20 Lines |