Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refact: merge Fabric & Paper impls: ScreenStackHeaderSubview (4) #1418

Merged
merged 177 commits into from
Apr 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
177 commits
Select commit Hold shift + click to select a range
6f2121a
chore: Set RN_FABRIC_ENABLED compiler flag when fabric is enabled
kkafar Apr 7, 2022
00fc6db
refract: Move RNSScreenComponentView implementation to RNSScreenView &&
kkafar Apr 8, 2022
6dd5347
refract: Rename dependencies to make previous change work
kkafar Apr 8, 2022
9f78cc0
chore: update Cocoapods to .3
kkafar Apr 14, 2022
9b18375
fix: type in RNSScreen.mm
kkafar Apr 14, 2022
4a1c315
fix: add missing space to compiler flags in RNScreens.podspec
kkafar Apr 14, 2022
76efc19
refact: rename all source .m files to .mm
kkafar Apr 15, 2022
947ac3d
chore: update FabricExample's Podfile.lock
kkafar Apr 15, 2022
c2e020d
fix: move reactSetFrame: method to Paper specific section
kkafar Apr 15, 2022
f0c88c2
fix: fix typo in ifdef directive
kkafar Apr 15, 2022
b37a60a
fix: temporary: move setActivityStateOrNil & setPointerEvents methods to
kkafar Apr 15, 2022
6825875
fix: add missing replaceAnimation prop (NOT TESTED)
kkafar Apr 15, 2022
ce01586
fix: move notifyFinishTransitioning method to Paper specific section
kkafar Apr 15, 2022
8a1525c
fix: move notifyDismissCancelledWithDismissCount: method to Paper
kkafar Apr 15, 2022
249d675
fix: move notifyTransitionProgress:closing:goingForward: method to Paper
kkafar Apr 15, 2022
5e89e5b
fix: remove duplication of prop setting
kkafar Apr 15, 2022
d028f87
chore: change handling of unsupported props to noop
kkafar Apr 15, 2022
ebdbafa
fix: move RNSScreenManager impl & def under !RN_FABRIC_ENABLED condition
kkafar Apr 15, 2022
cfd3842
fix: remove duplicated prop update in updateProps method
kkafar Apr 15, 2022
40d438a
fix: temporary: exclude usages of customAnimationOnSwipe from Fabric
kkafar Apr 15, 2022
e79ae5f
fix: make the project compile
kkafar Apr 20, 2022
a7e3012
chore: merge ScreenStack headers
kkafar Apr 20, 2022
4ea96a7
chore: merge imports in ScreenStack impls
kkafar Apr 20, 2022
f9160d4
chore: move initWithFrame: method & add sections
kkafar Apr 20, 2022
22d0484
chore: move navigationController:didShowViewController:animated method
kkafar Apr 20, 2022
60b9d20
chore: merge presentationControllerDidDismiss: method
kkafar Apr 20, 2022
30b3a1e
chore: move {mount,unmount}ChildComponentView:index: methods
kkafar Apr 20, 2022
384df76
chore: move takeSnapshot method
kkafar Apr 20, 2022
228aa31
chore: merge didMoveToWindow methods
kkafar Apr 20, 2022
bdd2c24
chore: move mountingTransactionWillMountWithMetadata: method to
kkafar Apr 20, 2022
c246467
chore: merge maybeAddToParentAndUpdateContainer methods
kkafar Apr 20, 2022
c2c6252
chore: move markChildUpdated & didUpdateChildren methods to Paper
kkafar Apr 20, 2022
c91c43b
chore: move insertReactSubview:atIndex: method to Paper specific section
kkafar Apr 20, 2022
16fe33d
chore: move removeReactSubview: method to paper specific section
kkafar Apr 20, 2022
906ce0d
chore: move didUpdateReactSubviews method to paper specific section
kkafar Apr 20, 2022
8c9585d
chore: merge reactAddControllerToClosestParent: methods
kkafar Apr 20, 2022
34f8cb3
chore: merge setModalViewControllers: methods
kkafar Apr 20, 2022
ee139da
chore: WIP: merge setPushViewControllers
kkafar Apr 20, 2022
ed24d05
chore: merge updateContainer methods
kkafar Apr 20, 2022
8140571
chore: move hitTest:withEvent: method to paper specific section
kkafar Apr 20, 2022
899b285
refact: fix braces in updateContainer method
kkafar Apr 20, 2022
35fd105
chore: move invalidate method to paper specific section
kkafar Apr 20, 2022
bc27beb
chore: merge dismissOnReload methods
kkafar Apr 20, 2022
0c57d95
chore: move isInGestureResponseDistance:topScreen: method to paper
kkafar Apr 20, 2022
844820c
chore: merge cancelTouchesInParent methods
kkafar Apr 20, 2022
fa21ff4
chore: merge gestureRecognizerShouldBegin: methods
kkafar Apr 20, 2022
159e07a
chore: move isScrollViewPanGestureRecognizer: method to paper specific
kkafar Apr 20, 2022
c5a3093
chore: move two gestureRecognizer:... methods to paper specific section
kkafar Apr 20, 2022
f0d45dc
chore: move two interactionController getters to paper specific section
kkafar Apr 20, 2022
396d58e
chore: move prepareForRecycle method to fabric specific section & finish
kkafar Apr 20, 2022
7b66535
fix: add facebook::react namespace to C++ react types
kkafar Apr 20, 2022
8b212d3
chore: remove RNSScreenStackComponentView.{h,mm} files
kkafar Apr 20, 2022
7ea7005
chore: add TODOs
kkafar Apr 20, 2022
7755d06
chore: merge headers
kkafar Apr 20, 2022
14e2dfa
refact: apply linter suggestions
kkafar Apr 20, 2022
48c5d5a
chore: initial impl setup
kkafar Apr 20, 2022
7548166
chore: merge props
kkafar Apr 20, 2022
61edbe0
chore: add pragma mark sections: Fabric specific, Paper specific
kkafar Apr 20, 2022
ee4407b
chore: move subviews methods to paper specific sections
kkafar Apr 20, 2022
e30ade9
chore: merge hitTest:withEvent: methods
kkafar Apr 20, 2022
9ba8a23
chore: move didSetProps: method to paper specific section
kkafar Apr 20, 2022
888d5a7
chore: move didUpdateReactSubviews to paper specific section
kkafar Apr 20, 2022
8a15b87
chore: merge loadBackButtonImageInViewController methods
kkafar Apr 20, 2022
7aed355
chore: merge buildAppearance:withConfig: methods
kkafar Apr 20, 2022
03121b0
chore: merge updateViewController:withConfig:animated: methods
kkafar Apr 20, 2022
7ba7fea
chore: move addSubviesToNavItem: method to Fabric specific section
kkafar Apr 20, 2022
36794a0
chore: move mountChildComponentView method to Fabric specific section
kkafar Apr 20, 2022
73f973e
chore: move unmountChildComponentView: method to Fabric specific section
kkafar Apr 20, 2022
42b9d9d
chore: move RCTComponentViewProtocol methods & conversion methods to
kkafar Apr 20, 2022
92744dc
fix: make implementations of StackHeaderConfigManager &
kkafar Apr 20, 2022
b6ab6d2
chore: remove RNSScreenStackHeaderConfigComponentView.{h,mm} files
kkafar Apr 20, 2022
ac18602
refact: rename all references to RNSScreenStackHeaderComponentView
kkafar Apr 20, 2022
c523870
chore: restore NS_ASSUME_NONNULL_{BEGIN,END} macros
kkafar Apr 20, 2022
bd73703
refact: apply linter suggestions
kkafar Apr 20, 2022
a0245cf
fix: restore RNSScreenManager on Fabric
WoLewicki Apr 20, 2022
66adb09
Merge branch '@kkafar/merge-fabric-to-paper' of github.com:software-m…
kkafar Apr 20, 2022
57554c9
refact: apply linter suggestion
kkafar Apr 20, 2022
0e73f8f
fix: remove merge artifact
kkafar Apr 20, 2022
f3c937e
chore: merge in base branch
kkafar Apr 20, 2022
f47cf9a
refact: apply linter suggestions
kkafar Apr 20, 2022
f1e9b9d
fix: add *.mm sources to TestExample project
kkafar Apr 21, 2022
cabd831
chore: merge in base branch
kkafar Apr 21, 2022
d447b7f
refact: apply linter suggestions
kkafar Apr 21, 2022
cddd893
chore: create separate file for RNSScreenStackHeaderSubview
kkafar Apr 21, 2022
3f0482a
chore: remove RNSScreenStackHeaderSubviewComponentView.h
kkafar Apr 21, 2022
2bfa485
chore: initial setup for ScreenStackHeaderSubview
kkafar Apr 21, 2022
b1dbf4d
refact: change reference to ScreenStackHeaderSubview in HeaderConfig
kkafar Apr 21, 2022
d6c89b5
refact: rename references to RNSScreenStackHeaderSubviewComponentView
kkafar Apr 21, 2022
de9da1c
chore: move paper class implementation to new file
kkafar Apr 21, 2022
22d1e35
chore: move RNSScreenStackHeaderSubviewType enum to RNSEnums & add
kkafar Apr 21, 2022
0f9fb7e
refact: apply linter suggestions
kkafar Apr 21, 2022
ff59d49
fix: add missing header
kkafar Apr 21, 2022
82868d1
chore: organize imports in header file
kkafar Apr 21, 2022
cbd8540
chore: merge implementations
kkafar Apr 21, 2022
6322a02
refact: apply linter suggestions
kkafar Apr 21, 2022
6690ba6
chore: remove RNSScreenStackHeaderSubviewComponentView.mm file
kkafar Apr 21, 2022
076be98
chore: merge RNSScreenStackHeaderConfig#hitTest:withEvent: method
kkafar Apr 21, 2022
d3c9e6c
chore: merge
kkafar Apr 21, 2022
466056e
fix: update enums in RNSScreenStackHeaderConfig
kkafar Apr 21, 2022
fa8d395
fix: restore RNSScreenStackHeaderConfigManager for Fabric impl
kkafar Apr 21, 2022
4fbb7ff
chore: merge base branch with fix
kkafar Apr 21, 2022
5d2b1fb
fix: restore RNScreenStackmanager for Fabric impl
kkafar Apr 21, 2022
dae6c4c
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack' into @kkafa…
kkafar Apr 21, 2022
55e9a5e
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack-header-confi…
kkafar Apr 21, 2022
dfade18
Merge branch 'main' into @kkafar/merge-fabric-to-paper
kkafar Apr 21, 2022
8de3dc0
Merge branch '@kkafar/merge-fabric-to-paper' into @kkafar/merge-fabri…
kkafar Apr 21, 2022
9a350ff
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack' into @kkafa…
kkafar Apr 21, 2022
2119955
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack-header-confi…
kkafar Apr 21, 2022
c03b809
chore: remove bridge reference & constructor
kkafar Apr 21, 2022
953299e
fix: make TestsExample compile
kkafar Apr 21, 2022
d46daff
potentially important: remove RNSScreen *_controller field
kkafar Apr 21, 2022
3fa258d
chore: move setViewToSnapshot & resetViewToScreen methods to Fabric
kkafar Apr 21, 2022
5196876
chore: merge viewWillAppear: methods
kkafar Apr 21, 2022
a7e0329
chore: merge viewWillDisappear methods
kkafar Apr 21, 2022
4f0ff72
chore: merge viewDidAppear methods
kkafar Apr 21, 2022
2bf93c5
chore: merge viewDidDisappear methods
kkafar Apr 21, 2022
55e4e19
chore: merge viewDidLayoutSubviews methods
kkafar Apr 21, 2022
77fe908
chore: move findFirstResponder method to paper specific section
kkafar Apr 21, 2022
5193821
chore: move willMoveToParentViewController method to paper specific
kkafar Apr 21, 2022
834ade9
chore: move hideHeaderIfNecessary method to paper specific section
kkafar Apr 21, 2022
53fd009
chore: move traverseForScrollView: method to paper specific section
kkafar Apr 21, 2022
b946e61
chore: move methods connected to transitioning to paper specific section
kkafar Apr 21, 2022
40b8122
Merge branch '@kkafar/merge-fabric-to-paper' into @kkafar/merge-fabri…
kkafar Apr 21, 2022
c2925e3
refact: apply linter suggestions
kkafar Apr 21, 2022
d1844ba
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack' into @kkafa…
kkafar Apr 21, 2022
95d0025
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack-header-confi…
kkafar Apr 21, 2022
44368ed
chore: remove leftover comments
kkafar Apr 21, 2022
0ab05f3
refact: rename BASE_VIEW -> RNS_BASE_VIEW
kkafar Apr 21, 2022
15a30cf
refact: apply linter suggestions
kkafar Apr 21, 2022
0afaafd
refact: rename EXPECTED_VIEW -> RNS_EXPECTED_VIEW§
kkafar Apr 21, 2022
d0f128d
chore: restore back initWithBridge method for Fabric
kkafar Apr 22, 2022
d6ccca1
fix: restore back notifyFinishTransitioning method for paper
kkafar Apr 22, 2022
3d8a6a0
Merge branch 'main' into @kkafar/merge-fabric-to-paper
kkafar Apr 22, 2022
d465135
fix: tvOS: exclude props not existion on tv platform
kkafar Apr 22, 2022
f0e42f0
chore: remove unnecessary header guard directives from RNSConvert.h
kkafar Apr 22, 2022
d9bb8a6
chore: remove check if passed view is of class RNSScreenView
kkafar Apr 22, 2022
deee6fb
Merge branch '@kkafar/merge-fabric-to-paper' into @kkafar/merge-fabri…
kkafar Apr 22, 2022
3dfce64
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack' into @kkafa…
kkafar Apr 22, 2022
c80940d
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack-header-confi…
kkafar Apr 22, 2022
86e64da
Merge branch 'main' into @kkafar/merge-fabric-to-paper-screen-stack-h…
kkafar Apr 27, 2022
d2e5771
refact: apply linter suggestion
kkafar Apr 27, 2022
72a766b
fix: remove merge artifacts
kkafar Apr 27, 2022
838dbc8
fix: restore RNSScreenStackHeaderSubviewManager for Fabric implementa…
kkafar Apr 27, 2022
56679d3
fix: surround RNSScreenStackHeaderConfigCls with guard directive
kkafar Apr 27, 2022
21314af
refact: copy comment from didSetProps method to
kkafar Apr 27, 2022
55a4d95
refact: remove leftover comments
kkafar Apr 27, 2022
84b6a01
chore: replace cust getFontFamliyPropValue method with one provided by
kkafar Apr 27, 2022
3f19111
chore: replace custom stringToPropValue method with one provided by
kkafar Apr 27, 2022
5128931
refact: move reactSubviews method to common section
kkafar Apr 27, 2022
fd57615
chore: settle down to single convention of specifing superclasses
kkafar Apr 27, 2022
f900acc
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack-header-confi…
kkafar Apr 28, 2022
0497dd7
refact: remove leftover TODO comment
kkafar Apr 28, 2022
7cd80e9
chore: move reactSubviews prop to common section in header file
kkafar Apr 28, 2022
1dff426
chore: remove redundant header directives in RNSEnums.h header
kkafar Apr 28, 2022
4e36439
refact: remove unused addSubviewsToNavItem:withConfig: method
kkafar Apr 28, 2022
1c50971
chore: surround RNSScreenStackHeaderSubviewCls method with guard
kkafar Apr 28, 2022
b914e28
refact: change #ifndef to #ifdef <empty> #else ...
kkafar Apr 28, 2022
e06f916
refact: remove leftover comments
kkafar Apr 28, 2022
6255f2e
fix: revert c03b80903
kkafar Apr 28, 2022
8e16be2
refact: remove // done comments for the 3rd time...
kkafar Apr 28, 2022
9ec99bc
refact: ifndef -> ifdef + else (for the 3rd time)
kkafar Apr 28, 2022
1e30773
refact: remove merge artifact: unused import
kkafar Apr 28, 2022
0a11a10
chore: move reactSubviews prop to common section in header file
kkafar Apr 28, 2022
68435f2
refact: linter suggestion
kkafar Apr 28, 2022
b917b68
fix: make reactSubviews prop fabric specific
kkafar Apr 28, 2022
6818798
refact: optimize imports
kkafar Apr 28, 2022
91ccf27
refact: remove unnecessary _backgroundSharedColor property
kkafar Apr 28, 2022
7460d71
chore: move call to didMoveToParentViewController to common section
kkafar Apr 28, 2022
c3ef14e
fix: surround RNSScreenStackHeaderSubviewManager#view method with guard
kkafar Apr 28, 2022
752987e
chore: make reactSubviews prop private
kkafar Apr 28, 2022
b0f1141
refact: minor changes
kkafar Apr 28, 2022
4ca37ef
chore: remove unused private isInitialValueSet prop
kkafar Apr 28, 2022
3e4dce0
Merge branch '@kkafar/merge-fabric-to-paper-screen-stack-header-confi…
kkafar Apr 28, 2022
5dd7c08
Merge branch 'main' into @kkafar/merge-fabric-to-paper-screen-stack-h…
kkafar Apr 28, 2022
b59a975
refact: remove duplicated for loop
kkafar Apr 28, 2022
ad5e7d4
chore: merge RNSScreenStackHeaderConfig#hitTest:withEvent: method
kkafar Apr 28, 2022
29a5f9f
refact: cleanup
kkafar Apr 28, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions ios/RNSConvert.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
+ (RNSScreenStackAnimation)RNSScreenStackAnimationFromCppEquivalent:
(facebook::react::RNSScreenStackAnimation)stackAnimation;

