Skip to content

Commit 8e08f48

Browse files
authored
Merge pull request #830 from callstack/fix/builds
fix: fabric builds
2 parents 378121e + 333fbf8 commit 8e08f48

File tree

4 files changed

+32
-112
lines changed

4 files changed

+32
-112
lines changed

ios/Fabric/RNCPagerViewComponentView.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,6 @@ NS_ASSUME_NONNULL_BEGIN
99

1010
@interface RNCPagerViewComponentView : RCTViewComponentView <UIScrollViewDelegate>
1111

12-
@property(nonatomic) BOOL overdrag;
13-
1412
- (void)setPage:(NSInteger)number;
1513
- (void)setPageWithoutAnimation:(NSInteger)number;
1614

ios/Fabric/RNCPagerViewComponentView.mm

Lines changed: 19 additions & 106 deletions
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,14 @@
1515

1616
using namespace facebook::react;
1717

18-
@interface RNCPagerViewComponentView () <RCTRNCViewPagerViewProtocol, UIPageViewControllerDataSource, UIPageViewControllerDelegate, UIScrollViewDelegate, UIGestureRecognizerDelegate>
19-
20-
@property(nonatomic, assign) UIPanGestureRecognizer* panGestureRecognizer;
21-
18+
@interface RNCPagerViewComponentView () <RCTRNCViewPagerViewProtocol, UIScrollViewDelegate>
2219
@end
2320

2421
@implementation RNCPagerViewComponentView {
2522
RNCViewPagerShadowNode::ConcreteState::Shared _state;
2623
UIScrollView *_scrollView;
2724
UIView *_containerView;
28-
25+
2926
CGSize _contentSize;
3027
NSInteger _initialPage;
3128
}
@@ -35,73 +32,29 @@ - (instancetype)initWithFrame:(CGRect)frame
3532
if (self = [super initWithFrame:frame]) {
3633
static const auto defaultProps = std::make_shared<const RNCViewPagerProps>();
3734
_props = defaultProps;
38-
_nativeChildrenViewControllers = [[NSMutableArray alloc] init];
39-
_currentIndex = -1;
40-
_destinationIndex = -1;
41-
_layoutDirection = @"ltr";
42-
_overdrag = NO;
43-
UIPanGestureRecognizer* panGestureRecognizer = [UIPanGestureRecognizer new];
44-
self.panGestureRecognizer = panGestureRecognizer;
45-
panGestureRecognizer.delegate = self;
46-
[self addGestureRecognizer: panGestureRecognizer];
47-
35+
_initialPage = -1;
36+
37+
_scrollView = [[UIScrollView alloc] initWithFrame:self.bounds];
38+
39+
_scrollView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
40+
_scrollView.delaysContentTouches = NO;
41+
_scrollView.delegate = self;
42+
_scrollView.pagingEnabled = YES;
43+
_scrollView.showsHorizontalScrollIndicator = NO;
44+
_scrollView.showsVerticalScrollIndicator = NO;
45+
46+
[self addSubview:_scrollView];
47+
48+
_containerView = [[UIView alloc] initWithFrame:CGRectZero];
49+
50+
[_scrollView addSubview:_containerView];
4851
}
4952

5053
return self;
5154
}
5255

