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

49 lines
1.0 KiB
TypeScript
Raw Normal View History

2024-11-06 14:53:07 +07:00
import React, { useEffect, useMemo, useState } from "react";
import { View } from "react-native";
import { PagerViewProps } from "./pager-view";
const PagerView = ({
2024-11-08 18:53:30 +00:00
EmptyComponent,
2024-11-06 14:53:07 +07:00
children,
page,
initialPage,
}: PagerViewProps) => {
const [curPage, setPage] = useState<number>(page || initialPage || 0);
useEffect(() => {
if (page != null) {
setPage(page);
}
}, [page]);
const content = useMemo(() => {
if (!Array.isArray(children)) {
return null;
}
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-08 18:53:30 +00:00
const pageElement = useMemo(() => {
return Array.isArray(children) ? children[curPage] : null;
}, [curPage, children]);
return (
<>
{!pageElement && EmptyComponent ? <EmptyComponent key="-1" /> : null}
{content}
</>
);
2024-11-06 14:53:07 +07:00
};
export default PagerView;