react-native-navigation 8.1.0-alpha01 → 8.1.0-rc01-snapshot.1685

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (185) hide show
  1. package/autolink/postlink/__snapshots__/appDelegateLinker.test.js.snap +12 -12
  2. package/index.e2e.js +2 -1
  3. package/lib/Mock/Components/ComponentScreen.tsx +2 -1
  4. package/lib/Mock/Components/LayoutComponent.tsx +9 -0
  5. package/lib/Mock/Components/SideMenu.tsx +27 -0
  6. package/lib/Mock/Layouts/BottomTabsNode.ts +4 -2
  7. package/lib/Mock/Layouts/LayoutNodeFactory.ts +14 -1
  8. package/lib/Mock/Layouts/ParentNode.ts +4 -0
  9. package/lib/Mock/Layouts/SideMenu.ts +87 -0
  10. package/lib/Mock/Stores/LayoutStore.ts +42 -10
  11. package/lib/Mock/actions/layoutActions.ts +11 -0
  12. package/lib/Mock/mocks/NativeCommandsSender.tsx +1 -0
  13. package/lib/android/app/build.gradle +22 -125
  14. package/lib/android/app/src/main/java/com/reactnativenavigation/FeatureToggles.kt +4 -2
  15. package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationActivity.java +2 -2
  16. package/lib/android/app/src/main/java/com/reactnativenavigation/NavigationApplication.java +1 -1
  17. package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +4 -4
  18. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationPackage.kt +27 -13
  19. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationReactInitializer.java +2 -14
  20. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationTurboModule.kt +291 -0
  21. package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/react/ReactGateway.java +23 -23
  22. package/lib/android/app/src/main/java/com/reactnativenavigation/react/ReactView.java +6 -6
  23. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/ColorUtils.java +11 -0
  24. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/MotionEvent.kt +4 -9
  25. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt +12 -17
  26. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +0 -1
  27. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +20 -13
  28. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentPresenter.java +18 -0
  29. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +5 -17
  30. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +28 -13
  31. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +13 -6
  32. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +35 -2
  33. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/statusbar/StatusBarPresenter.kt +212 -0
  34. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +10 -178
  35. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/StatusBarColorAnimator.kt +28 -0
  36. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewController.java +34 -7
  37. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerVisibilityInfo.kt +5 -0
  38. package/lib/android/build.gradle +27 -15
  39. package/lib/dist/Mock/Components/ComponentScreen.js +2 -1
  40. package/lib/dist/Mock/Components/LayoutComponent.js +9 -0
  41. package/lib/dist/Mock/Components/SideMenu.d.ts +58 -0
  42. package/lib/dist/Mock/Components/SideMenu.js +25 -0
  43. package/lib/dist/Mock/Layouts/BottomTabsNode.d.ts +1 -1
  44. package/lib/dist/Mock/Layouts/BottomTabsNode.js +3 -2
  45. package/lib/dist/Mock/Layouts/LayoutNodeFactory.d.ts +2 -1
  46. package/lib/dist/Mock/Layouts/LayoutNodeFactory.js +10 -1
  47. package/lib/dist/Mock/Layouts/ParentNode.d.ts +1 -0
  48. package/lib/dist/Mock/Layouts/ParentNode.js +3 -0
  49. package/lib/dist/Mock/Layouts/SideMenu.d.ts +31 -0
  50. package/lib/dist/Mock/Layouts/SideMenu.js +80 -0
  51. package/lib/dist/Mock/Stores/LayoutStore.js +38 -9
  52. package/lib/dist/Mock/actions/layoutActions.d.ts +3 -0
  53. package/lib/dist/Mock/actions/layoutActions.js +11 -1
  54. package/lib/dist/Mock/mocks/NativeCommandsSender.js +1 -0
  55. package/lib/dist/src/adapters/NativeCommandsSender.d.ts +39 -4
  56. package/lib/dist/src/adapters/NativeCommandsSender.js +2 -2
  57. package/lib/dist/src/adapters/NativeRNNTurboEventEmitter.js +2 -9
  58. package/lib/dist/src/adapters/NativeRNNTurboModule.d.ts +9 -10
  59. package/lib/dist/src/adapters/NativeRNNTurboModule.js +1 -12
  60. package/lib/dist/src/commands/Commands.d.ts +13 -13
  61. package/lib/ios/AnimatedTextView.mm +1 -0
  62. package/lib/ios/Constants.mm +7 -1
  63. package/lib/ios/RNNAppDelegate.mm +3 -1
  64. package/lib/ios/RNNCommandsHandler.mm +1 -0
  65. package/lib/ios/RNNCustomTitleView.h +1 -0
  66. package/lib/ios/RNNCustomTitleView.mm +8 -1
  67. package/lib/ios/RNNEventEmitter.mm +3 -0
  68. package/lib/ios/RNNReactButtonView.mm +1 -1
  69. package/lib/ios/RNNReactView.h +3 -1
  70. package/lib/ios/RNNReactView.mm +45 -20
  71. package/lib/ios/TopBarTitlePresenter.mm +2 -0
  72. package/lib/ios/TurboModules/RNNTurboEventEmitter.mm +7 -0
  73. package/lib/ios/UINavigationController+RNNCommands.mm +4 -0
  74. package/lib/src/adapters/NativeCommandsSender.ts +7 -7
  75. package/lib/src/adapters/NativeRNNTurboEventEmitter.ts +3 -9
  76. package/lib/src/adapters/NativeRNNTurboModule.ts +23 -21
  77. package/package.json +14 -17
  78. package/react-native.config.js +1 -1
  79. package/lib/android/app/src/main/java/com/reactnativenavigation/react/DevPermissionRequest.java +0 -42
  80. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/statusbar/StatusBarController.kt +0 -9
  81. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/statusbar/StatusBarPresenter.kt +0 -9
  82. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  83. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  84. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  85. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -71
  86. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  87. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
  88. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  89. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  90. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  91. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  92. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  93. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  94. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  95. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -71
  96. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  97. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  98. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
  99. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  100. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  101. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  102. package/lib/android/app/src/reactNative55/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  103. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  104. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
  105. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
  106. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -71
  107. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  108. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
  109. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
  110. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  111. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  112. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  113. package/lib/android/app/src/reactNative56/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  114. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  115. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
  116. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
  117. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -70
  118. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  119. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
  120. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -70
  121. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  122. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  123. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  124. package/lib/android/app/src/reactNative57/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  125. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  126. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
  127. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
  128. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -70
  129. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  130. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
  131. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/SyncUiImplementation.java +0 -83
  132. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  133. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  134. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  135. package/lib/android/app/src/reactNative57_5/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  136. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  137. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -28
  138. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -28
  139. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -67
  140. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReactGateway.java +0 -70
  141. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -25
  142. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  143. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  144. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  145. package/lib/android/app/src/reactNative60/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  146. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/options/parsers/ColorParser.java +0 -18
  147. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -67
  148. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReactGateway.java +0 -72
  149. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  150. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  151. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  152. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -27
  153. package/lib/android/app/src/reactNative62/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  154. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  155. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  156. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -66
  157. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReactGateway.java +0 -72
  158. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  159. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -81
  160. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  161. package/lib/android/app/src/reactNative63/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  162. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/options/parsers/ColorParser.kt +0 -38
  163. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  164. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  165. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -66
  166. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/ReactGateway.java +0 -72
  167. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  168. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -87
  169. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -42
  170. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -12
  171. package/lib/android/app/src/reactNative68/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -32
  172. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/options/parsers/ColorParser.kt +0 -38
  173. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -22
  174. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -22
  175. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -22
  176. package/lib/android/app/src/reactNative71/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -12
  177. /package/lib/android/app/src/{reactNative63 → main}/java/com/reactnativenavigation/options/parsers/ColorParser.kt +0 -0
  178. /package/lib/android/app/src/{reactNative62 → main}/java/com/reactnativenavigation/react/DevBundleDownloadListenerAdapter.java +0 -0
  179. /package/lib/android/app/src/{reactNative62 → main}/java/com/reactnativenavigation/react/JsDevReloadHandlerFacade.java +0 -0
  180. /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +0 -0
  181. /package/lib/android/app/src/{reactNative51 → main}/java/com/reactnativenavigation/react/ReloadHandlerFacade.java +0 -0
  182. /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/react/modal/ModalContentLayout.kt +0 -0
  183. /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxDelegate.kt +0 -0
  184. /package/lib/android/app/src/{reactNative63 → main}/java/com/reactnativenavigation/viewcontrollers/viewcontroller/YellowBoxHelper.java +0 -0
  185. /package/lib/android/app/src/{reactNative71 → main}/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleBarReactView.kt +0 -0
