Skip to content

Commit afccaf7

Browse files
committed
add extrapolate shortcut interp([..],[..],'clamp')
1 parent f1c601a commit afccaf7

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

src/animated/AnimatedInterpolation.ts

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { SpringValue } from '../types/animated'
22
import { InterpolationConfig } from '../types/interpolation'
33
import Animated, { AnimatedArray } from './Animated'
4-
import createInterpolator from './createInterpolator'
4+
import createInterpolator, { ExtrapolateType } from './createInterpolator'
55

66
type IpValue = string | number | (string | number)[]
77
// The widest possible interpolator type, possible if interpolate() is passed
@@ -15,7 +15,8 @@ export default class AnimatedInterpolation extends AnimatedArray<Animated>
1515
constructor(
1616
parents: Animated | Animated[],
1717
range: number[] | InterpolationConfig | Interpolator,
18-
output?: (number | string)[]
18+
output?: (number | string)[],
19+
extrapolate?: ExtrapolateType
1920
) {
2021
super()
2122
this.payload =
@@ -25,7 +26,11 @@ export default class AnimatedInterpolation extends AnimatedArray<Animated>
2526
: Array.isArray(parents)
2627
? parents
2728
: [parents]
28-
this.calc = createInterpolator(range as number[], output!) as Interpolator
29+
this.calc = createInterpolator(
30+
range as number[],
31+
output!,
32+
extrapolate
33+
) as Interpolator
2934
}
3035

3136
public getValue() {
@@ -34,15 +39,26 @@ export default class AnimatedInterpolation extends AnimatedArray<Animated>
3439

3540
public updateConfig(
3641
range: number[] | InterpolationConfig | Interpolator,
37-
output?: (number | string)[]
42+
output?: (number | string)[],
43+
extrapolate?: ExtrapolateType
3844
) {
39-
this.calc = createInterpolator(range as number[], output!) as Interpolator
45+
this.calc = createInterpolator(
46+
range as number[],
47+
output!,
48+
extrapolate
49+
) as Interpolator
4050
}
4151

4252
public interpolate(
4353
range: number[] | InterpolationConfig | ((...args: any[]) => IpValue),
44-
output?: (number | string)[]
54+
output?: (number | string)[],
55+
extrapolate?: ExtrapolateType
4556
): AnimatedInterpolation {
46-
return new AnimatedInterpolation(this, range as number[], output!)
57+
return new AnimatedInterpolation(
58+
this,
59+
range as number[],
60+
output!,
61+
extrapolate
62+
)
4763
}
4864
}

src/animated/createInterpolator.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { EasingFunction, InterpolationConfig } from '../types/interpolation'
22
import * as Globals from './Globals'
33

4-
type ExtrapolateType = InterpolationConfig['extrapolate']
4+
export type ExtrapolateType = InterpolationConfig['extrapolate']
55

66
// The most generic interpolation value, possible with custom interpolation functions.
77
type IpValue = string | number | (string | number)[]
@@ -16,7 +16,11 @@ function createInterpolator<
1616
function createInterpolator<
1717
In extends number | string,
1818
Out extends number | string
19-
>(range: number[], output: Out[]): (input: In) => Out
19+
>(
20+
range: number[],
21+
output: Out[],
22+
extrapolate: ExtrapolateType
23+
): (input: In) => Out
2024
function createInterpolator(
2125
range: number[] | InterpolationConfig | ((...input: IpValue[]) => IpValue),
2226
output?: (number | string)[],
@@ -26,11 +30,7 @@ function createInterpolator(
2630
return range
2731
}
2832
if (Array.isArray(range)) {
29-
return createInterpolator({
30-
range,
31-
output: output!,
32-
extrapolate,
33-
})
33+
return createInterpolator({ range, output: output!, extrapolate })
3434
}
3535
if (Globals.interpolation && typeof range.output[0] === 'string') {
3636
return Globals.interpolation(range as InterpolationConfig<string>)

0 commit comments

Comments
 (0)