diff client/src/store/fairway.js @ 1096:aa1f5daf6fc9

refac: centralized stores
author Thomas Junk <thomas.junk@intevation.de>
date Tue, 30 Oct 2018 16:55:29 +0100
parents client/src/fairway/store.js@7242b5a427bc
children f106aee673e7
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/client/src/store/fairway.js	Tue Oct 30 16:55:29 2018 +0100
@@ -0,0 +1,130 @@
+/*
+ * This is Free Software under GNU Affero General Public License v >= 3.0
+ * without warranty, see README.md and license for details.
+ * 
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ * License-Filename: LICENSES/AGPL-3.0.txt
+ * 
+ * Copyright (C) 2018 by via donau 
+ *   – Österreichische Wasserstraßen-Gesellschaft mbH
+ * Software engineering by Intevation GmbH
+ * 
+ * Author(s):
+ * Thomas Junk <thomas.junk@intevation.de>
+ * Markus Kottländer <markuks.kottlaender@intevation.de>
+ */
+import Vue from "vue";
+import { HTTP } from "../application/lib/http";
+import { prepareProfile } from "../application/lib/geo";
+import LineString from "ol/geom/LineString.js";
+import { generateFeatureRequest } from "../application/lib/geo.js";
+
+const DEMOLEVEL = 149.345;
+
+const FairwayProfile = {
+  namespaced: true,
+  state: {
+    additionalSurvey: "",
+    availableSurveys: null,
+    totalLength: 0,
+    minAlt: 0,
+    maxAlt: 0,
+    currentProfile: {},
+    waterLevels: [{ year: "2016", level: DEMOLEVEL, color: "#005DFF" }],
+    selectedWaterLevel: DEMOLEVEL,
+    fairwayCoordinates: [],
+    startPoint: null,
+    endPoint: null,
+    selectedMorph: null
+  },
+  getters: {
+    length: state => {
+      return state.totalLength;
+    },
+    additionalSurvey: state => {
+      return state.additionalSurvey;
+    }
+  },
+  mutations: {
+    setAdditionalSurvey: (state, additionalSurvey) => {
+      state.additionalSurvey = additionalSurvey;
+    },
+    setSelectedMorph: (state, selectedMorph) => {
+      state.selectedMorph = selectedMorph;
+    },
+    setAvailableSurveys: (state, surveys) => {
+      state.availableSurveys = surveys;
+    },
+    setSelectedWaterLevel: (state, level) => {
+      state.selectedWaterLevel = level;
+    },
+    profileLoaded: (state, answer) => {
+      const { response, surveyDate } = answer;
+      const { data } = response;
+      const coordinates = data.geometry.coordinates;
+      if (!coordinates) return;
+      const startPoint = state.startPoint;
+      const endPoint = state.endPoint;
+      const geoJSON = data;
+      const result = prepareProfile({ geoJSON, startPoint, endPoint });
+      // Use Vue.set() to make new object properties rective
+      // https://vuejs.org/v2/guide/reactivity.html#Change-Detection-Caveats
+      Vue.set(state.currentProfile, surveyDate, result.points);
+      if (!state.minAlt || state.minAlt > result.minAlt) {
+        state.minAlt = result.minAlt;
+      }
+      if (!state.maxAlt || state.maxAlt < result.maxAlt) {
+        state.maxAlt = result.maxAlt;
+      }
+      if (!state.totalLength || state.totalLength < result.lengthPolyLine) {
+        state.totalLength = result.lengthPolyLine;
+      }
+    },
+    setStartPoint: (state, start) => {
+      state.startPoint = start;
+    },
+    setEndPoint: (state, end) => {
+      state.endPoint = end;
+    },
+    setFairwayCoordinates: (state, coordinates) => {
+      state.fairwayCoordinates = coordinates;
+    },
+    clearCurrentProfile: state => {
+      state.additionalSurvey = "";
+      state.currentProfile = {};
+      state.minAlt = null;
+      state.maxAlt = null;
+      state.totalLength = null;
+      state.fairwayCoordinates = [];
+      state.startPoint = null;
+      state.endPoint = null;
+    }
+  },
+  actions: {
+    loadProfile({ commit, state }, date_info) {
+      return new Promise((resolve, reject) => {
+        const profileLine = new LineString([state.startPoint, state.endPoint]);
+        const geoJSON = generateFeatureRequest(
+          profileLine,
+          state.selectedMorph.bottleneck_id,
+          date_info
+        );
+        HTTP.post("/cross", geoJSON, {
+          headers: { "X-Gemma-Auth": localStorage.getItem("token") }
+        })
+          .then(response => {
+            commit("profileLoaded", {
+              response: response,
+              surveyDate: date_info
+            });
+            resolve(response);
+          })
+          .catch(error => {
+            reject(error);
+          });
+      });
+    }
+  }
+};
+
+export default FairwayProfile;