react-native-navigation 7.23.1 → 7.24.0

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 (263) hide show
  1. package/.buildkite/pipeline.yml +51 -11
  2. package/.nvmrc +1 -0
  3. package/Mock.d.ts +1 -0
  4. package/Mock.js +4 -0
  5. package/Mock.ts +1 -1
  6. package/README.md +0 -1
  7. package/jest.config.js +40 -0
  8. package/lib/{src/Mock → Mock}/Application.tsx +0 -0
  9. package/lib/{src/Mock → Mock}/ComponentProps.tsx +0 -0
  10. package/lib/{src/Mock → Mock}/Components/BottomTabs.tsx +0 -0
  11. package/lib/{src/Mock → Mock}/Components/ComponentScreen.tsx +13 -2
  12. package/lib/{src/Mock → Mock}/Components/LayoutComponent.tsx +0 -0
  13. package/lib/{src/Mock → Mock}/Components/Modals.tsx +0 -0
  14. package/lib/{src/Mock → Mock}/Components/NavigationButton.tsx +1 -1
  15. package/lib/{src/Mock → Mock}/Components/Overlays.tsx +0 -0
  16. package/lib/{src/Mock → Mock}/Components/Stack.tsx +0 -0
  17. package/lib/{src/Mock → Mock}/Components/TopBar.tsx +2 -2
  18. package/lib/{src/Mock → Mock}/Layouts/BottomTabsNode.ts +1 -1
  19. package/lib/{src/Mock → Mock}/Layouts/ComponentNode.ts +1 -1
  20. package/lib/{src/Mock → Mock}/Layouts/LayoutNodeFactory.ts +0 -0
  21. package/lib/{src/Mock → Mock}/Layouts/Node.ts +1 -1
  22. package/lib/{src/Mock → Mock}/Layouts/ParentNode.ts +2 -2
  23. package/lib/{src/Mock → Mock}/Layouts/StackNode.ts +0 -0
  24. package/lib/{src/Mock → Mock}/Stores/EventsStore.ts +10 -2
  25. package/lib/{src/Mock → Mock}/Stores/LayoutStore.ts +3 -2
  26. package/lib/{src/Mock → Mock}/connect.ts +0 -0
  27. package/lib/Mock/constants.d.ts +2 -0
  28. package/lib/Mock/constants.js +5 -0
  29. package/lib/{src/Mock → Mock}/constants.ts +0 -0
  30. package/lib/Mock/index.d.ts +3 -0
  31. package/lib/Mock/index.js +14 -0
  32. package/lib/{src/Mock → Mock}/index.ts +0 -0
  33. package/lib/{src/Mock → Mock}/mocks/AppRegistryService.ts +0 -0
  34. package/lib/{src/Mock → Mock}/mocks/NativeCommandsSender.tsx +1 -1
  35. package/lib/{src/Mock → Mock}/mocks/NativeEventsReceiver.ts +7 -4
  36. package/lib/android/app/build.gradle +23 -21
  37. package/lib/android/app/src/main/java/com/reactnativenavigation/options/FontOptions.kt +2 -2
  38. package/lib/android/app/src/main/java/com/reactnativenavigation/options/HardwareBackButtonOptions.kt +35 -2
  39. package/lib/android/app/src/main/java/com/reactnativenavigation/options/LayoutFactory.java +32 -17
  40. package/lib/android/app/src/main/java/com/reactnativenavigation/options/Options.java +1 -1
  41. package/lib/android/app/src/main/java/com/reactnativenavigation/options/parsers/TypefaceLoader.kt +16 -10
  42. package/lib/android/app/src/main/java/com/reactnativenavigation/react/NavigationModule.java +5 -2
  43. package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalFrameLayout.kt +3 -3
  44. package/lib/android/app/src/main/java/com/reactnativenavigation/react/modal/ModalViewManager.kt +11 -8
  45. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/SystemUiUtils.kt +168 -0
  46. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabPresenter.java +5 -2
  47. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsController.java +42 -2
  48. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/child/ChildController.java +12 -16
  49. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewController.java +19 -11
  50. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/externalcomponent/ExternalComponentViewController.java +2 -2
  51. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenter.java +6 -4
  52. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManager.kt +8 -3
  53. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackController.java +15 -7
  54. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenter.java +127 -138
  55. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/TopBarController.kt +183 -22
  56. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonController.kt +25 -4
  57. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonPresenter.kt +9 -1
  58. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/stack/topbar/button/ButtonSpan.kt +1 -1
  59. package/lib/android/app/src/main/java/com/reactnativenavigation/viewcontrollers/viewcontroller/Presenter.java +52 -71
  60. package/lib/android/app/src/main/java/com/reactnativenavigation/views/component/ComponentLayout.java +2 -0
  61. package/lib/android/app/src/main/java/com/reactnativenavigation/views/element/animators/ReactImageMatrixAnimator.kt +2 -3
  62. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/TopBar.java +1 -2
  63. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/ButtonBar.kt +7 -12
  64. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleAndButtonsContainer.kt +0 -2
  65. package/lib/android/app/src/main/java/com/reactnativenavigation/views/stack/topbar/titlebar/TitleSubTitleLayout.kt +0 -7
  66. package/lib/android/app/src/reactNative51/java/com/reactnativenavigation/react/NavigationReactNativeHost.java +2 -1
  67. package/lib/android/app/src/test/java/com/reactnativenavigation/BaseTest.java +7 -6
  68. package/lib/android/app/src/test/java/com/reactnativenavigation/TestActivity.java +5 -0
  69. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/ImageLoaderMock.kt +5 -4
  70. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/Mocks.kt +3 -2
  71. package/lib/android/app/src/test/java/com/reactnativenavigation/mocks/TypefaceLoaderMock.kt +5 -1
  72. package/lib/android/app/src/test/java/com/reactnativenavigation/options/TransitionAnimationOptionsTest.kt +2 -3
  73. package/lib/android/app/src/test/java/com/reactnativenavigation/presentation/PresenterTest.java +25 -10
  74. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/LayoutFactoryTest.java +25 -2
  75. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/MotionEventTest.kt +1 -1
  76. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/{TitleAndButtonsMeasurer.kt → TitleAndButtonsMeasurerTest.kt} +2 -2
  77. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiThreadTest.java +2 -2
  78. package/lib/android/app/src/test/java/com/reactnativenavigation/utils/UiUtilsTest.java +1 -1
  79. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.kt +572 -0
  80. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsPresenterTest.kt +1 -1
  81. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/child/ChildControllerTest.java +2 -1
  82. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/component/ComponentViewControllerTest.java +5 -5
  83. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/fakes/FakeParentController.kt +1 -1
  84. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalAnimatorTest.kt +1 -1
  85. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalPresenterTest.java +7 -3
  86. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/modal/ModalStackTest.java +17 -4
  87. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/NavigatorTest.java +2 -2
  88. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/navigator/RootPresenterTest.kt +5 -5
  89. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/overlay/OverlayManagerTest.java +1 -0
  90. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/parent/ParentControllerTest.java +4 -0
  91. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/sidemenu/SideMenuControllerTest.java +6 -2
  92. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackAnimatorTest.kt +1 -1
  93. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackControllerTest.kt +13 -8
  94. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/StackPresenterTest.kt +58 -51
  95. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/stack/TopBarControllerTest.kt +219 -41
  96. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/viewcontroller/ViewControllerTest.java +4 -1
  97. package/lib/android/app/src/test/java/com/reactnativenavigation/views/TitleAndButtonsContainerTest.kt +2 -2
  98. package/lib/android/app/src/test/java/com/reactnativenavigation/views/animations/BaseViewAnimatorTest.kt +4 -4
  99. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsContainerTest.kt +1 -1
  100. package/lib/android/app/src/test/java/com/reactnativenavigation/views/bottomtabs/BottomTabsTest.kt +4 -4
  101. package/lib/dist/Mock/Application.js +2 -2
  102. package/lib/dist/Mock/Components/BottomTabs.js +2 -2
  103. package/lib/dist/Mock/Components/ComponentScreen.js +15 -5
  104. package/lib/dist/Mock/Components/LayoutComponent.js +3 -2
  105. package/lib/dist/Mock/Components/Modals.js +2 -2
  106. package/lib/dist/Mock/Components/NavigationButton.d.ts +1 -1
  107. package/lib/dist/Mock/Components/NavigationButton.js +8 -10
  108. package/lib/dist/Mock/Components/Overlays.js +2 -2
  109. package/lib/dist/Mock/Components/Stack.js +2 -2
  110. package/lib/dist/Mock/Components/TopBar.d.ts +2 -2
  111. package/lib/dist/Mock/Components/TopBar.js +7 -6
  112. package/lib/dist/Mock/Layouts/BottomTabsNode.d.ts +1 -1
  113. package/lib/dist/Mock/Layouts/BottomTabsNode.js +3 -3
  114. package/lib/dist/Mock/Layouts/ComponentNode.d.ts +1 -1
  115. package/lib/dist/Mock/Layouts/ComponentNode.js +4 -4
  116. package/lib/dist/Mock/Layouts/LayoutNodeFactory.js +3 -3
  117. package/lib/dist/Mock/Layouts/Node.d.ts +1 -1
  118. package/lib/dist/Mock/Layouts/Node.js +5 -0
  119. package/lib/dist/Mock/Layouts/ParentNode.d.ts +2 -2
  120. package/lib/dist/Mock/Layouts/ParentNode.js +4 -3
  121. package/lib/dist/Mock/Layouts/StackNode.js +1 -1
  122. package/lib/dist/Mock/Stores/EventsStore.d.ts +5 -2
  123. package/lib/dist/Mock/Stores/EventsStore.js +7 -0
  124. package/lib/dist/Mock/Stores/LayoutStore.js +6 -3
  125. package/lib/dist/Mock/connect.js +1 -1
  126. package/lib/dist/Mock/index.js +1 -1
  127. package/lib/dist/Mock/mocks/NativeCommandsSender.d.ts +1 -1
  128. package/lib/dist/Mock/mocks/NativeCommandsSender.js +2 -2
  129. package/lib/dist/Mock/mocks/NativeEventsReceiver.d.ts +3 -3
  130. package/lib/dist/Mock/mocks/NativeEventsReceiver.js +6 -3
  131. package/lib/dist/{Navigation.d.ts → src/Navigation.d.ts} +0 -0
  132. package/lib/dist/{Navigation.js → src/Navigation.js} +19 -3
  133. package/lib/dist/{NavigationDelegate.d.ts → src/NavigationDelegate.d.ts} +0 -0
  134. package/lib/dist/{NavigationDelegate.js → src/NavigationDelegate.js} +1 -0
  135. package/lib/dist/{adapters → src/adapters}/AppRegistryService.d.ts +0 -0
  136. package/lib/dist/{adapters → src/adapters}/AppRegistryService.js +0 -0
  137. package/lib/dist/{adapters → src/adapters}/AssetResolver.d.ts +0 -0
  138. package/lib/dist/{adapters → src/adapters}/AssetResolver.js +0 -0
  139. package/lib/dist/src/adapters/ColorService.d.ts +3 -0
  140. package/lib/dist/{adapters → src/adapters}/ColorService.js +1 -1
  141. package/lib/dist/{adapters → src/adapters}/Constants.d.ts +0 -0
  142. package/lib/dist/{adapters → src/adapters}/Constants.js +10 -6
  143. package/lib/dist/{adapters → src/adapters}/NativeCommandsSender.d.ts +0 -0
  144. package/lib/dist/{adapters → src/adapters}/NativeCommandsSender.js +1 -0
  145. package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.d.ts +0 -0
  146. package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.js +1 -0
  147. package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.mock.d.ts +0 -0
  148. package/lib/dist/{adapters → src/adapters}/NativeEventsReceiver.mock.js +0 -0
  149. package/lib/dist/{adapters → src/adapters}/TouchablePreview.d.ts +0 -0
  150. package/lib/dist/src/adapters/TouchablePreview.js +89 -0
  151. package/lib/dist/{adapters → src/adapters}/UniqueIdProvider.d.ts +0 -0
  152. package/lib/dist/{adapters → src/adapters}/UniqueIdProvider.js +2 -2
  153. package/lib/dist/{commands → src/commands}/Commands.d.ts +0 -0
  154. package/lib/dist/{commands → src/commands}/Commands.js +24 -10
  155. package/lib/dist/{commands → src/commands}/Deprecations.d.ts +0 -0
  156. package/lib/dist/src/commands/Deprecations.js +80 -0
  157. package/lib/dist/{commands → src/commands}/LayoutTreeCrawler.d.ts +0 -0
  158. package/lib/dist/{commands → src/commands}/LayoutTreeCrawler.js +4 -2
  159. package/lib/dist/{commands → src/commands}/LayoutTreeParser.d.ts +0 -0
  160. package/lib/dist/{commands → src/commands}/LayoutTreeParser.js +1 -0
  161. package/lib/dist/{commands → src/commands}/LayoutType.d.ts +0 -0
  162. package/lib/dist/{commands → src/commands}/LayoutType.js +0 -0
  163. package/lib/dist/{commands → src/commands}/OptionsCrawler.d.ts +0 -0
  164. package/lib/dist/{commands → src/commands}/OptionsCrawler.js +6 -4
  165. package/lib/dist/{commands → src/commands}/OptionsProcessor.d.ts +1 -1
  166. package/lib/dist/{commands → src/commands}/OptionsProcessor.js +50 -42
  167. package/lib/dist/{components → src/components}/ComponentRegistry.d.ts +0 -0
  168. package/lib/dist/{components → src/components}/ComponentRegistry.js +4 -0
  169. package/lib/dist/{components → src/components}/ComponentWrapper.d.ts +0 -0
  170. package/lib/dist/{components → src/components}/ComponentWrapper.js +17 -17
  171. package/lib/dist/{components → src/components}/Modal.d.ts +0 -0
  172. package/lib/dist/{components → src/components}/Modal.js +8 -8
  173. package/lib/dist/{components → src/components}/Store.d.ts +2 -0
  174. package/lib/dist/{components → src/components}/Store.js +13 -6
  175. package/lib/dist/{events → src/events}/CommandsObserver.d.ts +0 -0
  176. package/lib/dist/{events → src/events}/CommandsObserver.js +2 -1
  177. package/lib/dist/{events → src/events}/ComponentEventsObserver.d.ts +4 -2
  178. package/lib/dist/{events → src/events}/ComponentEventsObserver.js +16 -14
  179. package/lib/dist/{events → src/events}/EventsRegistry.d.ts +2 -2
  180. package/lib/dist/{events → src/events}/EventsRegistry.js +3 -0
  181. package/lib/dist/{index.d.ts → src/index.d.ts} +0 -0
  182. package/lib/dist/src/index.js +22 -0
  183. package/lib/dist/{interfaces → src/interfaces}/CommandName.d.ts +0 -0
  184. package/lib/dist/{interfaces → src/interfaces}/CommandName.js +0 -0
  185. package/lib/dist/{interfaces → src/interfaces}/ComponentEvents.d.ts +0 -0
  186. package/lib/dist/{interfaces → src/interfaces}/ComponentEvents.js +0 -0
  187. package/lib/dist/{interfaces → src/interfaces}/EventSubscription.d.ts +0 -0
  188. package/lib/dist/{interfaces → src/interfaces}/EventSubscription.js +0 -0
  189. package/lib/dist/{interfaces → src/interfaces}/Events.d.ts +0 -0
  190. package/lib/dist/{interfaces → src/interfaces}/Events.js +0 -0
  191. package/lib/dist/{interfaces → src/interfaces}/Layout.d.ts +0 -0
  192. package/lib/dist/{interfaces → src/interfaces}/Layout.js +0 -0
  193. package/lib/dist/{interfaces → src/interfaces}/NavigationComponent.d.ts +0 -0
  194. package/lib/dist/{interfaces → src/interfaces}/NavigationComponent.js +8 -1
  195. package/lib/dist/{interfaces → src/interfaces}/NavigationComponentListener.d.ts +0 -0
  196. package/lib/dist/{interfaces → src/interfaces}/NavigationComponentListener.js +0 -0
  197. package/lib/dist/{interfaces → src/interfaces}/NavigationComponentProps.d.ts +0 -0
  198. package/lib/dist/{interfaces → src/interfaces}/NavigationComponentProps.js +0 -0
  199. package/lib/dist/{interfaces → src/interfaces}/NavigationFunctionComponent.d.ts +0 -0
  200. package/lib/dist/{interfaces → src/interfaces}/NavigationFunctionComponent.js +0 -0
  201. package/lib/dist/{interfaces → src/interfaces}/Options.d.ts +9 -0
  202. package/lib/dist/{interfaces → src/interfaces}/Options.js +0 -0
  203. package/lib/dist/{interfaces → src/interfaces}/ProcessorSubscription.d.ts +0 -0
  204. package/lib/dist/{interfaces → src/interfaces}/ProcessorSubscription.js +0 -0
  205. package/lib/dist/{interfaces → src/interfaces}/Processors.d.ts +0 -0
  206. package/lib/dist/{interfaces → src/interfaces}/Processors.js +0 -0
  207. package/lib/dist/{processors → src/processors}/LayoutProcessor.d.ts +0 -0
  208. package/lib/dist/{processors → src/processors}/LayoutProcessor.js +1 -0
  209. package/lib/dist/{processors → src/processors}/LayoutProcessorsStore.d.ts +0 -0
  210. package/lib/dist/{processors → src/processors}/LayoutProcessorsStore.js +1 -3
  211. package/lib/dist/{processors → src/processors}/OptionProcessorsStore.d.ts +0 -0
  212. package/lib/dist/{processors → src/processors}/OptionProcessorsStore.js +1 -3
  213. package/lib/dist/{types.d.ts → src/types.d.ts} +0 -0
  214. package/lib/dist/{types.js → src/types.js} +0 -0
  215. package/lib/ios/AnimationObserver.h +17 -0
  216. package/lib/ios/AnimationObserver.m +41 -0
  217. package/lib/ios/BottomTabPresenter.h +0 -3
  218. package/lib/ios/BottomTabPresenter.m +0 -8
  219. package/lib/ios/RNNAssert.h +2 -2
  220. package/lib/ios/RNNBasePresenter.h +0 -4
  221. package/lib/ios/RNNBasePresenter.m +0 -12
  222. package/lib/ios/RNNBottomTabOptions.m +2 -1
  223. package/lib/ios/RNNBottomTabsController.m +8 -8
  224. package/lib/ios/RNNBridgeManager.mm +0 -1
  225. package/lib/ios/RNNButtonBuilder.m +2 -0
  226. package/lib/ios/RNNButtonOptions.h +1 -0
  227. package/lib/ios/RNNButtonOptions.m +4 -0
  228. package/lib/ios/RNNCommandsHandler.m +15 -8
  229. package/lib/ios/RNNComponentPresenter.m +0 -4
  230. package/lib/ios/RNNComponentViewController.m +2 -4
  231. package/lib/ios/RNNDotIndicatorPresenter.m +2 -1
  232. package/lib/ios/RNNExternalViewController.m +2 -4
  233. package/lib/ios/RNNModalManager.h +2 -1
  234. package/lib/ios/RNNModalManager.m +12 -21
  235. package/lib/ios/RNNSegmentedControl.h +1 -1
  236. package/lib/ios/RNNSideMenuChildVC.m +0 -4
  237. package/lib/ios/RNNSideMenuController.m +0 -4
  238. package/lib/ios/RNNSplitViewController.m +0 -4
  239. package/lib/ios/RNNStackController.m +0 -4
  240. package/lib/ios/RNNStackPresenter.m +3 -0
  241. package/lib/ios/RNNSwizzles.m +20 -0
  242. package/lib/ios/RNNTabBarItemCreator.m +3 -2
  243. package/lib/ios/RNNUIBarButtonItem.h +2 -0
  244. package/lib/ios/RNNUIBarButtonItem.m +17 -0
  245. package/lib/ios/ReactNativeNavigation.xcodeproj/project.pbxproj +8 -0
  246. package/lib/ios/TopBarPresenter.m +8 -4
  247. package/lib/ios/UIViewController+RNNOptions.m +1 -1
  248. package/lib/src/commands/Commands.ts +6 -1
  249. package/lib/src/commands/LayoutTreeCrawler.ts +2 -2
  250. package/lib/src/commands/OptionsCrawler.ts +2 -1
  251. package/lib/src/commands/OptionsProcessor.ts +15 -13
  252. package/lib/src/components/Store.ts +9 -0
  253. package/lib/src/events/ComponentEventsObserver.ts +5 -1
  254. package/lib/src/events/EventsRegistry.ts +2 -1
  255. package/lib/src/interfaces/Options.ts +10 -0
  256. package/package.json +19 -60
  257. package/tsconfig.mocks.json +7 -0
  258. package/lib/android/app/src/main/java/com/reactnativenavigation/utils/StatusBarUtils.java +0 -41
  259. package/lib/android/app/src/test/java/com/reactnativenavigation/viewcontrollers/bottomtabs/BottomTabsControllerTest.java +0 -511
  260. package/lib/dist/adapters/ColorService.d.ts +0 -3
  261. package/lib/dist/adapters/TouchablePreview.js +0 -91
  262. package/lib/dist/commands/Deprecations.js +0 -82
  263. package/lib/dist/index.js +0 -22
