From 597a532b5579f6fe08ac81ac507f0c9f5da61683 Mon Sep 17 00:00:00 2001 From: Benhammou Mohammed Rachid <mrbenhammou@takima.fr> Date: Tue, 28 May 2024 15:12:33 +0200 Subject: [PATCH] add overriding environment --- package-lock.json | 7 +++--- package.json | 3 ++- src/app/app.config.ts | 3 ++- src/app/core/environment-init.ts | 32 +++++++++++++++++++++++++++ src/assets/environment.json | 4 ++++ src/environments/environment.model.ts | 4 ++++ src/environments/environment.prod.ts | 4 +++- src/environments/environment.ts | 3 ++- 8 files changed, 52 insertions(+), 8 deletions(-) create mode 100644 src/app/core/environment-init.ts create mode 100644 src/assets/environment.json create mode 100644 src/environments/environment.model.ts diff --git a/package-lock.json b/package-lock.json index 719e17d..70a284e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "bootstrap-icons": "^1.11.3", "chart.js": "^4.4.1", "file-saver": "^2.0.5", + "lodash": "~4.17.21", "ng-bootstrap": "^1.6.3", "rxjs": "~7.8.0", "tslib": "^2.3.0", @@ -8155,8 +8156,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.debounce": { "version": "4.0.8", @@ -18786,8 +18786,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.debounce": { "version": "4.0.8", diff --git a/package.json b/package.json index 4c0c6a3..cab38b3 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,8 @@ "ng-bootstrap": "^1.6.3", "rxjs": "~7.8.0", "tslib": "^2.3.0", - "zone.js": "~0.14.2" + "zone.js": "~0.14.2", + "lodash": "~4.17.21" }, "devDependencies": { "@angular-devkit/build-angular": "^17.0.10", diff --git a/src/app/app.config.ts b/src/app/app.config.ts index 26ddcbb..3ac576b 100644 --- a/src/app/app.config.ts +++ b/src/app/app.config.ts @@ -3,8 +3,9 @@ import { provideRouter } from '@angular/router'; import { routes } from './app.routes'; import {provideHttpClient} from "@angular/common/http"; +import { ENVIRONMENT_INITIALIZER } from './core/environment-init'; export const appConfig: ApplicationConfig = { - providers: [provideRouter(routes), provideHttpClient()] + providers: [provideRouter(routes), provideHttpClient(), ...ENVIRONMENT_INITIALIZER] }; diff --git a/src/app/core/environment-init.ts b/src/app/core/environment-init.ts new file mode 100644 index 0000000..430a1e5 --- /dev/null +++ b/src/app/core/environment-init.ts @@ -0,0 +1,32 @@ +import { APP_INITIALIZER, InjectionToken, Provider } from "@angular/core"; +import { lastValueFrom, map, ReplaySubject } from "rxjs"; +import { merge } from "lodash"; +import {HttpClient} from '@angular/common/http'; +import { environment } from "src/environments/environment"; +import { Environment } from "src/environments/environment.model"; + +export const ENVIRONMENT = new InjectionToken('env'); +const environmentSubject = new ReplaySubject<Environment>(1); +const environment$ = environmentSubject.asObservable(); + +export const ENVIRONMENT_INITIALIZER: Provider[] = [ + { + provide: APP_INITIALIZER, + useFactory: environmentInitializer, + multi: true, + deps: [HttpClient], + }, + { provide: ENVIRONMENT, useValue: environment$ }, +]; + +export function environmentInitializer( + http: HttpClient +): () => Promise<Environment> { + return () => { + let res = http + .get<Environment>('/assets/environment.json') + .pipe(map(e => merge(environment, e))); + res.subscribe(environmentSubject); + return lastValueFrom(res); + }; +} \ No newline at end of file diff --git a/src/assets/environment.json b/src/assets/environment.json new file mode 100644 index 0000000..77c139c --- /dev/null +++ b/src/assets/environment.json @@ -0,0 +1,4 @@ +{ + "production": false, + "url": "http://api.allocine.takima.dev" +} diff --git a/src/environments/environment.model.ts b/src/environments/environment.model.ts new file mode 100644 index 0000000..13f6de5 --- /dev/null +++ b/src/environments/environment.model.ts @@ -0,0 +1,4 @@ +export interface Environment { + production: boolean; + url: string; +} \ No newline at end of file diff --git a/src/environments/environment.prod.ts b/src/environments/environment.prod.ts index c42434a..4474dde 100644 --- a/src/environments/environment.prod.ts +++ b/src/environments/environment.prod.ts @@ -1,4 +1,6 @@ -export const environment = { +import { Environment } from "./environment.model"; + +export const environment: Environment = { production: true, url: 'localhost:8080' }; diff --git a/src/environments/environment.ts b/src/environments/environment.ts index e7a4407..f4e884c 100644 --- a/src/environments/environment.ts +++ b/src/environments/environment.ts @@ -1,5 +1,6 @@ +import { Environment } from "./environment.model"; -export const environment = { +export const environment: Environment = { production: false, url: 'http://localhost:8080' }; -- GitLab