Skip to content

Commit cf8a933

Browse files
Ajaxyzubiden
andcommitted
Gifts: Support remove gift message (#6404)
Co-authored-by: zubiden <19638254+zubiden@users.noreply.github.com>
1 parent f8c6164 commit cf8a933

File tree

28 files changed

+435
-62
lines changed

28 files changed

+435
-62
lines changed

src/api/gramjs/apiBuilders/gifts.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ export function buildApiStarGiftAttribute(attribute: GramJs.TypeStarGiftAttribut
158158
export function buildApiSavedStarGift(userStarGift: GramJs.SavedStarGift, peerId: string): ApiSavedStarGift {
159159
const {
160160
gift, date, convertStars, fromId, message, msgId, nameHidden, unsaved, upgradeStars, transferStars, canUpgrade,
161-
savedId, canExportAt, pinnedToTop, canResellAt, canTransferAt, prepaidUpgradeHash,
161+
savedId, canExportAt, pinnedToTop, canResellAt, canTransferAt, prepaidUpgradeHash, dropOriginalDetailsStars,
162162
} = userStarGift;
163163

164164
const inputGift: ApiInputSavedStarGift | undefined = savedId && peerId
@@ -183,6 +183,7 @@ export function buildApiSavedStarGift(userStarGift: GramJs.SavedStarGift, peerId
183183
canResellAt,
184184
canTransferAt,
185185
isPinned: pinnedToTop,
186+
dropOriginalDetailsStars: dropOriginalDetailsStars !== undefined ? toJSNumber(dropOriginalDetailsStars) : undefined,
186187
prepaidUpgradeHash,
187188
};
188189
}

src/api/gramjs/apiBuilders/messageActions.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -422,7 +422,7 @@ export function buildApiMessageAction(action: GramJs.TypeMessageAction): ApiMess
422422
if (action instanceof GramJs.MessageActionStarGiftUnique) {
423423
const {
424424
upgrade, transferred, saved, refunded, gift, canExportAt, transferStars, fromId, peer, savedId,
425-
resaleAmount, prepaidUpgrade,
425+
resaleAmount, prepaidUpgrade, dropOriginalDetailsStars,
426426
} = action;
427427

428428
const starGift = buildApiStarGift(gift);
@@ -443,6 +443,9 @@ export function buildApiMessageAction(action: GramJs.TypeMessageAction): ApiMess
443443
peerId: peer && getApiChatIdFromMtpPeer(peer),
444444
savedId: savedId !== undefined ? buildApiPeerId(savedId, 'user') : undefined,
445445
resaleAmount: resaleAmount ? buildApiCurrencyAmount(resaleAmount) : undefined,
446+
dropOriginalDetailsStars: dropOriginalDetailsStars !== undefined
447+
? toJSNumber(dropOriginalDetailsStars)
448+
: undefined,
446449
};
447450
}
448451
if (action instanceof GramJs.MessageActionPaidMessagesPrice) {

src/api/gramjs/apiBuilders/payments.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -553,7 +553,7 @@ export function buildApiStarsTransaction(transaction: GramJs.StarsTransaction):
553553
const {
554554
date, id, peer, amount, description, photo, title, refund, extendedMedia, failed, msgId, pending, gift, reaction,
555555
subscriptionPeriod, stargift, giveawayPostId, starrefCommissionPermille, stargiftUpgrade, paidMessages,
556-
stargiftResale, postsSearch, stargiftPrepaidUpgrade,
556+
stargiftResale, postsSearch, stargiftPrepaidUpgrade, stargiftDropOriginalDetails,
557557
} = transaction;
558558

559559
if (photo) {
@@ -593,6 +593,7 @@ export function buildApiStarsTransaction(transaction: GramJs.StarsTransaction):
593593
isGiftResale: stargiftResale,
594594
paidMessages,
595595
isPostsSearch: postsSearch,
596+
isDropOriginalDetails: stargiftDropOriginalDetails,
596597
isPrepaidUpgrade: stargiftPrepaidUpgrade,
597598
};
598599
}

src/api/gramjs/gramjsBuilders/index.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -781,6 +781,12 @@ export function buildInputInvoice(invoice: ApiRequestInputInvoice) {
781781
});
782782
}
783783

