From c40976ee19a7878c5af48a86e085d93ab87bbc21 Mon Sep 17 00:00:00 2001 From: Reid Givens <rgivens@nrao.edu> Date: Fri, 5 Feb 2021 13:00:02 -0500 Subject: [PATCH] removed the env.js set up and replaced it using angular's environment system. Also removed a few unused imports and added some padding to the html template for the workspaces component --- apps/web/README.md | 8 +++--- apps/web/angular.json | 27 +++++++++++++++++++ apps/web/src/app/app.module.ts | 27 +++++++++---------- .../services/result-type.service.ts | 8 +----- .../services/search-results.service.ts | 15 +++++------ apps/web/src/app/env/app-config.service.ts | 12 ++++----- apps/web/src/app/env/env.service.provider.ts | 25 ----------------- apps/web/src/app/env/env.service.spec.ts | 12 --------- apps/web/src/app/env/env.service.ts | 15 ----------- .../services/capability-launcher.service.ts | 18 ++++++------- .../app/workspaces/workspaces.component.html | 4 +-- .../app/workspaces/workspaces.component.ts | 10 +++---- apps/web/src/env.js | 10 ------- apps/web/src/environments/environment.prod.ts | 6 ++++- apps/web/src/environments/environment.test.ts | 7 +++++ apps/web/src/environments/environment.ts | 6 ++++- apps/web/src/index.html | 1 - 17 files changed, 90 insertions(+), 121 deletions(-) delete mode 100644 apps/web/src/app/env/env.service.provider.ts delete mode 100644 apps/web/src/app/env/env.service.spec.ts delete mode 100644 apps/web/src/app/env/env.service.ts delete mode 100644 apps/web/src/env.js create mode 100644 apps/web/src/environments/environment.test.ts diff --git a/apps/web/README.md b/apps/web/README.md index bf1c89bc4..f922fe0d0 100644 --- a/apps/web/README.md +++ b/apps/web/README.md @@ -26,11 +26,13 @@ Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protrac To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md). -## Archive Config +## Environment Config -Configuration variables can be set in the env.js file located next to the index.html file. These variables will be loaded into the angular app through the EnvService. +Configuration variables can be set in `src/environments` directory. -The env.js file can be modified without having to rebuild the application. +To use a configuration in a build, run `ng build --c=production` or `ng build --c=test`. + +To use a configuration locally, run `ng serve --c=production` or `ng serve --c=test`. ## Search Filters diff --git a/apps/web/angular.json b/apps/web/angular.json index 02d104cdb..6c5a0e4b1 100644 --- a/apps/web/angular.json +++ b/apps/web/angular.json @@ -59,6 +59,30 @@ "maximumError": "5mb" } ] + }, + "test": { + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.test.ts" + } + ], + "optimization": true, + "outputHashing": "all", + "sourceMap": false, + "extractCss": true, + "namedChunks": false, + "aot": true, + "extractLicenses": true, + "vendorChunk": false, + "buildOptimizer": true, + "budgets": [ + { + "type": "initial", + "maximumWarning": "2mb", + "maximumError": "5mb" + } + ] } } }, @@ -70,6 +94,9 @@ "configurations": { "production": { "browserTarget": "archive2:build:production" + }, + "test": { + "browserTarget": "archive2:build:test" } } }, diff --git a/apps/web/src/app/app.module.ts b/apps/web/src/app/app.module.ts index 58d17cdda..0808f31f8 100644 --- a/apps/web/src/app/app.module.ts +++ b/apps/web/src/app/app.module.ts @@ -1,20 +1,19 @@ -import { BrowserModule } from '@angular/platform-browser'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; -import { ReactiveFormsModule} from "@angular/forms"; -import { NgModule } from '@angular/core'; +import {BrowserModule} from '@angular/platform-browser'; +import {BrowserAnimationsModule} from '@angular/platform-browser/animations'; +import {ReactiveFormsModule} from "@angular/forms"; +import {NgModule} from '@angular/core'; import {HttpClientModule} from "@angular/common/http"; -import { AppComponent } from './app.component'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { EnvServiceProvider} from "./env/env.service.provider"; -import { WebAnalyticsService } from "./web-analytics/web-analytics.service"; +import {AppComponent} from './app.component'; +import {NgbModule} from '@ng-bootstrap/ng-bootstrap'; +import {WebAnalyticsService} from "./web-analytics/web-analytics.service"; -import { HeaderComponent } from './header/header.component'; -import { FooterComponent } from './footer/footer.component'; +import {HeaderComponent} from './header/header.component'; +import {FooterComponent} from './footer/footer.component'; -import { AppRoutingModule } from './app-routing.module'; -import { SplashComponent } from './splash/splash.component'; -import { SharedModule } from "./shared/shared.module"; +import {AppRoutingModule} from './app-routing.module'; +import {SplashComponent} from './splash/splash.component'; +import {SharedModule} from "./shared/shared.module"; @NgModule({ declarations: [ @@ -33,7 +32,7 @@ import { SharedModule } from "./shared/shared.module"; HttpClientModule, SharedModule ], - providers: [EnvServiceProvider, WebAnalyticsService], + providers: [WebAnalyticsService], bootstrap: [AppComponent] }) export class AppModule { diff --git a/apps/web/src/app/archive-search/services/result-type.service.ts b/apps/web/src/app/archive-search/services/result-type.service.ts index 89872f44e..fe69721b3 100644 --- a/apps/web/src/app/archive-search/services/result-type.service.ts +++ b/apps/web/src/app/archive-search/services/result-type.service.ts @@ -1,8 +1,6 @@ import {Injectable} from '@angular/core'; import {ResultType} from "../model/result-type"; import {BehaviorSubject, Observable} from "rxjs"; -import {HttpClient} from "@angular/common/http"; -import {EnvService} from "../../env/env.service"; @Injectable({ providedIn: 'root' @@ -13,11 +11,7 @@ export class ResultTypeService { private _resultType: BehaviorSubject<ResultType> = new BehaviorSubject(this.resultType); public readonly resultType$: Observable<ResultType> = this._resultType.asObservable(); - private serverAddress: string = ''; - - constructor(private http: HttpClient, private env: EnvService) { - this.serverAddress = env.apiUrl; - } + constructor() {} updateResultType(name: string): void { this.resultType = ResultType.getResultType(name); diff --git a/apps/web/src/app/archive-search/services/search-results.service.ts b/apps/web/src/app/archive-search/services/search-results.service.ts index 528a7e7bd..1b4d3ea61 100644 --- a/apps/web/src/app/archive-search/services/search-results.service.ts +++ b/apps/web/src/app/archive-search/services/search-results.service.ts @@ -1,9 +1,9 @@ -import { Injectable } from '@angular/core'; +import {Injectable} from '@angular/core'; import {HttpClient, HttpParams} from "@angular/common/http"; import {Observable, Subscription} from "rxjs"; import {SelectedFilter} from "../model/selected-filter"; import {SelectedFilterService} from "./selected-filter.service"; -import {EnvService } from "../../env/env.service"; +import {environment} from "../../../environments/environment"; import {Field} from "../model/field"; @Injectable({ @@ -11,13 +11,10 @@ import {Field} from "../model/field"; }) export class SearchResultsService { - private serverAddress: string = ''; - private selectedFilters: Array<SelectedFilter> = []; private selectedFiltersSub: Subscription; - constructor(private http: HttpClient, private selectedFilterService: SelectedFilterService, private env: EnvService) { - this.serverAddress = env.apiUrl; + constructor(private http: HttpClient, private selectedFilterService: SelectedFilterService) { this.selectedFiltersSub = this.selectedFilterService.selectedFilters$.subscribe(selectedFilters => { this.selectedFilters = selectedFilters; }); @@ -35,7 +32,7 @@ export class SearchResultsService { params = params.append(key.name, JSON.stringify(key.value)); } } - return this.http.get(this.serverAddress + endPoint, {observe: 'response', params: params}); + return this.http.get(environment.apiUrl + endPoint, {observe: 'response', params: params}); } getObservationDetails(id: string): Observable<any> { @@ -43,7 +40,7 @@ export class SearchResultsService { params = params.append('solr_id', id); console.warn('Obs Details Query'); console.log(params); - return this.http.get(this.serverAddress + 'restapi_get_full_exec_block_details', {observe: "response", params: params}); + return this.http.get(environment.apiUrl + 'restapi_get_full_exec_block_details', {observe: "response", params: params}); } getProjectDetails(id: string): Observable<any> { @@ -51,7 +48,7 @@ export class SearchResultsService { params = params.append('project_code', '"' + id + '"'); console.warn('Project Details Query'); console.log(params); - return this.http.get(this.serverAddress + 'restapi_get_paged_exec_blocks', {observe: "response", params: params}); + return this.http.get(environment.apiUrl + 'restapi_get_paged_exec_blocks', {observe: "response", params: params}); } } diff --git a/apps/web/src/app/env/app-config.service.ts b/apps/web/src/app/env/app-config.service.ts index e60d179eb..17ce837c9 100644 --- a/apps/web/src/app/env/app-config.service.ts +++ b/apps/web/src/app/env/app-config.service.ts @@ -1,6 +1,6 @@ -import { Injectable } from '@angular/core'; -import { EnvService } from "./env.service"; -import { HttpClient } from '@angular/common/http'; +import {Injectable} from '@angular/core'; +import {environment} from "../../environments/environment"; +import {HttpClient} from '@angular/common/http'; @Injectable({ providedIn: 'root' @@ -10,14 +10,14 @@ export class AppConfigService { configUrl = 'restapi_get_application_parameters'; facetUrl = 'restapi_get_execution_block_facets'; - constructor(private http: HttpClient, private env: EnvService) { } + constructor(private http: HttpClient) { } getConfig() { - return this.http.get(this.env.apiUrl + this.configUrl, {responseType: "json"}); + return this.http.get(environment.apiUrl + this.configUrl, {responseType: "json"}); } // we want to load facets only once per session - so it feels like they are config variables. getFacets(){ - return this.http.get(this.env.apiUrl + this.facetUrl, {responseType: "json"}); + return this.http.get(environment.apiUrl + this.facetUrl, {responseType: "json"}); } } diff --git a/apps/web/src/app/env/env.service.provider.ts b/apps/web/src/app/env/env.service.provider.ts deleted file mode 100644 index d85dd28bd..000000000 --- a/apps/web/src/app/env/env.service.provider.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { EnvService } from './env.service'; - -export const EnvServiceFactory = () => { - // Create env - const env = new EnvService(); - - // Read environment variables from browser window - const browserWindow = window || {}; - const browserWindowEnv = browserWindow['__env'] || {}; - - // Assign environment variables from browser window to env - for (const key in browserWindowEnv) { - if (browserWindowEnv.hasOwnProperty(key)) { - env[key] = window['__env'][key]; - } - } - - return env; -}; - -export const EnvServiceProvider = { - provide: EnvService, - useFactory: EnvServiceFactory, - deps: [], -}; diff --git a/apps/web/src/app/env/env.service.spec.ts b/apps/web/src/app/env/env.service.spec.ts deleted file mode 100644 index d490d74c0..000000000 --- a/apps/web/src/app/env/env.service.spec.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TestBed } from '@angular/core/testing'; - -import { EnvService } from './env.service'; - -describe('EnvService', () => { - beforeEach(() => TestBed.configureTestingModule({})); - - it('should be created', () => { - const service: EnvService = TestBed.get(EnvService); - expect(service).toBeTruthy(); - }); -}); diff --git a/apps/web/src/app/env/env.service.ts b/apps/web/src/app/env/env.service.ts deleted file mode 100644 index 142adb76c..000000000 --- a/apps/web/src/app/env/env.service.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Injectable } from '@angular/core'; - -@Injectable({ - providedIn: 'root' -}) -export class EnvService { - - public apiUrl: string; - public workspacesUrl: string; - - constructor() { - } - - -} diff --git a/apps/web/src/app/workspaces/services/capability-launcher.service.ts b/apps/web/src/app/workspaces/services/capability-launcher.service.ts index 5170247d9..56a3e85b7 100644 --- a/apps/web/src/app/workspaces/services/capability-launcher.service.ts +++ b/apps/web/src/app/workspaces/services/capability-launcher.service.ts @@ -1,9 +1,9 @@ -import { Injectable } from "@angular/core"; -import { HttpClient, HttpParams, HttpResponse } from "@angular/common/http"; -import { EnvService } from "../../env/env.service"; -import { Observable } from "rxjs"; -import { CapabilityRequest } from "../model/capability-request"; -import { CapabilityExecution } from "../model/capability-execution"; +import {Injectable} from "@angular/core"; +import {HttpClient} from "@angular/common/http"; +import {environment} from "../../../environments/environment"; +import {Observable} from "rxjs"; +import {CapabilityRequest} from "../model/capability-request"; +import {CapabilityExecution} from "../model/capability-execution"; @Injectable({ providedIn: "root", @@ -11,7 +11,7 @@ import { CapabilityExecution } from "../model/capability-execution"; export class CapabilityLauncherService { private endpoint = "capability/request"; - constructor(private httpClient: HttpClient, private env: EnvService) {} + constructor(private httpClient: HttpClient) {} /** * Create capability request and send it to capability service @@ -22,7 +22,7 @@ export class CapabilityLauncherService { capabilityName: string, args: string ): Observable<CapabilityRequest> { - const url = this.env.workspacesUrl + this.endpoint; + const url = environment.workspacesUrl + this.endpoint; const params = JSON.stringify({ capability: capabilityName, args: args }); return this.httpClient.post<CapabilityRequest>(url, params); } @@ -32,7 +32,7 @@ export class CapabilityLauncherService { * @param: requestId ID of capability request to submit */ submit(requestId: string): Observable<CapabilityExecution> { - const url = `${this.env.workspacesUrl}${this.endpoint}/${requestId}/submit`; + const url = `${environment.workspacesUrl}${this.endpoint}/${requestId}/submit`; return this.httpClient.post<CapabilityExecution>(url, null); } } diff --git a/apps/web/src/app/workspaces/workspaces.component.html b/apps/web/src/app/workspaces/workspaces.component.html index 2413156fd..800ce5e42 100644 --- a/apps/web/src/app/workspaces/workspaces.component.html +++ b/apps/web/src/app/workspaces/workspaces.component.html @@ -1,11 +1,11 @@ <div class="container-fluid"> - <div class="row"> + <div class="row py-2"> <div class="col"> <button type="button" class="btn btn-primary" (click)="nullButtonOnClick()">Launch null capability [null -g]</button> </div> </div> </div> -<div *ngFor="let request of capabilityRequests; index as i"> +<div class="p-2" *ngFor="let request of capabilityRequests; index as i"> <code>Capability request created: {{request | json}}</code><br> <code *ngIf="capabilityExecutions[i]">Capability execution created: {{capabilityExecutions[i] | json}}</code> </div> diff --git a/apps/web/src/app/workspaces/workspaces.component.ts b/apps/web/src/app/workspaces/workspaces.component.ts index 6546896e4..1d58b5a51 100644 --- a/apps/web/src/app/workspaces/workspaces.component.ts +++ b/apps/web/src/app/workspaces/workspaces.component.ts @@ -1,9 +1,7 @@ -import { Component, OnInit } from "@angular/core"; -import { CapabilityLauncherService } from "./services/capability-launcher.service"; -import { Observable } from "rxjs"; -import { CapabilityRequest } from "./model/capability-request"; -import { map } from "rxjs/operators"; -import { CapabilityExecution } from "./model/capability-execution"; +import {Component, OnInit} from "@angular/core"; +import {CapabilityLauncherService} from "./services/capability-launcher.service"; +import {CapabilityRequest} from "./model/capability-request"; +import {CapabilityExecution} from "./model/capability-execution"; @Component({ selector: "app-workspaces", diff --git a/apps/web/src/env.js b/apps/web/src/env.js deleted file mode 100644 index fcdfd9eb8..000000000 --- a/apps/web/src/env.js +++ /dev/null @@ -1,10 +0,0 @@ -(function (window) { - window.__env = window.__env || {}; - - // API url - window.__env.apiUrl = 'https://webtest.aoc.nrao.edu/archiveServices/'; - - // Workspaces capability service URL - window.__env.workspacesUrl = 'http://localhost:3457/' - -}(this)); diff --git a/apps/web/src/environments/environment.prod.ts b/apps/web/src/environments/environment.prod.ts index 3612073bc..e849194a1 100644 --- a/apps/web/src/environments/environment.prod.ts +++ b/apps/web/src/environments/environment.prod.ts @@ -1,3 +1,7 @@ export const environment = { - production: true + production: true, + // archive search services + apiUrl: 'https://webtest.aoc.nrao.edu/archiveServices/', + // workspace services + workspacesUrl: 'http://localhost:3457/' }; diff --git a/apps/web/src/environments/environment.test.ts b/apps/web/src/environments/environment.test.ts new file mode 100644 index 000000000..e849194a1 --- /dev/null +++ b/apps/web/src/environments/environment.test.ts @@ -0,0 +1,7 @@ +export const environment = { + production: true, + // archive search services + apiUrl: 'https://webtest.aoc.nrao.edu/archiveServices/', + // workspace services + workspacesUrl: 'http://localhost:3457/' +}; diff --git a/apps/web/src/environments/environment.ts b/apps/web/src/environments/environment.ts index 7b4f817ad..5dc483908 100644 --- a/apps/web/src/environments/environment.ts +++ b/apps/web/src/environments/environment.ts @@ -3,7 +3,11 @@ // The list of file replacements can be found in `angular.json`. export const environment = { - production: false + production: false, + // archive search services + apiUrl: 'https://webtest.aoc.nrao.edu/archiveServices/', + // workspace services + workspacesUrl: 'http://localhost:3457/' }; /* diff --git a/apps/web/src/index.html b/apps/web/src/index.html index 8981b538c..e80d16804 100644 --- a/apps/web/src/index.html +++ b/apps/web/src/index.html @@ -9,7 +9,6 @@ <link rel="icon" type="image/x-icon" href="favicon.ico"> <link href='https://fonts.googleapis.com/css?family=Lato:300,400,700' rel='stylesheet' type='text/css'> <script src="https://kit.fontawesome.com/bd536dc06d.js"></script> - <script src="env.js"></script> </head> <body> <app-root></app-root> -- GitLab