import { useDebounceCallback } from "@/hooks/useDebounce"; import React, { ComponentPropsWithoutRef, useEffect, useRef } from "react"; import RNPagerView from "react-native-pager-view"; export type PagerViewProps = ComponentPropsWithoutRef & { page?: number; onChangePage?: (page: number) => void; EmptyComponent?: () => JSX.Element; }; const PagerView = ({ page, onChangePage, EmptyComponent, children, ...props }: PagerViewProps) => { const ref = useRef(null); const [onPageSelect, clearPageSelectDebounce] = useDebounceCallback( (page) => onChangePage?.(page), 100 ); const [setPage] = useDebounceCallback((page) => { ref.current?.setPage(page); clearPageSelectDebounce(); }, 300); useEffect(() => { if (page != null) { const npage = EmptyComponent != null ? page + 1 : page; setPage(npage); } }, [page, EmptyComponent]); return ( { const pos = e.nativeEvent.position; onPageSelect(EmptyComponent ? pos - 1 : pos); }} > {EmptyComponent ? : null} {children} ); }; export default PagerView;