diff src/app/query-state.ts @ 55:308c96f734c8 ng2-table

first steps to importing state from URL.
author casties
date Mon, 27 Mar 2017 14:17:55 +0200
parents b65a031c4967
children d7c947909ab8
line wrap: on
line diff
--- 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;