view client/src/store/bottlenecks.js @ 1511:53fdbe1d9678

fix: staging select according soundingresult
author Thomas Junk <thomas.junk@intevation.de>
date Wed, 05 Dec 2018 15:51:26 +0100
parents 9b81ac91a43e
children 6b3756676bbe
line wrap: on
line source

/* 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):
 * Markus Kottländer <markuks.kottlaender@intevation.de>
 * Thomas Junk <thomas.junk@intevation.de>
 */
import { HTTP } from "../lib/http";
import { WFS } from "ol/format.js";
import { displayError } from "../lib/errors.js";

// initial state
const init = () => {
  return {
    bottlenecks: [],
    selectedBottleneck: null,
    surveys: [],
    selectedSurvey: null,
    surveysLoading: false
  };
};

export default {
  init,
  namespaced: true,
  state: init(),
  mutations: {
    setBottlenecks: (state, bottlenecks) => {
      state.bottlenecks = bottlenecks;
    },
    setSelectedBottleneck: (state, name) => {
      state.selectedBottleneck = name;
    },
    setSurveys(state, surveys) {
      state.surveys = surveys;
    },
    selectedSurvey(state, survey) {
      state.selectedSurvey = survey;
    },
    surveysLoading: (state, loading) => {
      state.surveysLoading = loading;
    }
  },
  actions: {
    setSelectedBottleneck(
      { state, commit, dispatch, rootState, rootGetters },
      name,
      date
    ) {
      if (name !== state.selectedBottleneck) {
        commit("selectedSurvey", null);
        commit("fairwayprofile/clearCurrentProfile", null, { root: true });
        commit("application/showSplitscreen", false, { root: true });
        rootState.map.cutTool.setActive(false);
        rootGetters["map/getVSourceByName"]("Cut Tool").clear();
      }
      if (name) {
        commit("application/showProfiles", true, { root: true });
      }
      commit("setSelectedBottleneck", name);
      dispatch("querySurveys", name, date);
    },
    loadBottlenecks({ commit }) {
      var bottleneckFeatureCollectionRequest = new WFS().writeGetFeature({
        srsName: "EPSG:4326",
        featureNS: "gemma",
        featurePrefix: "gemma",
        featureTypes: ["bottleneck_overview"],
        outputFormat: "application/json"
      });

      HTTP.post(
        "/internal/wfs",
        new XMLSerializer().serializeToString(
          bottleneckFeatureCollectionRequest
        ),
        {
          headers: {
            "X-Gemma-Auth": localStorage.getItem("token"),
            "Content-type": "text/xml; charset=UTF-8"
          }
        }
      ).then(response => {
        commit("setBottlenecks", response.data.features);
      });
    },
    querySurveys({ commit }, name, date) {
      if (name) {
        commit("surveysLoading", true);
        HTTP.get("/surveys/" + name, {
          headers: {
            "X-Gemma-Auth": localStorage.getItem("token"),
            "Content-type": "text/xml; charset=UTF-8"
          }
        })
          .then(response => {
            const surveys = response.data.surveys.sort((a, b) =>
              a.date_info < b.date_info ? 1 : -1
            );
            if (date) {
              const survey = surveys.filter(x => x.date_info === date)[0];
              commit("selectedSurvey", survey);
            } else {
              commit("selectedSurvey", surveys[0]);
            }

            commit("setSurveys", surveys);
          })
          .catch(error => {
            commit("setSurveys", []);
            commit("selectedSurvey", null);
            const { status, data } = error.response;
            displayError({
              title: "Backend Error",
              message: `${status}: ${data.message || data}`
            });
          })
          .finally(() => commit("surveysLoading", false));
      } else {
        commit("setSurveys", []);
      }
    }
  }
};