#import #import "RNSBottomTabsScreenEventEmitter.h" #import "RNSEnums.h" #import "RNSReactBaseView.h" #import "RNSScrollViewBehaviorOverriding.h" #ifdef RCT_NEW_ARCH_ENABLED #import "RNSViewControllerInvalidating.h" #else #import #endif NS_ASSUME_NONNULL_BEGIN @class RNSBottomTabsHostComponentView; @class RNSTabsScreenViewController; /** * Component view with react managed lifecycle. This view serves as root view in hierarchy * of a particular tab. */ @interface RNSBottomTabsScreenComponentView : RNSReactBaseView < #ifdef RCT_NEW_ARCH_ENABLED RNSViewControllerInvalidating #else RCTInvalidating #endif > /** * View controller responsible for managing tab represented by this component view. */ @property (nonatomic, strong, readonly, nullable) RNSTabsScreenViewController *controller; /** * If not null, the bottom tabs host view that this tab component view belongs to. */ @property (nonatomic, weak, nullable) RNSBottomTabsHostComponentView *reactSuperview; @end #pragma mark - Props /** * Properties set on component in JavaScript. */ @interface RNSBottomTabsScreenComponentView () // TODO: All of these properties should be `readonly`. Do this when support for legacy // architecture is dropped. @property (nonatomic) BOOL isSelectedScreen; @property (nonatomic, nullable) NSString *tabKey; @property (nonatomic, nullable) NSString *badgeValue; @property (nonatomic, readonly) RNSBottomTabsIconType iconType; @property (nonatomic, strong, readonly, nullable) RCTImageSource *iconImageSource; @property (nonatomic, strong, readonly, nullable) NSString *iconSfSymbolName; @property (nonatomic, strong, readonly, nullable) RCTImageSource *selectedIconImageSource; @property (nonatomic, strong, readonly, nullable) NSString *selectedIconSfSymbolName; @property (nonatomic, strong, readonly, nullable) UITabBarAppearance *standardAppearance; @property (nonatomic, strong, readonly, nullable) UITabBarAppearance *scrollEdgeAppearance; @property (nonatomic, nullable) NSString *title; @property (nonatomic, readonly) RNSOrientation orientation; @property (nonatomic) BOOL shouldUseRepeatedTabSelectionPopToRootSpecialEffect; @property (nonatomic) BOOL shouldUseRepeatedTabSelectionScrollToTopSpecialEffect; @property (nonatomic, readonly) BOOL overrideScrollViewContentInsetAdjustmentBehavior; @property (nonatomic) RNSBottomTabsScreenSystemItem systemItem; @end #pragma mark - Events @interface RNSBottomTabsScreenComponentView () /** * Use returned object to emit appropriate React Events to Element Tree. */ - (nonnull RNSBottomTabsScreenEventEmitter *)reactEventEmitter; #if !RCT_NEW_ARCH_ENABLED #pragma mark - LEGACY Event emitting blocks @property (nonatomic, copy, nullable) RCTDirectEventBlock onWillAppear; @property (nonatomic, copy, nullable) RCTDirectEventBlock onDidAppear; @property (nonatomic, copy, nullable) RCTDirectEventBlock onWillDisappear; @property (nonatomic, copy, nullable) RCTDirectEventBlock onDidDisappear; #endif // !RCT_NEW_ARCH_ENABLED @end NS_ASSUME_NONNULL_END