+ (RNSScreenStackHeaderSubviewType)RNSScreenStackHeaderSubviewTypeFromCppEquivalent:
(facebook::react::RNSScreenStackHeaderSubviewType)subviewType;

@end

#endif // RN_FABRIC_ENABLED
18 changes: 18 additions & 0 deletions ios/RNSConvert.mm
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,24 @@ + (RNSScreenStackAnimation)RNSScreenStackAnimationFromCppEquivalent:
}
}

+ (RNSScreenStackHeaderSubviewType)RNSScreenStackHeaderSubviewTypeFromCppEquivalent:
(facebook::react::RNSScreenStackHeaderSubviewType)subviewType
{
switch (subviewType) {
case facebook::react::RNSScreenStackHeaderSubviewType::Left:
return RNSScreenStackHeaderSubviewTypeLeft;
case facebook::react::RNSScreenStackHeaderSubviewType::Right:
return RNSScreenStackHeaderSubviewTypeRight;
case facebook::react::RNSScreenStackHeaderSubviewType::Title:
return RNSScreenStackHeaderSubviewTypeTitle;
case facebook::react::RNSScreenStackHeaderSubviewType::Center:
return RNSScreenStackHeaderSubviewTypeCenter;
case facebook::react::RNSScreenStackHeaderSubviewType::SearchBar:
return RNSScreenStackHeaderSubviewTypeSearchBar;
case facebook::react::RNSScreenStackHeaderSubviewType::Back:
return RNSScreenStackHeaderSubviewTypeBackButton;
}
}
@end

