view client/src/store/application.js @ 2249:35db2e11c966

Uploaded gauge measurement: Implemented in terms of normal gauge measurement import.
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Wed, 13 Feb 2019 16:52:16 +0100
parents e6fba449aa3c
children ce6fd3d4a3a2
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):
 *   Thomas Junk <thomas.junk@intevation.de>
 *   Markus Kottländer <markus.kottlaender@intevation.de>
 *   Bernhard E. Reiter <bernhard.reiter@intevation.de>
 */

import { version } from "../../package.json";
import { HTTP } from "../lib/http";
import { displayError } from "@/lib/errors.js";

// initial state
const init = () => {
  return {
    appTitle: process.env.VUE_APP_TITLE,
    secondaryLogo: process.env.VUE_APP_SECONDARY_LOGO_URL,
    logoForPDF: process.env.VUE_APP_LOGO_FOR_PDF_URL,
    pdfTemplates: [],
    showSidebar: false,
    showUsermenu: false,
    showSplitscreen: false,
    showSearchbar: false,
    showSearchbarLastState: false,
    showIdentify: false,
    showLayers: true,
    showPdfTool: false,
    showContextBox: false,
    showProfiles: false,
    contextBoxContent: null, // bottlenecks, imports, staging
    expandToolbar: false,
    countries: ["AT", "SK", "HU", "HR", "RS", "BiH", "BG", "RO", "UA"],
    searchQuery: "",
    version
  };
};

export default {
  init,
  namespaced: true,
  state: init(),
  getters: {
    versionStr: state => {
      // version number from package.json
      let versionStr = "v" + state.version;

      // hg revision
      if (
        process.env.VUE_APP_HGREV &&
        (state.version.includes("dev") ||
          state.version.includes("beta") ||
          state.version.includes("alpha"))
      )
        // a '+' according to semver 2.0.0 starts a build meta info section
        // which shall only have [0-9A-Za-z-] chars
        // and is to be ignored when determining the order
        versionStr += "+" + process.env.VUE_APP_HGREV;

      return versionStr;
    }
  },
  mutations: {
    showSidebar: (state, show) => {
      state.showSidebar = show;
    },
    showSplitscreen: (state, show) => {
      state.showSplitscreen = show;
    },
    showUsermenu: (state, show) => {
      state.showUsermenu = show;
    },
    showSearchbar: (state, show) => {
      state.showSearchbar = show;
    },
    showIdentify: (state, show) => {
      state.showIdentify = show;
    },
    showLayers: (state, show) => {
      state.showLayers = show;
    },
    showPdfTool: (state, show) => {
      state.showPdfTool = show;
    },
    showContextBox: (state, show) => {
      state.showContextBox = show;
    },
    showProfiles: (state, show) => {
      state.showProfiles = show;
    },
    contextBoxContent: (state, context) => {
      state.contextBoxContent = context;
      if (context) {
        state.showSearchbarLastState = state.showSearchbar;
      }
    },
    expandToolbar: (state, expandToolbar) => {
      state.expandToolbar = expandToolbar;
    },
    searchQuery: (state, searchQuery) => {
      state.searchQuery = searchQuery;
    },
    pdfTemplates: (state, pdfTemplates) => {
      state.pdfTemplates = pdfTemplates;
    }
  },
  actions: {
    loadPdfTemplates({ commit }) {
      return new Promise((resolve, reject) => {
        HTTP.get("/templates/print", {
          headers: {
            "X-Gemma-Auth": localStorage.getItem("token"),
            "Content-type": "text/xml; charset=UTF-8"
          }
        })
          .then(response => {
            commit("pdfTemplates", response.data);
            resolve();
          })
          .catch(e => {
            reject(e);
            const { status, data } = e.response;
            displayError({
              title: "Backend Error",
              message: `${status}: ${data.message || data}`
            });
          });
      });
    },
    uploadPDFTemplate({ dispatch }, files) {
      return new Promise((resolve, reject) => {
        const reader = new FileReader();
        reader.onload = event => {
          let template;
          try {
            template = JSON.parse(event.target.result);
          } catch (e) {
            displayError({
              title: "Format Error",
              message: "Uploaded file does not contain valid json data."
            });
            reject(e);
          }
          if (template.name) {
            HTTP.post(
              "/templates/print/" + template.name,
              {
                template_name: template.name,
                template_data: template
              },
              {
                headers: {
                  "X-Gemma-Auth": localStorage.getItem("token"),
                  "Content-type": "text/xml; charset=UTF-8"
                }
              }
            )
              .then(response => {
                dispatch("loadPdfTemplates");
                resolve(response);
              })
              .catch(e => {
                reject(e);
                const { status, data } = e.response;
                displayError({
                  title: "Backend Error",
                  message: `${status}: ${data.message || data}`
                });
              });
          } else {
            reject();
            displayError({
              title: "Format Error",
              message: "The provided template has no name property."
            });
          }
        };
        reader.onerror = error => reject(error);
        reader.readAsText(files[0]);
      });
    },
    removePDFTemplate({ state, commit }, template) {
      HTTP.delete("/templates/print/" + template.name, {
        headers: {
          "X-Gemma-Auth": localStorage.getItem("token"),
          "Content-type": "text/xml; charset=UTF-8"
        }
      }).then(() => {
        let templates = state.pdfTemplates;
        let removeIndex = templates.findIndex(t => t.name === template.name);
        if (removeIndex !== -1) {
          templates.splice(removeIndex, 1);
          commit("pdfTemplates", templates);
        }
      });
    }
  }
};