11import  {  storage  }  from  'firebase/app' ; 
22import  {  fromTask  }  from  './observable/fromTask' ; 
33import  {  Observable  }  from  'rxjs/Observable' ; 
4- import  {  map ,  filter  }  from  'rxjs/operators' ; 
4+ import  {  map ,  filter ,   shareReplay  }  from  'rxjs/operators' ; 
55
66export  interface  AngularFireUploadTask  { 
77  snapshotChanges ( ) : Observable < storage . UploadTaskSnapshot  |  undefined > ; 
@@ -15,6 +15,7 @@ export interface AngularFireUploadTask {
1515} 
1616
1717export  function  createUploadTask ( task : storage . UploadTask ) : AngularFireUploadTask  { 
18+   const  inner$  =  fromTask ( task ) . pipe ( shareReplay ( ) ) ; 
1819  return  {  
1920    pause ( )  {  return  task . pause ( ) ;  } ,     
2021    cancel ( )  {  return  task . cancel ( ) ;  } ,     
@@ -23,17 +24,15 @@ export function createUploadTask(task: storage.UploadTask): AngularFireUploadTas
2324    catch ( onRejected : ( a : Error )  =>  any )  {  
2425      return  task . catch ( onRejected ) ; 
2526    } , 
26-     snapshotChanges ( )  {  return  fromTask ( task ) ;  } ,    
27+     snapshotChanges ( )  {  return  inner$ ;  } ,    
2728    percentageChanges ( )  {  
28-       return  fromTask ( task ) . pipe ( 
29+       return  inner$ . pipe ( 
2930        filter ( s  =>  s  !==  undefined ) , 
30-         map ( s  =>  { 
31-           return  s ! . bytesTransferred  /  s ! . totalBytes  *  100 ; 
32-         } ) 
31+         map ( s  =>  s ! . bytesTransferred  /  s ! . totalBytes  *  100 ) 
3332      ) ; 
3433    } , 
3534    downloadURL ( )  { 
36-       return  fromTask ( task ) . pipe ( 
35+       return  inner$ . pipe ( 
3736        filter ( s  =>  s  !==  undefined ) , 
3837        filter ( s  =>  s ! . bytesTransferred  ===  s ! . totalBytes ) , 
3938        map ( s  =>  s ! . downloadURL ) 
0 commit comments