UNPKG

react-native

Version:

A framework for building native apps using React

74 lines (68 loc) 2 kB
/** * Copyright (c) 2015-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. An additional grant * of patent rights can be found in the PATENTS file in the same directory. * * @providesModule AnimatedNode * @flow * @format */ 'use strict'; const NativeAnimatedHelper = require('../NativeAnimatedHelper'); const invariant = require('fbjs/lib/invariant'); // Note(vjeux): this would be better as an interface but flow doesn't // support them yet class AnimatedNode { __attach(): void {} __detach(): void { if (this.__isNative && this.__nativeTag != null) { NativeAnimatedHelper.API.dropAnimatedNode(this.__nativeTag); this.__nativeTag = undefined; } } __getValue(): any {} __getAnimatedValue(): any { return this.__getValue(); } __addChild(child: AnimatedNode) {} __removeChild(child: AnimatedNode) {} __getChildren(): Array<AnimatedNode> { return []; } /* Methods and props used by native Animated impl */ __isNative: boolean; __nativeTag: ?number; __makeNative() { if (!this.__isNative) { throw new Error('This node cannot be made a "native" animated node'); } } __getNativeTag(): ?number { NativeAnimatedHelper.assertNativeAnimatedModule(); invariant( this.__isNative, 'Attempt to get native tag from node not marked as "native"', ); if (this.__nativeTag == null) { const nativeTag: ?number = NativeAnimatedHelper.generateNewNodeTag(); NativeAnimatedHelper.API.createAnimatedNode( nativeTag, this.__getNativeConfig(), ); this.__nativeTag = nativeTag; } return this.__nativeTag; } __getNativeConfig(): Object { throw new Error( 'This JS animated node type cannot be used as native animated node', ); } toJSON(): any { return this.__getValue(); } } module.exports = AnimatedNode;