784+
case 'stargiftDropOriginalDetails': {
785+
return new GramJs.InputInvoiceStarGiftDropOriginalDetails({
786+
stargift: buildInputSavedStarGift(invoice.inputSavedGift),
787+
});
788+
}
789+
784790
case 'stargiftPrepaidUpgrade': {
785791
return new GramJs.InputInvoiceStarGiftPrepaidUpgrade({
786792
peer: buildInputPeer(invoice.peer.id, invoice.peer.accessHash),

src/api/types/messageActions.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,7 @@ export interface ApiMessageActionStarGiftUnique extends ActionMediaType {
269269
peerId?: string;
270270
savedId?: string;
271271
resaleAmount?: ApiTypeCurrencyAmount;
272+
dropOriginalDetailsStars?: number;
272273
}
273274

274275
export interface ApiMessageActionChannelJoined extends ActionMediaType {

src/api/types/payments.ts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -399,6 +399,11 @@ export type ApiInputInvoiceStarGiftTransfer = {
399399
recipientId: string;
400400
};
401401

402+
export type ApiInputInvoiceStarGiftDropOriginalDetails = {
403+
type: 'stargiftDropOriginalDetails';
404+
inputSavedGift: ApiInputSavedStarGift;
405+
};
406+
402407
export type ApiInputInvoiceStarGiftPrepaidUpgrade = {
403408
type: 'stargiftPrepaidUpgrade';
404409
peerId: string;
@@ -409,7 +414,7 @@ export type ApiInputInvoice = ApiInputInvoiceMessage | ApiInputInvoiceSlug | Api
409414
| ApiInputInvoiceGiftCode | ApiInputInvoicePremiumGiftStars | ApiInputInvoiceStars | ApiInputInvoiceStarsGift
410415
| ApiInputInvoiceStarsGiveaway | ApiInputInvoiceStarGift | ApiInputInvoiceChatInviteSubscription
411416
| ApiInputInvoiceStarGiftUpgrade | ApiInputInvoiceStarGiftTransfer | ApiInputInvoiceStarGiftResale
412-
| ApiInputInvoiceStarGiftPrepaidUpgrade;
417+
| ApiInputInvoiceStarGiftDropOriginalDetails | ApiInputInvoiceStarGiftPrepaidUpgrade;
413418

414419
/* Used for Invoice request */
415420
export type ApiRequestInputInvoiceMessage = {
@@ -479,6 +484,11 @@ export type ApiRequestInputInvoiceStarGiftTransfer = {
479484
recipient: ApiPeer;
480485
};
481486

487+
export type ApiRequestInputInvoiceStarGiftDropOriginalDetails = {
488+
type: 'stargiftDropOriginalDetails';
489+
inputSavedGift: ApiRequestInputSavedStarGift;
490+
};
491+
482492
export type ApiRequestInputInvoiceStarGiftPrepaidUpgrade = {
483493
type: 'stargiftPrepaidUpgrade';
484494
peer: ApiPeer;
@@ -490,7 +500,7 @@ export type ApiRequestInputInvoice = ApiRequestInputInvoiceMessage | ApiRequestI
490500
| ApiRequestInputInvoiceChatInviteSubscription | ApiRequestInputInvoiceStarGift
491501
| ApiRequestInputInvoiceStarGiftUpgrade | ApiRequestInputInvoiceStarGiftTransfer
492502
| ApiRequestInputInvoicePremiumGiftStars | ApiRequestInputInvoiceStarGiftResale
493-
| ApiRequestInputInvoiceStarGiftPrepaidUpgrade;
503+
| ApiRequestInputInvoiceStarGiftDropOriginalDetails | ApiRequestInputInvoiceStarGiftPrepaidUpgrade;
494504

495505
export interface ApiUniqueStarGiftValueInfo {
496506
isLastSaleOnFragment?: true;

src/api/types/stars.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,7 @@ export interface ApiSavedStarGift {
111111
isConverted?: boolean; // Local field, used for Action Message
112112
upgradeMsgId?: number; // Local field, used for Action Message
113113
localTag?: number; // Local field, used for key in list
114+
dropOriginalDetailsStars?: number;
114115
}
115116

116117
export type StarGiftAttributeIdModel = {
@@ -245,6 +246,7 @@ export interface ApiStarsTransaction {
245246
isGiftResale?: true;
246247
paidMessages?: number;
247248
isPostsSearch?: true;
249+
isDropOriginalDetails?: true;
248250
isPrepaidUpgrade?: true;
249251
}
250252

src/assets/localization/fallback.strings

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1558,6 +1558,10 @@
15581558
"GiftTransferConfirmButton" = "Transfer for {amount}";
15591559
"GiftTransferConfirmButtonFree" = "Transfer";
15601560
"GiftTransferSuccessMessage" = "You have successfully gifted {gift} to {peer}.";
1561+
"RemoveGiftDescriptionTitle" = "Remove Description";
1562+
"RemoveGiftDescriptionConfirmText" = "Do you want to permanently remove this description from your gift?";
1563+
"RemoveGiftDescriptionButton" = "Remove for {amount}";
1564+
"RemoveGiftDescriptionSuccessMessage" = "Gift's Description Removed!";
15611565
"GiftUpgradeUniqueTitle" = "Unique";
15621566
"GiftUpgradeUniqueDescription" = "Turn your gift into a unique collectible that you can transfer or auction.";
15631567
"GiftUpgradeTransferableTitle" = "Transferable";
@@ -2301,6 +2305,8 @@
23012305
"TitleGiftLocked" = "Gift Locked";
23022306
"GiftLockedMessage" = "This gift is currently only available to earlier Telegram users. It will unlock for your account in about **{relativeDate}**.";
23032307
"QuickPreview" = "Quick Preview";
2308+
"DropOriginalDetailsTransaction" = "Removed Gift Description";
2309+
"StarGiftReasonDropOriginalDetails" = "Removed Description";
23042310
"GiftAnUpgradeButton" = "Gift an Upgrade";
23052311
"GiftPrepaidUpgradeTransactionTitle" = "Gift Upgrade";
23062312
"ActionStarGiftPrepaidUpgraded" = "{user} turned the gift into a unique collectible";

src/bundles/stars.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,5 +16,6 @@ export { default as GiftStatusInfoModal } from '../components/modals/gift/status
1616
export { default as GiftWithdrawModal } from '../components/modals/gift/withdraw/GiftWithdrawModal';
1717
export { default as GiftTransferModal } from '../components/modals/gift/transfer/GiftTransferModal';
1818
export { default as GiftTransferConfirmModal } from '../components/modals/gift/transfer/GiftTransferConfirmModal';
19+
export { default as GiftDescriptionRemoveModal } from '../components/modals/gift/message/GiftDescriptionRemoveModal';
1920
export { default as ChatRefundModal } from '../components/modals/stars/chatRefund/ChatRefundModal';
2021
export { default as PriceConfirmModal } from '../components/modals/priceConfirm/PriceConfirmModal';
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
import type { TeactNode } from '../../../lib/teact/teact';
2+
3+
import type { ApiPeer, ApiStarGiftAttributeOriginalDetails } from '../../../api/types';
4+
5+
import { getPeerTitle } from '../../../global/helpers/peers';
6+
import { formatDateTimeToString } from '../../../util/dates/dateFormat';
7+
import { type LangFn } from '../../../util/localization';
8+
import { renderTextWithEntities } from './renderTextWithEntities';
9+
10+
import Link from '../../ui/Link';
11+
12+
type GiftOriginalInfoOptions = {
13+
originalDetails: ApiStarGiftAttributeOriginalDetails;
14+
recipient: ApiPeer;
15+
sender?: ApiPeer;
16+
onOpenChat: (peerId: string) => void;
17+
lang: LangFn;
18+
};
19+
20+
export function renderGiftOriginalInfo({
21+
originalDetails,
22+
recipient,
23+
sender,
24+
onOpenChat,
25+
lang,
26+
}: GiftOriginalInfoOptions): TeactNode | undefined {
27+
const { recipientId, senderId, date, message } = originalDetails;
28+
29+
const formattedDate = formatDateTimeToString(date * 1000, lang.code, true);
30+
const recipientLink = (
31+
<Link onClick={() => onOpenChat(recipientId)} isPrimary>
32+
{getPeerTitle(lang, recipient)}
33+
</Link>
34+
);
35+
36+
if (!sender || senderId === recipientId) {
37+
return message
38+
? lang('GiftInfoPeerOriginalInfoText', {
39+
peer: recipientLink,
40+
text: renderTextWithEntities(message),
41+
date: formattedDate,
42+
}, {
43+
withNodes: true,
44+
})
45+
: lang('GiftInfoPeerOriginalInfo', {
46+
peer: recipientLink,
47+
date: formattedDate,
48+
}, {
49+
withNodes: true,
50+
});
51+
}
52+
53+
const senderLink = (
54+
<Link onClick={() => onOpenChat(sender.id)} isPrimary>
55+
{getPeerTitle(lang, sender)}
56+
</Link>
57+
);
58+
59+
return message
60+
? lang('GiftInfoPeerOriginalInfoTextSender', {
61+
peer: recipientLink,
62+
sender: senderLink,
63+
text: renderTextWithEntities(message),
64+
date: formattedDate,
65+
}, {
66+
withNodes: true,
67+
})
68+
: lang('GiftInfoPeerOriginalInfoSender', {
69+
peer: recipientLink,
70+
date: formattedDate,
71+
sender: senderLink,
72+
}, {
73+
withNodes: true,
74+
});
75+
}

0 commit comments

Comments
 (0)