@@ -2,41 +2,42 @@ import { UploadTaskSnapshot, UploadTask } from '@firebase/storage-types';
22import  {  fromTask  }  from  './observable/fromTask' ; 
33import  {  Observable  }  from  'rxjs/Observable' ; 
44import  {  map ,  filter  }  from  'rxjs/operators' ; 
5+ import  {  from  }  from  'rxjs/observable/from' ; 
56
67export  interface  AngularFireUploadTask  { 
8+   task : UploadTask , 
79  snapshotChanges ( ) : Observable < UploadTaskSnapshot  |  undefined > ; 
810  percentageChanges ( ) : Observable < number  |  undefined > ; 
911  downloadURL ( ) : Observable < string  |  null > ; 
1012  pause ( ) : boolean ; 
1113  cancel ( ) : boolean ; 
1214  resume ( ) : boolean ; 
13-   then ( ) : Promise < any > ; 
15+   then ( 
16+     onFulfilled ?: ( ( a : UploadTaskSnapshot )  =>  any )  |  null ,  
17+     onRejected ?: ( ( a : Error )  =>  any )  |  null 
18+   ) : Promise < any > ; 
1419  catch ( onRejected : ( a : Error )  =>  any ) : Promise < any > ; 
1520} 
1621
22+ /** 
23+  * Create an AngularFireUploadTask from a regular UploadTask from the Storage SDK. 
24+  * This method creates an observable of the upload and returns on object that provides 
25+  * multiple methods for controlling and monitoring the file upload. 
26+  * @param  task  
27+  */ 
1728export  function  createUploadTask ( task : UploadTask ) : AngularFireUploadTask  { 
1829  const  inner$  =  fromTask ( task ) ; 
1930  return  { 
20-     pause ( )  {  return  task . pause ( ) ;  } , 
21-     cancel ( )  {  return  task . cancel ( ) ;  } , 
22-     resume ( )  {  return  task . resume ( ) ;  } , 
23-     then ( )  {  return  task . then ( ) ;  } , 
24-     catch ( onRejected : ( a : Error )  =>  any )  { 
25-       return  task . catch ( onRejected ) ; 
26-     } , 
27-     snapshotChanges ( )  {  return  inner$ ;  } , 
28-     percentageChanges ( )  { 
29-       return  inner$ . pipe ( 
30-         filter ( s  =>  s  !==  undefined ) , 
31-         map ( s  =>  s ! . bytesTransferred  /  s ! . totalBytes  *  100 ) 
32-       ) ; 
33-     } , 
34-     downloadURL ( )  { 
35-       return  inner$ . pipe ( 
36-         filter ( s  =>  s  !==  undefined ) , 
37-         filter ( s  =>  s ! . bytesTransferred  ===  s ! . totalBytes ) , 
38-         map ( s  =>  s ! . downloadURL ) 
39-       ) ; 
40-     } 
31+     task : task , 
32+     then : task . then . bind ( task ) , 
33+     catch : task . catch . bind ( task ) , 
34+     pause : task . pause . bind ( task ) , 
35+     cancel : task . cancel . bind ( task ) , 
36+     resume : task . resume . bind ( task ) , 
37+     snapshotChanges : ( )  =>  inner$ , 
38+     downloadURL : ( )  =>  from ( task . then ( s  =>  s . downloadURL ) ) , 
39+     percentageChanges : ( )  =>  inner$ . pipe ( 
40+       map ( s  =>  s . bytesTransferred  /  s . totalBytes  *  100 ) 
41+     ) 
4142  } ; 
4243} 
0 commit comments