diff --git a/package-lock.json b/package-lock.json index 719e17d8b265d61c11e2787e52d0de04a38140b4..70a284e290b3d476defbaec1b08460d1740ba584 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 4c0c6a3b519b85e419e65e96fd92e2315a6a23c8..cab38b32eeb341df795ee66f6c54384095da6345 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 26ddcbb8589bfd635e96706257d42b1fc43aed66..3ac576bbc6d4c5046e1bdd9f19b6be2d610eecfe 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 0000000000000000000000000000000000000000..430a1e5b255ddebff4e3cb76f4d0b81d50a2b51a --- /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 0000000000000000000000000000000000000000..77c139cba33a23c84ec0f1131fef6db3dd9ac715 --- /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 0000000000000000000000000000000000000000..13f6de5cf9434c4c8cf5898ab48180daac82f44f --- /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 c42434a33cea9b29512219a01563aecf589d1ed2..4474ddec3956eead5927ce81af5d424195c305a2 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 e7a4407ae01a81424aa1bc39330e7929a0c7c1bf..f4e884c7ae3e92c4fa9e9a1a3438eda4692f876e 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' };