Перейти к содержимому

Провайдер

VKBridgeConfigProvider — собранная VKUI-оболочка мини-аппа: три провайдера VKUI с дефолтами, вычисленными из моста. Оборачивает приложение целиком, внутри StrictMode и снаружи корневого компонента.

<VKBridgeConfigProvider>
<App />
</VKBridgeConfigProvider>

Внутри провайдер рендерит:

<ConfigProvider /* мостовые дефолты + твои перекрытия */>
<AdaptivityProvider /* transformVKBridgeAdaptivity(useBridgeAdaptivity()) */>
<AppRoot mode="full" safeAreaInsets={insets}>
{children}
</AppRoot>
</AdaptivityProvider>
</ConfigProvider>

Порядок зафиксирован: ConfigProvider → AdaptivityProvider → AppRoot. AppRoot идёт с mode="full" — приложение живёт не в виджете, а на всём экране хоста.

Проп ConfigProvider Источник
colorScheme VKWebAppUpdateConfig + бутстрап VKWebAppGetConfig (useBridgeAppearance)
platform "vkcom", если vk_platform === "desktop_web" в launch params
isWebView bridge.isWebView()
hasCustomPanelHeaderAfter всегда true — угол PanelHeader резервится под контролы хоста
пропсы AdaptivityProvider transformVKBridgeAdaptivity(useBridgeAdaptivity())
AppRoot.safeAreaInsets VKWebAppUpdateInsets и insets конфига через useBridgeInsets

Логика каждого источника — в хуках: провайдер просто собирает их в одно дерево.

Пропсы провайдера — вся поверхность Partial<ConfigProviderProps> плюс children. Явно переданный пропс побеждает вычисленное значение: провайдер раскладывает перекрытия последним, после мостовых дефолтов.

// зафиксировать тему независимо от хоста
<VKBridgeConfigProvider colorScheme="dark">
<App />
</VKBridgeConfigProvider>

Типичное применение: форс темы для вью «настроек», отладочная платформа, locale. Если ничего не передано — работают мостовые дефолты.

  • platform вычисляется только для desktop_web; на остальных платформах остаётся undefined, и VKUI берёт платформу из собственных эвристик.
  • useBridgeAppearance вне песочницы возвращает undefined (см. хуки) — в обычном браузере тему определяет VKUI, если ты не передал colorScheme явно.
  • Вне мини-аппа бутстрап-запрос конфига завершается ошибкой: она попадает в консоль, но не затрагивает приложение.