-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Introduce ReactNativeAppBuilder #13368
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from all commits
9921b61
d61fcd8
c5fc079
c9788da
4c0f8a4
05dfe93
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,7 @@ | ||
| { | ||
| "type": "prerelease", | ||
| "comment": "Introduce ReactNativeAppBuilder.idl", | ||
| "packageName": "react-native-windows", | ||
| "email": "10109130+sharath2727@users.noreply.github.com", | ||
| "dependentChangeType": "patch" | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,53 @@ | ||
| #include "pch.h" | ||
| #include "ReactInstanceSettingsBuilder.h" | ||
| #include "ReactInstanceSettingsBuilder.g.cpp" | ||
| #include "ReactInstanceSettings.h" | ||
|
|
||
| namespace winrt::ReactNative { | ||
| using namespace winrt::Microsoft::ReactNative; | ||
| } | ||
|
|
||
| namespace winrt::UI { | ||
| using namespace winrt::Microsoft::UI; | ||
| } | ||
|
|
||
| namespace winrt::Microsoft::ReactNative::implementation { | ||
| ReactInstanceSettingsBuilder::ReactInstanceSettingsBuilder() { | ||
| m_reactInstanceSettings = winrt::make<winrt::ReactNative::implementation::ReactInstanceSettings>(); | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactInstanceSettings ReactInstanceSettingsBuilder::ReactInstanceSettings() { | ||
| return m_reactInstanceSettings; | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactInstanceSettingsBuilder ReactInstanceSettingsBuilder::UseDirectDebugger(bool const &state) { | ||
| m_reactInstanceSettings.UseDirectDebugger(state); | ||
|
|
||
| return *this; | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactInstanceSettingsBuilder ReactInstanceSettingsBuilder::UseDeveloperSupport(bool const &state) { | ||
| m_reactInstanceSettings.UseDeveloperSupport(state); | ||
|
|
||
| return *this; | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactInstanceSettingsBuilder ReactInstanceSettingsBuilder::BundleRootPath(hstring const &path) { | ||
| m_reactInstanceSettings.BundleRootPath(path.c_str()); | ||
|
|
||
| return *this; | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactInstanceSettingsBuilder ReactInstanceSettingsBuilder::JavaScriptBundleFile( | ||
| hstring const &file) { | ||
| m_reactInstanceSettings.JavaScriptBundleFile(file.c_str()); | ||
|
|
||
| return *this; | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactInstanceSettingsBuilder ReactInstanceSettingsBuilder::UseFastRefresh(bool const &state) { | ||
| m_reactInstanceSettings.UseFastRefresh(state); | ||
|
|
||
| return *this; | ||
| } | ||
| } // namespace winrt::Microsoft::ReactNative::implementation |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,22 @@ | ||
| #pragma once | ||
| #include "ReactInstanceSettingsBuilder.g.h" | ||
|
|
||
| namespace winrt::Microsoft::ReactNative::implementation { | ||
| struct ReactInstanceSettingsBuilder : ReactInstanceSettingsBuilderT<ReactInstanceSettingsBuilder> { | ||
| ReactInstanceSettingsBuilder(); | ||
|
|
||
| winrt::Microsoft::ReactNative::ReactInstanceSettings ReactInstanceSettings(); | ||
| winrt::Microsoft::ReactNative::ReactInstanceSettingsBuilder UseDirectDebugger(bool const &state); | ||
| winrt::Microsoft::ReactNative::ReactInstanceSettingsBuilder UseDeveloperSupport(bool const &state); | ||
| winrt::Microsoft::ReactNative::ReactInstanceSettingsBuilder BundleRootPath(hstring const &path); | ||
| winrt::Microsoft::ReactNative::ReactInstanceSettingsBuilder JavaScriptBundleFile(hstring const &file); | ||
| winrt::Microsoft::ReactNative::ReactInstanceSettingsBuilder UseFastRefresh(bool const &state); | ||
|
|
||
| private: | ||
| winrt::Microsoft::ReactNative::ReactInstanceSettings m_reactInstanceSettings{nullptr}; | ||
| }; | ||
| } // namespace winrt::Microsoft::ReactNative::implementation | ||
| namespace winrt::Microsoft::ReactNative::factory_implementation { | ||
| struct ReactInstanceSettingsBuilder | ||
| : ReactInstanceSettingsBuilderT<ReactInstanceSettingsBuilder, implementation::ReactInstanceSettingsBuilder> {}; | ||
| } // namespace winrt::Microsoft::ReactNative::factory_implementation |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,66 @@ | ||
| #include "pch.h" | ||
| #include "ReactNativeAppBuilder.h" | ||
| #include "ReactNativeAppBuilder.g.cpp" | ||
| #include "ReactNativeHost.h" | ||
| #include "winrt/Microsoft.UI.Composition.h" | ||
| #include "winrt/Microsoft.UI.Windowing.h" | ||
| #include "winrt/microsoft.UI.Interop.h" | ||
|
|
||
| namespace winrt::ReactNative { | ||
| using namespace winrt::Microsoft::ReactNative; | ||
| } | ||
|
|
||
| namespace winrt::UI { | ||
| using namespace winrt::Microsoft::UI; | ||
| } | ||
|
|
||
| namespace winrt::Microsoft::ReactNative::implementation { | ||
| ReactNativeAppBuilder::ReactNativeAppBuilder() { | ||
| m_host = winrt::make<winrt::ReactNative::implementation::ReactNativeHost>(); | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactNativeAppBuilder ReactNativeAppBuilder::AddPackageProviders( | ||
| winrt::Windows::Foundation::Collections::IVector<winrt::Microsoft::ReactNative::IReactPackageProvider> const | ||
| &packageProviders) { | ||
| for (auto const &provider : packageProviders) { | ||
| m_host.PackageProviders().Append(provider); | ||
| } | ||
|
|
||
| return *this; | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactNativeAppBuilder ReactNativeAppBuilder::SetReactInstanceSettings( | ||
| winrt::Microsoft::ReactNative::ReactInstanceSettings const &settings) { | ||
| m_host.InstanceSettings(settings); | ||
|
|
||
| return *this; | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactNativeAppBuilder ReactNativeAppBuilder::SetCompositor( | ||
| winrt::Microsoft::UI::Composition::Compositor const &compositor) { | ||
| m_compositor = compositor; | ||
|
|
||
| return *this; | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactNativeAppBuilder ReactNativeAppBuilder::SetAppWindow( | ||
| winrt::Microsoft::UI::Windowing::AppWindow const &appWindow) { | ||
| m_appWindow = appWindow; | ||
|
|
||
| return *this; | ||
| } | ||
|
|
||
| winrt::ReactNative::ReactNativeHost ReactNativeAppBuilder::Start() { | ||
| auto hwnd{winrt::UI::GetWindowFromWindowId(m_appWindow.Id())}; | ||
|
|
||
| winrt::ReactNative::ReactCoreInjection::SetTopLevelWindowId( | ||
| m_host.InstanceSettings().Properties(), reinterpret_cast<uint64_t>(hwnd)); | ||
|
|
||
| winrt::ReactNative::Composition::CompositionUIService::SetCompositor(m_host.InstanceSettings(), m_compositor); | ||
|
|
||
sharath2727 marked this conversation as resolved.
Show resolved
Hide resolved
|
||
| // Start the react-native instance, which will create a JavaScript runtime and load the applications bundle. | ||
| m_host.ReloadInstance(); | ||
|
|
||
| return m_host; | ||
| } | ||
| } // namespace winrt::Microsoft::ReactNative::implementation | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,27 @@ | ||
| #pragma once | ||
| #include "ReactNativeAppBuilder.g.h" | ||
|
|
||
| namespace winrt::Microsoft::ReactNative::implementation { | ||
| struct ReactNativeAppBuilder : ReactNativeAppBuilderT<ReactNativeAppBuilder> { | ||
| ReactNativeAppBuilder(); | ||
|
|
||
| winrt::Microsoft::ReactNative::ReactNativeAppBuilder AddPackageProviders( | ||
| winrt::Windows::Foundation::Collections::IVector<winrt::Microsoft::ReactNative::IReactPackageProvider> const | ||
| &packageProviders); | ||
| winrt::Microsoft::ReactNative::ReactNativeAppBuilder SetReactInstanceSettings( | ||
| winrt::Microsoft::ReactNative::ReactInstanceSettings const &settings); | ||
| winrt::Microsoft::ReactNative::ReactNativeAppBuilder SetCompositor( | ||
| winrt::Microsoft::UI::Composition::Compositor const &compositor); | ||
| winrt::Microsoft::ReactNative::ReactNativeAppBuilder SetAppWindow( | ||
| winrt::Microsoft::UI::Windowing::AppWindow const &appWindow); | ||
| winrt::Microsoft::ReactNative::ReactNativeHost Start(); | ||
|
|
||
| private: | ||
| winrt::Microsoft::UI::Windowing::AppWindow m_appWindow{nullptr}; | ||
| winrt::Microsoft::UI::Composition::Compositor m_compositor{}; | ||
| winrt::Microsoft::ReactNative::ReactNativeHost m_host{}; | ||
| }; | ||
| } // namespace winrt::Microsoft::ReactNative::implementation | ||
| namespace winrt::Microsoft::ReactNative::factory_implementation { | ||
| struct ReactNativeAppBuilder : ReactNativeAppBuilderT<ReactNativeAppBuilder, implementation::ReactNativeAppBuilder> {}; | ||
| } // namespace winrt::Microsoft::ReactNative::factory_implementation |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
|
|
||
| import "ReactNativeHost.idl"; | ||
| import "ReactInstanceSettings.idl"; | ||
| import "IReactPackageProvider.idl"; | ||
|
|
||
| #include "DocString.h" | ||
|
|
||
| namespace Microsoft.ReactNative | ||
| { | ||
| [experimental] | ||
| DOC_STRING("This is the builder for creating ReactInstanceSettings.") | ||
| runtimeclass ReactInstanceSettingsBuilder | ||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Does this class add much value? Seems like it would quickly become basically the same as the existing ReactInstanceSettings.
Contributor
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah I believe it does. It is more of a builder for ReactInstanceSettings. It makes it easy to setup ReactInstanceSettings. Existing ReactInstanceSettings is much more than what this builder is doing. This builder's responsibility is to help setup the settings in one go. |
||
| { | ||
| ReactInstanceSettingsBuilder(); | ||
|
|
||
| // Properties | ||
| ReactInstanceSettings ReactInstanceSettings {get;}; | ||
|
|
||
| // Set Methods | ||
| ReactInstanceSettingsBuilder UseDirectDebugger(Boolean state); | ||
|
|
||
| ReactInstanceSettingsBuilder UseDeveloperSupport(Boolean state); | ||
|
|
||
| ReactInstanceSettingsBuilder BundleRootPath(String path); | ||
|
|
||
| ReactInstanceSettingsBuilder JavaScriptBundleFile(String file); | ||
|
|
||
| ReactInstanceSettingsBuilder UseFastRefresh(Boolean state); | ||
| } | ||
|
|
||
| [experimental] | ||
| DOC_STRING("ReactNativeAppBuilder initializes and manages the ReactNativeHost component for a Win32 Fabric Application.") | ||
| runtimeclass ReactNativeAppBuilder | ||
| { | ||
| ReactNativeAppBuilder(); | ||
|
|
||
| ReactNativeAppBuilder AddPackageProviders(Windows.Foundation.Collections.IVector<Microsoft.ReactNative.IReactPackageProvider> packageProviders); | ||
|
|
||
| ReactNativeAppBuilder SetReactInstanceSettings(ReactInstanceSettings settings); | ||
|
|
||
| ReactNativeAppBuilder SetCompositor(Microsoft.UI.Composition.Compositor compositor); | ||
|
|
||
| ReactNativeAppBuilder SetAppWindow(Microsoft.UI.Windowing.AppWindow appWindow); | ||
|
|
||
| ReactNativeHost Start(); | ||
| } | ||
| } | ||
Uh oh!
There was an error while loading. Please reload this page.