Refactor right buttons
This pr started with an attempt to eliminate button flickering entirely when updating buttons which contain react components via mergeOptions. While the attempt wasn't 100% successful, I dit get some insights in the process.
* It's not possible to add buttons at specific indices. Buttons contain an order property which determines the order of the button in the TopBar. To somewhat overcome this limitation, we can let users control button order via options.
* When a right most component button is replaced with another component button, the rest of the buttons shift to the right since the newly added component isn't measured when it's added to the menu and its width is zero.
We usually handle this situation with the `waitForRender` option but since buttons are measured with `MeasureSpec.UNSPECIFIED`, their dimensions are zero. Because of this, I've added options to set button dimensions.
* When updating buttons via mergeOptions, if a component button is already added to the menu with the same order we will not remove and added it again. This mitigates flickering in some situations.
* Textual button style properties were applied by traversing the view hierarchy and searching for the TextView corresponding to the button and updating its styles directly.
There was an inherent bug in this logic where if two buttons contained the same text, styles could have been applied to the wrong TextView. We now apply styles directly on the button using spans.
* Fix invalid popover enum value for modal presentation style
The correct enum value as defined in lib/ios/RNNConvert.m is "popover" not "popOver", in line with UIModalPresentationPopover.
* Add to documentation on modal presentation styles
Add popover value and link to iOS documentation.
Co-authored-by: Yogev Ben David <yogev132@gmail.com>
Fix title component not being replaced via mergeOptions (#6066)
This commit fixes a bug related to setting a new react component as title via mergeOptions. When a title component was set, and the user tried to replace the existing title with a new title via mergeOptions, the new title was not created and instead the current title was reapplied.
Fixes #5377
Configure scrollEdgeAppearance with opaque background (#6038)
* Configure scrollEdgeAppearance with opaque background
I noticed there is now an animation that occurs when pushing the first
view on a stack. This will happen with both:
`largeTitle: { visible: true }`
and
`largeTitle: { visible: false }`
It seems caused by the setting of the `scrollEdgeAppearance` background
without first configuring it using `configureWithOpaqueBackground`.
I also added checks for iOS 13 since these APIs require iOS 13.
* Update lib/ios/TopBarAppearancePresenter.m
Co-Authored-By: Yogev Ben David <yogevbd@wix.com>
* Update lib/ios/TopBarAppearancePresenter.m
Co-authored-by: Yogev Ben David <yogev132@gmail.com>
Co-authored-by: Yogev Ben David <yogevbd@wix.com>
Add Windows compatibility in 4 node scripts. (#6015)
Added windows compatibility to build scripts. To run the packager on windows, use: `npm run start-windows`
Co-authored-by: Guy Carmeli <guyca@users.noreply.github.com>
* Fix translucent bottomTabs
* Remove unnecessary safeAreaView from Root component
* Add bottomTabsPresenter base class
* Revert Root.js
* DrawBehind when largeTitle is visible
Co-authored-by: Guy Carmeli <guyca@users.noreply.github.com>
Create new UITabBarItem instance on each bottomTab update (#6018)
Fix an issue where bottomTab.testID doesn't get updated on mergeOptions unless a new UITabBarItem is created. Look like an issue in iOS where tabBarItem.accessibilityIdentifier doesn't get updated unless a new tabBarItem is created.
Detach bottomTabPresenter from basePresenter (#5970)
Refactor bottomTabs options applying mechanism. Both bottomTab and bottomTabs presenters were part of the base UIViewController class which was wrong. This commits moves them to the BottomTabsController.
This refactor mostly contains the following
* Detach bottomTabPresenter from basePresenter
* Create tabBarItem appearance on presenter init
* Refactor bottomTabPresenter
* Refactor bottomTabPresenter
* Move appearance creation to bottomTabsController
* Merge child options with direct child controller
* Hide modal and overlay containers
This commit improves support for react-native-youtube library. This library uses the native Youtube player which requires that no visible views will be laid out on top of the player. This commit set visibility of Modal and Overlay containers to GONE when they are empty.
* fix tests