# HG changeset patch # User casties # Date 1453107166 -3600 # Node ID fa646ee46c19fdd86b548f0c5516aa777ccb7019 # Parent 6cd6c09032aa9391bc150fbecc3f67c64685154e more query generation. diff -r 6cd6c09032aa -r fa646ee46c19 app/query-app.component.ts --- a/app/query-app.component.ts Fri Jan 15 20:00:47 2016 +0100 +++ b/app/query-app.component.ts Mon Jan 18 09:52:46 2016 +0100 @@ -3,15 +3,23 @@ import {QueryService} from './query.service'; import {QueryState} from './query-state'; +import {QueryStep} from './query-step'; + import {QuerySelectComponent} from './query-select.component'; import {QueryResultComponent} from './query-result.component'; @Component({ selector: 'query-app', template: ` -

My Angular 2 Text: {{title}}

-

Selected query: {{selectedQuery}}

- +

Angular2 query builder

+
Select a query step:
+ +
+ + +
`, directives: [QuerySelectComponent, QueryResultComponent], @@ -19,11 +27,23 @@ }) export class QueryAppComponent { - public title = 'huhu!'; - public selectedQuery: string; public queryState: QueryState; + public querySteps: QueryStep[]; constructor(private _queryService: QueryService) { + this._queryService.setup(); + this.querySteps = []; + this.addQueryStep(); + } + + addQueryStep() { + this.querySteps.push({'mode': null}); + //this.queryState = this._queryService.getState(); + } + + removeQueryStep() { + this._queryService.state.steps.pop(); + //this.queryState = this._queryService.getState(); } onQueryChanged(event: any) { diff -r 6cd6c09032aa -r fa646ee46c19 app/query-select.component.ts --- a/app/query-select.component.ts Fri Jan 15 20:00:47 2016 +0100 +++ b/app/query-select.component.ts Mon Jan 18 09:52:46 2016 +0100 @@ -9,27 +9,31 @@ @Component({ selector: 'query-select', template: ` -

Selected option: {{selectedQuery}}

+
- + - ` - //outputs: ['queryChanged'] +
+ `, + inputs: ['index'] + //outputs: ['queryChanged'] // this should work but doesn't }) export class QuerySelectComponent implements OnInit { - public queryModes; - public selectedMode; - public selectedQuery = 'unknown'; - public query2Options; + public queryStep: QueryStep; + public index: number; + public queryModes: QueryMode[]; + public selectedMode: QueryMode; + public query2Options: string[]; @Output('queryChanged') queryChanged = new EventEmitter(); @@ -40,7 +44,7 @@ } setup() { - this._queryService.setupIsmiObjectTypes(); + console.log("query-select setup step=", this.queryStep); this.queryModes = this._queryService.getQueryModes(); // select first mode (too early?) this.selectedMode = this.queryModes[0]; @@ -55,10 +59,9 @@ onSelectOption(event: any) { var selected = event.target.value; - this.selectedQuery = selected; console.debug("selected option:", selected); - var query: QueryStep = {'mode': this.selectedMode, 'objectType': selected}; - this._queryService.setQueryStep(0, query); + var step = {'mode': this.selectedMode, 'objectType': selected}; + this._queryService.setQueryStep(this.index, step); this.queryChanged.emit(this._queryService.getState()); } } diff -r 6cd6c09032aa -r fa646ee46c19 app/query.service.ts --- a/app/query.service.ts Fri Jan 15 20:00:47 2016 +0100 +++ b/app/query.service.ts Mon Jan 18 09:52:46 2016 +0100 @@ -10,9 +10,9 @@ @Injectable() export class QueryService { + public neo4jBaseUrl = 'http://localhost:7474/db/data/cypher/'; public state: QueryState; - - public ismiObjectTypes; + public ismiObjectTypes: any; public QUERY_MODES: QueryMode[] = [ {id: 'type_is', label:'Object type is'}, @@ -29,6 +29,10 @@ }; } + setup() { + this.setupIsmiObjectTypes(); + } + getState() { return this.state; } @@ -73,12 +77,13 @@ createCypherQuery() { var cypher = ''; var returnType = ''; - var step = this.state.steps[0]; - if (step.mode.id === 'type_is') { - cypher = `MATCH (e:${step.objectType}) return e`; - returnType = 'node'; + for (var i=0; i < this.state.steps.length; ++i) { + var step = this.state.steps[i]; + if (step.mode.id === 'type_is') { + cypher = `MATCH (e:${step.objectType}) return e`; + returnType = 'node'; + } } - this.state.cypherQuery = cypher; this.state.resultTypes = returnType; } @@ -109,7 +114,7 @@ // create POST data from query var data = JSON.stringify({'query': query, 'params': params}); // make post request asynchronously - var resp = this._http.post('http://localhost:7474/db/data/cypher/', data, opts) + var resp = this._http.post(this.neo4jBaseUrl, data, opts) // filter result as JSON .map(res => res.json()); // return Observable