53-
#pragma mark - React API
54-
55-
- (void)mountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index {
56-
UIViewController *wrapper = [[UIViewController alloc] initWithView:childComponentView];
57-
[_nativeChildrenViewControllers insertObject:wrapper atIndex:index];
58-
}
59-
60-
- (void)unmountChildComponentView:(UIView<RCTComponentViewProtocol> *)childComponentView index:(NSInteger)index {
61-
[[_nativeChildrenViewControllers objectAtIndex:index].view removeFromSuperview];
62-
[_nativeChildrenViewControllers objectAtIndex:index].view = nil;
63-
[_nativeChildrenViewControllers removeObjectAtIndex:index];
64-
65-
NSInteger maxPage = _nativeChildrenViewControllers.count - 1;
66-
67-
if (self.currentIndex >= maxPage) {
68-
[self goTo:maxPage animated:NO];
69-
}
70-
}
71-
72-
73-
-(void)updateLayoutMetrics:(const facebook::react::LayoutMetrics &)layoutMetrics oldLayoutMetrics:(const facebook::react::LayoutMetrics &)oldLayoutMetrics {
74-
[super updateLayoutMetrics:layoutMetrics oldLayoutMetrics:_layoutMetrics];
75-
self.contentView.frame = RCTCGRectFromRect(_layoutMetrics.getContentFrame());
76-
_layoutMetrics = layoutMetrics;
77-
}
78-
79-
80-
-(void)prepareForRecycle {
81-
[super prepareForRecycle];
82-
83-
_nativeChildrenViewControllers = [[NSMutableArray alloc] init];
84-
[_nativePageViewController.view removeFromSuperview];
85-
_nativePageViewController = nil;
86-
87-
_currentIndex = -1;
88-
}
89-
90-
- (void)shouldDismissKeyboard:(RNCViewPagerKeyboardDismissMode)dismissKeyboard {
91-
#if !TARGET_OS_VISION
92-
UIScrollViewKeyboardDismissMode dismissKeyboardMode = UIScrollViewKeyboardDismissModeNone;
93-
switch (dismissKeyboard) {
94-
case RNCViewPagerKeyboardDismissMode::None:
95-
dismissKeyboardMode = UIScrollViewKeyboardDismissModeNone;
96-
break;
97-
case RNCViewPagerKeyboardDismissMode::OnDrag:
98-
dismissKeyboardMode = UIScrollViewKeyboardDismissModeOnDrag;
99-
break;
100-
}
101-
scrollView.keyboardDismissMode = dismissKeyboardMode;
102-
#endif
103-
}
10456

57+
#pragma mark - React API
10558

10659
- (void)updateProps:(const facebook::react::Props::Shared &)props oldProps:(const facebook::react::Props::Shared &)oldProps{
10760
const auto &oldScreenProps = *std::static_pointer_cast<const RNCViewPagerProps>(_props);
@@ -206,23 +159,6 @@ - (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoi
206159

207160
const auto strongEventEmitter = *std::dynamic_pointer_cast<const RNCViewPagerEventEmitter>(_eventEmitter);
208161
strongEventEmitter.onPageScrollStateChanged(RNCViewPagerEventEmitter::OnPageScrollStateChanged{.pageScrollState = RNCViewPagerEventEmitter::OnPageScrollStateChangedPageScrollState::Settling });
209-
210-
if (!_overdrag) {
211-
NSInteger maxIndex = _nativeChildrenViewControllers.count - 1;
212-
BOOL isFirstPage = [self isLtrLayout] ? _currentIndex == 0 : _currentIndex == maxIndex;
213-
BOOL isLastPage = [self isLtrLayout] ? _currentIndex == maxIndex : _currentIndex == 0;
214-
CGFloat contentOffset = [self isHorizontal] ? scrollView.contentOffset.x : scrollView.contentOffset.y;
215-
CGFloat topBound = [self isHorizontal] ? scrollView.bounds.size.width : scrollView.bounds.size.height;
216-
217-
if ((isFirstPage && contentOffset <= topBound) || (isLastPage && contentOffset >= topBound)) {
218-
CGPoint croppedOffset = [self isHorizontal] ? CGPointMake(topBound, 0) : CGPointMake(0, topBound);
219-
*targetContentOffset = croppedOffset;
220-
221-
strongEventEmitter.onPageScrollStateChanged(RNCViewPagerEventEmitter::OnPageScrollStateChanged{.pageScrollState = RNCViewPagerEventEmitter::OnPageScrollStateChangedPageScrollState::Idle });
222-
}
223-
}
224-
225-
226162
}
227163

228164
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
@@ -300,29 +236,6 @@ + (ComponentDescriptorProvider)componentDescriptorProvider
300236
}
301237

302238

