Skip to content

Commit 64a9e79

Browse files
committed
Add ModalScreenViewManager and ScreenStackHeaderSubview to Windows Native UI Components
1 parent 77df570 commit 64a9e79

11 files changed

Lines changed: 247 additions & 2 deletions
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
#include "pch.h"
2+
#include "ModalScreenViewManager.h"
3+
#include "JSValueXaml.h"
4+
#include "NativeModules.h"
5+
#include "ModalScreen.h"
6+
7+
namespace winrt {
8+
using namespace Microsoft::ReactNative;
9+
using namespace Windows::Foundation;
10+
using namespace Windows::Foundation::Collections;
11+
using namespace Windows::UI;
12+
using namespace Windows::UI::Xaml;
13+
using namespace Windows::UI::Xaml::Controls;
14+
} // namespace winrt
15+
16+
namespace winrt::RNScreens::implementation {
17+
// IViewManager
18+
winrt::hstring ModalScreenViewManager::Name() noexcept {
19+
return L"RNSModalScreen";
20+
}
21+
22+
23+
} // namespace winrt::RNScreens::implementation
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
#pragma once
2+
#include "NativeModules.h"
3+
#include "winrt/Microsoft.ReactNative.h"
4+
#include "ScreenViewManager.h"
5+
6+
namespace winrt::RNScreens::implementation {
7+
8+
class ModalScreenViewManager : public ScreenViewManager {
9+
public:
10+
ModalScreenViewManager() = default;
11+
virtual winrt::hstring Name() noexcept;
12+
};
13+
} // namespace winrt::RNScreens::implementation

windows/RNScreens/RNScreens.vcxproj

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,8 @@
122122
<ClInclude Include="ScreenContainerViewManager.h" />
123123
<ClInclude Include="ScreenStack.h" />
124124
<ClInclude Include="ScreenStackHeaderConfigViewManager.h" />
125+
<ClInclude Include="ScreenStackHeaderSubviewViewManager.h" />
126+
<ClInclude Include="ModalScreenViewManager.h" />
125127
<ClInclude Include="ScreenViewManager.h" />
126128
<ClInclude Include="RNScreens.h">
127129
<DependentUpon>RNScreens.idl</DependentUpon>
@@ -133,6 +135,7 @@
133135
<DependentUpon>RNScreens.idl</DependentUpon>
134136
</ClCompile>
135137
<ClInclude Include="ScreenStackHeaderConfig.h" />
138+
<ClInclude Include="ScreenStackHeaderSubview.h" />
136139
<ClInclude Include="ScreenStackViewManager.h" />
137140
</ItemGroup>
138141
<ItemGroup>
@@ -144,12 +147,15 @@
144147
<ClCompile Include="ScreenContainerViewManager.cpp" />
145148
<ClCompile Include="ScreenStack.cpp" />
146149
<ClCompile Include="ScreenStackHeaderConfigViewManager.cpp" />
150+
<ClCompile Include="ScreenStackHeaderSubviewViewManager.cpp" />
151+
<ClCompile Include="ModalScreenViewManager.cpp" />
147152
<ClCompile Include="ScreenViewManager.cpp" />
148153
<ClCompile Include="ReactPackageProvider.cpp">
149154
<DependentUpon>ReactPackageProvider.idl</DependentUpon>
150155
</ClCompile>
151156
<ClCompile Include="$(GeneratedFilesDir)module.g.cpp" />
152157
<ClCompile Include="ScreenStackHeaderConfig.cpp" />
158+
<ClCompile Include="ScreenStackHeaderSubview.cpp" />
153159
<ClCompile Include="ScreenStackViewManager.cpp" />
154160
</ItemGroup>
155161
<ItemGroup>

