@@ -11,7 +11,10 @@ type Label = {
1111 position : string | number ;
1212} ;
1313
14- export type Targets = Map < string | number , ReactElement > ;
14+ export type Targets = Map < string | number , ReactElement | ReactElement [ ] > ;
15+ export type TargetsRef = {
16+ set : ( key : string , target : any ) => void ;
17+ } ;
1518
1619export type Target = ReactElement | null ;
1720
@@ -37,6 +40,12 @@ class Timeline extends Provider<TimelineProps> {
3740 timeline : any ;
3841 targets : Targets = new Map ( ) ;
3942
43+ constructor ( props : TimelineProps ) {
44+ super ( props ) ;
45+
46+ this . setTarget = this . setTarget . bind ( this ) ;
47+ }
48+
4049 setPlayState ( playState : PlayState ) {
4150 const { playState : previousPlayState } = this . props ;
4251 setPlayState ( playState , previousPlayState , this . timeline ) ;
@@ -113,12 +122,15 @@ class Timeline extends Provider<TimelineProps> {
113122 if ( consumer . tween && ! consumer . props . children ) {
114123 const { position, target, stagger, ...vars } = consumer . props as TweenProps ;
115124
125+ // get target if not nullish
126+ let targets = null ;
127+ if ( target !== null && typeof target !== 'undefined' ) {
128+ targets = this . targets . get ( target ) ;
129+ }
130+
116131 const tween = getTweenFunction (
117132 // @ts -ignore
118- nullishCoalescing (
119- target ? this . targets . get ( target ) : null ,
120- Array . from ( this . targets . values ( ) )
121- ) ,
133+ nullishCoalescing ( targets , Array . from ( this . targets . values ( ) ) ) ,
122134 {
123135 stagger,
124136 ...vars ,
@@ -161,6 +173,13 @@ class Timeline extends Provider<TimelineProps> {
161173
162174 setTarget ( key : string , target : any ) {
163175 if ( target !== null ) {
176+ if ( this . targets . has ( key ) ) {
177+ const targets = this . targets . get ( key ) ;
178+ if ( Array . isArray ( targets ) ) {
179+ this . targets . set ( key , [ ...targets , ...target ] ) ;
180+ return ;
181+ }
182+ }
164183 this . targets . set ( key , target ) ;
165184 }
166185 }
@@ -187,7 +206,7 @@ class Timeline extends Provider<TimelineProps> {
187206
188207 // if is forwardRef clone and pass targets as ref
189208 if ( isForwardRef ( target ) ) {
190- return < target . type ref = { this . targets } /> ;
209+ return < target . type ref = { { set : this . setTarget } } /> ;
191210 }
192211
193212 // else iterate the first level of children and set targets
0 commit comments