Filter incoming bodyRanges, also filter before display

This commit is contained in:
Scott Nonnenberg 2023-04-11 17:16:46 -07:00 committed by GitHub
parent ec1246f60a
commit 4c9baaef80
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 84 additions and 126 deletions

View file

@ -48,7 +48,7 @@ import type {
HydratedBodyRangeMention,
HydratedBodyRangesType,
} from '../../types/BodyRange';
import { BodyRange } from '../../types/BodyRange';
import { BodyRange, hydrateRanges } from '../../types/BodyRange';
import type { AssertProps } from '../../types/Util';
import type { LinkPreviewType } from '../../types/message/LinkPreviews';
import { getMentionsRegex } from '../../types/Message';
@ -317,22 +317,9 @@ export const processBodyRanges = (
return undefined;
}
return bodyRanges
.map(range => {
const { conversationSelector } = options;
if (BodyRange.isMention(range)) {
const conversation = conversationSelector(range.mentionUuid);
return {
...range,
conversationID: conversation.id,
replacementText: conversation.title,
};
}
return range;
})
.sort((a, b) => b.start - a.start);
return hydrateRanges(bodyRanges, options.conversationSelector)?.sort(
(a, b) => b.start - a.start
);
};
export const extractHydratedMentions = (

View file

@ -28,11 +28,9 @@ import {
getConversationSelector,
} from './conversations';
import type { HydratedBodyRangeType } from '../../types/BodyRange';
import { BodyRange } from '../../types/BodyRange';
import { hydrateRanges } from '../../types/BodyRange';
import * as log from '../../logging/log';
import { getOwn } from '../../util/getOwn';
import { missingCaseError } from '../../util/missingCaseError';
export const getSearch = (state: StateType): SearchStateType => state.search;
@ -178,7 +176,6 @@ export const getCachedSelectorForMessageSearchResult = createSelector(
searchConversationId?: string,
targetedMessageId?: string
) => {
const bodyRanges = message.bodyRanges || [];
return {
from,
to,
@ -187,24 +184,8 @@ export const getCachedSelectorForMessageSearchResult = createSelector(
conversationId: message.conversationId,
sentAt: message.sent_at,
snippet: message.snippet || '',
bodyRanges: bodyRanges.map((range): HydratedBodyRangeType => {
// Hydrate user information on mention
if (BodyRange.isMention(range)) {
const conversation = conversationSelector(range.mentionUuid);
return {
...range,
conversationID: conversation.id,
replacementText: conversation.title,
};
}
if (BodyRange.isFormatting(range)) {
return range;
}
throw missingCaseError(range);
}),
bodyRanges:
hydrateRanges(message.bodyRanges, conversationSelector) || [],
body: message.body || '',
isSelected: Boolean(

View file

@ -42,7 +42,7 @@ import {
reduceStorySendStatus,
resolveStorySendStatus,
} from '../../util/resolveStorySendStatus';
import { BodyRange } from '../../types/BodyRange';
import { BodyRange, hydrateRanges } from '../../types/BodyRange';
export const getStoriesState = (state: StateType): StoriesStateType =>
state.stories;
@ -302,24 +302,10 @@ export const getStoryReplies = createSelector(
? me
: conversationSelector(reply.sourceUuid || reply.source);
const { bodyRanges } = reply;
return {
author: getAvatarData(conversation),
...pick(reply, ['body', 'deletedForEveryone', 'id', 'timestamp']),
bodyRanges: bodyRanges?.map(bodyRange => {
if (BodyRange.isMention(bodyRange)) {
const mentionConvo = conversationSelector(bodyRange.mentionUuid);
return {
...bodyRange,
conversationID: mentionConvo.id,
replacementText: mentionConvo.title,
};
}
return bodyRange;
}),
bodyRanges: hydrateRanges(reply.bodyRanges, conversationSelector),
reactionEmoji: reply.storyReaction?.emoji,
contactNameColor: contactNameColorSelector(
reply.conversationId,