projects/cobbler-frontend/src/app/services/app-config.service.ts
        
| Properties | 
| 
 | 
| Methods | 
| constructor(http: HttpClient) | ||||||
| 
                                    Parameters :
                                     
 | 
| loadConfig | 
| loadConfig() | 
| 
                            Returns :          void | 
| retrieveConfigExternal | 
| retrieveConfigExternal() | 
| 
                            Returns :          Observable<AppConfig> | 
| retrieveConfigInternal | 
| retrieveConfigInternal() | 
| 
                            Returns :          any | 
| Public AppConfig | 
| Type : BehaviorSubject<AppConfig> | 
| Default value : new BehaviorSubject<AppConfig>(
    EMPTY_CONFIG,
  ) | 
| Public AppConfig$ | 
| Type : Observable<AppConfig> | 
| Default value : this.AppConfig.asObservable() | 
| Private configUrlExternal | 
| Type : string | 
| Default value : '/app-config.json' | 
| Private configUrlInternal | 
| Type : string | 
| Default value : 'assets/configs/app-config.json' | 
import { Injectable } from '@angular/core';
import { HttpClient, HttpErrorResponse } from '@angular/common/http';
import {
  BehaviorSubject,
  concat,
  concatAll,
  concatMap,
  from,
  Observable,
} from 'rxjs';
import { retry } from 'rxjs/operators';
export interface AppConfig {
  cobblerUrls: string[];
}
const EMPTY_CONFIG: AppConfig = {
  cobblerUrls: [],
};
@Injectable({
  providedIn: 'root',
})
export class AppConfigService {
  private configUrlInternal = 'assets/configs/app-config.json';
  private configUrlExternal = '/app-config.json';
  public AppConfig: BehaviorSubject<AppConfig> = new BehaviorSubject<AppConfig>(
    EMPTY_CONFIG,
  );
  public AppConfig$: Observable<AppConfig> = this.AppConfig.asObservable();
  constructor(private http: HttpClient) {}
  loadConfig(): void {
    concat(
      this.retrieveConfigInternal(),
      this.retrieveConfigExternal(),
    ).subscribe({
      next: (res) => {
        this.AppConfig.next(res);
      },
      error: (err: HttpErrorResponse) => {
        if (err.status === 404) {
          console.info("Couldn't load config at " + err.url);
        }
      },
    });
  }
  retrieveConfigInternal() {
    return this.http.get<AppConfig>(this.configUrlInternal).pipe(
      retry(2), // retry a failed request up to 3 times
    );
  }
  retrieveConfigExternal(): Observable<AppConfig> {
    return this.http.get<AppConfig>(this.configUrlExternal);
  }
}