Skip to content
Snippets Groups Projects
Commit e3c47a28 authored by Reid Givens's avatar Reid Givens
Browse files

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
parent 904c456a
No related branches found
No related tags found
1 merge request!60Et fe replace env.js with angular environments
Pipeline #439 passed
Showing
with 90 additions and 121 deletions
...@@ -26,11 +26,13 @@ Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protrac ...@@ -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). 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 ## Search Filters
......
...@@ -59,6 +59,30 @@ ...@@ -59,6 +59,30 @@
"maximumError": "5mb" "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 @@ ...@@ -70,6 +94,9 @@
"configurations": { "configurations": {
"production": { "production": {
"browserTarget": "archive2:build:production" "browserTarget": "archive2:build:production"
},
"test": {
"browserTarget": "archive2:build:test"
} }
} }
}, },
......
import { BrowserModule } from '@angular/platform-browser'; import {BrowserModule} from '@angular/platform-browser';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import {BrowserAnimationsModule} from '@angular/platform-browser/animations';
import { ReactiveFormsModule} from "@angular/forms"; import {ReactiveFormsModule} from "@angular/forms";
import { NgModule } from '@angular/core'; import {NgModule} from '@angular/core';
import {HttpClientModule} from "@angular/common/http"; import {HttpClientModule} from "@angular/common/http";
import { AppComponent } from './app.component'; import {AppComponent} from './app.component';
import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; import {NgbModule} from '@ng-bootstrap/ng-bootstrap';
import { EnvServiceProvider} from "./env/env.service.provider"; import {WebAnalyticsService} from "./web-analytics/web-analytics.service";
import { WebAnalyticsService } from "./web-analytics/web-analytics.service";
import { HeaderComponent } from './header/header.component'; import {HeaderComponent} from './header/header.component';
import { FooterComponent } from './footer/footer.component'; import {FooterComponent} from './footer/footer.component';
import { AppRoutingModule } from './app-routing.module'; import {AppRoutingModule} from './app-routing.module';
import { SplashComponent } from './splash/splash.component'; import {SplashComponent} from './splash/splash.component';
import { SharedModule } from "./shared/shared.module"; import {SharedModule} from "./shared/shared.module";
@NgModule({ @NgModule({
declarations: [ declarations: [
...@@ -33,7 +32,7 @@ import { SharedModule } from "./shared/shared.module"; ...@@ -33,7 +32,7 @@ import { SharedModule } from "./shared/shared.module";
HttpClientModule, HttpClientModule,
SharedModule SharedModule
], ],
providers: [EnvServiceProvider, WebAnalyticsService], providers: [WebAnalyticsService],
bootstrap: [AppComponent] bootstrap: [AppComponent]
}) })
export class AppModule { export class AppModule {
......
import {Injectable} from '@angular/core'; import {Injectable} from '@angular/core';
import {ResultType} from "../model/result-type"; import {ResultType} from "../model/result-type";
import {BehaviorSubject, Observable} from "rxjs"; import {BehaviorSubject, Observable} from "rxjs";
import {HttpClient} from "@angular/common/http";
import {EnvService} from "../../env/env.service";
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
...@@ -13,11 +11,7 @@ export class ResultTypeService { ...@@ -13,11 +11,7 @@ export class ResultTypeService {
private _resultType: BehaviorSubject<ResultType> = new BehaviorSubject(this.resultType); private _resultType: BehaviorSubject<ResultType> = new BehaviorSubject(this.resultType);
public readonly resultType$: Observable<ResultType> = this._resultType.asObservable(); public readonly resultType$: Observable<ResultType> = this._resultType.asObservable();
private serverAddress: string = ''; constructor() {}
constructor(private http: HttpClient, private env: EnvService) {
this.serverAddress = env.apiUrl;
}
updateResultType(name: string): void { updateResultType(name: string): void {
this.resultType = ResultType.getResultType(name); this.resultType = ResultType.getResultType(name);
......
import { Injectable } from '@angular/core'; import {Injectable} from '@angular/core';
import {HttpClient, HttpParams} from "@angular/common/http"; import {HttpClient, HttpParams} from "@angular/common/http";
import {Observable, Subscription} from "rxjs"; import {Observable, Subscription} from "rxjs";
import {SelectedFilter} from "../model/selected-filter"; import {SelectedFilter} from "../model/selected-filter";
import {SelectedFilterService} from "./selected-filter.service"; import {SelectedFilterService} from "./selected-filter.service";
import {EnvService } from "../../env/env.service"; import {environment} from "../../../environments/environment";
import {Field} from "../model/field"; import {Field} from "../model/field";
@Injectable({ @Injectable({
...@@ -11,13 +11,10 @@ import {Field} from "../model/field"; ...@@ -11,13 +11,10 @@ import {Field} from "../model/field";
}) })
export class SearchResultsService { export class SearchResultsService {
private serverAddress: string = '';
private selectedFilters: Array<SelectedFilter> = []; private selectedFilters: Array<SelectedFilter> = [];
private selectedFiltersSub: Subscription; private selectedFiltersSub: Subscription;
constructor(private http: HttpClient, private selectedFilterService: SelectedFilterService, private env: EnvService) { constructor(private http: HttpClient, private selectedFilterService: SelectedFilterService) {
this.serverAddress = env.apiUrl;
this.selectedFiltersSub = this.selectedFilterService.selectedFilters$.subscribe(selectedFilters => { this.selectedFiltersSub = this.selectedFilterService.selectedFilters$.subscribe(selectedFilters => {
this.selectedFilters = selectedFilters; this.selectedFilters = selectedFilters;
}); });
...@@ -35,7 +32,7 @@ export class SearchResultsService { ...@@ -35,7 +32,7 @@ export class SearchResultsService {
params = params.append(key.name, JSON.stringify(key.value)); 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> { getObservationDetails(id: string): Observable<any> {
...@@ -43,7 +40,7 @@ export class SearchResultsService { ...@@ -43,7 +40,7 @@ export class SearchResultsService {
params = params.append('solr_id', id); params = params.append('solr_id', id);
console.warn('Obs Details Query'); console.warn('Obs Details Query');
console.log(params); 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> { getProjectDetails(id: string): Observable<any> {
...@@ -51,7 +48,7 @@ export class SearchResultsService { ...@@ -51,7 +48,7 @@ export class SearchResultsService {
params = params.append('project_code', '"' + id + '"'); params = params.append('project_code', '"' + id + '"');
console.warn('Project Details Query'); console.warn('Project Details Query');
console.log(params); 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});
} }
} }
import { Injectable } from '@angular/core'; import {Injectable} from '@angular/core';
import { EnvService } from "./env.service"; import {environment} from "../../environments/environment";
import { HttpClient } from '@angular/common/http'; import {HttpClient} from '@angular/common/http';
@Injectable({ @Injectable({
providedIn: 'root' providedIn: 'root'
...@@ -10,14 +10,14 @@ export class AppConfigService { ...@@ -10,14 +10,14 @@ export class AppConfigService {
configUrl = 'restapi_get_application_parameters'; configUrl = 'restapi_get_application_parameters';
facetUrl = 'restapi_get_execution_block_facets'; facetUrl = 'restapi_get_execution_block_facets';
constructor(private http: HttpClient, private env: EnvService) { } constructor(private http: HttpClient) { }
getConfig() { 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. // we want to load facets only once per session - so it feels like they are config variables.
getFacets(){ getFacets(){
return this.http.get(this.env.apiUrl + this.facetUrl, {responseType: "json"}); return this.http.get(environment.apiUrl + this.facetUrl, {responseType: "json"});
} }
} }
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: [],
};
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();
});
});
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class EnvService {
public apiUrl: string;
public workspacesUrl: string;
constructor() {
}
}
import { Injectable } from "@angular/core"; import {Injectable} from "@angular/core";
import { HttpClient, HttpParams, HttpResponse } from "@angular/common/http"; import {HttpClient} from "@angular/common/http";
import { EnvService } from "../../env/env.service"; import {environment} from "../../../environments/environment";
import { Observable } from "rxjs"; import {Observable} from "rxjs";
import { CapabilityRequest } from "../model/capability-request"; import {CapabilityRequest} from "../model/capability-request";
import { CapabilityExecution } from "../model/capability-execution"; import {CapabilityExecution} from "../model/capability-execution";
@Injectable({ @Injectable({
providedIn: "root", providedIn: "root",
...@@ -11,7 +11,7 @@ import { CapabilityExecution } from "../model/capability-execution"; ...@@ -11,7 +11,7 @@ import { CapabilityExecution } from "../model/capability-execution";
export class CapabilityLauncherService { export class CapabilityLauncherService {
private endpoint = "capability/request"; private endpoint = "capability/request";
constructor(private httpClient: HttpClient, private env: EnvService) {} constructor(private httpClient: HttpClient) {}
/** /**
* Create capability request and send it to capability service * Create capability request and send it to capability service
...@@ -22,7 +22,7 @@ export class CapabilityLauncherService { ...@@ -22,7 +22,7 @@ export class CapabilityLauncherService {
capabilityName: string, capabilityName: string,
args: string args: string
): Observable<CapabilityRequest> { ): Observable<CapabilityRequest> {
const url = this.env.workspacesUrl + this.endpoint; const url = environment.workspacesUrl + this.endpoint;
const params = JSON.stringify({ capability: capabilityName, args: args }); const params = JSON.stringify({ capability: capabilityName, args: args });
return this.httpClient.post<CapabilityRequest>(url, params); return this.httpClient.post<CapabilityRequest>(url, params);
} }
...@@ -32,7 +32,7 @@ export class CapabilityLauncherService { ...@@ -32,7 +32,7 @@ export class CapabilityLauncherService {
* @param: requestId ID of capability request to submit * @param: requestId ID of capability request to submit
*/ */
submit(requestId: string): Observable<CapabilityExecution> { 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); return this.httpClient.post<CapabilityExecution>(url, null);
} }
} }
<div class="container-fluid"> <div class="container-fluid">
<div class="row"> <div class="row py-2">
<div class="col"> <div class="col">
<button type="button" class="btn btn-primary" (click)="nullButtonOnClick()">Launch null capability [null -g]</button> <button type="button" class="btn btn-primary" (click)="nullButtonOnClick()">Launch null capability [null -g]</button>
</div> </div>
</div> </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>Capability request created: {{request | json}}</code><br>
<code *ngIf="capabilityExecutions[i]">Capability execution created: {{capabilityExecutions[i] | json}}</code> <code *ngIf="capabilityExecutions[i]">Capability execution created: {{capabilityExecutions[i] | json}}</code>
</div> </div>
import { Component, OnInit } from "@angular/core"; import {Component, OnInit} from "@angular/core";
import { CapabilityLauncherService } from "./services/capability-launcher.service"; import {CapabilityLauncherService} from "./services/capability-launcher.service";
import { Observable } from "rxjs"; import {CapabilityRequest} from "./model/capability-request";
import { CapabilityRequest } from "./model/capability-request"; import {CapabilityExecution} from "./model/capability-execution";
import { map } from "rxjs/operators";
import { CapabilityExecution } from "./model/capability-execution";
@Component({ @Component({
selector: "app-workspaces", selector: "app-workspaces",
......
(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));
export const environment = { export const environment = {
production: true production: true,
// archive search services
apiUrl: 'https://webtest.aoc.nrao.edu/archiveServices/',
// workspace services
workspacesUrl: 'http://localhost:3457/'
}; };
export const environment = {
production: true,
// archive search services
apiUrl: 'https://webtest.aoc.nrao.edu/archiveServices/',
// workspace services
workspacesUrl: 'http://localhost:3457/'
};
...@@ -3,7 +3,11 @@ ...@@ -3,7 +3,11 @@
// The list of file replacements can be found in `angular.json`. // The list of file replacements can be found in `angular.json`.
export const environment = { export const environment = {
production: false production: false,
// archive search services
apiUrl: 'https://webtest.aoc.nrao.edu/archiveServices/',
// workspace services
workspacesUrl: 'http://localhost:3457/'
}; };
/* /*
......
...@@ -9,7 +9,6 @@ ...@@ -9,7 +9,6 @@
<link rel="icon" type="image/x-icon" href="favicon.ico"> <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'> <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="https://kit.fontawesome.com/bd536dc06d.js"></script>
<script src="env.js"></script>
</head> </head>
<body> <body>
<app-root></app-root> <app-root></app-root>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment