view src/app/query-app.component.ts @ 56:b22e52a128a8 ng2-table

query from url fragment works now somewhat (only for id_is).
author casties
date Tue, 28 Mar 2017 20:03:36 +0200
parents 308c96f734c8
children d7c947909ab8
line wrap: on
line source

import {Component} from '@angular/core';

import {QueryState} from './query-state';
import {QueryStep} from './query-step';

import {QueryService} from './query.service';
import {NormalizationService} from './normalization.service';

@Component({
    selector: 'query-app',
    template: `
    <div class="container">    
        <h1>ISMI-Lab Query Builder</h1>
    </div>
    <div class="container">    
        <div>Select a query step:</div>
        <query-select *ngFor="let step of queryStepList; let i=index;"
            [queryStep]="step" [index]="i" 
            (queryChanged)="onQueryChanged($event)"></query-select>
        <div>
          <button (click)="addQueryStep()">add step</button>
          <button (click)="removeQueryStep()">remove step</button>
        </div>
    </div>
    <div class="container">
        <query-result *ngIf="queryState?.results"
            [resultInfo]="queryState.resultInfo"
            [queryState]="queryState">
        </query-result>
    </div>
        `,
})
    
export class QueryAppComponent { 
    public queryState: QueryState;
    public queryStepList: string[];
        
    constructor(private _queryService: QueryService) {
        console.debug("QueryAppComponent constructor!");
        let newState = this.getStateStringFromFragment();
        this._queryService.setup(newState);
        this.queryStepList = [];
        if (this._queryService.state.getNumSteps() > 0) {
            // use state from URL
            this._queryService.state.steps
                .forEach((elem) => this.queryStepList.push('param'));
        } else {
            // new empty state
            this.addQueryStep();
        }
    }
    
    getStateStringFromFragment(): string {
        let hash: string = window.location.hash;
        if (hash) {
            let frag: string = hash.substr(1);
            frag = decodeURIComponent(frag);
            // base64 decode
            return frag;
        }
        return null;
    }
    
    addQueryStep() {
        this.queryStepList.push('step');
    }
    
    removeQueryStep() {
        this.queryStepList.pop();
        this._queryService.state.steps.pop();
    }
    
    onQueryChanged(event: any) {
        console.debug("app.onquerychanged! event=", event);
        this._queryService.runQuery();
        this.queryState = this._queryService.getState();
    }
}