/
githubmr
/
facebook-react-native
Обзор
Документация
Войти
/
githubmr
/
facebook-react-native
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
main
packages/react-native/ReactCommon/react/renderer/uimanager/AppRegistryBinding.cpp
88 строк
3 KB
Pieter De Baets
Rename SurfaceRegistryBinding to AppRegistryBinding (#48337)
07 янв 2025, 18:40
07 янв 2025, 18:40
afd77d5
Код
Авторство
О чём код?
/* * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ #include "AppRegistryBinding.h" #include <cxxreact/TraceSection.h> #include <react/renderer/uimanager/primitives.h> namespace facebook::react { /* static */ void AppRegistryBinding::startSurface( jsi::Runtime& runtime, SurfaceId surfaceId, const std::string& moduleName, const folly::dynamic& initialProps, DisplayMode displayMode) { TraceSection s("AppRegistryBinding::startSurface"); jsi::Object parameters(runtime); parameters.setProperty(runtime, "rootTag", surfaceId); parameters.setProperty( runtime, "initialProps", jsi::valueFromDynamic(runtime, initialProps)); parameters.setProperty(runtime, "fabric", true); auto global = runtime.global(); auto registry = global.getProperty(runtime, "RN$AppRegistry"); if (!registry.isObject()) { throw std::runtime_error( "AppRegistryBinding::startSurface failed. Global was not installed."); } auto method = std::move(registry).asObject(runtime).getPropertyAsFunction( runtime, "runApplication"); method.call( runtime, {jsi::String::createFromUtf8(runtime, moduleName), std::move(parameters), jsi::Value(runtime, displayModeToInt(displayMode))}); } /* static */ void AppRegistryBinding::setSurfaceProps( jsi::Runtime& runtime, SurfaceId surfaceId, const std::string& moduleName, const folly::dynamic& initialProps, DisplayMode displayMode) { TraceSection s("UIManagerBinding::setSurfaceProps"); jsi::Object parameters(runtime); parameters.setProperty(runtime, "rootTag", surfaceId); parameters.setProperty( runtime, "initialProps", jsi::valueFromDynamic(runtime, initialProps)); parameters.setProperty(runtime, "fabric", true); auto global = runtime.global(); auto registry = global.getProperty(runtime, "RN$AppRegistry"); if (!registry.isObject()) { throw std::runtime_error( "AppRegistryBinding::setSurfaceProps failed. Global was not installed."); } auto method = std::move(registry).asObject(runtime).getPropertyAsFunction( runtime, "setSurfaceProps"); method.call( runtime, {jsi::String::createFromUtf8(runtime, moduleName), std::move(parameters), jsi::Value(runtime, displayModeToInt(displayMode))}); } /* static */ void AppRegistryBinding::stopSurface( jsi::Runtime& runtime, SurfaceId surfaceId) { auto global = runtime.global(); auto stopFunction = global.getProperty(runtime, "RN$stopSurface"); if (!stopFunction.isObject() || !stopFunction.asObject(runtime).isFunction(runtime)) { throw std::runtime_error( "AppRegistryBinding::stopSurface failed. Global was not installed."); } std::move(stopFunction) .asObject(runtime) .asFunction(runtime) .call(runtime, {jsi::Value{surfaceId}}); } } // namespace facebook::react