#endif // RN_FABRIC_ENABLED
12 changes: 8 additions & 4 deletions ios/RNSEnums.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,3 @@
#ifndef RNSEnums_h
#define RNSEnums_h

typedef NS_ENUM(NSInteger, RNSScreenStackPresentation) {
RNSScreenStackPresentationPush,
RNSScreenStackPresentationModal,
Expand Down Expand Up @@ -52,4 +49,11 @@ typedef NS_ENUM(NSInteger, RNSWindowTrait) {
RNSWindowTraitHomeIndicatorHidden,
};

#endif /* RNSEnums_h */
typedef NS_ENUM(NSInteger, RNSScreenStackHeaderSubviewType) {
RNSScreenStackHeaderSubviewTypeBackButton,
RNSScreenStackHeaderSubviewTypeLeft,
RNSScreenStackHeaderSubviewTypeRight,
RNSScreenStackHeaderSubviewTypeTitle,
RNSScreenStackHeaderSubviewTypeCenter,
RNSScreenStackHeaderSubviewTypeSearchBar,
};
20 changes: 1 addition & 19 deletions ios/RNSScreenStackHeaderConfig.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
#ifdef RN_FABRIC_ENABLED
#import <React/RCTViewComponentView.h>
#import "RNSScreenStackHeaderSubviewComponentView.h"
#else
#import <React/RCTViewManager.h>
// TODO: move this import when SearchBar is implemented on Fabric
Expand All @@ -9,6 +8,7 @@

#import <React/RCTConvert.h>
#import "RNSScreen.h"
#import "RNSScreenStackHeaderSubview.h"

@interface RNSScreenStackHeaderConfig :
#ifdef RN_FABRIC_ENABLED
Expand All @@ -20,8 +20,6 @@
@property (nonatomic, weak) RNSScreenView *screenView;

#ifdef RN_FABRIC_ENABLED
// TODO: change type when StackHeaderSubview is merged (??)
@property (nonatomic) NSMutableArray<RNSScreenStackHeaderSubviewComponentView *> *reactSubviews;
@property (nonatomic) BOOL show;
#else
@property (nonatomic) UIBlurEffectStyle blurEffect;
Expand Down Expand Up @@ -62,25 +60,9 @@

@end

typedef NS_ENUM(NSInteger, RNSScreenStackHeaderSubviewType) {
kkafar marked this conversation as resolved.
Show resolved Hide resolved
RNSScreenStackHeaderSubviewTypeBackButton,
RNSScreenStackHeaderSubviewTypeLeft,
RNSScreenStackHeaderSubviewTypeRight,
RNSScreenStackHeaderSubviewTypeTitle,
RNSScreenStackHeaderSubviewTypeCenter,
RNSScreenStackHeaderSubviewTypeSearchBar,
};

@interface RCTConvert (RNSScreenStackHeader)

+ (RNSScreenStackHeaderSubviewType)RNSScreenStackHeaderSubviewType:(id)json;
+ (UIBlurEffectStyle)UIBlurEffectStyle:(id)json;
+ (UISemanticContentAttribute)UISemanticContentAttribute:(id)json;

@end

@interface RNSScreenStackHeaderSubviewManager : RCTViewManager

@property (nonatomic) RNSScreenStackHeaderSubviewType type;

@end
171 changes: 24 additions & 147 deletions ios/RNSScreenStackHeaderConfig.mm
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
#import <react/renderer/components/rnscreens/Props.h>
#import <react/renderer/components/rnscreens/RCTComponentViewHelpers.h>
#import "RCTFabricComponentsPlugins.h"
#import "RNSScreenStackHeaderSubviewComponentView.h"
#else
// TODO: move this import when SearchBar is implemented on Fabric
#import <React/RCTBridge.h>
Expand All @@ -23,7 +22,8 @@
#import "RNSScreen.h"
#import "RNSScreenStackHeaderConfig.h"

#ifndef RN_FABRIC_ENABLED
#ifdef RN_FABRIC_ENABLED
#else
// Some RN private method hacking below. Couldn't figure out better way to access image data
// of a given RCTImageView. See more comments in the code section processing SubviewTypeBackButton
@interface RCTImageView (Private)
Expand All @@ -35,40 +35,11 @@ @interface RCTImageLoader (Private)
@end
#endif

@interface RNSScreenStackHeaderSubview : UIView

@property (nonatomic, weak) RCTBridge *bridge;
@property (nonatomic, weak) UIView *reactSuperview;
@property (nonatomic) RNSScreenStackHeaderSubviewType type;

- (instancetype)initWithBridge:(RCTBridge *)bridge;

@end

@implementation RNSScreenStackHeaderSubview

- (instancetype)initWithBridge:(RCTBridge *)bridge
{
if (self = [super init]) {
_bridge = bridge;
}
return self;
}

- (void)reactSetFrame:(CGRect)frame
{
// Block any attempt to set coordinates on RNSScreenStackHeaderSubview. This
// makes UINavigationBar the only one to control the position of header content.
[super reactSetFrame:CGRectMake(0, 0, frame.size.width, frame.size.height)];
}

@end

@implementation RNSScreenStackHeaderConfig {
NSMutableArray<RNSScreenStackHeaderSubview *> *_reactSubviews;
kkafar marked this conversation as resolved.
Show resolved Hide resolved
#ifdef RN_FABRIC_ENABLED
BOOL _initialPropsSet;
#else
NSMutableArray<RNSScreenStackHeaderSubview *> *_reactSubviews;
#endif
}

Expand Down Expand Up @@ -117,23 +88,6 @@ - (void)removeFromSuperview
// is not added to native view hierarchy so we can apply our logic
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
#ifdef RN_FABRIC_ENABLED
for (RNSScreenStackHeaderSubviewComponentView *subview in _reactSubviews) {
if (subview.type == facebook::react::RNSScreenStackHeaderSubviewType::Left ||
subview.type == facebook::react::RNSScreenStackHeaderSubviewType::Right) {
// we wrap the headerLeft/Right component in a UIBarButtonItem
// so we need to use the only subview of it to retrieve the correct view
UIView *headerComponent = subview.subviews.firstObject;
// we convert the point to RNSScreenStackView since it always contains the header inside it
CGPoint convertedPoint = [_screenView.reactSuperview convertPoint:point toView:headerComponent];

UIView *hitTestResult = [headerComponent hitTest:convertedPoint withEvent:event];
if (hitTestResult != nil) {
return hitTestResult;
}
}
}
#else
for (RNSScreenStackHeaderSubview *subview in _reactSubviews) {
if (subview.type == RNSScreenStackHeaderSubviewTypeLeft || subview.type == RNSScreenStackHeaderSubviewTypeRight) {
// we wrap the headerLeft/Right component in a UIBarButtonItem
Expand All @@ -148,7 +102,6 @@ - (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
}
}
}
#endif
return nil;
}

