addimated
Version:
An always interruptable, declarative animation library for React
77 lines (59 loc) • 2.38 kB
JavaScript
;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
var _exportNames = {
useAnimatedValue: true
};
exports.useAnimatedValue = useAnimatedValue;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _invariant = _interopRequireDefault(require("invariant"));
var _react = _interopRequireDefault(require("react"));
var Animated = _interopRequireWildcard(require("./index"));
Object.keys(Animated).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return Animated[key];
}
});
});
function defaultAnimationFactory(animatedValue, toValue) {
return Animated.timing(animatedValue, {
toValue: toValue
});
}
function useInitializedRef(initializer) {
var initialValue = _react.default.useMemo(initializer, []);
return _react.default.useRef(initialValue);
}
function useAnimatedValue(value) {
var animationFactory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultAnimationFactory;
var _React$useState = _react.default.useState(false),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
isAnimating = _React$useState2[0],
setIsAnimating = _React$useState2[1];
var animatedValueRef = useInitializedRef(function () {
return Animated.createAnimatedValue(value);
});
var animatedValue = animatedValueRef.current;
!animatedValue ? process.env.NODE_ENV !== "production" ? (0, _invariant.default)(false, "") : invariant(false) : void 0;
var prevValueRef = _react.default.useRef(null);
_react.default.useLayoutEffect(function () {
if (prevValueRef.current != null && value !== prevValueRef.current) {
setIsAnimating(true);
animationFactory(animatedValue, value).start(function (result) {
if (result.finished) {
setIsAnimating(false);
}
});
}
prevValueRef.current = value;
}, [value, animationFactory]);
return [animatedValue, isAnimating];
}
//# sourceMappingURL=exports.js.map