Changeset View
Changeset View
Standalone View
Standalone View
web/modals/chat/message-results-modal.react.js
// @flow | // @flow | ||||
import * as React from 'react'; | import * as React from 'react'; | ||||
import { | import { | ||||
fetchPinnedMessages, | fetchPinnedMessages, | ||||
fetchPinnedMessageActionTypes, | fetchPinnedMessageActionTypes, | ||||
} from 'lib/actions/message-actions.js'; | } from 'lib/actions/message-actions.js'; | ||||
import { useModalContext } from 'lib/components/modal-provider.react.js'; | import { useModalContext } from 'lib/components/modal-provider.react.js'; | ||||
import { messageListData } from 'lib/selectors/chat-selectors.js'; | import { messageListData } from 'lib/selectors/chat-selectors.js'; | ||||
import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; | import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; | ||||
import { createMessageInfo } from 'lib/shared/message-utils.js'; | import { | ||||
createMessageInfo, | |||||
modifyItemForResultScreen, | |||||
} from 'lib/shared/message-utils.js'; | |||||
import { type ThreadInfo } from 'lib/types/thread-types.js'; | import { type ThreadInfo } from 'lib/types/thread-types.js'; | ||||
import { | import { | ||||
useServerCall, | useServerCall, | ||||
useDispatchActionPromise, | useDispatchActionPromise, | ||||
} from 'lib/utils/action-utils.js'; | } from 'lib/utils/action-utils.js'; | ||||
import css from './message-results-modal.css'; | import css from './message-results-modal.css'; | ||||
import MessageResult from '../../components/message-result.react.js'; | import MessageResult from '../../components/message-result.react.js'; | ||||
▲ Show 20 Lines • Show All 82 Lines • ▼ Show 20 Lines | const sortedUniqueChatMessageInfoItems = React.useMemo(() => { | ||||
} | } | ||||
return sortedChatMessageInfoItems; | return sortedChatMessageInfoItems; | ||||
}, [translatedMessageResults, chatMessageInfos, rawMessageResults]); | }, [translatedMessageResults, chatMessageInfos, rawMessageResults]); | ||||
const modifiedItems = React.useMemo( | const modifiedItems = React.useMemo( | ||||
() => | () => | ||||
sortedUniqueChatMessageInfoItems | sortedUniqueChatMessageInfoItems | ||||
.map(item => { | .filter(Boolean) | ||||
if (!item) { | .map(item => modifyItemForResultScreen(item)), | ||||
return null; | |||||
} | |||||
// We need to modify the item to make sure that the message does | |||||
// not render with the date header and that the creator | |||||
// is not considered the viewer. | |||||
let modifiedItem = item; | |||||
if (item.messageInfoType === 'composable') { | |||||
modifiedItem = { | |||||
...item, | |||||
startsConversation: false, | |||||
startsCluster: true, | |||||
endsCluster: true, | |||||
messageInfo: { | |||||
...item.messageInfo, | |||||
creator: { | |||||
...item.messageInfo.creator, | |||||
isViewer: false, | |||||
}, | |||||
}, | |||||
}; | |||||
} | |||||
return modifiedItem; | |||||
}) | |||||
.filter(Boolean), | |||||
[sortedUniqueChatMessageInfoItems], | [sortedUniqueChatMessageInfoItems], | ||||
); | ); | ||||
const messageResultsToDisplay = React.useMemo(() => { | const messageResultsToDisplay = React.useMemo(() => { | ||||
const items = modifiedItems.map(item => ( | const items = modifiedItems.map(item => ( | ||||
<MessageResult | <MessageResult | ||||
key={item.messageInfo.id} | key={item.messageInfo.id} | ||||
item={item} | item={item} | ||||
Show All 29 Lines |