@td-design/react-native-tabs
Version:
基于 @td-design/react-native 的 tabs 组件
93 lines • 2.45 kB
JavaScript
import React from 'react';
import { Animated } from 'react-native';
import PagerView from 'react-native-pager-view';
import { Box, helpers } from '@td-design/react-native';
import SceneView from './SceneView';
import ScrollBar from './ScrollBar';
import TabBar from './TabBar';
import usePagerView from './usePagerView';
const {
px
} = helpers;
const AnimatedPagerView = Animated.createAnimatedComponent(PagerView);
export default function Tabs(_ref) {
let {
initialPage = 0,
lazy = false,
renderLazyPlaceholder,
page,
onChange,
scenes = [],
height = px(48),
showIndicator = true,
scrollEnabled = true,
overdrag = true,
keyboardDismissMode = 'on-drag',
tabStyle,
tabItemStyle,
labelStyle,
indicatorStyle
} = _ref;
const {
pagerViewRef,
setPage,
currentPage,
position,
offset,
isIdle,
scrollState,
onPageScroll,
onPageSelected,
onPageScrollStateChanged
} = usePagerView(initialPage, page, onChange);
const titles = scenes.map(tab => tab.title);
return /*#__PURE__*/React.createElement(Box, {
flex: 1
}, /*#__PURE__*/React.createElement(ScrollBar, {
page: currentPage,
height: height
}, /*#__PURE__*/React.createElement(TabBar, {
tabs: titles,
onTabPress: setPage,
page: currentPage,
position: position,
offset: offset,
isIdle: isIdle,
scrollState: scrollState,
showIndicator: showIndicator,
tabStyle: tabStyle,
tabItemStyle: tabItemStyle,
labelStyle: labelStyle,
indicatorStyle: indicatorStyle
})), /*#__PURE__*/React.createElement(AnimatedPagerView, {
ref: pagerViewRef,
style: {
flex: 1
},
overdrag: overdrag,
initialPage: currentPage,
keyboardDismissMode: keyboardDismissMode,
scrollEnabled: scrollEnabled,
overScrollMode: "always",
onPageScroll: onPageScroll,
onPageSelected: onPageSelected,
onPageScrollStateChanged: onPageScrollStateChanged
}, scenes.map((_ref2, i) => {
let {
component
} = _ref2;
return /*#__PURE__*/React.createElement(SceneView, {
key: i,
index: i,
lazy: lazy,
currentPage: currentPage
}, _ref3 => {
let {
loading
} = _ref3;
if (loading) return renderLazyPlaceholder === null || renderLazyPlaceholder === void 0 ? void 0 : renderLazyPlaceholder();
return component;
});
})));
}
//# sourceMappingURL=index.js.map