Skip to content
Snippets Groups Projects
dataset.component.ts 4.43 KiB
Newer Older
François Agneray's avatar
François Agneray committed
import { Component, OnInit } from '@angular/core';
import { Observable } from 'rxjs';
import { Store } from '@ngrx/store';

import { Criterion, SearchQueryParams } from '../store/model';
import { Project, Family, Dataset, Attribute, Category } from '../../metamodel/model';
François Agneray's avatar
François Agneray committed
import * as datasetActions from '../../metamodel/action/dataset.action';
import * as attributeActions from '../../metamodel/action/attribute.action';
import * as criteriaActions from '../../metamodel/action/criteria.action';
import * as outputActions from '../../metamodel/action/output.action';
François Agneray's avatar
François Agneray committed
import * as searchActions from '../store/search.action';
import * as fromSearch from '../store/search.reducer';
import * as fromMetamodel from '../../metamodel/reducers';
import * as searchSelector from '../store/search.selector';
import * as metamodelSelector from '../../metamodel/selectors';
import { ScrollTopService } from '../../shared/service/sroll-top.service';
François Agneray's avatar
François Agneray committed

interface StoreState {
    search: fromSearch.State;
    metamodel: fromMetamodel.State;
}

@Component({
    selector: 'app-dataset',
Tifenn Guillas's avatar
Tifenn Guillas committed
    templateUrl: 'dataset.component.html'
François Agneray's avatar
François Agneray committed
})
export class DatasetComponent implements OnInit {
François Agneray's avatar
François Agneray committed
    public datasetSearchMetaIsLoading: Observable<boolean>;
    public datasetSearchMetaIsLoaded: Observable<boolean>;
    public attributeSearchMetaIsLoading: Observable<boolean>;
    public attributeSearchMetaIsLoaded: Observable<boolean>;
François Agneray's avatar
François Agneray committed
    public projectList: Observable<Project[]>;
    public datasetList: Observable<Dataset[]>;
    public datasetFamilyList: Observable<Family[]>;
François Agneray's avatar
François Agneray committed
    public datasetAttributeList: Observable<Attribute[]>;
    public currentStep: Observable<string>;
    public datasetName: Observable<string>;
    public criteriaFamilyList: Observable<Family[]>;
François Agneray's avatar
François Agneray committed
    public criteriaList: Observable<Criterion[]>;
    public outputFamilyList: Observable<Family[]>;
    public categoryList: Observable<Category[]>;
François Agneray's avatar
François Agneray committed
    public outputList: Observable<number[]>;
    public queryParams: Observable<SearchQueryParams>;
François Agneray's avatar
François Agneray committed

    constructor(private store: Store<StoreState>, private scrollTopService: ScrollTopService) {
François Agneray's avatar
François Agneray committed
        this.datasetSearchMetaIsLoading = store.select(metamodelSelector.getDatasetSearchMetaIsLoading);
        this.datasetSearchMetaIsLoaded = store.select(metamodelSelector.getDatasetSearchMetaIsLoaded);
        this.attributeSearchMetaIsLoading = store.select(metamodelSelector.getAttributeSearchMetaIsLoading);
        this.attributeSearchMetaIsLoaded = store.select(metamodelSelector.getAttributeSearchMetaIsLoaded);
François Agneray's avatar
François Agneray committed
        this.projectList = store.select(metamodelSelector.getProjectList);
        this.datasetList = store.select(metamodelSelector.getDatasetList);
        this.datasetFamilyList = store.select(metamodelSelector.getDatasetFamilyList);
        this.datasetAttributeList = store.select(metamodelSelector.getDatasetAttributeList);
        this.currentStep = store.select(searchSelector.getCurrentStep);
        this.datasetName = store.select(searchSelector.getDatasetName);
        this.criteriaFamilyList = this.store.select(metamodelSelector.getCriteriaFamilyList);
François Agneray's avatar
François Agneray committed
        this.criteriaList = this.store.select(searchSelector.getCriteriaList);
        this.outputFamilyList = this.store.select(metamodelSelector.getOutputFamilyList);
        this.categoryList = this.store.select(metamodelSelector.getCategoryList);
François Agneray's avatar
François Agneray committed
        this.outputList = this.store.select(searchSelector.getOutputList);
François Agneray's avatar
François Agneray committed
        this.queryParams = this.store.select(searchSelector.getQueryParams);
François Agneray's avatar
François Agneray committed
    }

    ngOnInit() {
        // 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(new searchActions.ChangeStepAction('dataset')));
François Agneray's avatar
François Agneray committed
        this.store.dispatch(new datasetActions.LoadDatasetSearchMetaAction());
        this.scrollTopService.setScrollTop();
François Agneray's avatar
François Agneray committed
    }

    selectDataset(datasetName: string): void {
        // Create a micro tasks that is processed after the current synchronous code
        // This micro task prevent the expression has changed after it was checked
        Promise.resolve(null).then(() => this.store.dispatch(new searchActions.NewSearchAction(datasetName)));
        this.store.dispatch(new attributeActions.LoadAttributeSearchMetaAction(datasetName));
        this.store.dispatch(new criteriaActions.LoadCriteriaSearchMetaAction(datasetName));
        this.store.dispatch(new outputActions.LoadOutputSearchMetaAction(datasetName));
François Agneray's avatar
François Agneray committed
    }
}