303-
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
304-
305-
// Recognize simultaneously only if the other gesture is RN Screen's pan gesture (one that is used to perform fullScreenGestureEnabled)
306-
if (gestureRecognizer == self.panGestureRecognizer && [NSStringFromClass([otherGestureRecognizer class]) isEqual: @"RNSPanGestureRecognizer"]) {
307-
UIPanGestureRecognizer* panGestureRecognizer = (UIPanGestureRecognizer*) gestureRecognizer;
308-
CGPoint velocity = [panGestureRecognizer velocityInView:self];
309-
BOOL isLTR = [self isLtrLayout];
310-
BOOL isBackGesture = (isLTR && velocity.x > 0) || (!isLTR && velocity.x < 0);
311-
312-
if (self.currentIndex == 0 && isBackGesture) {
313-
scrollView.panGestureRecognizer.enabled = false;
314-
} else {
315-
const auto &viewProps = *std::static_pointer_cast<const RNCViewPagerProps>(_props);
316-
scrollView.panGestureRecognizer.enabled = viewProps.scrollEnabled;
317-
}
318-
319-
return YES;
320-
}
321-
const auto &viewProps = *std::static_pointer_cast<const RNCViewPagerProps>(_props);
322-
scrollView.panGestureRecognizer.enabled = viewProps.scrollEnabled;
323-
return NO;
324-
}
325-
326239
@end
327240

328241
Class<RCTComponentViewProtocol> RNCViewPagerCls(void)

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"lib",
1313
"android",
1414
"ios",
15-
"cpp",
15+
"common",
1616
"react-native-pager-view.podspec",
1717
"!lib/typescript/example",
1818
"!android/build",
@@ -55,6 +55,7 @@
5555
"devDependencies": {
5656
"@babel/eslint-parser": "^7.18.2",
5757
"@react-native/eslint-config": "^0.72.2",
58+
"@react-native/metro-config": "^0.72.11",
5859
"@release-it/conventional-changelog": "^2.0.0",
5960
"@tsconfig/react-native": "^3.0.0",
6061
"@types/jest": "^28.1.2",
@@ -72,8 +73,7 @@
7273
"react-native": "0.72.5",
7374
"react-native-builder-bob": "^0.18.3",
7475
"release-it": "^14.2.2",
75-
"typescript": "^4.5.2",
76-
"@react-native/metro-config": "^0.72.11"
76+
"typescript": "^4.5.2"
7777
},
7878
"resolutions": {
7979
"@types/react": "18.0.29"

react-native-pager-view.podspec

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ require "json"
22

33
package = JSON.parse(File.read(File.join(__dir__, "package.json")))
44
folly_compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -Wno-comma -Wno-shorten-64-to-32'
5+
new_arch_enabled = ENV['RCT_NEW_ARCH_ENABLED'] == '1'
56

67
Pod::Spec.new do |s|
78
s.name = "react-native-pager-view"
@@ -16,6 +17,14 @@ Pod::Spec.new do |s|
1617

1718
s.source_files = "ios/**/*.{h,m,mm}"
1819

20+
if new_arch_enabled
21+
s.subspec "common" do |ss|
22+
ss.source_files = "common/cpp/**/*.{cpp,h}"
23+
ss.header_dir = "RNCViewPager"
24+
ss.pod_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)/common/cpp\"" }
25+
end
26+
end
27+
1928
# install_modules_dependencies has been defined in RN 0.70
2029
# This check ensure that the library can work on older versions of RN
2130
if defined?(install_modules_dependencies)
@@ -24,7 +33,7 @@ Pod::Spec.new do |s|
2433
s.dependency "React-Core"
2534

2635
# Don't install the dependencies when we run `pod install` in the old architecture.
27-
if ENV['RCT_NEW_ARCH_ENABLED'] == '1' then
36+
if new_arch_enabled then
2837
s.compiler_flags = folly_compiler_flags + " -DRCT_NEW_ARCH_ENABLED=1"
2938
s.pod_target_xcconfig = {
3039
"HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"",

0 commit comments

Comments
 (0)