UNPKG

@fruits-chain/react-native-xiaoshu

Version:
63 lines (56 loc) 2.44 kB
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } import React, { createContext, memo, useRef, useMemo } from 'react'; import { ScrollView, View } from 'react-native'; import { useTheme, widthStyle } from '../theme'; import { createStyles } from './style'; import Step from './step'; export const StepsContext = /*#__PURE__*/createContext({}); export const maxSteps = 3; const Steps = _ref => { let { current, data, style } = _ref; const ctx = useMemo(() => ({ current, data }), [current, data]); const THEME_VAR = useTheme(); const scrollRef = useRef(null); const STYLES = widthStyle(THEME_VAR, createStyles); let inner = null; if ((data === null || data === void 0 ? void 0 : data.length) > 0) { inner = /*#__PURE__*/React.createElement(View, { style: [STYLES.stepsBox, style], onLayout: e => { var _e$nativeEvent, _e$nativeEvent$layout; setScrollDistance(e === null || e === void 0 ? void 0 : (_e$nativeEvent = e.nativeEvent) === null || _e$nativeEvent === void 0 ? void 0 : (_e$nativeEvent$layout = _e$nativeEvent.layout) === null || _e$nativeEvent$layout === void 0 ? void 0 : _e$nativeEvent$layout.width); } }, /*#__PURE__*/React.createElement(StepsContext.Provider, { value: ctx }, data === null || data === void 0 ? void 0 : data.map((v, i) => { return /*#__PURE__*/React.createElement(Step, _extends({ key: i, index: i }, v)); }))); } const setScrollDistance = width => { if (scrollRef.current && (data === null || data === void 0 ? void 0 : data.length) > maxSteps) { scrollRef.current.scrollTo({ x: width / (data === null || data === void 0 ? void 0 : data.length) * (current - 1 > 0 ? current - 1 : 0), y: 0 }); } }; return /*#__PURE__*/React.createElement(View, { style: STYLES.outWrap }, (data === null || data === void 0 ? void 0 : data.length) > maxSteps ? /*#__PURE__*/React.createElement(ScrollView, { style: STYLES.scrollViewBox, horizontal: true, ref: scrollRef }, inner) : inner); }; export default /*#__PURE__*/memo(Steps); //# sourceMappingURL=index.js.map