mirror of
https://github.com/status-im/react-native.git
synced 2025-01-09 17:15:54 +00:00
60db876f66
Summary: public RCTUIManager is a public module with several useful methods, however, unlike most such modules, it does not have a JS wrapper that would allow it to be required directly. Besides making it more cumbersome to use, this also makes it impossible to modify the UIManager API, or smooth over differences between platforms in the JS layer without breaking all of the call sites. This diff adds a simple JS wrapper file for the UIManager module to make it easier to work with. Reviewed By: tadeuzagallo Differential Revision: D2700348 fb-gh-sync-id: dd9030eface100b1baf756da11bae355dc0f266f
155 lines
3.5 KiB
JavaScript
155 lines
3.5 KiB
JavaScript
/**
|
|
* 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 LayoutAnimation
|
|
* @flow
|
|
*/
|
|
'use strict';
|
|
|
|
var PropTypes = require('ReactPropTypes');
|
|
var UIManager = require('UIManager');
|
|
|
|
var createStrictShapeTypeChecker = require('createStrictShapeTypeChecker');
|
|
var keyMirror = require('keyMirror');
|
|
|
|
var TypesEnum = {
|
|
spring: true,
|
|
linear: true,
|
|
easeInEaseOut: true,
|
|
easeIn: true,
|
|
easeOut: true,
|
|
keyboard: true,
|
|
};
|
|
var Types = keyMirror(TypesEnum);
|
|
|
|
var PropertiesEnum = {
|
|
opacity: true,
|
|
scaleXY: true,
|
|
};
|
|
var Properties = keyMirror(PropertiesEnum);
|
|
|
|
var animChecker = createStrictShapeTypeChecker({
|
|
duration: PropTypes.number,
|
|
delay: PropTypes.number,
|
|
springDamping: PropTypes.number,
|
|
initialVelocity: PropTypes.number,
|
|
type: PropTypes.oneOf(
|
|
Object.keys(Types)
|
|
),
|
|
property: PropTypes.oneOf( // Only applies to create/delete
|
|
Object.keys(Properties)
|
|
),
|
|
});
|
|
|
|
type Anim = {
|
|
duration?: number;
|
|
delay?: number;
|
|
springDamping?: number;
|
|
initialVelocity?: number;
|
|
type?: $Enum<typeof TypesEnum>;
|
|
property?: $Enum<typeof PropertiesEnum>;
|
|
}
|
|
|
|
var configChecker = createStrictShapeTypeChecker({
|
|
duration: PropTypes.number.isRequired,
|
|
create: animChecker,
|
|
update: animChecker,
|
|
delete: animChecker,
|
|
});
|
|
|
|
type Config = {
|
|
duration: number;
|
|
create?: Anim;
|
|
update?: Anim;
|
|
delete?: Anim;
|
|
}
|
|
|
|
function configureNext(config: Config, onAnimationDidEnd?: Function) {
|
|
configChecker({config}, 'config', 'LayoutAnimation.configureNext');
|
|
UIManager.configureNextLayoutAnimation(
|
|
config, onAnimationDidEnd || function() {}, function() { /* unused */ }
|
|
);
|
|
}
|
|
|
|
function create(duration: number, type, creationProp): Config {
|
|
return {
|
|
duration,
|
|
create: {
|
|
type,
|
|
property: creationProp,
|
|
},
|
|
update: {
|
|
type,
|
|
},
|
|
};
|
|
}
|
|
|
|
var Presets = {
|
|
easeInEaseOut: create(
|
|
300, Types.easeInEaseOut, Properties.opacity
|
|
),
|
|
linear: create(
|
|
500, Types.linear, Properties.opacity
|
|
),
|
|
spring: {
|
|
duration: 700,
|
|
create: {
|
|
type: Types.linear,
|
|
property: Properties.opacity,
|
|
},
|
|
update: {
|
|
type: Types.spring,
|
|
springDamping: 0.4,
|
|
},
|
|
},
|
|
};
|
|
|
|
/**
|
|
* Automatically animates views to their new positions when the
|
|
* next layout happens.
|
|
*
|
|
* A common way to use this API is to call `LayoutAnimation.configureNext`
|
|
* before calling `setState`.
|
|
*/
|
|
var LayoutAnimation = {
|
|
/**
|
|
* Schedules an animation to happen on the next layout.
|
|
*
|
|
* @param config Specifies animation properties:
|
|
*
|
|
* - `duration` in milliseconds
|
|
* - `create`, config for animating in new views (see `Anim` type)
|
|
* - `update`, config for animating views that have been updated
|
|
* (see `Anim` type)
|
|
*
|
|
* @param onAnimationDidEnd Called when the animation finished.
|
|
* Only supported on iOS.
|
|
* @param onError Called on error. Only supported on iOS.
|
|
*/
|
|
configureNext,
|
|
/**
|
|
* Helper for creating a config for `configureNext`.
|
|
*/
|
|
create,
|
|
Types,
|
|
Properties,
|
|
configChecker: configChecker,
|
|
Presets,
|
|
easeInEaseOut: configureNext.bind(
|
|
null, Presets.easeInEaseOut
|
|
),
|
|
linear: configureNext.bind(
|
|
null, Presets.linear
|
|
),
|
|
spring: configureNext.bind(
|
|
null, Presets.spring
|
|
),
|
|
};
|
|
|
|
module.exports = LayoutAnimation;
|