@onekeyfe/react-native-pager-view 6.7.0-1 → 6.7.0-12
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.
- package/README.md +9 -0
- package/android/src/main/java/com/reactnativepagerview/CollapsiblePagerViewManager.kt +2 -2
- package/android/src/main/java/com/reactnativepagerview/NativeScrollerViewManager.kt +2 -2
- package/docs/SPEC.md +108 -7
- package/ios/RNCCollapsiblePagerViewComponentView.mm +341 -23
- package/ios/RNCNativeScrollerComponentView.mm +30 -5
- package/ios/tests/RNCCollapsiblePagerFirstFrameTests.mm +124 -0
- package/ios/tests/RNCCollapsiblePagerHitTestTests.mm +186 -1
- package/ios/tests/RNCCollapsiblePagerRefreshControlTests.mm +50 -0
- package/ios/tests/RNCNativeScrollerTests.mm +39 -0
- package/lib/module/CollapsiblePagerView.js +16 -7
- package/lib/module/CollapsiblePagerView.web.js +428 -37
- package/lib/module/CollapsiblePagerViewNativeComponent.ts +1 -1
- package/lib/module/NativeScroller.js +2 -2
- package/lib/module/NativeScroller.web.js +16 -3
- package/lib/module/NativeScrollerNativeComponent.ts +1 -1
- package/lib/module/ScrollEdgeEffect.js +8 -0
- package/lib/module/WebCollapsiblePagerPage.js +182 -0
- package/lib/module/index.js +3 -0
- package/lib/module/index.native.js +9 -0
- package/lib/module/index.web.js +3 -0
- package/lib/typescript/src/CollapsiblePagerView.d.ts +8 -5
- package/lib/typescript/src/CollapsiblePagerView.web.d.ts +66 -4
- package/lib/typescript/src/CollapsiblePagerViewNativeComponent.d.ts +1 -1
- package/lib/typescript/src/NativeScroller.d.ts +3 -2
- package/lib/typescript/src/NativeScrollerNativeComponent.d.ts +1 -1
- package/lib/typescript/src/ScrollEdgeEffect.d.ts +5 -0
- package/lib/typescript/src/WebCollapsiblePagerPage.d.ts +42 -0
- package/lib/typescript/src/index.d.ts +5 -0
- package/lib/typescript/src/index.native.d.ts +13 -0
- package/lib/typescript/src/index.web.d.ts +5 -0
- package/package.json +6 -4
- package/src/CollapsiblePagerView.tsx +43 -11
- package/src/CollapsiblePagerView.web.tsx +640 -50
- package/src/CollapsiblePagerViewNativeComponent.ts +1 -1
- package/src/NativeScroller.tsx +6 -4
- package/src/NativeScroller.web.tsx +24 -2
- package/src/NativeScrollerNativeComponent.ts +1 -1
- package/src/ScrollEdgeEffect.ts +4 -0
- package/src/WebCollapsiblePagerPage.tsx +258 -0
- package/src/index.native.tsx +30 -0
- package/src/index.tsx +6 -0
- package/src/index.web.tsx +6 -0
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { ScrollEdgeEffect } from "./ScrollEdgeEffect";
|
|
1
2
|
import React from "react";
|
|
2
3
|
import { I18nManager, Platform, StyleSheet, View } from "react-native";
|
|
3
4
|
import type * as ReactNative from "react-native";
|
|
@@ -86,7 +87,7 @@ export interface CollapsiblePagerViewProps
|
|
|
86
87
|
| "children"
|
|
87
88
|
| "headerHeight"
|
|
88
89
|
| "stickyHeaderHeight"
|
|
89
|
-
| "
|
|
90
|
+
| "topScrollEdgeEffect"
|
|
90
91
|
| "topOverlayHeight"
|
|
91
92
|
| "externalTopOverlayTag"
|
|
92
93
|
| "pageKeys"
|
|
@@ -119,10 +120,12 @@ export interface CollapsiblePagerViewProps
|
|
|
119
120
|
stickyHeaderHeight: number;
|
|
120
121
|
/** Fixed content above the collapsible header on iOS 26 and newer. */
|
|
121
122
|
topOverlay?: React.ReactNode;
|
|
123
|
+
/** Known overlay height to reserve until its first layout measurement. */
|
|
124
|
+
topOverlayHeightHint?: number;
|
|
122
125
|
/** Existing fixed header shared with a parent pager on iOS 26 and newer. */
|
|
123
126
|
externalTopOverlayTag?: number;
|
|
124
|
-
/**
|
|
125
|
-
topScrollEdgeEffect?:
|
|
127
|
+
/** Selects UIKit's top scroll-edge effect on iOS 26 and newer. */
|
|
128
|
+
topScrollEdgeEffect?: `${ScrollEdgeEffect}`;
|
|
126
129
|
/** Effective appearance of the fixed overlay or pinned sticky bar. */
|
|
127
130
|
topOverlayColorScheme?: "light" | "dark";
|
|
128
131
|
/**
|
|
@@ -157,7 +160,7 @@ export interface CollapsiblePagerViewProps
|
|
|
157
160
|
type State = {
|
|
158
161
|
selectedPage: number;
|
|
159
162
|
transientRetainedPages: readonly number[];
|
|
160
|
-
topOverlayHeight: number;
|
|
163
|
+
topOverlayHeight: number | null;
|
|
161
164
|
};
|
|
162
165
|
|
|
163
166
|
const pageIndex = (value: number) => {
|
|
@@ -185,7 +188,7 @@ export class CollapsiblePagerView extends React.PureComponent<
|
|
|
185
188
|
State
|
|
186
189
|
> {
|
|
187
190
|
state: State = {
|
|
188
|
-
topOverlayHeight:
|
|
191
|
+
topOverlayHeight: null,
|
|
189
192
|
selectedPage: clampedPageIndex(
|
|
190
193
|
this.props.initialPage ?? 0,
|
|
191
194
|
React.Children.toArray(this.props.children).length
|
|
@@ -218,7 +221,22 @@ export class CollapsiblePagerView extends React.PureComponent<
|
|
|
218
221
|
this.notifyMountedPagesChanged();
|
|
219
222
|
}
|
|
220
223
|
|
|
221
|
-
componentDidUpdate() {
|
|
224
|
+
componentDidUpdate(previousProps: CollapsiblePagerViewProps) {
|
|
225
|
+
const previousOverlayEnabled =
|
|
226
|
+
previousProps.topOverlay != null &&
|
|
227
|
+
(previousProps.topScrollEdgeEffect === "hard" ||
|
|
228
|
+
previousProps.topScrollEdgeEffect === "soft");
|
|
229
|
+
const overlayEnabled =
|
|
230
|
+
this.props.topOverlay != null &&
|
|
231
|
+
(this.props.topScrollEdgeEffect === "hard" ||
|
|
232
|
+
this.props.topScrollEdgeEffect === "soft");
|
|
233
|
+
if (
|
|
234
|
+
previousOverlayEnabled &&
|
|
235
|
+
!overlayEnabled &&
|
|
236
|
+
this.state.topOverlayHeight !== null
|
|
237
|
+
) {
|
|
238
|
+
this.setState({ topOverlayHeight: null });
|
|
239
|
+
}
|
|
222
240
|
const pageCount = this.pages().length;
|
|
223
241
|
const selectedPage = clampedPageIndex(this.state.selectedPage, pageCount);
|
|
224
242
|
if (selectedPage !== this.state.selectedPage) {
|
|
@@ -472,6 +490,7 @@ export class CollapsiblePagerView extends React.PureComponent<
|
|
|
472
490
|
headerHeight,
|
|
473
491
|
stickyHeaderHeight,
|
|
474
492
|
topOverlay,
|
|
493
|
+
topOverlayHeightHint,
|
|
475
494
|
externalTopOverlayTag,
|
|
476
495
|
topScrollEdgeEffect,
|
|
477
496
|
topOverlayColorScheme,
|
|
@@ -493,8 +512,15 @@ export class CollapsiblePagerView extends React.PureComponent<
|
|
|
493
512
|
const pages = this.pages();
|
|
494
513
|
const supportsTopScrollEdge =
|
|
495
514
|
Platform.OS === "ios" && parseInt(String(Platform.Version), 10) >= 26;
|
|
496
|
-
const
|
|
497
|
-
|
|
515
|
+
const scrollEdgeEnabled =
|
|
516
|
+
supportsTopScrollEdge &&
|
|
517
|
+
(topScrollEdgeEffect === "hard" || topScrollEdgeEffect === "soft");
|
|
518
|
+
const hasTopOverlay = scrollEdgeEnabled && topOverlay != null;
|
|
519
|
+
const initialTopOverlayHeight =
|
|
520
|
+
typeof topOverlayHeightHint === "number" &&
|
|
521
|
+
Number.isFinite(topOverlayHeightHint)
|
|
522
|
+
? Math.max(0, Math.ceil(topOverlayHeightHint))
|
|
523
|
+
: 0;
|
|
498
524
|
const pageKeys = pages.map(pageKey);
|
|
499
525
|
const retained = new Set(this.mountedPages(pages.length));
|
|
500
526
|
const deducedLayoutDirection =
|
|
@@ -535,9 +561,15 @@ export class CollapsiblePagerView extends React.PureComponent<
|
|
|
535
561
|
offscreenPageLimit={Math.max(1, offscreenPageLimit ?? 1)}
|
|
536
562
|
headerHeight={Math.max(0, Math.round(headerHeight))}
|
|
537
563
|
stickyHeaderHeight={Math.max(0, Math.round(stickyHeaderHeight))}
|
|
538
|
-
|
|
539
|
-
topOverlayColorScheme={
|
|
540
|
-
|
|
564
|
+
topScrollEdgeEffect={scrollEdgeEnabled ? topScrollEdgeEffect : "none"}
|
|
565
|
+
topOverlayColorScheme={
|
|
566
|
+
scrollEdgeEnabled ? topOverlayColorScheme : undefined
|
|
567
|
+
}
|
|
568
|
+
topOverlayHeight={
|
|
569
|
+
hasTopOverlay
|
|
570
|
+
? this.state.topOverlayHeight ?? initialTopOverlayHeight
|
|
571
|
+
: 0
|
|
572
|
+
}
|
|
541
573
|
externalTopOverlayTag={
|
|
542
574
|
supportsTopScrollEdge && !hasTopOverlay
|
|
543
575
|
? externalTopOverlayTag ?? 0
|