@@ -0,0 +1,80 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SideMenuCenterNode = exports.SideMenuRightNode = exports.SideMenuLeftNode = exports.SideMenuNode = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const ParentNode_1 = tslib_1.__importDefault(require("./ParentNode"));
6
+ const layoutActions = tslib_1.__importStar(require("../actions/layoutActions"));
7
+ const isCenterChild = (child) => child.type === 'SideMenuCenter';
8
+ const isLeftChild = (child) => child.type === 'SideMenuLeft';
9
+ const isRightChild = (child) => child.type === 'SideMenuRight';
10
+ class SideMenuRootNode extends ParentNode_1.default {
11
+ visibleChild;
12
+ constructor(layout, parentNode) {
13
+ super(layout, 'SideMenuRoot', parentNode);
14
+ this.visibleChild = this._getCenterChild();
15
+ if (!this.visibleChild) {
16
+ throw new Error('SideMenuRootNode must have a SideMenuCenter child');
17
+ }
18
+ }
19
+ applyOptions(_options) {
20
+ super.applyOptions(_options);
21
+ this._updateVisibility(_options);
22
+ }
23
+ mergeOptions(options) {
24
+ super.mergeOptions(options);
25
+ this._updateVisibility(options);
26
+ }
27
+ /**
28
+ * @override
29
+ */
30
+ getVisibleLayout() {
31
+ return this.visibleChild.getVisibleLayout();
32
+ }
33
+ _updateVisibility(options) {
34
+ if (options.sideMenu) {
35
+ if (options.sideMenu.left?.visible) {
36
+ this.visibleChild = this._getLeftChild();
37
+ layoutActions.openSideMenu(this.visibleChild);
38
+ }
39
+ else if (options.sideMenu.right?.visible) {
40
+ this.visibleChild = this._getRightChild();
41
+ layoutActions.openSideMenu(this.visibleChild);
42
+ }
43
+ else {
44
+ this.visibleChild = this._getCenterChild();
45
+ layoutActions.closeSideMenu(this.visibleChild);
46
+ }
47
+ }
48
+ }
49
+ _getCenterChild = () => this.children.find(isCenterChild);
50
+ _getLeftChild = () => this.children.find(isLeftChild);
51
+ _getRightChild = () => this.children.find(isRightChild);
52
+ }
53
+ exports.default = SideMenuRootNode;
54
+ class SideMenuNode extends ParentNode_1.default {
55
+ constructor(layout, type, parentNode) {
56
+ super(layout, type, parentNode);
57
+ }
58
+ getVisibleLayout() {
59
+ return this.children[0].getVisibleLayout();
60
+ }
61
+ }
62
+ exports.SideMenuNode = SideMenuNode;
63
+ class SideMenuLeftNode extends SideMenuNode {
64
+ constructor(layout, parentNode) {
65
+ super(layout, 'SideMenuLeft', parentNode);
66
+ }
67
+ }
68
+ exports.SideMenuLeftNode = SideMenuLeftNode;
69
+ class SideMenuRightNode extends SideMenuNode {
70
+ constructor(layout, parentNode) {
71
+ super(layout, 'SideMenuRight', parentNode);
72
+ }
73
+ }
74
+ exports.SideMenuRightNode = SideMenuRightNode;
75
+ class SideMenuCenterNode extends SideMenuNode {
76
+ constructor(layout, parentNode) {
77
+ super(layout, 'SideMenuCenter', parentNode);
78
+ }
79
+ }
80
+ exports.SideMenuCenterNode = SideMenuCenterNode;
@@ -9,6 +9,7 @@ const state = remx.state({
9
9
  root: {},
10
10
  modals: [],
11
11
  overlays: [],
12
+ sideMenu: undefined,
12
13
  });
