mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2025-12-20 10:19:08 +00:00
90 lines
2.5 KiB
TypeScript
90 lines
2.5 KiB
TypeScript
// Copyright 2025 Signal Messenger, LLC
|
|
// SPDX-License-Identifier: AGPL-3.0-only
|
|
|
|
import type { ReadonlyDeep } from 'type-fest';
|
|
|
|
import { PaymentEventKind } from '../types/Payment.std.js';
|
|
import type { AnyPaymentEvent } from '../types/Payment.std.js';
|
|
import type { LocalizerType } from '../types/Util.std.js';
|
|
import type { ReadonlyMessageAttributesType } from '../model-types.d.ts';
|
|
import { missingCaseError } from '../util/missingCaseError.std.js';
|
|
|
|
export type MessageAttributesWithPaymentEvent = ReadonlyMessageAttributesType &
|
|
ReadonlyDeep<{
|
|
payment: AnyPaymentEvent;
|
|
}>;
|
|
|
|
export function messageHasPaymentEvent(
|
|
message: ReadonlyMessageAttributesType
|
|
): message is MessageAttributesWithPaymentEvent {
|
|
return message.payment != null;
|
|
}
|
|
|
|
export function getPaymentEventNotificationText(
|
|
payment: ReadonlyDeep<AnyPaymentEvent>,
|
|
senderTitle: string,
|
|
conversationTitle: string | null,
|
|
senderIsMe: boolean,
|
|
i18n: LocalizerType
|
|
): string {
|
|
if (payment.kind === PaymentEventKind.Notification) {
|
|
return i18n('icu:payment-event-notification-label');
|
|
}
|
|
return getPaymentEventDescription(
|
|
payment,
|
|
senderTitle,
|
|
conversationTitle,
|
|
senderIsMe,
|
|
i18n
|
|
);
|
|
}
|
|
|
|
export function getPaymentEventDescription(
|
|
payment: ReadonlyDeep<AnyPaymentEvent>,
|
|
senderTitle: string,
|
|
conversationTitle: string | null,
|
|
senderIsMe: boolean,
|
|
i18n: LocalizerType
|
|
): string {
|
|
const { kind } = payment;
|
|
if (kind === PaymentEventKind.Notification) {
|
|
if (senderIsMe) {
|
|
if (conversationTitle != null) {
|
|
return i18n('icu:payment-event-notification-message-you-label', {
|
|
receiver: conversationTitle,
|
|
});
|
|
}
|
|
return i18n(
|
|
'icu:payment-event-notification-message-you-label-without-receiver'
|
|
);
|
|
}
|
|
return i18n('icu:payment-event-notification-message-label', {
|
|
sender: senderTitle,
|
|
});
|
|
}
|
|
if (kind === PaymentEventKind.ActivationRequest) {
|
|
if (senderIsMe) {
|
|
if (conversationTitle != null) {
|
|
return i18n('icu:payment-event-activation-request-you-label', {
|
|
receiver: conversationTitle,
|
|
});
|
|
}
|
|
return i18n(
|
|
'icu:payment-event-activation-request-you-label-without-receiver'
|
|
);
|
|
}
|
|
return i18n('icu:payment-event-activation-request-label', {
|
|
sender: senderTitle,
|
|
});
|
|
}
|
|
if (kind === PaymentEventKind.Activation) {
|
|
if (senderIsMe) {
|
|
return i18n('icu:payment-event-activated-you-label');
|
|
}
|
|
return i18n('icu:payment-event-activated-label', {
|
|
sender: senderTitle,
|
|
});
|
|
}
|
|
throw missingCaseError(kind);
|
|
}
|