11import * as React from 'react' ;
2- import { getDownloadURL } from 'rxfire/storage' ;
3- import { Observable } from 'rxjs' ;
2+ import { getDownloadURL , fromTask } from 'rxfire/storage' ;
43import { ReactFireOptions , useObservable , ObservableStatus , useStorage } from './' ;
54import { useSuspenseEnabledFromConfigAndContext } from './firebaseApp' ;
65import { ref } from 'firebase/storage' ;
76
87import type { UploadTask , UploadTaskSnapshot , StorageReference , FirebaseStorage } from 'firebase/storage' ;
98
10- /**
11- * modified version of rxFire's _fromTask
12- *
13- * @param task
14- */
15- function _fromTask ( task : UploadTask ) {
16- return new Observable < UploadTaskSnapshot > ( ( subscriber ) => {
17- const progress = ( snap : UploadTaskSnapshot ) => {
18- return subscriber . next ( snap ) ;
19- } ;
20- const error = ( e : any ) => subscriber . error ( e ) ;
21- const complete = ( ) => {
22- return subscriber . complete ( ) ;
23- } ;
24- task . on ( 'state_changed' , progress , error , complete ) ;
25-
26- // I REMOVED THE UNSUBSCRIBE RETURN BECAUSE IT CANCELS THE UPLOAD
27- // https://github.com/firebase/firebase-js-sdk/issues/1659
28- } ) ;
29- }
30-
319/**
3210 * Subscribe to the progress of a storage task
3311 *
@@ -37,7 +15,7 @@ function _fromTask(task: UploadTask) {
3715 */
3816export function useStorageTask < T = unknown > ( task : UploadTask , ref : StorageReference , options ?: ReactFireOptions < T > ) : ObservableStatus < UploadTaskSnapshot | T > {
3917 const observableId = `storage:task:${ ref . toString ( ) } ` ;
40- const observable$ = _fromTask ( task ) ;
18+ const observable$ = fromTask ( task ) ;
4119
4220 return useObservable ( observableId , observable$ , options ) ;
4321}
0 commit comments