mirror of
https://github.com/tiajinsha/JKVideo.git
synced 2026-04-04 22:49:02 +08:00
50 lines
1.4 KiB
TypeScript
50 lines
1.4 KiB
TypeScript
/**
|
|
* Web shim for react-native-pager-view.
|
|
* Supports setPage/setPageWithoutAnimation via imperative handle.
|
|
*/
|
|
import React from 'react';
|
|
import { View, type ViewStyle } from 'react-native';
|
|
|
|
interface PagerViewProps {
|
|
children: React.ReactNode;
|
|
style?: ViewStyle;
|
|
initialPage?: number;
|
|
scrollEnabled?: boolean;
|
|
onPageSelected?: (e: { nativeEvent: { position: number } }) => void;
|
|
onPageScrollStateChanged?: (e: any) => void;
|
|
[key: string]: any;
|
|
}
|
|
|
|
export interface PagerViewHandle {
|
|
setPage: (page: number) => void;
|
|
setPageWithoutAnimation: (page: number) => void;
|
|
}
|
|
|
|
const PagerView = React.forwardRef<PagerViewHandle, PagerViewProps>(
|
|
({ children, style, initialPage = 0, onPageSelected }, ref) => {
|
|
const [currentPage, setCurrentPage] = React.useState(initialPage);
|
|
const pages = React.Children.toArray(children);
|
|
|
|
React.useImperativeHandle(ref, () => ({
|
|
setPage(page: number) {
|
|
setCurrentPage(page);
|
|
onPageSelected?.({ nativeEvent: { position: page } });
|
|
},
|
|
setPageWithoutAnimation(page: number) {
|
|
setCurrentPage(page);
|
|
onPageSelected?.({ nativeEvent: { position: page } });
|
|
},
|
|
}));
|
|
|
|
return (
|
|
<View style={[{ flex: 1 }, style]}>
|
|
{pages[currentPage] ?? pages[0] ?? null}
|
|
</View>
|
|
);
|
|
},
|
|
);
|
|
|
|
PagerView.displayName = 'PagerView';
|
|
|
|
export default PagerView;
|