@@ -1,19 +1,59 @@
1
- env:
2
- CI: true
3
- ANDROID_HOME: /usr/local/share/android-sdk/
4
- PATH: "$PATH:/usr/local/share/android-sdk/platform-tools/"
5
1
  steps:
6
- - label: "Android :android:"
2
+ - block: ":rocket: Release!"
3
+ prompt: "Fill out the details for release"
4
+ if: 'build.message =~ /^release\$/i'
5
+ fields:
6
+ - text: "VERSION"
7
+ key: "version"
8
+ - text: "NPM_TAG"
9
+ key: "npm-tag"
10
+ default: 'null'
11
+ required: false
12
+ - text: "BUILD_DOCUMENTATION_VERSION"
13
+ key: "build-documentation-version"
14
+ default: 'null'
15
+ hint: 'Leave NULL if no version is specified'
16
+ - text: "REMOVE_DOCUMENTATION_VERSION"
17
+ key: "remove-documentation-version"
18
+ default: 'null'
19
+ hint: 'Leave NULL if no version is specified'
20
+
21
+ - label: ":android: Android"
7
22
  command:
8
- - "env"
23
+ - "nvm install"
9
24
  - "npm install"
10
- - "npm run clean"
25
+ - "npm run test-js"
11
26
  - "npm run test-unit-android -- --release"