Expand Down Expand Up @@ -391,7 +344,8 @@ + (UINavigationBarAppearance *)buildAppearance:(UIViewController *)vc
}

// TODO: implement blurEffect on Fabric
#ifndef RN_FABRIC_ENABLED
#ifdef RN_FABRIC_ENABLED
#else
if (config.blurEffect) {
appearance.backgroundEffect = [UIBlurEffect effectWithStyle:config.blurEffect];
}
Expand Down Expand Up @@ -451,15 +405,15 @@ + (UINavigationBarAppearance *)buildAppearance:(UIViewController *)vc
appearance.largeTitleTextAttributes = largeAttrs;
}

#ifndef RN_FABRIC_ENABLED
#ifdef RN_FABRIC_ENABLED
[appearance setBackIndicatorImage:nil transitionMaskImage:nil];
#else
UIImage *backButtonImage = [self loadBackButtonImageInViewController:vc withConfig:config];
if (backButtonImage) {
[appearance setBackIndicatorImage:backButtonImage transitionMaskImage:backButtonImage];
} else if (appearance.backIndicatorImage) {
[appearance setBackIndicatorImage:nil transitionMaskImage:nil];
}
#else
[appearance setBackIndicatorImage:nil transitionMaskImage:nil];
#endif // RN_FABRIC_ENABLED
return appearance;
}
Expand Down Expand Up @@ -585,45 +539,16 @@ + (void)updateViewController:(UIViewController *)vc
navitem.leftBarButtonItem = nil;
navitem.rightBarButtonItem = nil;
navitem.titleView = nil;
#ifdef RN_FABRIC_ENABLED
for (RNSScreenStackHeaderSubviewComponentView *subview in config.reactSubviews) {
switch (subview.type) {
case facebook::react::RNSScreenStackHeaderSubviewType::Left: {
//#if !TARGET_OS_TV
// navitem.leftItemsSupplementBackButton = config.backButtonInCustomView;
//#endif
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:subview];
navitem.leftBarButtonItem = buttonItem;
break;
}
case facebook::react::RNSScreenStackHeaderSubviewType::Right: {
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:subview];
navitem.rightBarButtonItem = buttonItem;
break;
}
case facebook::react::RNSScreenStackHeaderSubviewType::Center:
case facebook::react::RNSScreenStackHeaderSubviewType::Title: {
navitem.titleView = subview;
break;
}
case facebook::react::RNSScreenStackHeaderSubviewType::SearchBar: {
RCTLogWarn(@"SearchBar is not yet Fabric compatible in react-native-screens");
break;
}
case facebook::react::RNSScreenStackHeaderSubviewType::Back: {
RCTLogWarn(@"Back button subivew is not yet Fabric compatible in react-native-screens");
break;
;
}
}
}
#else

