# HG changeset patch # User casties # Date 1490617075 -7200 # Node ID 308c96f734c85abec82a0576be9844bdd7f3df9e # Parent 4341c1b4e3ae1c7fe56304868f87e560733bdee4 first steps to importing state from URL. diff -r 4341c1b4e3ae -r 308c96f734c8 src/app/query-app.component.ts --- a/src/app/query-app.component.ts Thu Mar 23 18:57:01 2017 +0100 +++ b/src/app/query-app.component.ts Mon Mar 27 14:17:55 2017 +0200 @@ -1,5 +1,4 @@ import {Component} from '@angular/core'; -//import {HTTP_PROVIDERS} from '@angular/http'; import {QueryState} from './query-state'; import {QueryStep} from './query-step'; @@ -7,10 +6,6 @@ import {QueryService} from './query.service'; import {NormalizationService} from './normalization.service'; -import {QuerySelectComponent} from './query-select.component'; -import {QueryResultComponent} from './query-result.component'; -//import {QueryResultTableComponent} from './query-result-table.component'; - @Component({ selector: 'query-app', template: ` @@ -34,8 +29,6 @@ `, - //directives: [QuerySelectComponent, QueryResultTableComponent], - //providers: [QueryService, NormalizationService, HTTP_PROVIDERS] }) export class QueryAppComponent { @@ -43,11 +36,27 @@ public queryStepList: string[]; constructor(private _queryService: QueryService) { - this._queryService.setup(); + console.debug("QueryAppComponent constructor!"); + let newState = this.getStateStringFromFragment(); + this._queryService.setup(newState); this.queryStepList = []; + if (this._queryService.state.getNumSteps() > 0) { + this._queryService.state.steps + .forEach((elem) => this.queryStepList.push('param')); + } this.addQueryStep(); } + getStateStringFromFragment(): string { + let hash: string = window.location.hash; + if (hash) { + let frag: string = hash.substr(1); + // base64 decode + return frag; + } + return null; + } + addQueryStep() { this.queryStepList.push('step'); } diff -r 4341c1b4e3ae -r 308c96f734c8 src/app/query-mode.ts --- a/src/app/query-mode.ts Thu Mar 23 18:57:01 2017 +0100 +++ b/src/app/query-mode.ts Mon Mar 27 14:17:55 2017 +0200 @@ -3,6 +3,10 @@ label: string; } +export function getQueryModeById(id: string) { + return QUERY_MODES.find((elem) => elem.id === id); +} + export var QUERY_MODES: QueryMode[] = [ {id: 'type_is', label:'Object type is'}, {id: 'att_contains', label: 'Attribute (contains)'}, diff -r 4341c1b4e3ae -r 308c96f734c8 src/app/query-state.ts --- a/src/app/query-state.ts Thu Mar 23 18:57:01 2017 +0100 +++ b/src/app/query-state.ts Mon Mar 27 14:17:55 2017 +0200 @@ -1,5 +1,6 @@ import {QueryStep} from './query-step'; import {ResultType} from './result-type'; +import {QueryMode, getQueryModeById} from './query-mode'; export class QueryState { public steps: QueryStep[] = []; @@ -15,10 +16,45 @@ public resultTypes: string; public resultType: ResultType; public resultInfo: string; - public resultAttributes: string[]; + public resultAttributes: string[]; public resultRelations: any[]; public resultColumns: any[]; + + setStateFromString(newStateString: string) { + try { + // state string is json + let newState = JSON.parse(newStateString); + // state should be list of steps + if (!Array.isArray(newState)) return; + let newSteps: QueryStep[] = []; + newState.forEach((elem) => { + // step is an array [mode, params] + if (!Array.isArray(elem)) return; + let mode = elem[0]; + let qm: QueryMode = getQueryModeById(mode); + let params = elem[1]; + if (qm != null && params != null) { + let qs = new QueryStep(qm, params); + newSteps.push(qs); + } + }); + if (newSteps.length > 0) { + // set state + this.steps = newSteps; + } + } catch (e) { + console.error("Unable to set state from string: "+newStateString); + } + } + + getNumSteps() { + return this.steps.length; + } + + /** + * Returns the cypher query as text for display. + */ getQueryText() { let text = this.resultCypherQuery; let hasParams = false; diff -r 4341c1b4e3ae -r 308c96f734c8 src/app/query.service.ts --- a/src/app/query.service.ts Thu Mar 23 18:57:01 2017 +0100 +++ b/src/app/query.service.ts Mon Mar 27 14:17:55 2017 +0200 @@ -25,8 +25,13 @@ this.state = new QueryState(); } - setup() { + setup(newStateString: string) { + // get list of object types this.setupObjectTypes(); + // get state from string + if (newStateString) { + this.state.setStateFromString(newStateString); + } } getState() { @@ -74,7 +79,9 @@ res.subscribe( data => { console.debug("neo4j data=", data); - this.objectTypes = data.results[0].data.map(elem => elem.row[0]).filter(elem => elem[0] != "_"); + this.objectTypes = data.results[0].data + .map(elem => elem.row[0]) + .filter(elem => elem[0] != "_"); console.debug("object types=", this.objectTypes); }, err => console.error("neo4j error=", err),