12
27
  - "npm run test-e2e-android-multi -- --release --headless --verbose --ci"
13
-
14
- - label: "IOS :ios:"
28
+ key: "android_build"
29
+ timeout_in_minutes: 90
30
+
31
+ - label: ":ios: iOS - Unit"
15
32
  command:
16
- - "env"
33
+ - "nvm install"
17
34
  - "npm install"
18
- - "npm run clean"
35
+ - "npm run test-unit-ios -- --release"
36
+ key: "ios_unit"
37
+ timeout_in_minutes: 90
38
+
39
+ - label: ":ios: iOS - E2E"
40
+ command:
41
+ - "nvm install"
42
+ - "npm install"
43
+ - "npm run test-snapshot-ios -- --release"
19
44
  - "npm run test-e2e-ios -- --release --multi --ci"
45
+ key: "ios_e2e"
46
+ timeout_in_minutes: 90
47
+
48
+ - label: ":package: Publish"
49
+ env:
50
+ if: "build.pull_request.id == null"
51
+ command:
52
+ - "nvm install"
53
+ - "npm install"
54
+ - "npm run release"
55
+ depends_on:
56
+ - "android_build"
57
+ - "ios_unit"
58
+ - "ios_e2e"
59
+ timeout_in_minutes: 90
package/.nvmrc ADDED
@@ -0,0 +1 @@
1
+ 14
package/Mock.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from './lib/Mock';
package/Mock.js ADDED
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const tslib_1 = require("tslib");
4
+ (0, tslib_1.__exportStar)(require("./lib/Mock"), exports);
package/Mock.ts CHANGED
@@ -1 +1 @@
1
- export * from './lib/dist/Mock';
1
+ export * from './lib/Mock';
package/README.md CHANGED
@@ -8,7 +8,6 @@
8
8
  <a href="https://www.npmjs.com/package/react-native-navigation"><img src="https://img.shields.io/npm/v/react-native-navigation/latest.svg?style=flat-square" alt="NPM latest version"></a>
