diff --git a/src/plugins/plugin.ts b/src/plugins/plugin.ts index d2ec8cc1..a06bb16d 100644 --- a/src/plugins/plugin.ts +++ b/src/plugins/plugin.ts @@ -141,6 +141,19 @@ function wrapObservable(pluginObj:any, methodName:string, args:any[], opts:any = }); } +/** + * Wrap the event with an observable + * @param event + * @returns {Observable} + */ +function wrapEventObservable (event : string) : Observable { + return new Observable(observer => { + let callback = (status : any) => observer.next(status); + window.addEventListener(event, callback, false); + return () => window.removeEventListener(event, callback, false); + }); +} + /** * @private * @param pluginObj @@ -151,13 +164,17 @@ function wrapObservable(pluginObj:any, methodName:string, args:any[], opts:any = export const wrap = function(pluginObj:any, methodName:string, opts:any = {}) { return (...args) => { - if (opts.sync){ + if (opts.sync) return callCordovaPlugin(pluginObj, methodName, args, opts); - } else if (opts.observable) { + + else if (opts.observable) return wrapObservable(pluginObj, methodName, args, opts); - } else { + + else if (opts.eventObservable && opts.event) + return wrapEventObservable(opts.event); + + else return wrapPromise(pluginObj, methodName, args, opts); - } } };