@@ -2,41 +2,42 @@ import { UploadTaskSnapshot, UploadTask } from '@firebase/storage-types';
2
2
import { fromTask } from './observable/fromTask' ;
3
3
import { Observable } from 'rxjs/Observable' ;
4
4
import { map , filter } from 'rxjs/operators' ;
5
+ import { from } from 'rxjs/observable/from' ;
5
6
6
7
export interface AngularFireUploadTask {
8
+ task : UploadTask ,
7
9
snapshotChanges ( ) : Observable < UploadTaskSnapshot | undefined > ;
8
10
percentageChanges ( ) : Observable < number | undefined > ;
9
11
downloadURL ( ) : Observable < string | null > ;
10
12
pause ( ) : boolean ;
11
13
cancel ( ) : boolean ;
12
14
resume ( ) : boolean ;
13
- then ( ) : Promise < any > ;
15
+ then (
16
+ onFulfilled ?: ( ( a : UploadTaskSnapshot ) => any ) | null ,
17
+ onRejected ?: ( ( a : Error ) => any ) | null
18
+ ) : Promise < any > ;
14
19
catch ( onRejected : ( a : Error ) => any ) : Promise < any > ;
15
20
}
16
21
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
+ */
17
28
export function createUploadTask ( task : UploadTask ) : AngularFireUploadTask {
18
29
const inner$ = fromTask ( task ) ;
19
30
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
+ )
41
42
} ;
42
43
}
0 commit comments