@fruits-chain/react-native-xiaoshu
Version:
React Native UI library
63 lines (56 loc) • 2.44 kB
JavaScript
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