for (RNSScreenStackHeaderSubview *subview in config.reactSubviews) {
switch (subview.type) {
case RNSScreenStackHeaderSubviewTypeLeft: {
#ifdef RN_FABRIC_ENABLED
#else
#if !TARGET_OS_TV
navitem.leftItemsSupplementBackButton = config.backButtonInCustomView;
#endif
#endif // RN_FABRIC_ENABLED
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:subview];
navitem.leftBarButtonItem = buttonItem;
break;
Expand All @@ -639,6 +564,9 @@ + (void)updateViewController:(UIViewController *)vc
break;
}
case RNSScreenStackHeaderSubviewTypeSearchBar: {
#ifdef RN_FABRIC_ENABLED
RCTLogWarn(@"SearchBar is not yet Fabric compatible in react-native-screens");
#else
if (subview.subviews == nil || [subview.subviews count] == 0) {
RCTLogWarn(
@"Failed to attach search bar to the header. We recommend using `useLayoutEffect` when managing "
Expand All @@ -655,13 +583,18 @@ + (void)updateViewController:(UIViewController *)vc
}
#endif
}

#endif // RN_FABRIC_ENABLED
break;
}
case RNSScreenStackHeaderSubviewTypeBackButton: {
#ifdef RN_FABRIC_ENABLED
RCTLogWarn(@"Back button subivew is not yet Fabric compatible in react-native-screens");
#endif
break;
}
}
}
#endif // RN_FABRIC_ENABLED

