@onekeyfe/react-native-pager-view 6.7.0-20 → 6.7.0-22

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 (30) hide show
  1. package/android/src/main/java/com/reactnativepagerview/CollapsiblePagerHost.kt +40 -9
  2. package/android/src/main/java/com/reactnativepagerview/NestedScrollableHost.kt +8 -2
  3. package/docs/SPEC.md +44 -0
  4. package/ios/RNCCollapsiblePagerViewComponentView.mm +410 -19
  5. package/ios/tests/RNCCollapsiblePagerFirstFrameTests.mm +36 -5
  6. package/ios/tests/RNCCollapsiblePagerHitTestTests.mm +756 -0
  7. package/lib/module/CollapsiblePagerViewNativeComponent.ts +41 -46
  8. package/lib/module/NativeScroller.web.js +3 -0
  9. package/lib/module/NativeScrollerNativeComponent.ts +43 -46
  10. package/lib/module/PagerViewNativeComponent.ts +20 -25
  11. package/lib/module/WebCollapsiblePagerPage.js +7 -2
  12. package/lib/typescript/src/CollapsiblePagerView.d.ts +1 -1
  13. package/lib/typescript/src/CollapsiblePagerView.web.d.ts +1 -1
  14. package/lib/typescript/src/CollapsiblePagerViewNativeComponent.d.ts +41 -42
  15. package/lib/typescript/src/NativeScroller.d.ts +5 -3
  16. package/lib/typescript/src/NativeScroller.web.d.ts +1 -1
  17. package/lib/typescript/src/NativeScrollerNativeComponent.d.ts +47 -48
  18. package/lib/typescript/src/PagerView.d.ts +1 -1
  19. package/lib/typescript/src/PagerView.web.d.ts +1 -1
  20. package/lib/typescript/src/PagerViewNativeComponent.d.ts +20 -21
  21. package/lib/typescript/src/WebCollapsiblePagerPage.d.ts +1 -1
  22. package/lib/typescript/src/usePagerView.d.ts +2 -2
  23. package/lib/typescript/src/utils.d.ts +2 -2
  24. package/package.json +19 -7
  25. package/src/CollapsiblePagerViewNativeComponent.ts +41 -46
  26. package/src/NativeScroller.tsx +14 -3
  27. package/src/NativeScroller.web.tsx +15 -1
  28. package/src/NativeScrollerNativeComponent.ts +43 -46
  29. package/src/PagerViewNativeComponent.ts +20 -25
  30. package/src/WebCollapsiblePagerPage.tsx +7 -2
@@ -52,6 +52,8 @@ using namespace facebook::react;
52
52
  window.hidden = NO;
53
53
  [self addTeardownBlock:^{
54
54
  [pager prepareForRecycle];
55
+ [pager removeFromSuperview];
56
+ window.rootViewController = nil;
55
57
  window.hidden = YES;
56
58
  }];
57
59
 
@@ -77,7 +79,7 @@ using namespace facebook::react;
77
79
  [pager layoutIfNeeded];
78
80
  XCTestExpectation *settled = [self expectationWithDescription:@"Baseline slots and observer settled"];
79
81
  dispatch_async(dispatch_get_main_queue(), ^{ [settled fulfill]; });
80
- [self waitForExpectations:@[settled] timeout:1];
82
+ [self waitForExpectations:@[settled] timeout:5];
81
83
  [pager attachScrollObserverForCurrentPage];
82
84
  UIScrollView *ownedScroll = scroller.scrollView;
83
85
  XCTAssertEqual([pager valueForKey:@"observedScrollView"], ownedScroll);
@@ -118,7 +120,7 @@ using namespace facebook::react;
118
120
  initialLogicalOffset, 0.01);
119
121
  XCTestExpectation *rebuilt = [self expectationWithDescription:@"Post-mount observer restored"];
120
122
  dispatch_async(dispatch_get_main_queue(), ^{ [rebuilt fulfill]; });
121
- [self waitForExpectations:@[rebuilt] timeout:1];
123
+ [self waitForExpectations:@[rebuilt] timeout:5];
122
124
  [pager attachScrollObserverForCurrentPage];
123
125
  XCTAssertEqual([pager valueForKey:@"topOverlayView"], overlay);
124
126
  XCTAssertEqual([pager valueForKey:@"observedScrollView"], ownedScroll);
@@ -171,9 +173,10 @@ using namespace facebook::react;
171
173
  RNCNativeScrollerComponentView *scroller = [self addScrollerToPager:pager atIndex:0];
