vaulterm/frontend/components/ui/pager-view.web.tsx

41 lines
921 B
TypeScript
Raw Normal View History

2024-11-15 09:39:35 +00:00
import React, {
forwardRef,
useImperativeHandle,
useMemo,
useState,
} from "react";
2024-11-06 14:53:07 +07:00
import { View } from "react-native";
2024-11-15 09:39:35 +00:00
import { PagerViewProps, PagerViewRef } from "./pager-view";
2024-11-06 14:53:07 +07:00
2024-11-15 09:39:35 +00:00
const PagerView = forwardRef<PagerViewRef, PagerViewProps>(
({ children, initialPage }, ref) => {
const [curPage, setPage] = useState<number>(initialPage || 0);
2024-11-06 14:53:07 +07:00
2024-11-15 09:39:35 +00:00
useImperativeHandle(ref, () => ({
setPage,
setPageWithoutAnimation: setPage,
}));
2024-11-06 14:53:07 +07:00
2024-11-15 09:39:35 +00:00
const content = useMemo(() => {
if (!Array.isArray(children)) {
return null;
}
2024-11-06 14:53:07 +07:00
2024-11-15 09:39:35 +00:00
return children.map((element, index) => {
return (
<View
key={element.key || index}
style={{ display: index === curPage ? "flex" : "none", flex: 1 }}
>
{element}
</View>
);
});
}, [curPage, children]);
2024-11-06 14:53:07 +07:00
2024-11-15 09:39:35 +00:00
return content;
}
);
2024-11-06 14:53:07 +07:00
export default PagerView;