9
9
  <a href="https://www.npmjs.com/package/react-native-navigation"><img src="https://img.shields.io/npm/v/react-native-navigation/snapshot.svg?style=flat-square" alt="NPM snapshot version"></a>
10
10
  <a href="https://jenkins-oss.wixpress.com/job/multi-react-native-navigation-master/"><img src="https://img.shields.io/jenkins/s/http/jenkins-oss.wixpress.com:8080/job/multi-react-native-navigation-master.svg?style=flat-square" alt="NPM snapshot version"></a>
11
- <a href="https://github.com/wix/react-native-navigation/pulls"><img src="https://img.shields.io/endpoint?url=https%3A%2F%2Fmerge-chance.info%2Fbadge%3Frepo%3Dwix/react-native-navigation"></a>
12
11
 
13
12
  </p>
14
13
  <p align="center">
package/jest.config.js ADDED
@@ -0,0 +1,40 @@
1
+ module.exports = {
2
+ preset: 'react-native',
3
+ transformIgnorePatterns: [
4
+ 'node_modules/(?!(@react-native|react-native|react-native-ui-lib|react-native-animatable)/)',
5
+ ],
6
+ transform: {
7
+ '\\.[jt]sx?$': 'babel-jest',
8
+ },
9
+ roots: [
10
+ '<rootDir>/lib/src/',
11
+ '<rootDir>/playground/src/',
12
+ '<rootDir>/integration/',
13
+ '<rootDir>/scripts/',
14
+ '<rootDir>/e2e/',
15
+ ],
16
+ setupFilesAfterEnv: ['./jest-setup.js'],
17
+ testPathIgnorePatterns: ['/node_modules/'],
18
+ moduleNameMapper: {
19
+ 'react-native-navigation/Mock': '<rootDir>/lib/Mock',
20
+ 'react-native-navigation': '<rootDir>/lib/src',
21
+ '\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
22
+ '<rootDir>/playground/img/layouts@2x.png',
23
+ },
24
+ collectCoverageFrom: [
25
+ 'lib/src/**/*.ts',
26
+ 'lib/src/**/*.tsx',
27
+ 'integration/**/*.js',
28
+ '!lib/dist/index.js',
29
+ '!lib/dist/Navigation.js',
30
+ '!lib/dist/adapters/**/*',
31
+ '!lib/dist/interfaces/**/*',
32
+ '!lib/dist/**/*.test.*',
33
+ '!integration/**/*.test.*',
34
+ '!integration/*.test.*',
35
+ '!e2e/**/*test.js',
36
+ ],
37
+ resetMocks: true,
38
+ resetModules: true,
39
+ coverageReporters: ['json', 'lcov', 'text', 'html'],
40
+ };
File without changes
File without changes
File without changes
@@ -1,11 +1,13 @@
1
1
  import React, { Component } from 'react';
