97 lines
3.2 KiB
TypeScript
97 lines
3.2 KiB
TypeScript
// Copyright 2024 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import { messageHasPaymentEvent } from '../messages/helpers';
|
|
import type { MessageAttributesType } from '../model-types';
|
|
import {
|
|
hasErrors,
|
|
isCallHistory,
|
|
isChatSessionRefreshed,
|
|
isConversationMerge,
|
|
isDeliveryIssue,
|
|
isEndSession,
|
|
isExpirationTimerUpdate,
|
|
isGiftBadge,
|
|
isGroupUpdate,
|
|
isGroupV2Change,
|
|
isKeyChange,
|
|
isPhoneNumberDiscovery,
|
|
isProfileChange,
|
|
isTapToView,
|
|
isTitleTransitionNotification,
|
|
isUniversalTimerNotification,
|
|
isUnsupportedMessage,
|
|
isVerifiedChange,
|
|
} from '../state/selectors/message';
|
|
|
|
export function isMessageEmpty(attributes: MessageAttributesType): boolean {
|
|
// Core message types - we check for all four because they can each stand alone
|
|
const hasBody = Boolean(attributes.body);
|
|
const hasAttachment = (attributes.attachments || []).length > 0;
|
|
const hasEmbeddedContact = (attributes.contact || []).length > 0;
|
|
const isSticker = Boolean(attributes.sticker);
|
|
|
|
// Rendered sync messages
|
|
const isCallHistoryValue = isCallHistory(attributes);
|
|
const isChatSessionRefreshedValue = isChatSessionRefreshed(attributes);
|
|
const isDeliveryIssueValue = isDeliveryIssue(attributes);
|
|
const isGiftBadgeValue = isGiftBadge(attributes);
|
|
const isGroupUpdateValue = isGroupUpdate(attributes);
|
|
const isGroupV2ChangeValue = isGroupV2Change(attributes);
|
|
const isEndSessionValue = isEndSession(attributes);
|
|
const isExpirationTimerUpdateValue = isExpirationTimerUpdate(attributes);
|
|
const isVerifiedChangeValue = isVerifiedChange(attributes);
|
|
|
|
// Placeholder messages
|
|
const isUnsupportedMessageValue = isUnsupportedMessage(attributes);
|
|
const isTapToViewValue = isTapToView(attributes);
|
|
|
|
// Errors
|
|
const hasErrorsValue = hasErrors(attributes);
|
|
|
|
// Locally-generated notifications
|
|
const isKeyChangeValue = isKeyChange(attributes);
|
|
const isProfileChangeValue = isProfileChange(attributes);
|
|
const isUniversalTimerNotificationValue =
|
|
isUniversalTimerNotification(attributes);
|
|
const isConversationMergeValue = isConversationMerge(attributes);
|
|
const isPhoneNumberDiscoveryValue = isPhoneNumberDiscovery(attributes);
|
|
const isTitleTransitionNotificationValue =
|
|
isTitleTransitionNotification(attributes);
|
|
|
|
const isPayment = messageHasPaymentEvent(attributes);
|
|
|
|
// Note: not all of these message types go through message.handleDataMessage
|
|
|
|
const hasSomethingToDisplay =
|
|
// Core message types
|
|
hasBody ||
|
|
hasAttachment ||
|
|
hasEmbeddedContact ||
|
|
isSticker ||
|
|
isPayment ||
|
|
// Rendered sync messages
|
|
isCallHistoryValue ||
|
|
isChatSessionRefreshedValue ||
|
|
isDeliveryIssueValue ||
|
|
isGiftBadgeValue ||
|
|
isGroupUpdateValue ||
|
|
isGroupV2ChangeValue ||
|
|
isEndSessionValue ||
|
|
isExpirationTimerUpdateValue ||
|
|
isVerifiedChangeValue ||
|
|
// Placeholder messages
|
|
isUnsupportedMessageValue ||
|
|
isTapToViewValue ||
|
|
// Errors
|
|
hasErrorsValue ||
|
|
// Locally-generated notifications
|
|
isKeyChangeValue ||
|
|
isProfileChangeValue ||
|
|
isUniversalTimerNotificationValue ||
|
|
isConversationMergeValue ||
|
|
isPhoneNumberDiscoveryValue ||
|
|
isTitleTransitionNotificationValue;
|
|
|
|
return !hasSomethingToDisplay;
|
|
}
|