172
174
  [pager.window layoutIfNeeded];
173
175
  [pager layoutIfNeeded];
176
+ [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.05]];
174
177
  XCTestExpectation *initialLayout = [self expectationWithDescription:@"Initial observer attachment drained"];
175
178
  dispatch_async(dispatch_get_main_queue(), ^{ [initialLayout fulfill]; });
176
- [self waitForExpectations:@[initialLayout] timeout:1];
179
+ [self waitForExpectations:@[initialLayout] timeout:5];
177
180
  [pager detachScrollObserver];
178
181
  [pager attachScrollObserverForCurrentPage];
179
182
  [pager updateHeaderSettledStateForceBusy:NO];
@@ -580,12 +583,34 @@ using namespace facebook::react;
580
583
  XCTAssertEqualObjects([pager valueForKey:@"currentIndex"], @0);
581
584
  }
582
585
  __block RNCNativeScrollerComponentView *replacement;
586
+ __block BOOL replacementFixtureActive = YES;
583
587
  int64_t replacementDelay = finalRetryPending ? 150 : 50;
584
- dispatch_after(dispatch_time(DISPATCH_TIME_NOW, replacementDelay * NSEC_PER_MSEC), dispatch_get_main_queue(), ^{
588
+ dispatch_block_t insertReplacement = dispatch_block_create((dispatch_block_flags_t)0, ^{
589
+ if (!replacementFixtureActive) return;
585
590
  replacement = [self addScrollerToPager:pager atIndex:0];
586
591
  [replacementHost addSubview:replacement];
587
592
  });
588
- [[NSRunLoop mainRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.3]];
593
+ // LIFO teardown invalidates this callback before the pager clears its pages.
594
+ [self addTeardownBlock:^{
595
+ replacementFixtureActive = NO;
596
+ dispatch_block_cancel(insertReplacement);
597
+ }];
598
+ dispatch_after(dispatch_time(DISPATCH_TIME_NOW, replacementDelay * NSEC_PER_MSEC),
599
+ dispatch_get_main_queue(), insertReplacement);
600
+ NSPredicate *hasReplacementOwners = [NSPredicate predicateWithBlock:
601
+ ^BOOL(__unused id object, __unused NSDictionary *bindings) {
602
+ return replacement != nil &&
603
+ [pager valueForKey:@"observedScrollView"] == replacement.scrollView &&
604
+ [pager valueForKey:@"sharedHeaderScrollView"] == replacement.scrollView;
605
+ }];
606
+ XCTNSPredicateExpectation *replacementReady =
607
+ [[XCTNSPredicateExpectation alloc] initWithPredicate:hasReplacementOwners object:nil];
608
+ XCTWaiterResult result = [XCTWaiter waitForExpectations:@[replacementReady] timeout:5];
609
+ replacementFixtureActive = NO;
610
+ dispatch_block_cancel(insertReplacement);
611
+ XCTAssertEqual(result, XCTWaiterResultCompleted);
612
+ XCTAssertNotNil(replacement);
613
+ if (result != XCTWaiterResultCompleted || replacement == nil) return;
589
614
  XCTAssertEqual([pager valueForKey:@"observedScrollView"], replacement.scrollView);
590
615
  XCTAssertEqual([pager valueForKey:@"sharedHeaderScrollView"], replacement.scrollView);
591
616
  XCTAssertEqualWithAccuracy(replacement.scrollView.contentOffset.y + replacement.scrollView.contentInset.top,
@@ -622,6 +647,8 @@ using namespace facebook::react;
622
647
  window.hidden = NO;
623
648
  [self addTeardownBlock:^{
624
649
  [pager prepareForRecycle];
650
+ [pager removeFromSuperview];
651
+ window.rootViewController = nil;
625
652
  window.hidden = YES;
626
653
  }];
627
654
  NSMutableArray *pages = [pager valueForKey:@"pageControllers"];
@@ -801,6 +828,10 @@ using namespace facebook::react;
801
828
  component.contentView.frame = component.bounds;
802
829
  UIViewController *page = [pager valueForKey:@"pageControllers"][0];
803
830
  [page.view addSubview:component];
831
+ [self addTeardownBlock:^{
832
+ [component prepareForRecycle];
833
+ [component removeFromSuperview];
834
+ }];
804
835
  [component.contentView layoutIfNeeded];
805
836
  return component;
806
837
  }