@@ -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