Newer
Older
/**
* This file is part of Anis Client.
*
* @copyright Laboratoire d'Astrophysique de Marseille / CNRS
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
import { Component, OnDestroy, OnInit } from '@angular/core';
import { Observable, Subscription } from 'rxjs';
import { UserProfile } from 'src/app/auth/user-profile.model';
import { Instance } from 'src/app/metamodel/models';
import * as authActions from 'src/app/auth/auth.actions';
import * as authSelector from 'src/app/auth/auth.selector';
import * as datasetActions from 'src/app/metamodel/actions/dataset.actions';
import * as datasetFamilyActions from 'src/app/metamodel/actions/dataset-family.actions';
import * as surveyActions from 'src/app/metamodel/actions/survey.actions';
import * as instanceSelector from 'src/app/metamodel/selectors/instance.selector';
import { AppConfigService } from 'src/app/app-config.service';
/**
* @class
* @classdesc Instance container
*
* @implements OnInit
* @implements OnDestroy
@Component({
selector: 'app-instance',
templateUrl: 'instance.component.html'
})
export class InstanceComponent implements OnInit, OnDestroy {
public favIcon: HTMLLinkElement = document.querySelector('#favicon');
public title: HTMLLinkElement = document.querySelector('#title');
public links = [{ label: 'Home', icon: 'fas fa-home', routerLink: 'home' }];
public instance: Observable<Instance>;
public isAuthenticated: Observable<boolean>;
public userProfile: Observable<UserProfile>;
public userRoles: Observable<string[]>;
public instanceSubscription: Subscription;
constructor(private store: Store<{ }>, private config: AppConfigService) {
this.instance = store.select(instanceSelector.selectInstanceByRouteName);
this.isAuthenticated = store.select(authSelector.selectIsAuthenticated);
this.userProfile = store.select(authSelector.selectUserProfile);
this.userRoles = store.select(authSelector.selectUserRoles);
}
// Create a micro task that is processed after the current synchronous code
// This micro task prevent the expression has changed after view init error
Promise.resolve(null).then(() => this.store.dispatch(datasetFamilyActions.loadDatasetFamilyList()));
Promise.resolve(null).then(() => this.store.dispatch(datasetActions.loadDatasetList()));
Promise.resolve(null).then(() => this.store.dispatch(surveyActions.loadSurveyList()));
this.instanceSubscription = this.instance.subscribe(instance => {
if (instance.config.search.search_by_criteria_allowed) {
this.links.push({ label: instance.config.search.search_by_criteria_label, icon: 'fas fa-search', routerLink: 'search' });
}
if (instance.config.search.search_multiple_allowed) {
this.links.push({ label: instance.config.search.search_multiple_label, icon: 'fas fa-search-plus', routerLink: 'search-multiple' });
}
if (instance.config.documentation.documentation_allowed) {
this.links.push({ label: instance.config.documentation.documentation_label, icon: 'fas fa-question', routerLink: 'documentation' });
if (instance.config.design.design_favicon !== '') {
this.favIcon.href = `${this.config.apiUrl}/download-instance-file/${instance.name}/${instance.config.design.design_favicon}`;
}
this.title.innerHTML = instance.label;
/**
* Returns application base href.
*
* @return string
*/
getBaseHref(): string {
return this.config.baseHref;
}
/**
* Checks if authentication is enabled.
*
* @return boolean
*/
getAuthenticationEnabled(): boolean {
return this.config.authenticationEnabled;
}
/**
* Returns API URL.
*
* @return string
*/
getApiUrl(): string {
return this.config.apiUrl;
}
/**
* Dispatches action to log in.
*/
login(): void {
this.store.dispatch(authActions.login());
}
/**
* Dispatches action to log out.
*/
logout(): void {
this.store.dispatch(authActions.logout());
}
/**
* Dispatches action to open profile editor.
*/
openEditProfile(): void {
this.store.dispatch(authActions.openEditProfile());
}
/**
* Unsubscribes to instance when component is destroyed.
*/
if (this.instanceSubscription) this.instanceSubscription.unsubscribe();