Fix for missing replacement text in bodyRanges

This commit is contained in:
Josh Perez 2021-03-05 12:57:09 -05:00 committed by Josh Perez
parent dab5386207
commit 3cc6c5f5ad
6 changed files with 72 additions and 38 deletions

View file

@ -28,6 +28,8 @@ import {
getConversationSelector,
} from './conversations';
import { BodyRangeType } from '../../types/Util';
export const getSearch = (state: StateType): SearchStateType => state.search;
export const getQuery = createSelector(
@ -110,29 +112,6 @@ export const getSearchResults = createSelector(
}
);
export function _messageSearchResultSelector(
message: MessageSearchResultType,
from: ConversationType,
to: ConversationType,
searchConversationId?: string,
selectedMessageId?: string
): MessageSearchResultPropsDataType {
return {
from,
to,
id: message.id,
conversationId: message.conversationId,
sentAt: message.sent_at,
snippet: message.snippet,
bodyRanges: message.bodyRanges,
body: message.body,
isSelected: Boolean(selectedMessageId && message.id === selectedMessageId),
isSearchingInConversation: Boolean(searchConversationId),
};
}
// A little optimization to reset our selector cache whenever high-level application data
// changes: regionCode and userNumber.
type CachedMessageSearchResultSelectorType = (
@ -142,18 +121,58 @@ type CachedMessageSearchResultSelectorType = (
searchConversationId?: string,
selectedMessageId?: string
) => MessageSearchResultPropsDataType;
export const getCachedSelectorForMessageSearchResult = createSelector(
getUserConversationId,
(): CachedMessageSearchResultSelectorType => {
getConversationSelector,
(
_,
conversationSelector: GetConversationByIdType
): CachedMessageSearchResultSelectorType => {
// Note: memoizee will check all parameters provided, and only run our selector
// if any of them have changed.
return memoizee(_messageSearchResultSelector, { max: 500 });
return memoizee(
(
message: MessageSearchResultType,
from: ConversationType,
to: ConversationType,
searchConversationId?: string,
selectedMessageId?: string
) => {
const bodyRanges = message.bodyRanges || [];
return {
from,
to,
id: message.id,
conversationId: message.conversationId,
sentAt: message.sent_at,
snippet: message.snippet,
bodyRanges: bodyRanges.map((bodyRange: BodyRangeType) => {
const conversation = conversationSelector(bodyRange.mentionUuid);
return {
...bodyRange,
replacementText: conversation.title,
};
}),
body: message.body,
isSelected: Boolean(
selectedMessageId && message.id === selectedMessageId
),
isSearchingInConversation: Boolean(searchConversationId),
};
},
{ max: 500 }
);
}
);
type GetMessageSearchResultByIdType = (
id: string
) => MessageSearchResultPropsDataType | undefined;
export const getMessageSearchResultSelector = createSelector(
getCachedSelectorForMessageSearchResult,
getMessageSearchResultLookup,