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 { HttpClient } from '@angular/common/http'; |
||||
import { Injector } from '@angular/core'; |
import { Injector } from '@angular/core'; |
||||
import { Store } from '@ngxs/store'; |
import { Store } from '@ngxs/store'; |
||||
import { catchError, switchMap } from 'rxjs/operators'; |
import { catchError, tap } from 'rxjs/operators'; |
||||
import { SetEnvironment } from '../actions/config.actions'; |
|
||||
import { Config } from '../models/config'; |
|
||||
import { RestOccurError } from '../actions/rest.actions'; |
import { RestOccurError } from '../actions/rest.actions'; |
||||
|
import { Environment, RemoteEnv } from '../models/environment'; |
||||
|
import { EnvironmentService } from '../services/environment.service'; |
||||
import { deepMerge } from './object-utils'; |
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 { remoteEnv } = environment; |
||||
const { headers = {}, method = 'GET', url } = remoteEnv || ({} as Config.RemoteEnv); |
const { headers = {}, method = 'GET', url } = remoteEnv || ({} as RemoteEnv); |
||||
if (!url) return Promise.resolve(); |
if (!url) return Promise.resolve(); |
||||
|
|
||||
const http = injector.get(HttpClient); |
const http = injector.get(HttpClient); |
||||
const store = injector.get(Store); |
const store = injector.get(Store); |
||||
|
|
||||
return http |
return http |
||||
.request<Config.Environment>(method, url, { headers }) |
.request<Environment>(method, url, { headers }) |
||||
.pipe( |
.pipe( |
||||
catchError(err => store.dispatch(new RestOccurError(err))), // TODO: Condiser get handle function from a provider
|
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(); |
.toPromise(); |
||||
} |
} |
||||
|
|
||||
function mergeEnvironments( |
function mergeEnvironments( |
||||
local: Partial<Config.Environment>, |
local: Partial<Environment>, |
||||
remote: any, |
remote: any, |
||||
config: Config.RemoteEnv, |
config: RemoteEnv, |
||||
) { |
): Environment { |
||||
switch (config.mergeStrategy) { |
switch (config.mergeStrategy) { |
||||
case 'deepmerge': |
case 'deepmerge': |
||||
return new SetEnvironment(deepMerge(local, remote)); |
return deepMerge(local, remote); |
||||
case 'overwrite': |
case 'overwrite': |
||||
case null: |
case null: |
||||
case undefined: |
case undefined: |
||||
return new SetEnvironment(remote); |
return remote; |
||||
default: |
default: |
||||
return new SetEnvironment(config.mergeStrategy(local, remote)); |
return config.mergeStrategy(local, remote); |
||||
} |
} |
||||
} |
} |
||||
|
|||||
Loading…
Reference in new issue