@@ -34,91 +34,87 @@ const getStyleString = (
34
34
? `${ currentStyle } ${ style } `
35
35
: style ;
36
36
37
- const transitionFactory = (
38
- transitionConfigs : Array < TransitionConfig > ,
39
- staticStyles ? : Object ,
40
- defaultProps ? : TransitionProps
41
- ) => {
37
+ const transitionFactory = ( ...args : Array < any > ) => {
38
+ const transitions : Array < TransitionConfig > = [...args];
39
+
42
40
return class extends React.Component< TransitionProps > {
41
+ static transitions = transitions ;
42
+
43
43
static defaultProps = {
44
44
timeout : 300 ,
45
+ delay : 0 ,
45
46
easing : 'ease-in-out' ,
46
- ...defaultProps ,
47
47
} ;
48
48
49
- constructor ( props : TransitionProps ) {
50
- super ( props ) ;
51
- const { timeout , easing, start, end } = props ;
52
-
53
- // warm up cache
54
- this . getFinalStyle ( 'entering' , timeout , easing , start , end ) ;
55
- this . getFinalStyle ( 'entered' , timeout , easing , start , end ) ;
56
- this . getFinalStyle ( 'exiting' , timeout , easing , start , end ) ;
57
- this . getFinalStyle ( 'exited' , timeout , easing , start , end ) ;
58
- }
59
-
60
- getGlobalTimeout = naiveMemoize ( ( timeout : number ) : number => {
61
- return Array . isArray ( timeout ) ? Math . max ( ...timeout ) : timeout ;
62
- } ) ;
49
+ getGlobalTimeout = naiveMemoize (
50
+ ( timeout : number , delay : number ) : number =>
51
+ ( Array . isArray ( timeout ) ? Math . max ( ...timeout ) : timeout ) +
52
+ ( Array . isArray ( delay ) ? Math . max ( ...delay ) : delay )
53
+ ) ;
63
54
64
- getTransitionProperty = ( timeout : number , easing : string ) : string => {
65
- return transitionConfigs
66
- . map ( ( config , index ) => {
55
+ getTransitionProperty = (
56
+ timeout : number ,
57
+ delay : number ,
58
+ easing : string
59
+ ) : string => {
60
+ return transitions
61
+ . map ( ( transition , index ) => {
67
62
const timeoutVal = getPrimitiveValue ( timeout , index ) ;
63
+ const delayVal = getPrimitiveValue ( delay , index ) ;
68
64
const easingVal = getPrimitiveValue ( easing , index ) ;
69
- return `${ config . transition } ${ timeoutVal } ms ${ easingVal } ` ;
65
+ return `${
66
+ transition . transition
67
+ } ${ timeoutVal } ms ${ easingVal } ${ delayVal } ms`;
70
68
} )
71
69
. join ( ',' ) ;
72
70
} ;
73
71
74
72
getDefaultStyle = (
75
73
timeout : number ,
74
+ delay : number ,
76
75
easing : string ,
77
76
start : ArrayOrValue
78
77
) : Object => {
79
78
return {
80
- transition : this . getTransitionProperty ( timeout , easing ) ,
81
- ...( this . props . staticStyles || staticStyles ) ,
82
- ...transitionConfigs . reduce ( ( style , config , index ) => {
79
+ transition : this . getTransitionProperty ( timeout , delay , easing ) ,
80
+ ...transitions . reduce ( ( style , transition , index ) => {
83
81
const startVal = getPrimitiveValue ( start , index ) ;
84
- const transitionName = camelCase ( config . transition ) ;
82
+ const transitionName = camelCase ( transition . transition ) ;
85
83
86
84
style [ transitionName ] = getStyleString (
87
85
transitionName ,
88
86
style [ transitionName ] ,
89
- config . getStartStyle ( startVal )
87
+ transition . getStartStyle ( startVal )
90
88
) ;
91
89
return style ;
92
90
} , { } ) ,
93
91
} ;
94
92
} ;
95
93
96
94
getTransitionStates = (
97
- timeout : number ,
98
- easing : string ,
99
95
start : ArrayOrValue ,
100
96
end : ArrayOrValue
101
97
) : TransitionStates => {
102
- return transitionConfigs . reduce (
103
- ( styles , config , index ) => {
98
+ return transitions . reduce (
99
+ ( styles , transition , index ) => {
104
100
const startVal = getPrimitiveValue ( start , index ) ;
105
101
const endVal = getPrimitiveValue ( end , index ) ;
106
- const transitionName = camelCase ( config . transition ) ;
102
+ const transitionName = camelCase ( transition . transition ) ;
107
103
108
104
styles . entering [ transitionName ] = getStyleString (
109
105
transitionName ,
110
106
styles . entering [ transitionName ] ,
111
- config . getStartStyle ( startVal )
107
+ transition . getStartStyle ( startVal )
112
108
) ;
113
109
styles . entered [ transitionName ] = getStyleString (
114
110
transitionName ,
115
111
styles . entered [ transitionName ] ,
116
- config . getEndStyle ( endVal )
112
+ transition . getEndStyle ( endVal )
117
113
) ;
118
114
styles . exiting [ transitionName ] = getStyleString (
119
115
transitionName ,
120
116
styles . exiting [ transitionName ] ,
121
- config . getStartStyle ( startVal )
117
+ transition . getStartStyle ( startVal )
122
118
) ;
123
119
styles . exited [ transitionName ] = styles . entering [ transitionName ] ;
124
120
return styles ;
@@ -136,33 +132,43 @@ const transitionFactory = (
136
132
(
137
133
state: string,
138
134
timeout: number,
135
+ delay: number,
139
136
easing: string,
140
137
start: ArrayOrValue,
141
138
end: ArrayOrValue
142
139
): Object => {
143
140
return {
144
- ...this . getDefaultStyle ( timeout , easing , start ) ,
145
- ...this . getTransitionStates ( timeout , easing , start , end ) [ state ] ,
141
+ ...this . getDefaultStyle ( timeout , delay , easing , start ) ,
142
+ ...this . getTransitionStates ( start , end ) [ state ] ,
146
143
} ;
147
144
}
148
145
);
149
146
150
147
render() {
151
- const { children, timeout, easing, start, end, ...rest } = this . props ;
148
+ const {
149
+ children,
150
+ timeout,
151
+ delay,
152
+ easing,
153
+ start,
154
+ end,
155
+ ...rest
156
+ } = this . props ;
152
157
153
158
return (
154
159
< Transition
155
160
in
156
161
appear
157
162
mountOnEnter
158
163
unmountOnExit
159
- timeout = { this . getGlobalTimeout ( timeout ) }
164
+ timeout = { this . getGlobalTimeout ( timeout , delay ) }
160
165
{ ...rest }
161
166
>
162
167
{ ( state , childProps ) => {
163
168
const style = this . getFinalStyle (
164
169
state ,
165
170
timeout ,
171
+ delay ,
166
172
easing ,
167
173
start ,
168
174
end
0 commit comments