Skip to content

Commit c4a153a

Browse files
MA-16191: add a platform check
1 parent a42be26 commit c4a153a

File tree

4 files changed

+136
-37
lines changed

4 files changed

+136
-37
lines changed

examples/vk-mini-apps-router-example/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@
88
"@testing-library/user-event": "^14.4.3",
99
"@types/jest": "^29.5.3",
1010
"@types/node": "^20.9.0",
11-
"@types/react": "^18.2.20",
11+
"@types/react": "^18.2.48",
1212
"@types/react-dom": "^18.2.7",
1313
"@vkontakte/icons": "^2.77.0",
1414
"@vkontakte/vk-bridge": "latest",
15-
"@vkontakte/vk-mini-apps-router": "latest",
15+
"@vkontakte/vk-mini-apps-router": "1.4.2",
1616
"@vkontakte/vkui": "^6.0.0",
1717
"react": "^18.2.0",
1818
"react-dom": "^18.2.0",

examples/vk-mini-apps-router-example/yarn.lock

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2253,7 +2253,7 @@
22532253
dependencies:
22542254
"@types/react" "*"
22552255

2256-
"@types/react@*", "@types/react@^18.2.20":
2256+
"@types/react@*":
22572257
version "18.2.20"
22582258
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.20.tgz#1605557a83df5c8a2cc4eeb743b3dfc0eb6aaeb2"
22592259
integrity sha512-WKNtmsLWJM/3D5mG4U84cysVY31ivmyw85dE84fOCk5Hx78wezB/XEjVPWl2JTZ5FkEeaTJf+VgUAUn3PE7Isw==
@@ -2262,6 +2262,15 @@
22622262
"@types/scheduler" "*"
22632263
csstype "^3.0.2"
22642264

2265+
"@types/react@^18.2.48":
2266+
version "18.2.48"
2267+
resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.48.tgz#11df5664642d0bd879c1f58bc1d37205b064e8f1"
2268+
integrity sha512-qboRCl6Ie70DQQG9hhNREz81jqC1cs9EVNcjQ1AU+jH6NFfSAhVVbrrY/+nSF+Bsk4AOwm9Qa61InvMCyV+H3w==
2269+
dependencies:
2270+
"@types/prop-types" "*"
2271+
"@types/scheduler" "*"
2272+
csstype "^3.0.2"
2273+
22652274
22662275
version "1.17.1"
22672276
resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6"
@@ -2467,10 +2476,10 @@
24672476
resolved "https://registry.yarnpkg.com/@vkontakte/vk-bridge/-/vk-bridge-2.9.0.tgz#24aed0217f0c508f4c62ed44fe52ce3fe7f47e53"
24682477
integrity sha512-fyOdtZq+68Jnp8FNmas3fnJ4b1bjc1fmAovl2afV14VeJ1KG1OwoAaE7zpVL4U4VVZJGhhdANxEsc4tBYUSkxA==
24692478

2470-
"@vkontakte/vk-mini-apps-router@latest":
2471-
version "1.3.2"
2472-
resolved "https://registry.yarnpkg.com/@vkontakte/vk-mini-apps-router/-/vk-mini-apps-router-1.3.2.tgz#ce3d1dfe0dfb95c02b8449988ee049573d57a521"
2473-
integrity sha512-X9gDgt9z1ffE2u1tUtCr2cSgB44ld3qave78gDXTBitTpkTZncP/ZyU+6IWWbSxhHwp8qSsUMES+JI2kj83E8A==
2479+
"@vkontakte/vk-mini-apps-router@1.4.2":
2480+
version "1.4.2"
2481+
resolved "https://registry.yarnpkg.com/@vkontakte/vk-mini-apps-router/-/vk-mini-apps-router-1.4.2.tgz#804c8a3906249bc6e9c0d2d597a0409a12fdd88b"
2482+
integrity sha512-yQnCoWDy5rnX+RHhi7iSELu+lJi7O+1KToNwWA+pGblZmPWOQnOnwRNc6R0DO+uvDaMqh6k9NQa2AJvHZNcq3Q==
24742483
dependencies:
24752484
"@remix-run/router" "^1.13.0"
24762485

src/hooks/useEnableSwipeBack.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
11
import { useEffect, useRef } from 'react';
22
import { BridgeService } from '../services/BridgeService';
3+
import {
4+
parseURLSearchParamsForGetLaunchParams,
5+
EGetLaunchParamsResponsePlatforms,
6+
} from '@vkontakte/vk-bridge';
37

