Revert D13860038: [react-native][PR] Add ability to control scroll animation duration for Android

Differential Revision:
D13860038

Original commit changeset: f06751d063a3

fbshipit-source-id: 5d89137aed0d549004e790068c1e4998ebccdaf1
This commit is contained in:
Kevin Gozali
2019-01-29 17:32:37 -08:00
committed by Facebook Github Bot
parent c16fadb7c3
commit 4c69ccd0fb
9 changed files with 26 additions and 131 deletions

View File

@@ -116,14 +116,6 @@ export type State = {|
becameResponderWhileAnimating: boolean,
|};
/**
* If a user has specified a duration, we will use it. Otherwise,
* set it to -1 as the bridge cannot handle undefined / null values.
*/
function getDuration(duration?: number): number {
return duration === undefined ? -1 : Math.max(duration, 0);
}
const ScrollResponderMixin = {
_subscriptionKeyboardWillShow: (null: ?EmitterSubscription),
_subscriptionKeyboardWillHide: (null: ?EmitterSubscription),
@@ -432,55 +424,46 @@ const ScrollResponderMixin = {
* This is currently used to help focus child TextViews, but can also
* be used to quickly scroll to any element we want to focus. Syntax:
*
* `scrollResponderScrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true, duration: number = 0})`
* `scrollResponderScrollTo(options: {x: number = 0; y: number = 0; animated: boolean = true})`
*
* Note: The weird argument signature is due to the fact that, for historical reasons,
* the function also accepts separate arguments as as alternative to the options object.
* This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.
*/
scrollResponderScrollTo: function(
x?:
| number
| {x?: number, y?: number, animated?: boolean, duration?: number},
x?: number | {x?: number, y?: number, animated?: boolean},
y?: number,
animated?: boolean,
duration?: number,
) {
if (typeof x === 'number') {
console.warn(
'`scrollResponderScrollTo(x, y, animated)` is deprecated. Use `scrollResponderScrollTo({x: 5, y: 5, animated: true})` instead.',
);
} else {
({x, y, animated, duration} = x || {});
({x, y, animated} = x || {});
}
UIManager.dispatchViewManagerCommand(
nullthrows(this.scrollResponderGetScrollableNode()),
UIManager.getViewManagerConfig('RCTScrollView').Commands.scrollTo,
[x || 0, y || 0, animated !== false, getDuration(duration)],
[x || 0, y || 0, animated !== false],
);
},
/**
* Scrolls to the end of the ScrollView, either immediately or with a smooth
* animation. For Android, you may specify a "duration" number instead of the
* "animated" boolean.
* animation.
*
* Example:
*
* `scrollResponderScrollToEnd({animated: true})`
* or for Android, you can do:
* `scrollResponderScrollToEnd({duration: 500})`
*/
scrollResponderScrollToEnd: function(options?: {
animated?: boolean,
duration?: number,
}) {
scrollResponderScrollToEnd: function(options?: {animated?: boolean}) {
// Default to true
const animated = (options && options.animated) !== false;
UIManager.dispatchViewManagerCommand(
this.scrollResponderGetScrollableNode(),
UIManager.getViewManagerConfig('RCTScrollView').Commands.scrollToEnd,
[animated, getDuration(options && options.duration)],
[animated],
);
},

View File

@@ -695,29 +695,20 @@ class ScrollView extends React.Component<Props, State> {
}
/**
* Scrolls to a given x, y offset, either immediately, with a smooth animation, or,
* for Android only, a custom animation duration time.
* Scrolls to a given x, y offset, either immediately or with a smooth animation.
*
* Example:
*
* `scrollTo({x: 0, y: 0, animated: true})`
*
* Example with duration (Android only):
*
* `scrollTo({x: 0, y: 0, duration: 500})`
*
* Note: The weird function signature is due to the fact that, for historical reasons,
* the function also accepts separate arguments as an alternative to the options object.
* This is deprecated due to ambiguity (y before x), and SHOULD NOT BE USED.
*
*/
scrollTo(
y?:
| number
| {x?: number, y?: number, animated?: boolean, duration?: number},
y?: number | {x?: number, y?: number, animated?: boolean},
x?: number,
animated?: boolean,
duration?: number,
) {
if (typeof y === 'number') {
console.warn(
@@ -725,13 +716,12 @@ class ScrollView extends React.Component<Props, State> {
'animated: true})` instead.',
);
} else {
({x, y, animated, duration} = y || {});
({x, y, animated} = y || {});
}
this._scrollResponder.scrollResponderScrollTo({
x: x || 0,
y: y || 0,
animated: animated !== false,
duration: duration,
});
}
@@ -741,16 +731,13 @@ class ScrollView extends React.Component<Props, State> {
*
* Use `scrollToEnd({animated: true})` for smooth animated scrolling,
* `scrollToEnd({animated: false})` for immediate scrolling.
* For Android, you may specify a duration, e.g. `scrollToEnd({duration: 500})`
* for a controlled duration scroll.
* If no options are passed, `animated` defaults to true.
*/
scrollToEnd(options?: {animated?: boolean, duration?: number}) {
scrollToEnd(options?: {animated?: boolean}) {
// Default to true
const animated = (options && options.animated) !== false;
this._scrollResponder.scrollResponderScrollToEnd({
animated: animated,
duration: options && options.duration,
});
}