if (animated && vc.transitionCoordinator != nil &&
vc.transitionCoordinator.presentationStyle == UIModalPresentationNone && !wasHidden) {
Expand Down Expand Up @@ -697,39 +630,9 @@ + (void)updateViewController:(UIViewController *)vc
#ifdef RN_FABRIC_ENABLED
#pragma mark - Fabric specific

+ (void)addSubviewsToNavItem:(UINavigationItem *)navitem withConfig:(RNSScreenStackHeaderConfig *)config
{
for (RNSScreenStackHeaderSubviewComponentView *subview in config.reactSubviews) {
switch (subview.type) {
case facebook::react::RNSScreenStackHeaderSubviewType::Left: {
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:subview];
navitem.leftBarButtonItem = buttonItem;
break;
}
case facebook::react::RNSScreenStackHeaderSubviewType::Right: {
UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:subview];
navitem.rightBarButtonItem = buttonItem;
break;
}
case facebook::react::RNSScreenStackHeaderSubviewType::Center:
case facebook::react::RNSScreenStackHeaderSubviewType::Title: {
navitem.titleView = subview;
break;
}
case facebook::react::RNSScreenStackHeaderSubviewType::SearchBar: {
RCTLogWarn(@"SearchBar is not yet supported in react-native-screens with Fabric enabled");
break;
}
case facebook::react::RNSScreenStackHeaderSubviewType::Back: {
break;
}
}
}
}

