diff --git a/native/chat/message-list-container.react.js b/native/chat/message-list-container.react.js --- a/native/chat/message-list-container.react.js +++ b/native/chat/message-list-container.react.js @@ -388,7 +388,7 @@ params: { threadInfo, }, - key: `PinnedMessages${threadInfo.id}`, + key: `MessageResultsScreen${threadInfo.id}`, }); }, [props.navigation, threadInfo]); diff --git a/native/chat/text-message.react.js b/native/chat/text-message.react.js --- a/native/chat/text-message.react.js +++ b/native/chat/text-message.react.js @@ -4,7 +4,6 @@ import * as React from 'react'; import { View } from 'react-native'; -import { useCanEditMessage } from 'lib/shared/edit-messages-utils.js'; import { messageKey } from 'lib/shared/message-utils.js'; import { threadHasPermission, @@ -25,12 +24,13 @@ import { ChatContext, type ChatContextType } from '../chat/chat-context.js'; import { MarkdownContext } from '../markdown/markdown-context.js'; import type { AppNavigationProp } from '../navigation/app-navigator.react'; +import { useCanEditMessageNative } from '../navigation/nav-selectors.js'; import { OverlayContext, type OverlayContextType, } from '../navigation/overlay-context.js'; -import type { NavigationRoute } from '../navigation/route-names.js'; import { TextMessageTooltipModalRouteName } from '../navigation/route-names.js'; +import type { NavigationRoute } from '../navigation/route-names.js'; import { fixedTooltipHeight } from '../tooltip/tooltip.react.js'; import type { ChatTextMessageInfoItemWithHeight } from '../types/chat-types.js'; import type { VerticalBounds } from '../types/layout-types.js'; @@ -270,7 +270,7 @@ const isThisMessageEdited = editMessageID === props.item.messageInfo.id; const canEditMessage = - useCanEditMessage(props.item.threadInfo, props.item.messageInfo) && + useCanEditMessageNative(props.item.threadInfo, props.item.messageInfo) && !isThisMessageEdited; const canTogglePins = threadHasPermission( diff --git a/native/navigation/nav-selectors.js b/native/navigation/nav-selectors.js --- a/native/navigation/nav-selectors.js +++ b/native/navigation/nav-selectors.js @@ -1,14 +1,21 @@ // @flow import type { PossiblyStaleNavigationState } from '@react-navigation/native'; +import { useRoute } from '@react-navigation/native'; import _memoize from 'lodash/memoize.js'; import * as React from 'react'; import { createSelector } from 'reselect'; import { nonThreadCalendarFiltersSelector } from 'lib/selectors/calendar-filter-selectors.js'; import { currentCalendarQuery } from 'lib/selectors/nav-selectors.js'; +import { useCanEditMessage } from 'lib/shared/edit-messages-utils.js'; import type { CalendarQuery } from 'lib/types/entry-types.js'; import type { CalendarFilter } from 'lib/types/filter-types.js'; +import type { + ComposableMessageInfo, + RobotextMessageInfo, +} from 'lib/types/message-types.js'; +import type { ThreadInfo } from 'lib/types/thread-types.js'; import type { NavContextType } from './navigation-context.js'; import { NavContext } from './navigation-context.js'; @@ -30,6 +37,8 @@ chatRootModals, threadRoutes, CommunityDrawerNavigatorRouteName, + MessageResultsScreenRouteName, + MessageSearchRouteName, } from './route-names.js'; import type { RemoveEditMode } from '../chat/message-list-types'; import { useSelector } from '../redux/redux-utils.js'; @@ -389,6 +398,26 @@ }, [navContext]); } +function useCanEditMessageNative( + threadInfo: ThreadInfo, + targetMessageInfo: ComposableMessageInfo | RobotextMessageInfo, +): boolean { + const route = useRoute(); + + const screenKey = route.key; + const threadCreationTime = threadInfo.creationTime; + const messageCreationTime = targetMessageInfo.time; + + const canEditInThisScreen = + !screenKey.startsWith(MessageSearchRouteName) && + !screenKey.startsWith(MessageResultsScreenRouteName) && + messageCreationTime >= threadCreationTime; + + return ( + useCanEditMessage(threadInfo, targetMessageInfo) && canEditInThisScreen + ); +} + export { createIsForegroundSelector, useIsAppLoggedIn, @@ -408,4 +437,5 @@ getRemoveEditMode, getTabNavState, getChatNavStateFromTabNavState, + useCanEditMessageNative, };