UNPKG

react-native-animated-pagination-dot

Version:
122 lines (103 loc) 5.55 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _reactNative = require("react-native"); var _usePrevious = _interopRequireDefault(require("react-use/lib/usePrevious")); var _EmptyDot = _interopRequireDefault(require("./EmptyDot")); var _DotUtils = require("../util/DotUtils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /** * * Created by rouge on 11/09/2019. * Converted to Typescript on 14/07/2020. * Converted to Functional component. on 21/09/2021 */ const Dot = props => { const [animVal] = (0, _react.useState)(new _reactNative.Animated.Value(0)); const [animate, setAnimate] = (0, _react.useState)(false); const [type, setType] = (0, _react.useState)(() => (0, _DotUtils.getDotStyle)({ idx: props.idx, curPage: props.curPage, maxPage: props.maxPage })); const [dotColor, setDotColor] = (0, _react.useState)(() => { var _props$inactiveColor; if (props.curPage === props.idx) { //its current active page now return props.activeColor; } return (_props$inactiveColor = props.inactiveColor) !== null && _props$inactiveColor !== void 0 ? _props$inactiveColor : props.activeColor; }); const prevType = (0, _usePrevious.default)(type); const prevDotColor = (0, _usePrevious.default)(dotColor); (0, _react.useEffect)(() => { const nextType = (0, _DotUtils.getDotStyle)({ idx: props.idx, curPage: props.curPage, maxPage: props.maxPage }); const nextAnimate = nextType.size !== ((prevType === null || prevType === void 0 ? void 0 : prevType.size) || 3) || nextType.opacity !== ((prevType === null || prevType === void 0 ? void 0 : prevType.opacity) || 0.2); if (props.curPage === props.idx) { setDotColor(props.activeColor); } else { var _props$inactiveColor2; setDotColor((_props$inactiveColor2 = props.inactiveColor) !== null && _props$inactiveColor2 !== void 0 ? _props$inactiveColor2 : props.activeColor); } setType(nextType); setAnimate(nextAnimate); }, [prevType === null || prevType === void 0 ? void 0 : prevType.opacity, prevType === null || prevType === void 0 ? void 0 : prevType.size, props.activeColor, props.curPage, props.idx, props.inactiveColor, props.maxPage]); (0, _react.useEffect)(() => { if (!animate) return; animVal.setValue(0); _reactNative.Animated.timing(animVal, { toValue: 1, duration: 300, useNativeDriver: false }).start(); }, [animVal, animate, prevType, type]); const animStyle = (0, _react.useMemo)(() => { const size = animVal.interpolate({ inputRange: [0, 1], outputRange: [((prevType === null || prevType === void 0 ? void 0 : prevType.size) || 3) * props.sizeRatio, type.size * props.sizeRatio] }); const backgroundColor = animVal.interpolate({ inputRange: [0, 1], outputRange: [prevDotColor !== null && prevDotColor !== void 0 ? prevDotColor : props.activeColor, dotColor] }); return { width: size, height: size, backgroundColor, borderRadius: animVal.interpolate({ inputRange: [0, 1], outputRange: [((prevType === null || prevType === void 0 ? void 0 : prevType.size) || 3) * props.sizeRatio * 0.5, type.size * props.sizeRatio * 0.5] }), opacity: animVal.interpolate({ inputRange: [0, 1], outputRange: [(prevType === null || prevType === void 0 ? void 0 : prevType.opacity) || 0.2, type.opacity] }) }; }, [animVal, dotColor, prevDotColor, prevType === null || prevType === void 0 ? void 0 : prevType.opacity, prevType === null || prevType === void 0 ? void 0 : prevType.size, props.activeColor, props.sizeRatio, type.opacity, type.size]); if (props.curPage < 3) { if (props.idx >= 5) return /*#__PURE__*/_react.default.createElement(_EmptyDot.default, { sizeRatio: props.sizeRatio }); } else if (props.curPage < 4) { if (props.idx > 5) return /*#__PURE__*/_react.default.createElement(_EmptyDot.default, { sizeRatio: props.sizeRatio }); } return /*#__PURE__*/_react.default.createElement(_reactNative.Animated.View, { style: [{ margin: 3 * props.sizeRatio }, animStyle] }); }; var _default = Dot; exports.default = _default; //# sourceMappingURL=Dot.js.map