@alfalab/bridge-to-native 0.0.7-beta-11d7ff7 → 0.0.7-beta-5df3687
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/constants.d.ts +1 -0
- package/constants.js +2 -1
- package/index.d.ts +2 -2
- package/native-navigation-and-title.d.ts +12 -4
- package/native-navigation-and-title.js +28 -6
- package/package.json +1 -1
- package/types.d.ts +2 -0
package/constants.d.ts
CHANGED
package/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.nativeFeaturesFromVersion = exports.versionToIosAppId = exports.PREVIOUS_NATIVE_NAVIGATION_AND_TITLE_STATE_STORAGE_KEY = exports.PREVIOUS_B2N_STATE_STORAGE_KEY = exports.CLOSE_WEBVIEW_SEARCH_VALUE = exports.CLOSE_WEBVIEW_SEARCH_KEY = void 0;
|
|
3
|
+
exports.DEEP_LINK_PATTERN = exports.nativeFeaturesFromVersion = exports.versionToIosAppId = exports.PREVIOUS_NATIVE_NAVIGATION_AND_TITLE_STATE_STORAGE_KEY = exports.PREVIOUS_B2N_STATE_STORAGE_KEY = exports.CLOSE_WEBVIEW_SEARCH_VALUE = exports.CLOSE_WEBVIEW_SEARCH_KEY = void 0;
|
|
4
4
|
exports.CLOSE_WEBVIEW_SEARCH_KEY = 'closeWebView';
|
|
5
5
|
exports.CLOSE_WEBVIEW_SEARCH_VALUE = 'true';
|
|
6
6
|
exports.PREVIOUS_B2N_STATE_STORAGE_KEY = 'previousBridgeToNativeState';
|
|
@@ -25,3 +25,4 @@ exports.nativeFeaturesFromVersion = {
|
|
|
25
25
|
geolocation: { fromVersion: '0.0.0' },
|
|
26
26
|
},
|
|
27
27
|
};
|
|
28
|
+
exports.DEEP_LINK_PATTERN = /^(\/|\x61\x6c\x66\x61\x62\x61\x6e\x6b:\/{3}dashboard\/|\x61\x6c\x66\x61\x62\x61\x6e\x6b:\/{3}|\x61\x6c\x66\x61\x62\x61\x6e\x6b:\/{2}|https:\/{2}\x6f\x6e\x6c\x69\x6e\x65\x2e\x61\x6c\x66\x61\x62\x61\x6e\x6b\x2e\x72\x75\/)/;
|
package/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { NativeFallbacks } from './native-fallbacks';
|
|
2
|
-
import {
|
|
3
|
-
import type { Environment, NativeFeatureKey, NativeParams } from './types';
|
|
2
|
+
import { NativeNavigationAndTitle } from './native-navigation-and-title';
|
|
3
|
+
import type { Environment, HandleRedirect, NativeFeatureKey, NativeParams } from './types';
|
|
4
4
|
declare type Theme = 'light' | 'dark';
|
|
5
5
|
/**
|
|
6
6
|
* Этот класс — абстракция для связи веб приложения с нативом и предназначен ТОЛЬКО
|
|
@@ -1,15 +1,14 @@
|
|
|
1
|
+
import { HandleRedirect } from './types';
|
|
1
2
|
import { BridgeToNative } from '.';
|
|
2
|
-
export declare type HandleRedirect = (appName: string, path?: string, params?: Record<string, string>) => void;
|
|
3
3
|
/**
|
|
4
|
-
* Класс, отвечающий за взаимодействие с нативными элементами в приложении – заголовком
|
|
5
|
-
* и нативной кнопкой назад.
|
|
4
|
+
* Класс, отвечающий за взаимодействие с нативными элементами в приложении – заголовком и нативной кнопкой назад.
|
|
6
5
|
*/
|
|
7
6
|
export declare class NativeNavigationAndTitle {
|
|
8
7
|
private b2n;
|
|
9
8
|
private nativeHistoryStack;
|
|
10
9
|
private numOfBackSteps;
|
|
11
10
|
private lastSetPageSettingsParams;
|
|
12
|
-
private readonly
|
|
11
|
+
private readonly _handleWindowRedirect;
|
|
13
12
|
constructor(b2n: BridgeToNative, pageId: number | null, initialNativeTitle: string | undefined, handleWindowRedirect: HandleRedirect);
|
|
14
13
|
/**
|
|
15
14
|
* Метод, вызывающий `history.back()` или закрывающий вебвью, если нет записей
|
|
@@ -67,6 +66,15 @@ export declare class NativeNavigationAndTitle {
|
|
|
67
66
|
* Безопасный способ для перезагрузки страницы.
|
|
68
67
|
*/
|
|
69
68
|
pseudoReloadPage(): void;
|
|
69
|
+
/**
|
|
70
|
+
* Вызывает обработчик deeplinks в нативе (АМ) и передает туда переданный deeplink.
|
|
71
|
+
* На Android текущее webview будет закрыто из-за технических особенностей.
|
|
72
|
+
* На IOS нативная фича открывается в следующем по стеку экране и при выходе из нее пользователь вернется обратно в webview.
|
|
73
|
+
* На IOS есть возможность закрыть webview перед открытием нативной фичи, передав второй параметр closeIOSWebviewBeforeCallNativeDeeplinkHandler = true
|
|
74
|
+
* @param deeplink диплинк на нативную АМ фичу в AM
|
|
75
|
+
* @param [closeIOSWebviewBeforeCallNativeDeeplinkHandler = false] закрыть текущее webview после открытия нативной фичи (применимо только для IOS на Android по техническим причинам webview всегда будет закрываться)
|
|
76
|
+
*/
|
|
77
|
+
handleNativeDeeplink(deeplink: string, closeIOSWebviewBeforeCallNativeDeeplinkHandler?: boolean): void;
|
|
70
78
|
/**
|
|
71
79
|
* Метод для сохранения текущего состояния NativeNavigationAndTitle в sessionStorage.
|
|
72
80
|
*/
|
|
@@ -4,8 +4,7 @@ exports.NativeNavigationAndTitle = void 0;
|
|
|
4
4
|
const constants_1 = require("./constants");
|
|
5
5
|
const utils_1 = require("./utils");
|
|
6
6
|
/**
|
|
7
|
-
* Класс, отвечающий за взаимодействие с нативными элементами в приложении – заголовком
|
|
8
|
-
* и нативной кнопкой назад.
|
|
7
|
+
* Класс, отвечающий за взаимодействие с нативными элементами в приложении – заголовком и нативной кнопкой назад.
|
|
9
8
|
*/
|
|
10
9
|
class NativeNavigationAndTitle {
|
|
11
10
|
constructor(b2n, pageId, initialNativeTitle = '', handleWindowRedirect) {
|
|
@@ -16,7 +15,7 @@ class NativeNavigationAndTitle {
|
|
|
16
15
|
// Просто, чтобы не слать одинаковые сигналы в приложение.
|
|
17
16
|
this.lastSetPageSettingsParams = '';
|
|
18
17
|
this.handleBack = this.handleBack.bind(this);
|
|
19
|
-
this.
|
|
18
|
+
this._handleWindowRedirect = handleWindowRedirect;
|
|
20
19
|
const previousState = !!sessionStorage.getItem(constants_1.PREVIOUS_NATIVE_NAVIGATION_AND_TITLE_STATE_STORAGE_KEY);
|
|
21
20
|
if (pageId) {
|
|
22
21
|
this.supportSharedSession(pageId, initialNativeTitle);
|
|
@@ -70,11 +69,11 @@ class NativeNavigationAndTitle {
|
|
|
70
69
|
*/
|
|
71
70
|
handleRedirect(pageTitleOrPath, appName, path, params) {
|
|
72
71
|
if (appName) {
|
|
73
|
-
this.
|
|
72
|
+
this._handleWindowRedirect(appName, path, params);
|
|
74
73
|
}
|
|
75
74
|
else {
|
|
76
75
|
const { appName: extractedAppName, path: extractedPath, query: extractedQuery, } = (0, utils_1.extractAppNameRouteAndQuery)(pageTitleOrPath);
|
|
77
|
-
this.
|
|
76
|
+
this._handleWindowRedirect(extractedAppName, extractedPath, extractedQuery);
|
|
78
77
|
}
|
|
79
78
|
const title = appName ? pageTitleOrPath : '';
|
|
80
79
|
this.nativeHistoryStack.push(title);
|
|
@@ -111,7 +110,8 @@ class NativeNavigationAndTitle {
|
|
|
111
110
|
*/
|
|
112
111
|
navigateInsideASharedSession(url) {
|
|
113
112
|
if (this.b2n.environment === 'ios') {
|
|
114
|
-
|
|
113
|
+
const nativeDeeplink = `/webFeature?type=recommendation&url=${encodeURIComponent(url)}`;
|
|
114
|
+
this.handleNativeDeeplink(nativeDeeplink);
|
|
115
115
|
return;
|
|
116
116
|
}
|
|
117
117
|
// В b2n этот метод отмечен модификатором доступа private, но тут его нужно вызвать
|
|
@@ -130,6 +130,28 @@ class NativeNavigationAndTitle {
|
|
|
130
130
|
this.handleRedirect(this.b2n._blankPagePath);
|
|
131
131
|
this.goBack();
|
|
132
132
|
}
|
|
133
|
+
/**
|
|
134
|
+
* Вызывает обработчик deeplinks в нативе (АМ) и передает туда переданный deeplink.
|
|
135
|
+
* На Android текущее webview будет закрыто из-за технических особенностей.
|
|
136
|
+
* На IOS нативная фича открывается в следующем по стеку экране и при выходе из нее пользователь вернется обратно в webview.
|
|
137
|
+
* На IOS есть возможность закрыть webview перед открытием нативной фичи, передав второй параметр closeIOSWebviewBeforeCallNativeDeeplinkHandler = true
|
|
138
|
+
* @param deeplink диплинк на нативную АМ фичу в AM
|
|
139
|
+
* @param [closeIOSWebviewBeforeCallNativeDeeplinkHandler = false] закрыть текущее webview после открытия нативной фичи (применимо только для IOS на Android по техническим причинам webview всегда будет закрываться)
|
|
140
|
+
*/
|
|
141
|
+
handleNativeDeeplink(deeplink, closeIOSWebviewBeforeCallNativeDeeplinkHandler = false) {
|
|
142
|
+
const clearedDeeplinkPath = deeplink.replace(constants_1.DEEP_LINK_PATTERN, '');
|
|
143
|
+
if (this.b2n.environment === 'ios') {
|
|
144
|
+
if (closeIOSWebviewBeforeCallNativeDeeplinkHandler) {
|
|
145
|
+
this.b2n.closeWebview();
|
|
146
|
+
setTimeout(() => window.location.replace(`${this.b2n.iosAppId}://${clearedDeeplinkPath}`), 0);
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
window.location.replace(`${this.b2n.iosAppId}://${clearedDeeplinkPath}`);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
window.location.replace(`alfabank://${clearedDeeplinkPath}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
133
155
|
/**
|
|
134
156
|
* Метод для сохранения текущего состояния NativeNavigationAndTitle в sessionStorage.
|
|
135
157
|
*/
|
package/package.json
CHANGED
package/types.d.ts
CHANGED
|
@@ -29,4 +29,6 @@ export declare type PreviousNativeNavigationAndTitleState = {
|
|
|
29
29
|
nativeHistoryStack: string[];
|
|
30
30
|
title: string;
|
|
31
31
|
};
|
|
32
|
+
export declare type SyncPurpose = 'initialization' | 'navigation' | 'title-replacing';
|
|
33
|
+
export declare type HandleRedirect = (appName: string, path?: string, params?: Record<string, string>) => void;
|
|
32
34
|
export {};
|