windows/RNScreens/RNScreens.vcxproj.filters

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,11 @@
1717
<ClCompile Include="RNScreens.cpp" />
1818
<ClCompile Include="Screen.cpp" />
1919
<ClCompile Include="ScreenStackHeaderConfigViewManager.cpp" />
20+
<ClCompile Include="ScreenStackHeaderSubviewViewManager.cpp" />
21+
<ClCompile Include="ModalScreenViewManager.cpp" />
2022
<ClCompile Include="ScreenViewManager.cpp" />
2123
<ClCompile Include="ScreenStackHeaderConfig.cpp" />
24+
<ClCompile Include="ScreenStackHeaderSubview.cpp" />
2225
<ClCompile Include="ScreenStackViewManager.cpp" />
2326
<ClCompile Include="ScreenStack.cpp" />
2427
<ClCompile Include="ScreenContainerViewManager.cpp" />
@@ -31,8 +34,11 @@
3134
<ClInclude Include="RNScreens.h" />
3235
<ClInclude Include="Screen.h" />
3336
<ClInclude Include="ScreenStackHeaderConfigViewManager.h" />
37+
<ClInclude Include="ScreenStackHeaderSubviewViewManager.h" />
38+
<ClInclude Include="ModalScreenViewManager.h" />
3439
<ClInclude Include="ScreenViewManager.h" />
3540
<ClInclude Include="ScreenStackHeaderConfig.h" />
41+
<ClInclude Include="ScreenStackHeaderSubview.h" />
3642
<ClInclude Include="ScreenStackViewManager.h" />
3743
<ClInclude Include="ScreenStack.h" />
3844
<ClInclude Include="ScreenContainer.h" />

windows/RNScreens/ReactPackageProvider.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
#include "ScreenStackHeaderConfigViewManager.h"
99
#include "ScreenStackViewManager.h"
1010
#include "ScreenViewManager.h"
11+
#include "ScreenStackHeaderSubviewViewManager.h"
12+
#include "ModalScreenViewManager.h"
1113

1214
using namespace winrt::Microsoft::ReactNative;
1315

@@ -17,14 +19,25 @@ void ReactPackageProvider::CreatePackage(
1719
packageBuilder.AddViewManager(L"RNScreensViewManager", []() {
1820
return winrt::make<ScreenViewManager>();
1921
});
22+
2023
packageBuilder.AddViewManager(L"RNScreensStackHeaderConfigViewManager", []() {
2124
return winrt::make<ScreenStackHeaderConfigViewManager>();
2225
});
26+
2327
packageBuilder.AddViewManager(L"RNSScreenStackViewManager", []() {
2428
return winrt::make<ScreenStackViewManager>();
2529
});
30+
2631
packageBuilder.AddViewManager(L"RNSScreenContainerViewManager", []() {
2732
return winrt::make<ScreenContainerViewManager>();
2833
});
34+
35+
packageBuilder.AddViewManager(L"RNSScreenStackHeaderSubviewViewManager", [] () {
36+
return winrt::make<ScreenStackHeaderSubviewViewManager>();
37+
});
38+
39+
packageBuilder.AddViewManager(L"RNSModalScreenViewManager", [] () {
40+
return winrt::make<ModalScreenViewManager>();
41+
});
2942
}
3043
} // namespace winrt::RNScreens::implementation