13
14
  const setters = remx.setters({
14
15
  setRoot(layout) {
@@ -73,6 +74,23 @@ const setters = remx.setters({
73
74
  selectTabIndex(layout, index) {
74
75
  getters.getLayoutById(layout.nodeId).selectedIndex = index;
75
76
  },
77
+ openSideMenu(layout) {
78
+ if (state.sideMenu) {
79
+ throw new Error('A side-menu is already open; Mocked-testing of multiple side-menu scenarios is not supported yet.' +
80
+ ' You can submit a request in https://github.com/wix/react-native-navigation/issues/new/choose.');
81
+ }
82
+ state.sideMenu = layout;
83
+ },
84
+ closeSideMenu(_layout) {
85
+ state.sideMenu = undefined;
86
+ },
87
+ applyOptions(componentId, options) {
88
+ const layout = getters.getLayoutById(componentId);
89
+ if (layout)
90
+ layout.applyOptions(options);
91
+ else
92
+ console.warn(`[RNN error] Merge options failure: cannot find layout for: ${componentId}`);
93
+ },
76
94
  mergeOptions(componentId, options) {
77
95
  const layout = getters.getLayoutById(componentId);
78
96
  if (layout)
@@ -86,14 +104,25 @@ const getters = remx.getters({
86
104
  return state.root;
87
105
  },
88
106
  getVisibleLayout() {
107
+ let layout;
89
108
  if (state.modals.length > 0) {
90
- return lodash_1.default.last(state.modals).getVisibleLayout();
109
+ layout = lodash_1.default.last(state.modals);
110
+ }
111
+ else if (!lodash_1.default.isEqual(state.root, {})) {
112
+ layout = state.root;
113
+ }
114
+ // Note: While this logic should be fair for all use cases (i.e. even multiple side-menus across tabs),
115
+ // there is no current test case that justifies it. Nevertheless, it's required to pass the tests,
116
+ // because otherwise getVisibleLayout() would not be revisited whenever side-menus are opened/closed.
117
+ if (layout && state.sideMenu && findNode(state.sideMenu.nodeId, layout)) {
118
+ layout = state.sideMenu.parentNode;
91
119
  }
92
- else if (!lodash_1.default.isEqual(state.root, {}))
93
- return state.root.getVisibleLayout();
120
+ return layout?.getVisibleLayout();
94
121
  },
95
122
  isVisibleLayout(layout) {
96
- return getters.getVisibleLayout() && getters.getVisibleLayout().nodeId === layout.nodeId;
123
+ const nodeId = layout.nodeId;
124
+ const visibleLayout = getters.getVisibleLayout();
125
+ return visibleLayout?.nodeId === nodeId;
97
126
  },
98
127
  getModals() {
99
128
  return state.modals;
@@ -103,11 +132,11 @@ const getters = remx.getters({
103
132
  },
104
133
  getLayoutById(layoutId) {
105
134
  if (getters.getModalById(layoutId))
106
- return findParentNode(layoutId, getters.getModalById(layoutId));
107
- return findParentNode(layoutId, state.root);
135
+ return findNode(layoutId, getters.getModalById(layoutId));
136
+ return findNode(layoutId, state.root);
108
137
  },
109
138
  getModalById(layoutId) {
110
- return lodash_1.default.find(state.modals, (layout) => findParentNode(layoutId, layout));
139
+ return lodash_1.default.find(state.modals, (layout) => findNode(layoutId, layout));
111
140
  },
112
141
  getLayoutChildren(layoutId) {
113
142
  return getters.getLayoutById(layoutId).children;
@@ -117,14 +146,14 @@ const getters = remx.getters({
117
146
  lodash_1.default.find(state.modals, (layout) => findStack(layoutId, layout)));
118
147
  },
119
148
  });
120
- function findParentNode(layoutId, layout) {
149
+ function findNode(layoutId, layout) {
121
150
  if (layoutId === layout.nodeId) {
122
151
  return layout;
123
152
  }
124
153
  else if (layout.children) {
125
154
  for (let i = 0; i < layout.children.length; i += 1) {
126
155
  const child = layout.children[i];
127
- const result = findParentNode(layoutId, child);
156
+ const result = findNode(layoutId, child);
128
157
  if (result !== false) {
129
158
  return result;
130
159
  }
@@ -1,2 +1,5 @@
1
1
  import ParentNode from '../Layouts/ParentNode';
2
+ import { SideMenuNode } from '../Layouts/SideMenu';
2
3
  export declare const switchTabByIndex: (bottomTabs: ParentNode | undefined, index: number) => void;
4
+ export declare const openSideMenu: (sideMenu: SideMenuNode) => void;
5
+ export declare const closeSideMenu: (layout: SideMenuNode) => void;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.switchTabByIndex = void 0;
3
+ exports.closeSideMenu = exports.openSideMenu = exports.switchTabByIndex = void 0;
4
4
  const LayoutStore_1 = require("../Stores/LayoutStore");
5
5
  const switchTabByIndex = (bottomTabs, index) => {
6
6
  if (bottomTabs) {
@@ -10,3 +10,13 @@ const switchTabByIndex = (bottomTabs, index) => {
10
10
  }
11
11
  };
12
12
  exports.switchTabByIndex = switchTabByIndex;
13
+ const openSideMenu = (sideMenu) => {
14
+ LayoutStore_1.LayoutStore.openSideMenu(sideMenu);
15
+ LayoutStore_1.LayoutStore.getVisibleLayout().componentDidAppear();
16
+ };
17
+ exports.openSideMenu = openSideMenu;
18
+ const closeSideMenu = (layout) => {
19
+ LayoutStore_1.LayoutStore.getVisibleLayout().componentDidDisappear();
20
+ LayoutStore_1.LayoutStore.closeSideMenu(layout);
21
+ };
22
+ exports.closeSideMenu = closeSideMenu;
@@ -34,6 +34,7 @@ class NativeCommandsSender {
34
34
  const layoutNode = LayoutNodeFactory_1.default.create(layout, stack);
35
35
  stack.getVisibleLayout().componentDidDisappear();
36
36
  LayoutStore_1.LayoutStore.push(layoutNode, stack);
37
+ LayoutStore_1.LayoutStore.applyOptions(layoutNode.nodeId, layoutNode.data.options);
37
38
  stack.getVisibleLayout().componentDidAppear();
38
39
  resolve(stack.getVisibleLayout().nodeId);
39
40
  this.reportCommandCompletion(CommandName_1.CommandName.Push, commandId);
@@ -1,7 +1,5 @@
1
1
  import { NavigationConstants } from './Constants';
2
- export declare class NativeCommandsSender {
3
- private readonly nativeCommandsModule;
4
- constructor();
2
+ interface NativeCommandsModule {
5
3
  setRoot(commandId: string, layout: {
6
4
  root: any;
7
5
  modals: any[];
@@ -13,7 +11,7 @@ export declare class NativeCommandsSender {
13
11
  pop(commandId: string, componentId: string, options?: object): Promise<any>;
14
12
  popTo(commandId: string, componentId: string, options?: object): Promise<any>;
15
13
  popToRoot(commandId: string, componentId: string, options?: object): Promise<any>;
16
- setStackRoot(commandId: string, onComponentId: string, layout: object): Promise<any>;
14
+ setStackRoot(commandId: string, onComponentId: string, layout: object[]): Promise<any>;
17
15
  showModal(commandId: string, layout: object): Promise<any>;
18
16
  dismissModal(commandId: string, componentId: string, options?: object): Promise<any>;
19
17
  dismissAllModals(commandId: string, options?: object): Promise<any>;
@@ -23,4 +21,41 @@ export declare class NativeCommandsSender {
23
21
  getLaunchArgs(commandId: string): Promise<any>;
24
22
  getNavigationConstants(): Promise<NavigationConstants>;
25
23
  getNavigationConstantsSync(): NavigationConstants;
24
+ getConstants?: () => NavigationConstants;
25
+ }
26
+ export declare class NativeCommandsSender implements NativeCommandsModule {
27
+ private readonly nativeCommandsModule;
28
+ constructor();
29
+ setRoot(commandId: string, layout: {
30
+ root: any;
31
+ modals: any[];
32
+ overlays: any[];
33
+ }): Promise<string>;
34
+ setDefaultOptions(options: object): void;
35
+ mergeOptions(componentId: string, options: object): void;
36
+ push(commandId: string, onComponentId: string, layout: object): Promise<string>;
37
+ pop(commandId: string, componentId: string, options?: object): Promise<string>;
38
+ popTo(commandId: string, componentId: string, options?: object): Promise<string>;
39
+ popToRoot(commandId: string, componentId: string, options?: object): Promise<string>;
40
+ setStackRoot(commandId: string, onComponentId: string, layout: object[]): Promise<string>;
41
+ showModal(commandId: string, layout: object): Promise<string>;
42
+ dismissModal(commandId: string, componentId: string, options?: object): Promise<string>;
43
+ dismissAllModals(commandId: string, options?: object): Promise<string>;
44
+ showOverlay(commandId: string, layout: object): Promise<string>;
45
+ dismissOverlay(commandId: string, componentId: string): Promise<string>;
46
+ dismissAllOverlays(commandId: string): Promise<string>;
47
+ getLaunchArgs(commandId: string): Promise<string[]>;
48
+ getNavigationConstants(): Promise<{
49
+ topBarHeight: number;
50
+ statusBarHeight: number;
51
+ bottomTabsHeight: number;
52
+ backButtonId: string;
53
+ }>;
54
+ getNavigationConstantsSync(): {
55
+ topBarHeight: number;
56
+ statusBarHeight: number;
57
+ bottomTabsHeight: number;
58
+ backButtonId: string;
59
+ };
26
60
  }
61
+ export {};
@@ -54,10 +54,10 @@ class NativeCommandsSender {
54
54
  return this.nativeCommandsModule.getLaunchArgs(commandId);
55
55
  }
56
56
  getNavigationConstants() {
57
- return this.nativeCommandsModule.getNavigationConstants();
57
+ return Promise.resolve(this.nativeCommandsModule.getConstants());
58
58
  }
59
59
  getNavigationConstantsSync() {
60
- return this.nativeCommandsModule.getNavigationConstantsSync();
60
+ return this.nativeCommandsModule.getConstants();
61
61
  }
62
62
  }
63
63
  exports.NativeCommandsSender = NativeCommandsSender;
@@ -1,13 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const react_native_1 = require("react-native");
4
- let eventEmitter = null;
5
- try {
6
- // Running in bridge mode
7
- eventEmitter = react_native_1.NativeModules.RNNBridgeEventEmitter;
8
- }
9
- catch (e) {
10
- // Running in bridgeless, access to NativeModules is prohibited
11
- eventEmitter = react_native_1.TurboModuleRegistry.get('RNNTurboEventEmitter');
12
- }
4
+ let eventEmitter;
5
+ eventEmitter = react_native_1.TurboModuleRegistry.get('RNNTurboEventEmitter');
13
6
  exports.default = eventEmitter;
@@ -5,24 +5,23 @@ export interface Spec extends TurboModule {
5
5
  topBarHeight: Double;
6
6
  statusBarHeight: Double;
7
7
  bottomTabsHeight: Double;
8
+ backButtonId: string;
8
9
  };
9
10
  setRoot(commandId: string, layout: UnsafeObject): Promise<string>;
10
11
  setDefaultOptions(options: UnsafeObject): void;
11
12
  mergeOptions(componentId: string, options: UnsafeObject): void;
12
13
  push(commandId: string, componentId: string, layout: UnsafeObject): Promise<string>;
13
- pop(commandId: string, componentId: string, options: UnsafeObject): Promise<string>;
14
- popTo(commandId: string, componentId: string, options: UnsafeObject): Promise<string>;
15
- popToRoot(commandId: string, componentId: string, options: UnsafeObject): Promise<string>;
14
+ pop(commandId: string, componentId: string, options?: UnsafeObject): Promise<string>;
15
+ popTo(commandId: string, componentId: string, options?: UnsafeObject): Promise<string>;
16
+ popToRoot(commandId: string, componentId: string, options?: UnsafeObject): Promise<string>;
16
17
  setStackRoot(commandId: string, componentId: string, layout: Array<UnsafeObject>): Promise<string>;
17
18
  showModal(commandId: string, layout: UnsafeObject): Promise<string>;
18
- dismissModal(commandId: string, componentId: string, options: UnsafeObject): Promise<string>;
19
- dismissAllModals(commandId: string, options: UnsafeObject): Promise<void>;
19
+ dismissModal(commandId: string, componentId: string, options?: UnsafeObject): Promise<string>;
20
+ dismissAllModals(commandId: string, options?: UnsafeObject): Promise<string>;
20
21
  showOverlay(commandId: string, layout: UnsafeObject): Promise<string>;
21
- dismissOverlay(commandId: string, componentId: string): Promise<void>;
22
- dismissAllOverlays(commandId: string): Promise<void>;
22
+ dismissOverlay(commandId: string, componentId: string): Promise<string>;
23
+ dismissAllOverlays(commandId: string): Promise<string>;
23
24
  getLaunchArgs(commandId: string): Promise<Array<string>>;
24
25
  }
25
- declare const commands: any;
26
- export declare const RCTAssertNewArchEnabled: () => void;
27
- export declare const isRNNTurboModuleAvailable: boolean;
26
+ declare const commands: Spec;
28
27
  export default commands;
@@ -1,16 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isRNNTurboModuleAvailable = exports.RCTAssertNewArchEnabled = void 0;
4
3
  const react_native_1 = require("react-native");
5
- const isTurboModuleEnabled = globalThis.__turboModuleProxy != null;
6
- const commands = isTurboModuleEnabled && react_native_1.Platform.OS === 'ios'
7
- ? react_native_1.TurboModuleRegistry.get('RNNTurboModule')
8
- : react_native_1.NativeModules.RNNBridgeModule;
9
- const isNewArchWithBridgeless = isTurboModuleEnabled;
10
- const RCTAssertNewArchEnabled = () => {
11
- if (!isNewArchWithBridgeless)
12
- throw new Error('Allowed only in New Architecture with Bridgeless!');
13
- };
14
- exports.RCTAssertNewArchEnabled = RCTAssertNewArchEnabled;
15
- exports.isRNNTurboModuleAvailable = isNewArchWithBridgeless;
4
+ const commands = react_native_1.TurboModuleRegistry.get('RNNTurboModule');
16
5
  exports.default = commands;
@@ -20,20 +20,20 @@ export declare class Commands {
20
20
  private readonly layoutProcessor;
21
21
  private readonly optionsCrawler;
22
22
  constructor(store: Store, nativeCommandsSender: NativeCommandsSender, layoutTreeParser: LayoutTreeParser, layoutTreeCrawler: LayoutTreeCrawler, commandsObserver: CommandsObserver, uniqueIdProvider: UniqueIdProvider, optionsProcessor: OptionsProcessor, layoutProcessor: LayoutProcessor, optionsCrawler: OptionsCrawler);
23
- setRoot(simpleApi: LayoutRoot): Promise<any>;
23
+ setRoot(simpleApi: LayoutRoot): Promise<string>;
24
24
  setDefaultOptions(options: Options): void;
25
25
  mergeOptions(componentId: string, options: Options): void;
26
26
  updateProps(componentId: string, props: object, callback?: () => void): void;
27
- showModal<P>(layout: Layout<P>): Promise<any>;
28
- dismissModal(componentId: string, mergeOptions?: Options): Promise<any>;
29
- dismissAllModals(mergeOptions?: Options): Promise<any>;
30
- push<P>(componentId: string, simpleApi: Layout<P>): Promise<any>;
31
- pop(componentId: string, mergeOptions?: Options): Promise<any>;
32
- popTo(componentId: string, mergeOptions?: Options): Promise<any>;
33
- popToRoot(componentId: string, mergeOptions?: Options): Promise<any>;
34
- setStackRoot<P>(componentId: string, children: Layout<P>[]): Promise<any>;
35
- showOverlay<P>(simpleApi: Layout<P>): Promise<any>;
36
- dismissOverlay(componentId: string): Promise<any>;
37
- dismissAllOverlays(): Promise<any>;
38
- getLaunchArgs(): Promise<any>;
27
+ showModal<P>(layout: Layout<P>): Promise<string>;
28
+ dismissModal(componentId: string, mergeOptions?: Options): Promise<string>;
29
+ dismissAllModals(mergeOptions?: Options): Promise<string>;
30
+ push<P>(componentId: string, simpleApi: Layout<P>): Promise<string>;
31
+ pop(componentId: string, mergeOptions?: Options): Promise<string>;
32
+ popTo(componentId: string, mergeOptions?: Options): Promise<string>;
33
+ popToRoot(componentId: string, mergeOptions?: Options): Promise<string>;
34
+ setStackRoot<P>(componentId: string, children: Layout<P>[]): Promise<string>;
35
+ showOverlay<P>(simpleApi: Layout<P>): Promise<string>;
36
+ dismissOverlay(componentId: string): Promise<string>;
37
+ dismissAllOverlays(): Promise<string>;
38
+ getLaunchArgs(): Promise<string[]>;
39
39
  }
@@ -45,6 +45,7 @@
45
45
 
46
46
  - (void)reset {
47
47
  [super reset];
48
+ _fromTextContainer.size = _fromSize;
48
49
  }
49
50
 
50
51
  - (NSTextContainer *)container:(NSTextStorage *)fromTextStorage {
@@ -16,7 +16,8 @@
16
16
  JS::NativeRNNTurboModule::Constants::Builder::Input input = {
17
17
  [self topBarHeight],
18
18
  [self statusBarHeight],
19
- [self bottomTabsHeight]
19
+ [self bottomTabsHeight],
20
+ [self backButtonId]
20
21
  };
21
22
 
22
23
  return input;
@@ -35,4 +36,9 @@
35
36
  return [UIApplication.sharedApplication.delegate.window.rootViewController getBottomTabsHeight];
36
37
  }
37
38
 
39
+ + (NSString*)backButtonId {
40
+ // This property is used only in android but we have to add it for compatability in turbo modules
41
+ return @"";
42
+ }
43
+
38
44
  @end
@@ -1,3 +1,4 @@
1
+
1
2
  #import "RNNAppDelegate.h"
2
3
  #import <ReactNativeNavigation/ReactNativeNavigation.h>
3
4
 
@@ -39,6 +40,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
39
40
  RCTAppSetupPrepareApp(application, self.turboModuleEnabled);
40
41
  RCTSetNewArchEnabled(TRUE);
41
42
 
43
+
42
44
  if (self.bridgelessEnabled) {
43
45
  // Creating host instead of bridge
44
46
  self.rootViewFactory.reactHost = [self.rootViewFactory createReactHost:launchOptions];
@@ -113,7 +115,7 @@ static NSString *const kRNConcurrentRoot = @"concurrentRoot";
113
115
  }
114
116
 
115
117
  - (id<RCTTurboModule>)getModuleInstanceFromClass:(Class)moduleClass {
116
- return RCTAppSetupDefaultModuleFromClass(moduleClass);
118
+ return RCTAppSetupDefaultModuleFromClass(moduleClass, self.dependencyProvider);
117
119
  }
118
120
  #endif
119
121
 
@@ -300,6 +300,7 @@ static NSString *const setDefaultOptions = @"setDefaultOptions";
300
300
  completion:^{
301
301
  [self->_eventEmitter sendOnNavigationCommandCompletion:pop
302
302
  commandId:commandId];
303
+ NSLog(@"Pop commandshandler completed");
303
304
  completion();
304
305
  }
305
306
  rejection:rejection];
@@ -4,6 +4,7 @@
4
4
 
5
5
  #ifdef RCT_NEW_ARCH_ENABLED
6
6
  #import <React/RCTSurfaceDelegate.h>
7
+ #import <React/RCTSurface.h>
7
8
  #endif
8
9
 
9
10
  @interface RNNCustomTitleView : UIView <
@@ -55,8 +55,15 @@
55
55
 
56
56
  #ifdef RCT_NEW_ARCH_ENABLED
57
57
  - (void)surface:(RCTSurface *)surface didChangeIntrinsicSize:(CGSize)intrinsicSize {
58
- // TODO: FILL WITH DATA
58
+ if ([self.alignment isEqualToString:@"center"]) {
59
+ [self setFrame:CGRectMake(self.frame.origin.x, self.frame.origin.y,
60
+ self.subView.intrinsicContentSize.width,
61
+ self.subView.intrinsicContentSize.height)];
62
+ [self.subView setFrame:CGRectMake(0, 0, surface.intrinsicSize.width,
63
+ surface.intrinsicSize.height)];
64
+ }
59
65
  }
66
+
60
67
  #else
61
68
  - (void)rootViewDidChangeIntrinsicSize:(RCTRootView *)rootView {
62
69
  if ([self.alignment isEqualToString:@"center"]) {
@@ -154,6 +154,9 @@ static NSString *const BottomTabPressed = @"RNN.BottomTabPressed";
154
154
  #pragma mark private
155
155
 
156
156
  - (void)send:(NSString *)eventName body:(id)body {
157
+ if (self.bridge == nil) {
158
+ return;
159
+ }
157
160
  [self sendEventWithName:eventName body:body];
158
161
  }
159
162
 
@@ -5,7 +5,7 @@
5
5
  - (instancetype)initWithHost:(RCTHost *)host
6
6
  moduleName:(NSString *)moduleName
7
7
  initialProperties:(NSDictionary *)initialProperties
8
- eventEmitter:(RNNEventEmitter *)eventEmitter
8
+ eventEmitter:(RNNTurboEventEmitter *)eventEmitter
9
9
  sizeMeasureMode:(RCTSurfaceSizeMeasureMode)sizeMeasureMode
10
10
  reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock {
11
11
  self = [super initWithHost:host moduleName:moduleName initialProperties:initialProperties eventEmitter:eventEmitter sizeMeasureMode:convertToSurfaceSizeMeasureMode(RCTRootViewSizeFlexibilityWidthAndHeight) reactViewReadyBlock:reactViewReadyBlock];
@@ -15,6 +15,8 @@
15
15
  #define ComponentTypeButton @"TopBarButton"
16
16
  #define ComponentTypeBackground @"TopBarBackground"
17
17
 
18
+ #import "RNNTurboEventEmitter.h"
19
+
18
20
  #ifdef RCT_NEW_ARCH_ENABLED
19
21
  static RCTSurfaceSizeMeasureMode convertToSurfaceSizeMeasureMode(RCTRootViewSizeFlexibility sizeFlexibility)
20
22
  {
@@ -92,7 +94,7 @@ typedef void (^RNNReactViewReadyCompletionBlock)(void);
92
94
  - (instancetype)initWithHost:(RCTHost *)host
93
95
  moduleName:(NSString *)moduleName
94
96
  initialProperties:(NSDictionary *)initialProperties
95
- eventEmitter:(RNNEventEmitter *)eventEmitter
97
+ eventEmitter:(RNNTurboEventEmitter *)eventEmitter
96
98
  sizeMeasureMode:(RCTSurfaceSizeMeasureMode)sizeMeasureMode
97
99
  reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock;
98
100
 
@@ -11,6 +11,7 @@
11
11
 
12
12
  @implementation RNNReactView {
13
13
  BOOL _isMounted;
14
+ BOOL _pendingWillAppear;
14
15
  BOOL _pendingDidAppear;
15
16
  BOOL _didAppear;
16
17
  BOOL _willAppear;
@@ -56,17 +57,18 @@
56
57
  - (instancetype)initWithHost:(RCTHost *)host
57
58
  moduleName:(NSString *)moduleName
58
59
  initialProperties:(NSDictionary *)initialProperties
59
- eventEmitter:(RNNEventEmitter *)eventEmitter
60
+ eventEmitter:(RNNTurboEventEmitter *)eventEmitter
60
61
  sizeMeasureMode:(RCTSurfaceSizeMeasureMode)sizeMeasureMode
61
62
  reactViewReadyBlock:(RNNReactViewReadyCompletionBlock)reactViewReadyBlock {
63
+
62
64
  RCTFabricSurface *surface = [host createSurfaceWithModuleName:moduleName
63
65
  initialProperties:initialProperties];
64
- [host.surfacePresenter addObserver:self];
66
+ [host.surfacePresenter addObserver:self];
65
67
  self = [super initWithSurface:surface sizeMeasureMode:sizeMeasureMode];
66
-
68
+
67
69
  _reactViewReadyBlock = reactViewReadyBlock;
68
70
  _eventEmitter = eventEmitter;
69
-
71
+
70
72
  return self;
71
73
  }
72
74
  #endif
@@ -88,7 +90,7 @@
88
90
  }
89
91
  }
90
92
  #endif
91
-
93
+
92
94
  - (void)reactViewReady {
93
95
  if (_reactViewReadyBlock) {
94
96
  _reactViewReadyBlock();
@@ -99,12 +101,19 @@
99
101
  #endif
100
102
  }
101
103
 
104
+ #pragma mark - RNNComponentProtocol
102
105
  - (void)componentWillAppear {
106
+ if (!_isMounted) {
107
+ _pendingWillAppear = YES;
108
+ return;
109
+ }
110
+
111
+ _pendingWillAppear = NO;
112
+
103
113
  if (!_willAppear) {
104
114
  [_eventEmitter sendComponentWillAppear:self.componentId
105
115
  componentName:self.moduleName
106
116
  componentType:self.componentType];
107
-
108
117
  _willAppear = YES;
109
118
  }
110
119
  }
@@ -116,6 +125,7 @@
116
125
  }
117
126
 
118
127
  _pendingDidAppear = NO;
128
+
119
129
  if (!_didAppear) {
120
130
  [_eventEmitter sendComponentDidAppear:self.componentId
121
131
  componentName:self.moduleName
@@ -131,18 +141,43 @@
131
141
  _willAppear = NO;
132
142
  _didAppear = NO;
133
143
  }
144
+
145
+ - (NSString *)componentId {
146
+ return self.appProperties[@"componentId"];
147
+ }
134
148
 
149
+ - (NSString *)componentType {
150
+ @throw [NSException exceptionWithName:@"componentType not implemented"
151
+ reason:@"Should always subclass RNNReactView"
152
+ userInfo:nil];
153
+ }
154
+ #pragma mark -
155
+
156
+
135
157
  #ifdef RCT_NEW_ARCH_ENABLED
158
+
159
+ #pragma mark - RCTSurfacePresenterObserver
160
+ - (void)willMountComponentsWithRootTag:(NSInteger)rootTag {
161
+ if (self.surface.rootTag == rootTag) {
162
+ _isMounted = YES;
163
+
164
+ if (_pendingWillAppear) {
165
+ [self componentWillAppear];
166
+ }
167
+ }
168
+ }
136
169
 
137
170
  - (void)didMountComponentsWithRootTag:(NSInteger)rootTag {
138
171
  if (self.surface.rootTag == rootTag) {
139
172
  _isMounted = YES;
173
+
140
174
  if (_pendingDidAppear) {
141
175
  [self componentDidAppear];
142
176
  }
143
177
  }
144
178
  }
145
-
179
+ #pragma mark -
180
+
146
181
  - (NSDictionary *)appProperties {
147
182
  @synchronized(self) {
148
183
  return self.surface.properties;
@@ -175,7 +210,7 @@
175
210
  }
176
211
 
177
212
  - (UIView *)contentView {
178
- return self;
213
+ return self;
179
214
  }
180
215
 
181
216
  - (RCTRootViewSizeFlexibility)sizeFlexibility {
@@ -185,17 +220,7 @@
185
220
  - (void)setSizeFlexibility:(RCTRootViewSizeFlexibility)sizeFlexibility {
186
221
  super.sizeMeasureMode = convertToSurfaceSizeMeasureMode(sizeFlexibility);
187
222
  }
188
-
223
+
189
224
  #endif
190
-
191
- - (NSString *)componentId {
192
- return self.appProperties[@"componentId"];
193
- }
194
-
195
- - (NSString *)componentType {
196
- @throw [NSException exceptionWithName:@"componentType not implemented"
197
- reason:@"Should always subclass RNNReactView"
198
- userInfo:nil];
199
- }
200
-
225
+
201
226
  @end