48
export function useEnableSwipeBack() {
9+
const { vk_platform } = parseURLSearchParamsForGetLaunchParams(window.location.search);
510
const consumerId = useRef<string | null>(null);
611

712
useEffect(() => {
13+
if (
14+
vk_platform !== EGetLaunchParamsResponsePlatforms.MOBILE_IPHONE &&
15+
vk_platform !== EGetLaunchParamsResponsePlatforms.MOBILE_IPHONE_MESSENGER &&
16+
vk_platform !== EGetLaunchParamsResponsePlatforms.MOBILE_IPAD
17+
) {
18+
return;
19+
}
820
consumerId.current = BridgeService.enableNativeSwipeBack();
921

1022
return () => {

typings/vk-bridge/index.d.ts

Lines changed: 108 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,64 @@
11
declare module '@vkontakte/vk-bridge' {
2+
export enum EGetLaunchParamsResponseLanguages {
3+
RU = 'ru',
4+
UK = 'uk',
5+
UA = 'ua',
6+
EN = 'en',
7+
BE = 'be',
8+
KZ = 'kz',
9+
PT = 'pt',
10+
ES = 'es',
11+
}
12+
13+
export enum EGetLaunchParamsResponseGroupRole {
14+
EDITOR = 'editor',
15+
MEMBER = 'member',
16+
ADMIN = 'admin',
17+
MODER = 'moder',
18+
NONE = 'none',
19+
}
20+
21+
export enum EGetLaunchParamsResponsePlatforms {
22+
DESKTOP_WEB = 'desktop_web',
23+
DESKTOP_WEB_MESSENGER = 'desktop_web_messenger',
24+
DESKTOP_APP_MESSENGER = 'desktop_app_messenger',
25+
MOBILE_WEB = 'mobile_web',
26+
MOBILE_ANDROID = 'mobile_android',
27+
MOBILE_ANDROID_MESSENGER = 'mobile_android_messenger',
28+
MOBILE_IPHONE = 'mobile_iphone',
29+
MOBILE_IPHONE_MESSENGER = 'mobile_iphone_messenger',
30+
MOBILE_IPAD = 'mobile_ipad',
31+
}
32+
33+
export type GetLaunchParamsResponse = {
34+
vk_user_id: number;
35+
vk_app_id: number;
36+
vk_is_app_user: 0 | 1;
37+
vk_are_notifications_enabled: 0 | 1;
38+
vk_language: EGetLaunchParamsResponseLanguages;
39+
vk_ref: string;
40+
vk_access_token_settings: string;
41+
vk_group_id?: number;
42+
vk_viewer_group_role?: EGetLaunchParamsResponseGroupRole;
43+
vk_platform: EGetLaunchParamsResponsePlatforms;
44+
vk_is_favorite: 0 | 1;
45+
vk_ts: number;
46+
sign: string;
47+
};
48+
49+
export interface LaunchParams extends GetLaunchParamsResponse {
50+
vk_chat_id: string;
51+
vk_is_recommended: number;
52+
vk_profile_id: number;
53+
vk_has_profile_button: number;
54+
vk_testing_group_id: number;
55+
odr_enabled: undefined | 1;
56+
}
57+
58+
export declare const parseURLSearchParamsForGetLaunchParams: (
59+
searchParams: string,
60+
) => Partial<LaunchParams>;
61+
262
export type ChangeFragmentResponse = {
363
location: string;
464
};
@@ -26,31 +86,30 @@ declare module '@vkontakte/vk-bridge' {
2686
T extends keyof RequestPropsMap,
2787
R extends string,
2888
F extends string,
29-
> = Record<T, { result: R; failed: F }>;
89+
> = Record<T, { result: R; failed: F }>;
3090
/**
3191
* Map of event names.
3292
*/
33-
export type ReceiveEventMap =
34-
EventReceiveNames<
35-
'VKWebAppSetSwipeSettings',
36-
'VKWebAppSetSwipeSettingsResult',
37-
'VKWebAppSetSwipeSettingsFailed'
38-
> &
93+
export type ReceiveEventMap = EventReceiveNames<
94+
'VKWebAppSetSwipeSettings',
95+
'VKWebAppSetSwipeSettingsResult',
96+
'VKWebAppSetSwipeSettingsFailed'
97+
> &
3998
EventReceiveNames<
4099
'VKWebAppDisableSwipeBack',
41100
'VKWebAppDisableSwipeBackResult',
42101
'VKWebAppDisableSwipeBackFailed'
43-
> &
102+
> &
44103
EventReceiveNames<
45104
'VKWebAppEnableSwipeBack',
46105
'VKWebAppEnableSwipeBackResult',
47106
'VKWebAppEnableSwipeBackFailed'
48-
> &
107+
> &
49108
EventReceiveNames<
50109
'VKWebAppSetLocation',
51110
'VKWebAppSetLocationResult',
52111
'VKWebAppSetLocationFailed'
53-
>;
112+
>;
54113
/**
55114
* Name of a method that can be sent.
56115
*/
@@ -70,15 +129,18 @@ declare module '@vkontakte/vk-bridge' {
70129
/**
71130
* Getter of failed event name of a method.
72131
*/
73-
export type FailedResponseEventName<M extends AnyRequestMethodName> = M extends keyof ReceiveEventMap ? ReceiveEventMap[M]['failed'] : never;
132+
export type FailedResponseEventName<M extends AnyRequestMethodName> =
133+
M extends keyof ReceiveEventMap ? ReceiveEventMap[M]['failed'] : never;
74134
/**
75135
* Getter of result event name of a method.
76136
*/
77-
export type ResultResponseEventName<M extends AnyRequestMethodName> = M extends keyof ReceiveEventMap ? ReceiveEventMap[M]['result'] : never;
137+
export type ResultResponseEventName<M extends AnyRequestMethodName> =
138+
M extends keyof ReceiveEventMap ? ReceiveEventMap[M]['result'] : never;
78139
/**
79140
* Getter of request properties of a method.
80141
*/
81-
export type RequestProps<M extends AnyRequestMethodName = AnyRequestMethodName> = RequestPropsMap[M];
142+
export type RequestProps<M extends AnyRequestMethodName = AnyRequestMethodName> =
143+
RequestPropsMap[M];
82144
/**
83145
* Getter of response data of a method.
84146
*/
@@ -116,19 +178,22 @@ declare module '@vkontakte/vk-bridge' {
116178
/**
117179
* Type of error data
118180
*/
119-
export type ErrorData = {
120-
error_type: 'client_error';
121-
error_data: ErrorDataClientError;
122-
request_id?: number | string;
123-
} | {
124-
error_type: 'api_error';
125-
error_data: ErrorDataAPIError;
126-
request_id?: number | string;
127-
} | {
128-
error_type: 'auth_error';
129-
error_data: ErrorDataAuthError;
130-
request_id?: number | string;
131-
};
181+
export type ErrorData =
182+
| {
183+
error_type: 'client_error';
184+
error_data: ErrorDataClientError;
185+
request_id?: number | string;
186+
}
187+
| {
188+
error_type: 'api_error';
189+
error_data: ErrorDataAPIError;
190+
request_id?: number | string;
191+
}
192+
| {
193+
error_type: 'auth_error';
194+
error_data: ErrorDataAuthError;
195+
request_id?: number | string;
196+
};
132197
/**
133198
* Generic event type for creating event types.
134199
*/
@@ -141,7 +206,10 @@ declare module '@vkontakte/vk-bridge' {
141206
/**
142207
* Type of error event data
143208
*/
144-
export type VKBridgeErrorEvent<M extends AnyReceiveMethodName> = VKBridgeEventBase<M extends AnyRequestMethodName ? FailedResponseEventName<M> : never, ErrorData>;
209+
export type VKBridgeErrorEvent<M extends AnyReceiveMethodName> = VKBridgeEventBase<
210+
M extends AnyRequestMethodName ? FailedResponseEventName<M> : never,
211+
ErrorData
212+
>;
145213
/**
146214
* Type of event that is a response to a request
147215
*/
@@ -157,11 +225,18 @@ declare module '@vkontakte/vk-bridge' {
157225
/**
158226
* Type of result event data
159227
*/
160-
export type VKBridgeResultEvent<M extends AnyReceiveMethodName> = M extends AnyReceiveOnlyMethodName ? VKBridgeReceiveOnlyEvent<M> : M extends AnyIOMethodName ? VKBridgeIOEvent<M> : never;
228+
export type VKBridgeResultEvent<M extends AnyReceiveMethodName> =
229+
M extends AnyReceiveOnlyMethodName
230+
? VKBridgeReceiveOnlyEvent<M>
231+
: M extends AnyIOMethodName
232+
? VKBridgeIOEvent<M>
233+
: never;
161234
/**
162235
* VK Bridge event.
163236
*/
164-
export type VKBridgeEvent<M extends AnyReceiveMethodName> = VKBridgeErrorEvent<M> | VKBridgeResultEvent<M>;
237+
export type VKBridgeEvent<M extends AnyReceiveMethodName> =
238+
| VKBridgeErrorEvent<M>
239+
| VKBridgeResultEvent<M>;
165240
/**
166241
* Type of function that will be subscribed to VK Bridge events.
167242
*/
@@ -173,7 +248,10 @@ declare module '@vkontakte/vk-bridge' {
173248
* @param props Method properties.
174249
* @returns The Promise object with response data.
175250
*/
176-
export type VKBridgeSend = <K extends AnyRequestMethodName>(method: K, props?: RequestProps<K> & RequestIdProp) => Promise<K extends AnyReceiveMethodName ? ReceiveData<K> : void>;
251+
export type VKBridgeSend = <K extends AnyRequestMethodName>(
252+
method: K,
253+
props?: RequestProps<K> & RequestIdProp,
254+
) => Promise<K extends AnyReceiveMethodName ? ReceiveData<K> : void>;
177255
/**
178256
* VK Bridge interface.
179257
*/

0 commit comments

Comments
 (0)