Changeset View
Changeset View
Standalone View
Standalone View
native/chat/text-message.react.js
Show All 27 Lines | import { | ||||
OverlayContext, | OverlayContext, | ||||
type OverlayContextType, | type OverlayContextType, | ||||
} from '../navigation/overlay-context.js'; | } from '../navigation/overlay-context.js'; | ||||
import type { NavigationRoute } from '../navigation/route-names.js'; | import type { NavigationRoute } from '../navigation/route-names.js'; | ||||
import { TextMessageTooltipModalRouteName } from '../navigation/route-names.js'; | import { TextMessageTooltipModalRouteName } from '../navigation/route-names.js'; | ||||
import { fixedTooltipHeight } from '../tooltip/tooltip.react.js'; | import { fixedTooltipHeight } from '../tooltip/tooltip.react.js'; | ||||
import type { ChatTextMessageInfoItemWithHeight } from '../types/chat-types.js'; | import type { ChatTextMessageInfoItemWithHeight } from '../types/chat-types.js'; | ||||
import type { VerticalBounds } from '../types/layout-types.js'; | import type { VerticalBounds } from '../types/layout-types.js'; | ||||
import { useShouldRenderEditButton } from '../utils/edit-messages-utils.js'; | |||||
type BaseProps = { | type BaseProps = { | ||||
...React.ElementConfig<typeof View>, | ...React.ElementConfig<typeof View>, | ||||
+item: ChatTextMessageInfoItemWithHeight, | +item: ChatTextMessageInfoItemWithHeight, | ||||
+navigation: | +navigation: | ||||
| ChatNavigationProp<'MessageList'> | | ChatNavigationProp<'MessageList'> | ||||
| AppNavigationProp<'TogglePinModal'> | | AppNavigationProp<'TogglePinModal'> | ||||
| ChatNavigationProp<'MessageResultsScreen'> | | ChatNavigationProp<'MessageResultsScreen'> | ||||
Show All 14 Lines | type Props = { | ||||
+canCreateSidebarFromMessage: boolean, | +canCreateSidebarFromMessage: boolean, | ||||
// withOverlayContext | // withOverlayContext | ||||
+overlayContext: ?OverlayContextType, | +overlayContext: ?OverlayContextType, | ||||
// ChatContext | // ChatContext | ||||
+chatContext: ?ChatContextType, | +chatContext: ?ChatContextType, | ||||
// MarkdownContext | // MarkdownContext | ||||
+isLinkModalActive: boolean, | +isLinkModalActive: boolean, | ||||
+canEditMessage: boolean, | +canEditMessage: boolean, | ||||
+shouldRenderEditButton: boolean, | |||||
+canTogglePins: boolean, | +canTogglePins: boolean, | ||||
}; | }; | ||||
class TextMessage extends React.PureComponent<Props> { | class TextMessage extends React.PureComponent<Props> { | ||||
message: ?React.ElementRef<typeof View>; | message: ?React.ElementRef<typeof View>; | ||||
messagePressResponderContext: MessagePressResponderContextType; | messagePressResponderContext: MessagePressResponderContextType; | ||||
constructor(props: Props) { | constructor(props: Props) { | ||||
super(props); | super(props); | ||||
Show All 11 Lines | const { | ||||
toggleFocus, | toggleFocus, | ||||
verticalBounds, | verticalBounds, | ||||
shouldDisplayPinIndicator, | shouldDisplayPinIndicator, | ||||
overlayContext, | overlayContext, | ||||
chatContext, | chatContext, | ||||
isLinkModalActive, | isLinkModalActive, | ||||
canCreateSidebarFromMessage, | canCreateSidebarFromMessage, | ||||
canEditMessage, | canEditMessage, | ||||
shouldRenderEditButton, | |||||
canTogglePins, | canTogglePins, | ||||
...viewProps | ...viewProps | ||||
} = this.props; | } = this.props; | ||||
let swipeOptions = 'none'; | let swipeOptions = 'none'; | ||||
const canReply = this.canReply(); | const canReply = this.canReply(); | ||||
const canNavigateToSidebar = this.canNavigateToSidebar(); | const canNavigateToSidebar = this.canNavigateToSidebar(); | ||||
if (isLinkModalActive) { | if (isLinkModalActive) { | ||||
▲ Show 20 Lines • Show All 48 Lines • ▼ Show 20 Lines | class TextMessage extends React.PureComponent<Props> { | ||||
visibleEntryIDs() { | visibleEntryIDs() { | ||||
const result = ['copy']; | const result = ['copy']; | ||||
if (this.canReply()) { | if (this.canReply()) { | ||||
result.push('reply'); | result.push('reply'); | ||||
} | } | ||||
if (this.props.canEditMessage && this.props.shouldRenderEditButton) { | if (this.props.canEditMessage) { | ||||
result.push('edit'); | result.push('edit'); | ||||
} | } | ||||
if (this.props.canTogglePins) { | if (this.props.canTogglePins) { | ||||
this.props.item.isPinned ? result.push('unpin') : result.push('pin'); | this.props.item.isPinned ? result.push('unpin') : result.push('pin'); | ||||
} | } | ||||
if ( | if ( | ||||
▲ Show 20 Lines • Show All 93 Lines • ▼ Show 20 Lines | React.memo<BaseProps>(function ConnectedTextMessage(props: BaseProps) { | ||||
// evaluates to null is when the thread is opened for the first time. | // evaluates to null is when the thread is opened for the first time. | ||||
const isLinkModalActive = linkModalActive[key] ?? false; | const isLinkModalActive = linkModalActive[key] ?? false; | ||||
const canCreateSidebarFromMessage = useCanCreateSidebarFromMessage( | const canCreateSidebarFromMessage = useCanCreateSidebarFromMessage( | ||||
props.item.threadInfo, | props.item.threadInfo, | ||||
props.item.messageInfo, | props.item.messageInfo, | ||||
); | ); | ||||
const shouldRenderEditButton = useShouldRenderEditButton(); | |||||
const canEditMessage = useCanEditMessage( | const canEditMessage = useCanEditMessage( | ||||
props.item.threadInfo, | props.item.threadInfo, | ||||
props.item.messageInfo, | props.item.messageInfo, | ||||
); | ); | ||||
const canTogglePins = threadHasPermission( | const canTogglePins = threadHasPermission( | ||||
props.item.threadInfo, | props.item.threadInfo, | ||||
threadPermissions.MANAGE_PINS, | threadPermissions.MANAGE_PINS, | ||||
); | ); | ||||
React.useEffect(() => clearMarkdownContextData, [clearMarkdownContextData]); | React.useEffect(() => clearMarkdownContextData, [clearMarkdownContextData]); | ||||
return ( | return ( | ||||
<TextMessage | <TextMessage | ||||
{...props} | {...props} | ||||
canCreateSidebarFromMessage={canCreateSidebarFromMessage} | canCreateSidebarFromMessage={canCreateSidebarFromMessage} | ||||
overlayContext={overlayContext} | overlayContext={overlayContext} | ||||
chatContext={chatContext} | chatContext={chatContext} | ||||
isLinkModalActive={isLinkModalActive} | isLinkModalActive={isLinkModalActive} | ||||
canEditMessage={canEditMessage} | canEditMessage={canEditMessage} | ||||
shouldRenderEditButton={shouldRenderEditButton} | |||||
canTogglePins={canTogglePins} | canTogglePins={canTogglePins} | ||||
/> | /> | ||||
); | ); | ||||
}); | }); | ||||
export { ConnectedTextMessage as TextMessage }; | export { ConnectedTextMessage as TextMessage }; |