UNPKG

react-pose-15

Version:

A declarative animation library for React 15+

35 lines (27 loc) 1.32 kB
import { CurrentPose } from '../components/PoseElement/types'; // Check if pose has changed. Pose can either be an array or string // This is duplicated from react-pose-core - that version has a unit test. // If anyone reading this knows of an easy way to share modules in a .ts monorepo // without publishing to npm, get in touch. export const hasChanged = (prev: CurrentPose, next: CurrentPose): boolean => { // Immediate return if these are literally the same poses (ie same string or same array reference) if (prev === next) return false; const prevIsArray = Array.isArray(prev); const nextIsArray = Array.isArray(next); // If one is a string and the other is array, they've changed // Or if they're both strings, they would have returned false earlier (if the same) if (prevIsArray !== nextIsArray || (!prevIsArray && !nextIsArray)) { return true; // Or if they're both arrays, do a shallow equivalency check // For the purposes of speed and simplicity of code we // make the assumption they're in the same order } else if (prevIsArray && nextIsArray) { const numPrev = prev.length; const numNext = next.length; if (numPrev !== numNext) return true; for (let i = numPrev; i < numPrev; i++) { if (prev[i] !== next[i]) return true; } } return false; };