Mercurial > gemma
changeset 2034:cc3ad4aa9b2f unify_imports
importschedule: add store
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Fri, 25 Jan 2019 11:09:46 +0100 |
parents | 431f97fd873b |
children | 2f6cadcb3558 |
files | client/src/store/importschedule.js |
diffstat | 1 files changed, 272 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/store/importschedule.js Fri Jan 25 11:09:46 2019 +0100 @@ -0,0 +1,272 @@ +/* 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> + */ + +import Vue from "vue"; +import { HTTP } from "@/lib/http"; + +/* eslint-disable no-unused-vars */ +/* eslint-disable no-unreachable */ + +const IMPORTTYPES = { + BOTTLENECK: "bottleneck", + WATERWAYAXIS: "waterwayaxis", + GAUGEMEASUREMENT: "gaugemeasurement", + FAIRWAYAVAILABILITY: "fairwayavailability", + WATERWAYAREA: "waterwayarea", + FAIRWAYDIMENSION: "fairwaydimension", + WATERWAYGAUGES: "waterwaygauges", + DISTANCEMARKSVIRTUAL: "distancemarksvirtual" +}; + +const IMPORTTYPEKIND = { + bottleneck: "bn", + fairwayavailability: "fa", + gaugemeasurement: "gm", + waterwayaxis: "wx", + waterwayarea: "wa", + fairwaydimension: "fd", + waterwaygauges: "wg", + distancemarksvirtual: "dmv" +}; + +const KINDIMPORTTYPE = { + bn: "bottleneck", + fa: "fairwayavailability", + gm: "gaugemeasurement", + wx: "waterwayaxis", + wa: "waterwayarea", + fd: "fairwaydimension", + wg: "waterwaygauge", + dmv: "distancemarksvirtual" +}; + +const initializeCurrentSchedule = () => { + return { + id: null, + importType: null, + schedule: null, + import_: null, + importSource: null, + eMailNotification: false, + scheduled: false, + easyCron: true, + cronString: "* * * * ", + cronMode: "", + minutes: null, + month: null, + hour: null, + day: null, + dayOfMonth: null, + simple: null, + url: null, + insecure: false, + triggerActive: true, + featureType: null, + sortBy: null, + username: "", + password: "", + LOS: 1, + minWidth: null, + maxWidth: null, + depth: null, + sourceOrganization: null + }; +}; + +// initial state +const init = () => { + return { + schedules: [], + importScheduleDetailVisible: false, + currentSchedule: initializeCurrentSchedule() + }; +}; + +const importschedule = { + init, + namespaced: true, + state: init(), + mutations: { + clearCurrentSchedule: state => { + state.currentSchedule = initializeCurrentSchedule(); + }, + setImportScheduleDetailInvisible: state => { + state.importScheduleDetailVisible = false; + }, + setImportScheduleDetailVisible: state => { + state.importScheduleDetailVisible = true; + }, + setSchedules: (state, schedules) => { + state.schedules = schedules; + }, + unmarshallCurrentSchedule: (state, payload) => { + const { kind, id, cron, url, attributes } = payload; + const eMailNotification = payload["send-email"]; + Vue.set(state.currentSchedule, "import_", KINDIMPORTTYPE[kind]); + Vue.set(state.currentSchedule, "id", id); + if (cron) { + Vue.set(state.currentSchedule, "scheduled", true); + Vue.set(state.currentSchedule, "easyCron", false); + Vue.set(state.currentSchedule, "cronString", cron); + } + if (eMailNotification) { + Vue.set(state.currentSchedule, "eMailNotification", eMailNotification); + } + if (url) { + Vue.set(state.currentSchedule, "url", url); + } + if (attributes) { + let { insecure, username, password, los, depth } = attributes; + let sortBy = attributes["sort-by"]; + let minWidth = attributes["min-width"]; + let maxWidth = attributes["max-width"]; + let sourceOrganization = attributes["source-organization"]; + const featureType = attributes["feature-type"]; + insecure = insecure == "true"; + if (insecure) { + Vue.set(state.currentSchedule, "insecure", insecure); + } + if (featureType) { + Vue.set(state.currentSchedule, "featureType", featureType); + } + if (sortBy) { + Vue.set(state.currentSchedule, "sortBy", sortBy); + } + if (username) { + Vue.set(state.currentSchedule, "username", username); + } + if (password) { + Vue.set(state.currentSchedule, "password", password); + } + if (los) { + Vue.set(state.currentSchedule, "LOS", los); + } + if (minWidth) { + Vue.set(state.currentSchedule, "minWidth", minWidth); + } + if (maxWidth) { + Vue.set(state.currentSchedule, "maxWidth", maxWidth); + } + if (depth) { + Vue.set(state.currentSchedule, "depth", depth); + } + if (sourceOrganization) { + Vue.set( + state.currentSchedule, + "sourceOrganization", + sourceOrganization + ); + } + } + } + }, + actions: { + loadSchedule({ commit }, id) { + return new Promise((resolve, reject) => { + HTTP.get("/imports/config/" + id, { + headers: { "X-Gemma-Auth": localStorage.getItem("token") } + }) + .then(response => { + commit("unmarshallCurrentSchedule", response.data); + resolve(response); + }) + .catch(error => { + reject(error); + }); + }); + }, + updateCurrentSchedule({ commit }, payload) { + const { data, id } = payload; + return new Promise((resolve, reject) => { + HTTP.patch("imports/config/" + id, data, { + headers: { + "X-Gemma-Auth": localStorage.getItem("token") + } + }) + .then(response => { + resolve(response); + }) + .catch(error => { + reject(error); + }); + }); + }, + saveCurrentSchedule({ commit }, data) { + return new Promise((resolve, reject) => { + HTTP.post("imports/config", data, { + headers: { + "X-Gemma-Auth": localStorage.getItem("token") + } + }) + .then(response => { + resolve(response); + }) + .catch(error => { + reject(error); + }); + }); + }, + loadSchedules({ commit }) { + return new Promise((resolve, reject) => { + HTTP.get("/imports/config", { + headers: { "X-Gemma-Auth": localStorage.getItem("token") } + }) + .then(response => { + commit("setSchedules", response.data); + resolve(response); + }) + .catch(error => { + reject(error); + }); + }); + }, + deleteSchedule({ commit }, id) { + return new Promise((resolve, reject) => { + HTTP.delete("imports/config/" + id, { + headers: { + "X-Gemma-Auth": localStorage.getItem("token") + } + }) + .then(response => { + resolve(response); + }) + .catch(error => { + reject(error); + }); + }); + }, + triggerImport({ commit }, { type, data }) { + return new Promise((resolve, reject) => { + HTTP.post("imports/" + type, data, { + headers: { + "X-Gemma-Auth": localStorage.getItem("token") + } + }) + .then(response => { + resolve(response); + }) + .catch(error => { + reject(error); + }); + }); + } + } +}; + +export { + importschedule, + initializeCurrentSchedule, + IMPORTTYPES, + IMPORTTYPEKIND +};