-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsetVkViewSettings.ts
63 lines (57 loc) · 2.62 KB
/
setVkViewSettings.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import bridge, { ErrorData } from '@vkontakte/vk-bridge';
import {
VkPlatformType,
SetViewSettingsPropsType,
SetViewSettingsResponseType,
} from './types';
/**
* Массив платформ, которые поддерживают view settings.
*
* @constant {VkPlatformType[]}
*/
const VK_PLATFORMS_WITH_VIEW_SETTINGS: VkPlatformType[] = [
'mobile_iphone',
'mobile_ipad',
'mobile_android',
];
/**
* Утилита для установки темы для значков в статус-баре и цвета статус-бара.
*
* @param {SetViewSettingsPropsType} viewSettings Настройки для статус-бара, экшен-бара, навигейшн-бара.
* @param {light | dark} viewSettings.status_bar_style Тема для значков статус-бара. Возможные значения: light — светлая. dark — тёмная.
* @param {string} viewSettings.action_bar_color Цвет экшен-бара в формате HEX-кода (#00ffff). Значение 'none' для прозрачного цвета. Только для Android.
* @param {string} viewSettings.navigation_bar_color Цвет навигационного бара в формате HEX-кода (#00ffff). Только для Android.
* @param {VkPlatformType} platform Текущая платформа, на которой было запущено приложение.
* @returns {Promise<SetViewSettingsResponseType>} Возвращает ответ, полученный на запрос VKWebAppSetViewSettings с переданными параметрами.
*
* @see {@link https://dev.vk.com/bridge/VKWebAppSetViewSettings}
*/
const setVkViewSettings = async (
viewSettings: SetViewSettingsPropsType,
platform: VkPlatformType
): Promise<SetViewSettingsResponseType | undefined> => {
try {
let settingsForCurrentPlatform = { ...viewSettings };
if (
VK_PLATFORMS_WITH_VIEW_SETTINGS.includes(platform) &&
bridge.supports('VKWebAppSetViewSettings')
) {
/**
* Все настройки поддерживаются только на android,
* так что если платформа не android, то используем только цвет status bar
*/
if (platform !== 'mobile_android') {
settingsForCurrentPlatform = {
status_bar_style: viewSettings.status_bar_style,
};
}
return await bridge.send(
'VKWebAppSetViewSettings',
settingsForCurrentPlatform
);
}
} catch (error) {
return error as ErrorData;
}
};
export { VK_PLATFORMS_WITH_VIEW_SETTINGS, setVkViewSettings };