From c87f0c561e4b9c9b30c342c3aebe5ce4d9d1c779 Mon Sep 17 00:00:00 2001 From: "Manu Mtz.-Almeida" Date: Fri, 20 Apr 2018 17:06:35 +0200 Subject: [PATCH] fix(angular): Config provider --- angular/src/module.ts | 16 ++++++++++--- angular/src/providers/config.ts | 40 +++++++++++++++++++++++++++++++ angular/src/providers/index.ts | 1 + angular/src/providers/platform.ts | 3 ++- 4 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 angular/src/providers/config.ts diff --git a/angular/src/module.ts b/angular/src/module.ts index 0e10fcc6dd..0cb2aa84c7 100644 --- a/angular/src/module.ts +++ b/angular/src/module.ts @@ -1,4 +1,4 @@ -import { ModuleWithProviders, NgModule } from '@angular/core'; +import { InjectionToken, ModuleWithProviders, NgModule } from '@angular/core'; import { CommonModule } from '@angular/common'; import * as c from './directives'; @@ -119,7 +119,7 @@ const PROVIDERS = [ p.NavController, p.Platform, p.Events, - p.DomController + p.DomController, ]; @NgModule({ @@ -135,12 +135,22 @@ const PROVIDERS = [ ] }) export class IonicModule { - static forRoot(): ModuleWithProviders { + static forRoot(config?: {[key: string]: any}): ModuleWithProviders { return { ngModule: IonicModule, providers: [ + // Load config with defualt values + { provide: ConfigToken, useValue: config }, + { provide: p.Config, useFactory: setupConfig, deps: [ ConfigToken ] }, + ...PROVIDERS, ] }; } } + +export const ConfigToken = new InjectionToken('USERCONFIG'); +export function setupConfig(userConfig: any): p.Config { + const config = new p.Config(userConfig); + return config; +} diff --git a/angular/src/providers/config.ts b/angular/src/providers/config.ts new file mode 100644 index 0000000000..cbda79be7f --- /dev/null +++ b/angular/src/providers/config.ts @@ -0,0 +1,40 @@ +import { Config as CoreConfig } from '@ionic/core'; + +export class Config { + + constructor(defaultConfig: {[key: string]: any}) { + const Ionic = (window as any).Ionic; + if (Ionic.config && Ionic.config.constructor.name !== 'Object') { + console.error('ionic config was already initialized'); + return; + } + Ionic.config = { + ...Ionic.config, + ...defaultConfig + }; + } + + get(key: string, fallback?: any): any { + return getConfig().get(key, fallback); + } + + getBoolean(key: string, fallback?: boolean): boolean { + return getConfig().getBoolean(key, fallback); + } + + getNumber(key: string, fallback?: number): number { + return getConfig().getNumber(key, fallback); + } + + set(key: string, value?: any) { + getConfig().set(key, value); + } +} + +function getConfig(): CoreConfig { + const Ionic = (window as any).Ionic; + if (Ionic && Ionic.config) { + return Ionic.config; + } + return null; +} diff --git a/angular/src/providers/index.ts b/angular/src/providers/index.ts index 20c06ea0fa..4eeb82bfc5 100644 --- a/angular/src/providers/index.ts +++ b/angular/src/providers/index.ts @@ -12,3 +12,4 @@ export { PopoverController } from './popover-controller'; export { ToastController } from './toast-controller'; export { NavController } from './nav-controller'; export { DomController } from './dom-controller'; +export { Config } from './config'; diff --git a/angular/src/providers/platform.ts b/angular/src/providers/platform.ts index 2c87cd0a0d..c452df0324 100644 --- a/angular/src/providers/platform.ts +++ b/angular/src/providers/platform.ts @@ -1,7 +1,8 @@ import { PlatformConfig } from '@ionic/core'; -import { HostListener } from '@angular/core'; +import { Injectable } from '@angular/core'; +@Injectable() export class Platform { private _platforms: PlatformConfig[] = [];