UNPKG

react-native-reanimated

Version:

More powerful alternative to Animated library for React Native.

60 lines (58 loc) 2.3 kB
'use strict'; import { makeShareableCloneRecursive } from 'react-native-worklets'; import { SHOULD_BE_USE_WEB } from "./common/index.js"; import { configureLayoutAnimationBatch } from "./core.js"; function createUpdateManager() { const animations = []; // When a stack is rerendered we reconfigure all the shared elements. // To do that we want them to appear in our batch in the correct order, // so we defer some of the updates to appear at the end of the batch. const deferredAnimations = []; return { update(batchItem, isUnmounting) { if (isUnmounting) { deferredAnimations.push(batchItem); } else { animations.push(batchItem); } if (animations.length + deferredAnimations.length === 1) { this.flush(); } }, flush() { configureLayoutAnimationBatch(animations.concat(deferredAnimations)); animations.length = 0; deferredAnimations.length = 0; } }; } /** * Lets you update the current configuration of the layout animation or shared * element transition for a given component. Configurations are batched and * applied at the end of the current execution block, right before sending the * response back to native. * * @param viewTag - The tag of the component you'd like to configure. * @param type - The type of the animation you'd like to configure - * {@link LayoutAnimationType}. * @param config - The animation configuration - {@link LayoutAnimationFunction} * or {@link Keyframe}. Passing `undefined` will remove the animation. * @param isUnmounting - Determines whether the configuration should be included * at the end of the batch, after all the non-deferred configurations (even * those that were updated later). This is used to retain the correct ordering * of shared elements. Defaults to `false`. */ export let updateLayoutAnimations; if (SHOULD_BE_USE_WEB) { updateLayoutAnimations = () => { // no-op }; } else { const updateLayoutAnimationsManager = createUpdateManager(); updateLayoutAnimations = (viewTag, type, config, isUnmounting) => updateLayoutAnimationsManager.update({ viewTag, type, config: config ? makeShareableCloneRecursive(config) : undefined }, isUnmounting); } //# sourceMappingURL=UpdateLayoutAnimations.js.map