windows/RNScreens/Screen.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
namespace winrt::RNScreens::implementation {
44

5-
enum class StackPresentation { PUSH, MODAL, TRANSPARENT_MODAL };
5+
enum class StackPresentation { PUSH, MODAL, TRANSPARENT_MODAL, FORM_SHEET };
66

77
enum class StackAnimation {
88
DEFAULT,
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
#include "pch.h"
2+
#include "ScreenStackHeaderSubview.h"
3+
#include "JSValueXaml.h"
4+
#include "NativeModules.h"
5+
6+
namespace winrt {
7+
using namespace Microsoft::ReactNative;
8+
using namespace Windows::Foundation;
9+
using namespace Windows::Foundation::Collections;
10+
using namespace Windows::UI;
11+
using namespace Windows::UI::Xaml;
12+
using namespace Windows::UI::Xaml::Controls;
13+
} // namespace winrt
14+
15+
namespace winrt::RNScreens::implementation {
16+
ScreenStackHeaderSubview::ScreenStackHeaderSubview(
17+
winrt::Microsoft::ReactNative::IReactContext reactContext)
18+
: m_reactContext(reactContext) {}
19+
} // namespace winrt::RNScreens::implementation
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#pragma once
2+
3+
namespace winrt::RNScreens::implementation {
4+
class ScreenStackHeaderSubview
5+
: public winrt::Windows::UI::Xaml::Controls::StackPanelT<
6+
ScreenStackHeaderSubview> {
7+
public:
8+
ScreenStackHeaderSubview(
9+
winrt::Microsoft::ReactNative::IReactContext m_reactContext);
10+
11+
private:
12+
winrt::Microsoft::ReactNative::IReactContext m_reactContext{nullptr};
13+
};
14+
} // namespace winrt::RNScreens::implementation
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
#include "pch.h"
2+
#include "ScreenStackHeaderSubviewViewManager.h"
3+
#include "JSValueXaml.h"
4+
#include "NativeModules.h"
5+
#include "ScreenStackHeaderSubview.h"
6+
7+
namespace winrt {
8+
using namespace Microsoft::ReactNative;
9+
using namespace Windows::Foundation;
10+
using namespace Windows::Foundation::Collections;
11+
using namespace Windows::UI;
12+
using namespace Windows::UI::Xaml;
13+
using namespace Windows::UI::Xaml::Controls;
14+
} // namespace winrt
15+
16+
namespace winrt::RNScreens::implementation {
17+
// IViewManager
18+
winrt::hstring ScreenStackHeaderSubviewViewManager::Name() noexcept {
19+
return L"RNSScreenStackHeaderSubview";
20+
}
21+
22+
winrt::FrameworkElement
23+
ScreenStackHeaderSubviewViewManager::CreateView() noexcept {
24+
return winrt::make<ScreenStackHeaderSubview>(m_reactContext);
25+
}
26+
27+
// IViewManagerRequiresNativeLayout
28+
bool ScreenStackHeaderSubviewViewManager::RequiresNativeLayout() {
29+
return true;
30+
}
31+
32+
// IViewManagerWithReactContext
33+
winrt::IReactContext
34+
ScreenStackHeaderSubviewViewManager::ReactContext() noexcept {
35+
return m_reactContext;
36+
}
37+
38+
void ScreenStackHeaderSubviewViewManager::ReactContext(
39+
IReactContext reactContext) noexcept {
40+
m_reactContext = reactContext;
41+
}
42+
43+
// IViewManagerWithNativeProperties
44+
IMapView<hstring, ViewManagerPropertyType>
45+
ScreenStackHeaderSubviewViewManager::NativeProps() noexcept {
46+
auto nativeProps =
47+
winrt::single_threaded_map<hstring, ViewManagerPropertyType>();
48+
return nativeProps.GetView();
49+
}
50+
51+
void ScreenStackHeaderSubviewViewManager::UpdateProperties(
52+
FrameworkElement const &view,
53+
IJSValueReader const &propertyMapReader) noexcept {
54+
(void)view;
55+
const JSValueObject &propertyMap = JSValue::ReadObjectFrom(propertyMapReader);
56+
for (auto const &pair : propertyMap) {
57+
auto const &propertyName = pair.first;
58+
auto const &propertyValue = pair.second;
59+
(void)propertyName;
60+
(void)propertyValue;
61+
}
62+
}
63+
64+
// IViewManagerWithExportedEventTypeConstants
65+
ConstantProviderDelegate ScreenStackHeaderSubviewViewManager::
66+
ExportedCustomBubblingEventTypeConstants() noexcept {
67+
return nullptr;
68+
}
69+
70+
ConstantProviderDelegate ScreenStackHeaderSubviewViewManager::
71+
ExportedCustomDirectEventTypeConstants() noexcept {
72+
return nullptr;
73+
}
74+
75+
// IViewManagerWithCommands
76+
IVectorView<hstring> ScreenStackHeaderSubviewViewManager::Commands() noexcept {
77+
auto commands = winrt::single_threaded_vector<hstring>();
78+
return commands.GetView();
79+
}
80+
81+
void ScreenStackHeaderSubviewViewManager::DispatchCommand(
82+
FrameworkElement const &view,
83+
winrt::hstring const &commandId,
84+
winrt::IJSValueReader const &commandArgsReader) noexcept {
85+
(void)view;
86+
(void)commandId;
87+
(void)commandArgsReader;
88+
}
89+
} // namespace winrt::RNScreens::implementation
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#pragma once
2+
#include "NativeModules.h"
3+
#include "winrt/Microsoft.ReactNative.h"
4+
5+
namespace winrt::RNScreens::implementation {
6+
7+
class ScreenStackHeaderSubviewViewManager
8+
: public winrt::implements<
9+
ScreenStackHeaderSubviewViewManager,
10+
winrt::Microsoft::ReactNative::IViewManager,
11+
winrt::Microsoft::ReactNative::IViewManagerRequiresNativeLayout,
12+
winrt::Microsoft::ReactNative::IViewManagerWithReactContext,
13+
winrt::Microsoft::ReactNative::IViewManagerWithNativeProperties,
14+
winrt::Microsoft::ReactNative::
15+
IViewManagerWithExportedEventTypeConstants,
16+
winrt::Microsoft::ReactNative::IViewManagerWithCommands> {
17+
public:
18+
ScreenStackHeaderSubviewViewManager() = default;
19+
20+
// IViewManager
21+
winrt::hstring Name() noexcept;
22+
winrt::Windows::UI::Xaml::FrameworkElement CreateView() noexcept;
23+
24+
// IViewManagerRequiresNativeLayout
25+
bool RequiresNativeLayout();
26+
27+
// IViewManagerWithReactContext
28+
winrt::Microsoft::ReactNative::IReactContext ReactContext() noexcept;
29+
void ReactContext(
30+
winrt::Microsoft::ReactNative::IReactContext reactContext) noexcept;
31+
32+
// IViewManagerWithNativeProperties
33+
winrt::Windows::Foundation::Collections::IMapView<
34+
winrt::hstring,
35+
winrt::Microsoft::ReactNative::ViewManagerPropertyType>
36+
NativeProps() noexcept;
37+
38+
void UpdateProperties(
39+
winrt::Windows::UI::Xaml::FrameworkElement const &view,
40+
winrt::Microsoft::ReactNative::IJSValueReader const
41+
&propertyMapReader) noexcept;
42+
43+
// IViewManagerWithExportedEventTypeConstants
44+
winrt::Microsoft::ReactNative::ConstantProviderDelegate
45+
ExportedCustomBubblingEventTypeConstants() noexcept;
46+
winrt::Microsoft::ReactNative::ConstantProviderDelegate
47+
ExportedCustomDirectEventTypeConstants() noexcept;
48+
49+
// IViewManagerWithCommands
50+
winrt::Windows::Foundation::Collections::IVectorView<winrt::hstring>
51+
Commands() noexcept;
52+
53+
void DispatchCommand(
54+
winrt::Windows::UI::Xaml::FrameworkElement const &view,
55+
winrt::hstring const &commandId,
56+
winrt::Microsoft::ReactNative::IJSValueReader const
57+
&commandArgsReader) noexcept;
58+
59+
private:
60+
winrt::Microsoft::ReactNative::IReactContext m_reactContext{nullptr};
61+
};
62+
} // namespace winrt::RNScreens::implementation

0 commit comments

Comments
 (0)