- (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
{
if (![childComponentView isKindOfClass:[RNSScreenStackHeaderSubviewComponentView class]]) {
if (![childComponentView isKindOfClass:[RNSScreenStackHeaderSubview class]]) {
RCTLogError(@"ScreenStackHeader only accepts children of type ScreenStackHeaderSubview");
return;
}
Expand All @@ -742,13 +645,13 @@ - (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childCompone
@(index),
@([childComponentView.superview tag]));

[_reactSubviews insertObject:(RNSScreenStackHeaderSubviewComponentView *)childComponentView atIndex:index];
[_reactSubviews insertObject:(RNSScreenStackHeaderSubview *)childComponentView atIndex:index];
[self updateViewControllerIfNeeded];
}

- (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index
{
[_reactSubviews removeObject:(RNSScreenStackHeaderSubviewComponentView *)childComponentView];
[_reactSubviews removeObject:(RNSScreenStackHeaderSubview *)childComponentView];
[childComponentView removeFromSuperview];
}

Expand Down Expand Up @@ -971,19 +874,6 @@ + (NSMutableDictionary *)blurEffectsForIOSVersion
return blurEffects;
}

RCT_ENUM_CONVERTER(
RNSScreenStackHeaderSubviewType,
(@{
@"back" : @(RNSScreenStackHeaderSubviewTypeBackButton),
@"left" : @(RNSScreenStackHeaderSubviewTypeLeft),
@"right" : @(RNSScreenStackHeaderSubviewTypeRight),
@"title" : @(RNSScreenStackHeaderSubviewTypeTitle),
@"center" : @(RNSScreenStackHeaderSubviewTypeCenter),
@"searchBar" : @(RNSScreenStackHeaderSubviewTypeSearchBar),
}),
RNSScreenStackHeaderSubviewTypeTitle,
integerValue)

RCT_ENUM_CONVERTER(
UISemanticContentAttribute,
(@{
Expand All @@ -996,16 +886,3 @@ + (NSMutableDictionary *)blurEffectsForIOSVersion
RCT_ENUM_CONVERTER(UIBlurEffectStyle, ([self blurEffectsForIOSVersion]), UIBlurEffectStyleExtraLight, integerValue)

@end

@implementation RNSScreenStackHeaderSubviewManager

RCT_EXPORT_MODULE()

RCT_EXPORT_VIEW_PROPERTY(type, RNSScreenStackHeaderSubviewType)

- (UIView *)view
{
return [[RNSScreenStackHeaderSubview alloc] initWithBridge:self.bridge];
}

@end
Loading