react-native-animated-pagination-dot
Version:
122 lines (103 loc) • 5.55 kB
JavaScript
"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