Skip to content
Snippets Groups Projects
criteria.component.ts 4.01 KiB
Newer Older
  • Learn to ignore specific revisions
  • François Agneray's avatar
    François Agneray committed
    import { Component, OnInit } from '@angular/core';
    
    
    import { Observable } from 'rxjs';
    
    François Agneray's avatar
    François Agneray committed
    import { Store } from '@ngrx/store';
    
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
    import { Criterion, SearchQueryParams } from '../store/model';
    
    import { Dataset, Family, Attribute } from '../../metamodel/model';
    
    François Agneray's avatar
    François Agneray committed
    import * as searchActions from '../store/search.action';
    import * as datasetActions from '../../metamodel/action/dataset.action';
    import * as criteriaActions from '../../metamodel/action/criteria.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-criteria',
    
    Tifenn Guillas's avatar
    Tifenn Guillas committed
        templateUrl: 'criteria.component.html'
    
    François Agneray's avatar
    François Agneray committed
    })
    export class CriteriaComponent implements OnInit {
    
    François Agneray's avatar
    François Agneray committed
        public criteriaSearchMetaIsLoading: Observable<boolean>;
        public criteriaSearchMetaIsLoaded: Observable<boolean>;
        public datasetSearchMetaIsLoading: Observable<boolean>;
        public datasetSearchMetaIsLoaded: Observable<boolean>;
        public attributeSearchMetaIsLoading: Observable<boolean>;
        public attributeSearchMetaIsLoaded: Observable<boolean>;
    
        public datasetName: Observable<string>;
    
    François Agneray's avatar
    François Agneray committed
        public currentStep: Observable<string>;
        public datasetList: Observable<Dataset[]>;
    
        public criteriaFamilyList: Observable<Family[]>;
    
    François Agneray's avatar
    François Agneray committed
        public datasetAttributeList: Observable<Attribute[]>;
        public criteriaList: Observable<Criterion[]>;
        public outputList: Observable<number[]>;
    
    François Agneray's avatar
    François Agneray committed
        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.criteriaSearchMetaIsLoading = store.select(metamodelSelector.getCriteriaSearchMetaIsLoading);
            this.criteriaSearchMetaIsLoaded = store.select(metamodelSelector.getCriteriaSearchMetaIsLoaded);
            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.datasetName = store.select(searchSelector.getDatasetName);
            this.currentStep = store.select(searchSelector.getCurrentStep);
            this.datasetList = store.select(metamodelSelector.getDatasetList);
            this.datasetAttributeList = this.store.select(metamodelSelector.getDatasetAttributeList);
            this.criteriaFamilyList = this.store.select(metamodelSelector.getCriteriaFamilyList);
            this.criteriaList = this.store.select(searchSelector.getCriteriaList);
            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
    
    François Agneray's avatar
    François Agneray committed
            Promise.resolve(null).then(() => this.store.dispatch(new searchActions.InitSearchByUrl()));
    
    François Agneray's avatar
    François Agneray committed
            Promise.resolve(null).then(() => this.store.dispatch(new searchActions.ChangeStepAction('criteria')));
    
    François Agneray's avatar
    François Agneray committed
            Promise.resolve(null).then(() => this.store.dispatch(new searchActions.CriteriaChecked()));
    
    François Agneray's avatar
    François Agneray committed
            this.store.dispatch(new datasetActions.LoadDatasetSearchMetaAction());
    
            this.store.dispatch(new criteriaActions.LoadCriteriaSearchMetaAction());
    
            this.scrollTopService.setScrollTop();
    
    François Agneray's avatar
    François Agneray committed
        }
    
        addCriterion(criterion: Criterion): void {
            this.store.dispatch(new searchActions.AddCriterionAction(criterion));
        }
    
        deleteCriterion(id: number): void {
            this.store.dispatch(new searchActions.DeleteCriterionAction(id));
        }
    }