Message: Support links to Premium gifts and Premium modal (#4520)

This commit is contained in:
Alexander Zinchuk 2024-05-03 14:37:55 +02:00
parent bade55602a
commit 3e25fbd9c3
2 changed files with 59 additions and 2 deletions

View File

@ -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<T extends DeepLink> = Record<keyof Omit<T, 'type'>, string | undefined>;
type BuilderReturnType<T extends DeepLink> = 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<BusinessChatLink>): Builder
};
}
function buildPremiumReferrerLink(params: BuilderParams<PremiumReferrerLink>): BuilderReturnType<PremiumReferrerLink> {
const {
referrer,
} = params;
if (!referrer) {
return undefined;
}
return {
type: 'premiumReferrerLink',
referrer,
};
}
function buildPremiumMultigiftLink(params: BuilderParams<PremiumMultigiftLink>):
BuilderReturnType<PremiumMultigiftLink> {
const {
referrer,
} = params;
if (!referrer) {
return undefined;
}
return {
type: 'premiumMultigiftLink',
referrer,
};
}
function isNumber(s: string) {
return /^-?\d+$/.test(s);
}

View File

@ -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;
}