Skip to content

Commit 99a2a81

Browse files
authored
fix(storage): Add our zone wrappers for download url and meta-data (#1548)
1 parent 14e78ec commit 99a2a81

File tree

2 files changed

+18
-7
lines changed

2 files changed

+18
-7
lines changed

src/storage/ref.ts

+13-4
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { SettableMetadata, UploadMetadata, Reference, StringFormat } from '@fire
22
import { createUploadTask, AngularFireUploadTask } from './task';
33
import { Observable } from 'rxjs/Observable';
44
import { from } from 'rxjs/observable/from';
5+
import { FirebaseZoneScheduler } from 'angularfire2';
56

67
export interface AngularFireStorageReference {
78
getDownloadURL(): Observable<any>;
@@ -18,12 +19,20 @@ export interface AngularFireStorageReference {
1819
* creates observable methods from promise based methods.
1920
* @param ref
2021
*/
21-
export function createStorageRef(ref: Reference): AngularFireStorageReference {
22+
export function createStorageRef(ref: Reference, scheduler: FirebaseZoneScheduler): AngularFireStorageReference {
2223
return {
23-
getDownloadURL: () => from(ref.getDownloadURL()),
24-
getMetadata: () => from(ref.getMetadata()),
24+
getDownloadURL: () => scheduler.keepUnstableUntilFirst(
25+
scheduler.runOutsideAngular(
26+
from(ref.getDownloadURL())
27+
)
28+
),
29+
getMetadata: () => scheduler.keepUnstableUntilFirst(
30+
scheduler.runOutsideAngular(
31+
from(ref.getMetadata())
32+
)
33+
),
2534
delete: () => from(ref.delete()),
26-
child: (path: string) => createStorageRef(ref.child(path)),
35+
child: (path: string) => createStorageRef(ref.child(path), scheduler),
2736
updateMetatdata: (meta: SettableMetadata) => from(ref.updateMetadata(meta)),
2837
put: (data: any, metadata?: UploadMetadata) => {
2938
const task = ref.put(data, metadata);

src/storage/storage.ts

+5-3
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { FirebaseStorage, UploadMetadata } from '@firebase/storage-types';
33
import { createStorageRef, AngularFireStorageReference } from './ref';
44
import { createUploadTask, AngularFireUploadTask } from './task';
55
import { Observable } from 'rxjs/Observable';
6-
import { FirebaseAppConfig, FirebaseAppName, _firebaseAppFactory } from 'angularfire2';
6+
import { FirebaseAppConfig, FirebaseAppName, FirebaseZoneScheduler, _firebaseAppFactory } from 'angularfire2';
77
import { FirebaseOptions } from '@firebase/app-types';
88

99
export const StorageBucket = new InjectionToken<string>('angularfire2.storageBucket');
@@ -18,26 +18,28 @@ export const StorageBucket = new InjectionToken<string>('angularfire2.storageBuc
1818
@Injectable()
1919
export class AngularFireStorage {
2020
public readonly storage: FirebaseStorage;
21+
public readonly scheduler: FirebaseZoneScheduler;
2122

2223
constructor(
2324
@Inject(FirebaseAppConfig) config:FirebaseOptions,
2425
@Optional() @Inject(FirebaseAppName) name:string,
2526
@Optional() @Inject(StorageBucket) storageBucket:string,
2627
zone: NgZone
2728
) {
29+
this.scheduler = new FirebaseZoneScheduler(zone);
2830
this.storage = zone.runOutsideAngular(() => {
2931
const app = _firebaseAppFactory(config, name);
3032
return app.storage(storageBucket || undefined);
3133
});
3234
}
3335

3436
ref(path: string) {
35-
return createStorageRef(this.storage.ref(path));
37+
return createStorageRef(this.storage.ref(path), this.scheduler);
3638
}
3739

3840
upload(path: string, data: any, metadata?: UploadMetadata) {
3941
const storageRef = this.storage.ref(path);
40-
const ref = createStorageRef(storageRef);
42+
const ref = createStorageRef(storageRef, this.scheduler);
4143
return ref.put(data, metadata);
4244
}
4345

0 commit comments

Comments
 (0)