From 3e25fbd9c3e950170f0f63bd58c07d305a23dd9d Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 3 May 2024 14:37:55 +0200 Subject: [PATCH] Message: Support links to Premium gifts and Premium modal (#4520) --- src/util/deepLinkParser.ts | 55 ++++++++++++++++++++++++++++++++++++-- src/util/deeplink.ts | 6 +++++ 2 files changed, 59 insertions(+), 2 deletions(-) diff --git a/src/util/deepLinkParser.ts b/src/util/deepLinkParser.ts index 8328477bc..43100f6df 100644 --- a/src/util/deepLinkParser.ts +++ b/src/util/deepLinkParser.ts @@ -6,7 +6,7 @@ import { isUsernameValid } from './username'; export type DeepLinkMethod = 'resolve' | 'login' | 'passport' | 'settings' | 'join' | 'addstickers' | 'addemoji' | 'setlanguage' | 'addtheme' | 'confirmphone' | 'socks' | 'proxy' | 'privatepost' | 'bg' | 'share' | 'msg' | 'msg_url' | -'invoice' | 'addlist' | 'boost' | 'giftcode' | 'message'; +'invoice' | 'addlist' | 'boost' | 'giftcode' | 'message' | 'premium_offer' | 'premium_multigift'; interface PublicMessageLink { type: 'publicMessageLink'; @@ -71,6 +71,16 @@ interface BusinessChatLink { slug: string; } +interface PremiumReferrerLink { + type: 'premiumReferrerLink'; + referrer: string; +} + +interface PremiumMultigiftLink { + type: 'premiumMultigiftLink'; + referrer: string; +} + type DeepLink = TelegramPassportLink | LoginCodeLink | @@ -79,7 +89,9 @@ type DeepLink = ShareLink | ChatFolderLink | PublicUsernameOrBotLink | - BusinessChatLink; + BusinessChatLink | + PremiumReferrerLink | + PremiumMultigiftLink; type BuilderParams = Record, string | undefined>; type BuilderReturnType = T | undefined; @@ -191,6 +203,10 @@ function parseTgLink(url: URL) { }); case 'businessChatLink': return buildBusinessChatLink({ slug: queryParams.slug }); + case 'premiumReferrerLink': + return buildPremiumReferrerLink({ referrer: queryParams.ref }); + case 'premiumMultigiftLink': + return buildPremiumMultigiftLink({ referrer: queryParams.ref }); default: break; } @@ -364,6 +380,10 @@ function getTgDeepLinkType( return 'telegramPassportLink'; case 'message': return 'businessChatLink'; + case 'premium_offer': + return 'premiumReferrerLink'; + case 'premium_multigift': + return 'premiumMultigiftLink'; default: break; } @@ -532,6 +552,37 @@ function buildBusinessChatLink(params: BuilderParams): Builder }; } +function buildPremiumReferrerLink(params: BuilderParams): BuilderReturnType { + const { + referrer, + } = params; + + if (!referrer) { + return undefined; + } + + return { + type: 'premiumReferrerLink', + referrer, + }; +} + +function buildPremiumMultigiftLink(params: BuilderParams): +BuilderReturnType { + const { + referrer, + } = params; + + if (!referrer) { + return undefined; + } + + return { + type: 'premiumMultigiftLink', + referrer, + }; +} + function isNumber(s: string) { return /^-?\d+$/.test(s); } diff --git a/src/util/deeplink.ts b/src/util/deeplink.ts index e9ed4180c..a75c107d7 100644 --- a/src/util/deeplink.ts +++ b/src/util/deeplink.ts @@ -32,6 +32,12 @@ export const processDeepLink = (url: string): boolean => { slug: parsedLink.slug, }); return true; + case 'premiumReferrerLink': + actions.openPremiumModal(); + return true; + case 'premiumMultigiftLink': + actions.openPremiumGiftingModal(); + return true; default: break; }