mirror of https://github.com/abpframework/abp.git
19 changed files with 212 additions and 151 deletions
@ -1,42 +1,44 @@ |
|||
import { HttpClient } from '@angular/common/http'; |
|||
import { Injector } from '@angular/core'; |
|||
import { Store } from '@ngxs/store'; |
|||
import { catchError, switchMap } from 'rxjs/operators'; |
|||
import { SetEnvironment } from '../actions/config.actions'; |
|||
import { Config } from '../models/config'; |
|||
import { catchError, tap } from 'rxjs/operators'; |
|||
import { RestOccurError } from '../actions/rest.actions'; |
|||
import { Environment, RemoteEnv } from '../models/environment'; |
|||
import { EnvironmentService } from '../services/environment.service'; |
|||
import { deepMerge } from './object-utils'; |
|||
|
|||
export function getRemoteEnv(injector: Injector, environment: Partial<Config.Environment>) { |
|||
export function getRemoteEnv(injector: Injector, environment: Partial<Environment>) { |
|||
const environmentService = injector.get(EnvironmentService); |
|||
|
|||
const { remoteEnv } = environment; |
|||
const { headers = {}, method = 'GET', url } = remoteEnv || ({} as Config.RemoteEnv); |
|||
const { headers = {}, method = 'GET', url } = remoteEnv || ({} as RemoteEnv); |
|||
if (!url) return Promise.resolve(); |
|||
|
|||
const http = injector.get(HttpClient); |
|||
const store = injector.get(Store); |
|||
|
|||
return http |
|||
.request<Config.Environment>(method, url, { headers }) |
|||
.request<Environment>(method, url, { headers }) |
|||
.pipe( |
|||
catchError(err => store.dispatch(new RestOccurError(err))), // TODO: Condiser get handle function from a provider
|
|||
switchMap(env => store.dispatch(mergeEnvironments(environment, env, remoteEnv))), |
|||
tap(env => environmentService.setState(mergeEnvironments(environment, env, remoteEnv))), |
|||
) |
|||
.toPromise(); |
|||
} |
|||
|
|||
function mergeEnvironments( |
|||
local: Partial<Config.Environment>, |
|||
local: Partial<Environment>, |
|||
remote: any, |
|||
config: Config.RemoteEnv, |
|||
) { |
|||
config: RemoteEnv, |
|||
): Environment { |
|||
switch (config.mergeStrategy) { |
|||
case 'deepmerge': |
|||
return new SetEnvironment(deepMerge(local, remote)); |
|||
return deepMerge(local, remote); |
|||
case 'overwrite': |
|||
case null: |
|||
case undefined: |
|||
return new SetEnvironment(remote); |
|||
return remote; |
|||
default: |
|||
return new SetEnvironment(config.mergeStrategy(local, remote)); |
|||
return config.mergeStrategy(local, remote); |
|||
} |
|||
} |
|||
|
|||
Loading…
Reference in new issue