Deep Link: Support settings links (#5914)
This commit is contained in:
parent
42689c546b
commit
b67b8ba533
@ -10,7 +10,7 @@ import { isUsernameValid } from './username';
|
|||||||
export type DeepLinkMethod = 'resolve' | 'login' | 'passport' | 'settings' | 'join' | 'addstickers' | 'addemoji' |
|
export type DeepLinkMethod = 'resolve' | 'login' | 'passport' | 'settings' | 'join' | 'addstickers' | 'addemoji' |
|
||||||
'setlanguage' | 'addtheme' | 'confirmphone' | 'socks' | 'proxy' | 'privatepost' | 'bg' | 'share' | 'msg' | 'msg_url' |
|
'setlanguage' | 'addtheme' | 'confirmphone' | 'socks' | 'proxy' | 'privatepost' | 'bg' | 'share' | 'msg' | 'msg_url' |
|
||||||
'invoice' | 'addlist' | 'boost' | 'giftcode' | 'message' | 'premium_offer' | 'premium_multigift' | 'stars_topup'
|
'invoice' | 'addlist' | 'boost' | 'giftcode' | 'message' | 'premium_offer' | 'premium_multigift' | 'stars_topup'
|
||||||
| 'nft' | 'stars';
|
| 'nft' | 'stars' | 'settings';
|
||||||
|
|
||||||
interface PublicMessageLink {
|
interface PublicMessageLink {
|
||||||
type: 'publicMessageLink';
|
type: 'publicMessageLink';
|
||||||
@ -107,6 +107,11 @@ interface StarsModalLink {
|
|||||||
type: 'stars';
|
type: 'stars';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface SettingsScreenLink {
|
||||||
|
type: 'settings';
|
||||||
|
screen?: 'devices' | 'folders' | 'language' | 'privacy' | 'editProfile' | 'theme';
|
||||||
|
}
|
||||||
|
|
||||||
type DeepLink =
|
type DeepLink =
|
||||||
TelegramPassportLink |
|
TelegramPassportLink |
|
||||||
LoginCodeLink |
|
LoginCodeLink |
|
||||||
@ -121,7 +126,8 @@ type DeepLink =
|
|||||||
PremiumMultigiftLink |
|
PremiumMultigiftLink |
|
||||||
ChatBoostLink |
|
ChatBoostLink |
|
||||||
GiftUniqueLink |
|
GiftUniqueLink |
|
||||||
StarsModalLink;
|
StarsModalLink |
|
||||||
|
SettingsScreenLink;
|
||||||
|
|
||||||
type BuilderParams<T extends DeepLink> = Record<keyof Omit<T, 'type'>, string | undefined>;
|
type BuilderParams<T extends DeepLink> = Record<keyof Omit<T, 'type'>, string | undefined>;
|
||||||
type BuilderReturnType<T extends DeepLink> = T | undefined;
|
type BuilderReturnType<T extends DeepLink> = T | undefined;
|
||||||
@ -254,6 +260,8 @@ function parseTgLink(url: URL) {
|
|||||||
return buildGiftUniqueLink({ slug: queryParams.slug });
|
return buildGiftUniqueLink({ slug: queryParams.slug });
|
||||||
case 'stars':
|
case 'stars':
|
||||||
return { type: 'stars' } satisfies StarsModalLink;
|
return { type: 'stars' } satisfies StarsModalLink;
|
||||||
|
case 'settings':
|
||||||
|
return buildSettingsScreenLink({ screen: pathParams.length === 1 ? pathParams[0] : undefined });
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -461,6 +469,9 @@ function getTgDeepLinkType(
|
|||||||
return 'giftUniqueLink';
|
return 'giftUniqueLink';
|
||||||
case 'stars':
|
case 'stars':
|
||||||
return 'stars';
|
return 'stars';
|
||||||
|
case 'settings': {
|
||||||
|
return 'settings';
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -681,6 +692,37 @@ function buildGiftUniqueLink(params: BuilderParams<GiftUniqueLink>): BuilderRetu
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function buildSettingsScreen(screenParam: string) {
|
||||||
|
switch (screenParam) {
|
||||||
|
case 'devices':
|
||||||
|
return 'devices';
|
||||||
|
case 'folders':
|
||||||
|
return 'folders';
|
||||||
|
case 'language':
|
||||||
|
return 'language';
|
||||||
|
case 'privacy':
|
||||||
|
return 'privacy';
|
||||||
|
case 'edit_profile':
|
||||||
|
return 'editProfile';
|
||||||
|
case 'theme':
|
||||||
|
return 'theme';
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildSettingsScreenLink(params: BuilderParams<SettingsScreenLink>): BuilderReturnType<SettingsScreenLink> {
|
||||||
|
const {
|
||||||
|
screen,
|
||||||
|
} = params;
|
||||||
|
|
||||||
|
return {
|
||||||
|
type: 'settings',
|
||||||
|
screen: screen ? buildSettingsScreen(screen) : undefined,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function buildPremiumReferrerLink(params: BuilderParams<PremiumReferrerLink>): BuilderReturnType<PremiumReferrerLink> {
|
function buildPremiumReferrerLink(params: BuilderParams<PremiumReferrerLink>): BuilderReturnType<PremiumReferrerLink> {
|
||||||
const {
|
const {
|
||||||
referrer,
|
referrer,
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import { getActions } from '../global';
|
|||||||
|
|
||||||
import type { ApiChatType, ApiFormattedText } from '../api/types';
|
import type { ApiChatType, ApiFormattedText } from '../api/types';
|
||||||
import type { DeepLinkMethod } from './deepLinkParser';
|
import type { DeepLinkMethod } from './deepLinkParser';
|
||||||
|
import { LeftColumnContent, SettingsScreens } from '../types';
|
||||||
|
|
||||||
import { API_CHAT_TYPES, RE_TG_LINK } from '../config';
|
import { API_CHAT_TYPES, RE_TG_LINK } from '../config';
|
||||||
import { IS_BAD_URL_PARSER } from './browser/globalEnvironment';
|
import { IS_BAD_URL_PARSER } from './browser/globalEnvironment';
|
||||||
@ -75,6 +76,32 @@ export const processDeepLink = (url: string): boolean => {
|
|||||||
case 'giftUniqueLink':
|
case 'giftUniqueLink':
|
||||||
actions.openUniqueGiftBySlug({ slug: parsedLink.slug });
|
actions.openUniqueGiftBySlug({ slug: parsedLink.slug });
|
||||||
return true;
|
return true;
|
||||||
|
case 'settings':
|
||||||
|
if (!parsedLink.screen) {
|
||||||
|
actions.openLeftColumnContent({ contentKey: LeftColumnContent.Settings });
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
switch (parsedLink.screen) {
|
||||||
|
case 'editProfile':
|
||||||
|
actions.openSettingsScreen({ screen: SettingsScreens.EditProfile });
|
||||||
|
break;
|
||||||
|
case 'language':
|
||||||
|
actions.openSettingsScreen({ screen: SettingsScreens.Language });
|
||||||
|
break;
|
||||||
|
case 'devices':
|
||||||
|
actions.openSettingsScreen({ screen: SettingsScreens.ActiveSessions });
|
||||||
|
break;
|
||||||
|
case 'privacy':
|
||||||
|
actions.openSettingsScreen({ screen: SettingsScreens.Privacy });
|
||||||
|
break;
|
||||||
|
case 'folders':
|
||||||
|
actions.openSettingsScreen({ screen: SettingsScreens.Folders });
|
||||||
|
break;
|
||||||
|
case 'theme':
|
||||||
|
actions.openSettingsScreen({ screen: SettingsScreens.General });
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
case 'stars':
|
case 'stars':
|
||||||
actions.openStarsBalanceModal({});
|
actions.openStarsBalanceModal({});
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user