2
2
  import { Button, View, Text } from 'react-native';
3
- import { Navigation } from '../..';
3
+ import { Navigation } from '../../src';
4
4
  import { ComponentProps } from '../ComponentProps';
5
5
  import { VISIBLE_SCREEN_TEST_ID } from '../constants';
6
6
  import { LayoutStore } from '../Stores/LayoutStore';
7
7
  import { connect } from '../connect';
8
8
  import { TopBar } from './TopBar';
9
+ import { events } from '../Stores/EventsStore';
10
+ import _ from 'lodash';
9
11
 
10
12
  export const ComponentScreen = connect(
11
13
  class extends Component<ComponentProps> {
@@ -34,7 +36,13 @@ export const ComponentScreen = connect(
34
36
  <Button
35
37
  testID={bottomTabOptions?.testID}
36
38
  title={bottomTabOptions?.text || ''}
37
- onPress={() => LayoutStore.selectTabIndex(this.props.layoutNode.getBottomTabs(), i)}
39
+ onPress={() => {
40
+ events.invokeBottomTabPressed({
41
+ tabIndex: i,
42
+ });
43
+ if (_.defaultTo(bottomTabOptions?.selectTabOnPress, true))
44
+ LayoutStore.selectTabIndex(this.props.layoutNode.getBottomTabs(), i);
45
+ }}
38
46
  />
39
47
  <Text>{bottomTabOptions?.badge}</Text>
40
48
  </View>
@@ -46,6 +54,9 @@ export const ComponentScreen = connect(
46
54
 
47
55
  render() {
48
56
  const Component = Navigation.mock.store.getWrappedComponent(this.props.layoutNode.data.name);
57
+ if (!Component)
58
+ throw new Error(`${this.props.layoutNode.data.name} has not been registered.`);
59
+
49
60
  return (
50
61
  <View testID={this.isVisible() ? VISIBLE_SCREEN_TEST_ID : undefined}>
51
62
  {this.props.layoutNode.getStack() && (
File without changes
@@ -1,6 +1,6 @@
1
1
  import React, { Component } from 'react';
2
2
  import { Button, TouchableOpacity } from 'react-native';
3
- import { Navigation, OptionsTopBarButton } from '../../';
3
+ import { Navigation, OptionsTopBarButton } from '../../src';
4
4
  import { events } from '../Stores/EventsStore';
5
5
 
6
6
  interface ButtonProps {
File without changes
File without changes
@@ -1,7 +1,7 @@
1
1
  import React, { Component } from 'react';
2
2
  import { Button, View, Text } from 'react-native';
3
- import { Navigation, OptionsTopBarButton } from '../..';
4
- import { OptionsTopBar, OptionsTopBarBackButton } from '../../interfaces/Options';
3
+ import { Navigation, OptionsTopBarButton } from '../../src';
4
+ import { OptionsTopBar, OptionsTopBarBackButton } from '../../src/interfaces/Options';
5
5
  import ParentNode from '../Layouts/ParentNode';
6
6
  import { LayoutStore } from '../Stores/LayoutStore';
7
7
  import { NavigationButton } from './NavigationButton';
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { Options } from '../../index';
2
+ import { Options } from '../../src/index';
3
3
  import { LayoutStore } from '../Stores/LayoutStore';
4
4
  import ParentNode from './ParentNode';
5
5
 
@@ -1,5 +1,5 @@
1
1
  import _ from 'lodash';
2
- import { OptionsTopBarButton } from 'react-native-navigation/interfaces/Options';
2
+ import { OptionsTopBarButton } from '../../src';
3
3
  import { events } from '../Stores/EventsStore';
4
4
  import ParentNode from './ParentNode';
5
5
 
@@ -1,4 +1,4 @@
1
- import { Options } from '../../index';
1
+ import { Options } from '../../src/index';
2
2
  import ParentNode from './ParentNode';
3
3
 
4
4
  interface Data {
@@ -1,6 +1,6 @@
1
1
  import _ from 'lodash';
2
- import { OptionsTopBarButton } from '../../interfaces/Options';
3
- import { Options } from '../../index';
2
+ import { OptionsTopBarButton } from '../../src/interfaces/Options';
3
+ import { Options } from '../../src/index';
4
4
  import { LayoutStore } from '../Stores/LayoutStore';
5
5
  import ComponentNode from './ComponentNode';
6
6
  import LayoutNodeFactory from './LayoutNodeFactory';
File without changes
@@ -2,8 +2,9 @@ import {
2
2
  ComponentDidDisappearEvent,
3
3
  ComponentWillAppearEvent,
4
4
  ModalDismissedEvent,
5
- } from '../../interfaces/ComponentEvents';
6
- import { ComponentDidAppearEvent, NavigationButtonPressedEvent } from '../../index';
5
+ } from '../../src/interfaces/ComponentEvents';
6
+ import { ComponentDidAppearEvent, NavigationButtonPressedEvent } from '../../src/index';
7
+ import { BottomTabPressedEvent } from '../../src/interfaces/Events';
7
8
 
8
9
  export const events = {
9
10
  navigationButtonPressed: [(_event: NavigationButtonPressedEvent) => {}],
@@ -11,6 +12,7 @@ export const events = {
11
12
  componentDidAppear: [(_event: ComponentDidAppearEvent) => {}],
12
13
  componentDidDisappear: [(_event: ComponentDidDisappearEvent) => {}],
13
14
  modalDismissed: [(_event: ModalDismissedEvent) => {}],
15
+ bottomTabPressed: [(_event: BottomTabPressedEvent) => {}],
14
16
  invokeComponentWillAppear: (event: ComponentWillAppearEvent) => {
15
17
  events.componentWillAppear &&
16
18
  events.componentWillAppear.forEach((listener) => {
@@ -41,4 +43,10 @@ export const events = {
41
43
  listener(event);
42
44
  });
43
45
  },
46
+ invokeBottomTabPressed: (event: BottomTabPressedEvent) => {
47
+ events.bottomTabPressed &&
48
+ events.bottomTabPressed?.forEach((listener) => {
49
+ listener(event);
50
+ });
51
+ },
44
52
  };
@@ -2,7 +2,7 @@ import _ from 'lodash';
2
2
  import BottomTabsNode from '../Layouts/BottomTabsNode';
3
3
  import ParentNode from '../Layouts/ParentNode';
4
4
  import LayoutNodeFactory from '../Layouts/LayoutNodeFactory';
5
- import { Options } from '../../interfaces/Options';
5
+ import { Options } from '../../src/interfaces/Options';
6
6
  import StackNode from '../Layouts/StackNode';
7
7
 
8
8
  const remx = require('remx');
@@ -77,7 +77,8 @@ const setters = remx.setters({
77
77
  },
78
78
  mergeOptions(componentId: string, options: Options) {
79
79
  const layout = getters.getLayoutById(componentId);
80
- layout.mergeOptions(options);
80
+ if (layout) layout.mergeOptions(options);
81
+ else console.warn(`[RNN error] Merge options failure: cannot find layout for: ${componentId}`);
81
82
  },
82
83
  });
83
84
 
File without changes
@@ -0,0 +1,2 @@
1
+ export declare const VISIBLE_SCREEN_TEST_ID = "VISIBLE_SCREEN_TEST_ID";
2
+ export declare const VISIBLE_OVERLAY_TEST_ID = "VISIBLE_OVERLAY_TEST_ID";
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VISIBLE_OVERLAY_TEST_ID = exports.VISIBLE_SCREEN_TEST_ID = void 0;
4
+ exports.VISIBLE_SCREEN_TEST_ID = 'VISIBLE_SCREEN_TEST_ID';
5
+ exports.VISIBLE_OVERLAY_TEST_ID = 'VISIBLE_OVERLAY_TEST_ID';
File without changes
@@ -0,0 +1,3 @@
1
+ export declare const ApplicationMock: any;
2
+ export * from './constants';
3
+ export declare function mockNativeComponents(): void;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.mockNativeComponents = exports.ApplicationMock = void 0;
4
+ const tslib_1 = require("tslib");
5
+ exports.ApplicationMock = require('./Application').Application;
6
+ (0, tslib_1.__exportStar)(require("./constants"), exports);
7
+ function mockNativeComponents() {
8
+ const { NativeCommandsSender } = require('./mocks/NativeCommandsSender');
9
+ const { NativeEventsReceiver } = require('./mocks/NativeEventsReceiver');
10
+ const { AppRegistryService } = require('./mocks/AppRegistryService');
11
+ const { Navigation } = require('react-native-navigation');
12
+ Navigation.mockNativeComponents(new NativeCommandsSender(), new NativeEventsReceiver(), new AppRegistryService());
13
+ }
14
+ exports.mockNativeComponents = mockNativeComponents;
File without changes
@@ -1,6 +1,6 @@
1
1
  import { LayoutStore } from '../Stores/LayoutStore';
2
2
  import LayoutNodeFactory from '../Layouts/LayoutNodeFactory';
3
- import { LayoutNode } from 'react-native-navigation/commands/LayoutTreeCrawler';
3
+ import { LayoutNode } from '../../src/commands/LayoutTreeCrawler';
4
4
  import { events } from '../Stores/EventsStore';
5
5
  import _ from 'lodash';
6
6
  import ComponentNode from '../Layouts/ComponentNode';
@@ -11,13 +11,13 @@ import {
11
11
  ModalDismissedEvent,
12
12
  ScreenPoppedEvent,
13
13
  ModalAttemptedToDismissEvent,
14
- } from '../../interfaces/ComponentEvents';
14
+ } from '../../src/interfaces/ComponentEvents';
15
15
  import {
16
16
  CommandCompletedEvent,
17
17
  BottomTabSelectedEvent,
18
18
  BottomTabLongPressedEvent,
19
19
  BottomTabPressedEvent,
20
- } from '../../interfaces/Events';
20
+ } from '../../src/interfaces/Events';
21
21
  import { events } from './../Stores/EventsStore';
22
22
 
23
23
  export class NativeEventsReceiver {
@@ -73,10 +73,13 @@ export class NativeEventsReceiver {
73
73
  }
74
74
 
75
75
  public registerBottomTabPressedListener(
76
- _callback: (data: BottomTabPressedEvent) => void
76
+ callback: (data: BottomTabPressedEvent) => void
77
77
  ): EmitterSubscription {
78
+ events.bottomTabPressed.push(callback);
78
79
  return {
79
- remove: () => {},
80
+ remove: () => {
81
+ _.remove(events.bottomTabPressed, (value) => value === callback);
82
+ },
80
83
  } as EmitterSubscription;
81
84
  }
82
85
 
@@ -3,27 +3,29 @@ import org.gradle.api.tasks.testing.logging.TestExceptionFormat
3
3
 
4
4
  apply plugin: 'com.android.library'
5
5
  apply plugin: 'kotlin-android'
6
- apply plugin: 'kotlin-android-extensions'
7
6
 
8
7
  def safeExtGet(prop, fallback) {
9
8
  rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
10
9
  }
11
10
 
12
- def DEFAULT_COMPILE_SDK_VERSION = 29
13
- def DEFAULT_MIN_SDK_VERSION = 19
14
- def DEFAULT_TARGET_SDK_VERSION = 29
15
- def kotlinVersion = rootProject.ext.get("RNNKotlinVersion")
16
- def kotlinStdlib = safeExtGet('RNNKotlinStdlib', 'kotlin-stdlib-jdk8')
17
- def kotlinCoroutinesCore = safeExtGet('RNNKotlinCoroutinesCore', '1.4.3')
11
+ def safeExtGetFallbackLowerBound(prop, fallback) {
12
+ Math.max(safeExtGet(prop,fallback),fallback)
13
+ }
18
14
 
15
+ def DEFAULT_COMPILE_SDK_VERSION = 30
16
+ def DEFAULT_MIN_SDK_VERSION = 21
17
+ def DEFAULT_TARGET_SDK_VERSION = 30
18
+ def DEFAULT_KOTLIN_VERSION = "1.5.31"
19
+ def DEFAULT_KOTLIN_STDLIB = 'kotlin-stdlib-jdk8'
20
+ def kotlinVersion = safeExtGet("RNNKotlinVersion", DEFAULT_KOTLIN_VERSION)
21
+ def kotlinStdlib = safeExtGet('RNNKotlinStdlib',DEFAULT_KOTLIN_STDLIB )
22
+ def kotlinCoroutinesCore = safeExtGet('RNNKotlinCoroutinesCore', '1.5.2')
19
23
  android {
20
- compileSdkVersion safeExtGet('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION)
24
+ compileSdkVersion safeExtGetFallbackLowerBound('compileSdkVersion', DEFAULT_COMPILE_SDK_VERSION)
21
25
 
22
26
  defaultConfig {
23
- minSdkVersion safeExtGet('minSdkVersion', DEFAULT_MIN_SDK_VERSION)
24
- targetSdkVersion safeExtGet('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION)
25
- versionCode 1
26
- versionName "1.0"
27
+ minSdkVersion safeExtGetFallbackLowerBound('minSdkVersion', DEFAULT_MIN_SDK_VERSION)
28
+ targetSdkVersion safeExtGetFallbackLowerBound('targetSdkVersion', DEFAULT_TARGET_SDK_VERSION)
27
29
  }
28
30
  buildTypes {
29
31
  release {
@@ -170,13 +172,13 @@ allprojects { p ->
170
172
  }
171
173
 
172
174
  dependencies {
173
- implementation "androidx.core:core-ktx:1.3.2"
175
+ implementation "androidx.core:core-ktx:1.6.0"
174
176
  implementation "org.jetbrains.kotlin:$kotlinStdlib:$kotlinVersion"
175
177
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:$kotlinCoroutinesCore"
176
178
  implementation "androidx.constraintlayout:constraintlayout:2.0.4"
177
179
 
178
- implementation 'androidx.appcompat:appcompat:1.1.0'
179
- implementation 'androidx.annotation:annotation:1.1.0'
180
+ implementation 'androidx.appcompat:appcompat:1.3.1'
181
+ implementation 'androidx.annotation:annotation:1.2.0'
180
182
  implementation 'com.google.android.material:material:1.2.0-alpha03'
181
183
 
182
184
  implementation 'com.github.wix-playground:ahbottomnavigation:3.3.0'
@@ -188,12 +190,12 @@ dependencies {
188
190
  implementation 'com.facebook.react:react-native:+'
189
191
 
190
192
  // tests
191
- testImplementation 'junit:junit:4.12'
192
- testImplementation "org.robolectric:robolectric:4.4"
193
- testImplementation 'org.assertj:assertj-core:3.8.0'
194
- testImplementation 'com.squareup.assertj:assertj-android:1.1.1'
195
- testImplementation 'org.mockito:mockito-core:3.4.0'
193
+ testImplementation 'junit:junit:4.13.2'
194
+ testImplementation "org.robolectric:robolectric:4.7.2"
195
+ testImplementation 'org.assertj:assertj-core:3.11.1'
196
+ testImplementation 'org.mockito:mockito-core:4.0.0'
197
+ testImplementation 'com.squareup.assertj:assertj-android:1.2.0'
196
198
  testImplementation 'org.mockito:mockito-inline:3.4.0'
197
- testImplementation "com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0"
199
+ testImplementation "org.mockito.kotlin:mockito-kotlin:4.0.0"
198
200
  testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlinVersion"
199
201
  }
@@ -26,11 +26,11 @@ class FontOptions {
26
26
 
27
27
  @JvmOverloads fun getTypeface(typefaceLoader: TypefaceLoader, defaultTypeface: Typeface? = null): Typeface? {
28
28
  if (isDirty) {
29
- _typeface = typefaceLoader.getTypeFace(fontFamily.get(""), fontStyle.get(""), fontWeight.get(""))
29
+ _typeface = typefaceLoader.getTypeFace(fontFamily.get(null), fontStyle.get(""), fontWeight.get(""), defaultTypeface)
30
30
  isDirty = false
31
31
  }
32
32
  return _typeface
33
- ?: defaultTypeface?.let { typefaceLoader.getTypeFace(fontFamily.get(""), fontStyle.get(""), fontWeight.get(""), it) }
33
+ ?: defaultTypeface?.let { typefaceLoader.getTypeFace(fontFamily.get(null), fontStyle.get(""), fontWeight.get(""), it) }
34
34
  }
35
35
 
36
36
  fun mergeWith(other: FontOptions) {
@@ -6,10 +6,40 @@ import com.reactnativenavigation.options.parsers.BoolParser
6
6
  import org.json.JSONObject
7
7
 
8
8
 
9
+ sealed class HwBackBottomTabsBehaviour {
10
+ object Undefined : HwBackBottomTabsBehaviour() {
11
+ override fun hasValue(): Boolean = false
12
+ }
13
+
14
+ object Exit : HwBackBottomTabsBehaviour()
15
+ object PrevSelection : HwBackBottomTabsBehaviour()
16
+ object JumpToFirst : HwBackBottomTabsBehaviour()
17
+
18
+ open fun hasValue(): Boolean = true
19
+
20
+ companion object {
21
+ private const val BEHAVIOUR_EXIT = "exit"
22
+ private const val BEHAVIOUR_PREV = "previous"
23
+ private const val BEHAVIOUR_FIRST = "first"
24
+ fun fromString(behaviour: String?): HwBackBottomTabsBehaviour {
25
+ return when (behaviour) {
26
+ BEHAVIOUR_PREV -> PrevSelection
27
+ BEHAVIOUR_FIRST -> JumpToFirst
28
+ BEHAVIOUR_EXIT -> Exit
29
+ else -> Undefined
30
+ }
31
+ }
32
+ }
33
+ }
34
+
9
35
  open class HardwareBackButtonOptions(json: JSONObject? = null) {
10
36
 
11
- @JvmField var dismissModalOnPress: Bool = NullBool()
12
- @JvmField var popStackOnPress: Bool = NullBool()
37
+ @JvmField
38
+ var dismissModalOnPress: Bool = NullBool()
39
+
40
+ @JvmField
41
+ var popStackOnPress: Bool = NullBool()
42
+ var bottomTabOnPress: HwBackBottomTabsBehaviour = HwBackBottomTabsBehaviour.Undefined
13
43
 
14
44
  init {
15
45
  parse(json)
@@ -18,16 +48,19 @@ open class HardwareBackButtonOptions(json: JSONObject? = null) {
18
48
  fun mergeWith(other: HardwareBackButtonOptions) {
19
49
  if (other.dismissModalOnPress.hasValue()) dismissModalOnPress = other.dismissModalOnPress
20
50
  if (other.popStackOnPress.hasValue()) popStackOnPress = other.popStackOnPress
51
+ if (other.bottomTabOnPress.hasValue()) bottomTabOnPress = other.bottomTabOnPress
21
52
  }
22
53
 
23
54
  fun mergeWithDefault(defaultOptions: HardwareBackButtonOptions) {
24
55
  if (!dismissModalOnPress.hasValue()) dismissModalOnPress = defaultOptions.dismissModalOnPress
25
56
  if (!popStackOnPress.hasValue()) popStackOnPress = defaultOptions.popStackOnPress
57
+ if (!bottomTabOnPress.hasValue()) bottomTabOnPress = defaultOptions.bottomTabOnPress
26
58
  }
27
59
 
28
60
  private fun parse(json: JSONObject?) {
29
61
  json ?: return
30
62
  dismissModalOnPress = BoolParser.parse(json, "dismissModalOnPress")
31
63
  popStackOnPress = BoolParser.parse(json, "popStackOnPress")
64
+ bottomTabOnPress = HwBackBottomTabsBehaviour.fromString(json.optString("bottomTabsOnPress"))
32
65
  }
33
66
  }