Mercurial > gemma
diff client/src/morphtool/Morphtool.vue @ 962:d7f34791b18d
refac: moved linetool and morphtool
author | Thomas Junk <thomas.junk@intevation.de> |
---|---|
date | Wed, 17 Oct 2018 15:22:21 +0200 |
parents | client/src/application/Morphtool.vue@8a80ef09a62c |
children | 3da707172772 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/client/src/morphtool/Morphtool.vue Wed Oct 17 15:22:21 2018 +0200 @@ -0,0 +1,156 @@ +<template> + <div v-if="selectedBottleneck || selectedMorph" class="morphcontainer"> + <div v-if="surveyList && !drawMode" class="ui-element card card-body shadow"> + <div class="headline"> + <h4>{{selectedBottleneck.get("objnam")}}</h4> + <hr> + <div @click="clearSelection" class="float-left ui-element d-flex morphtoolminus"> + <i class="fa fa-close morphtoolsminus"></i> + </div> + </div> + <ul class="list-group surveylist"> + <li v-for="survey of surveyList.surveys" :key="survey.data_info" class="list-group-item" @click.prevent="selectSurvey(survey)"> + <a href="#" @click.prevent="">{{survey.date_info}}</a> + </li> + </ul> + </div> + <div v-if="selectedMorph" @click="clearSelection" class="ui-element shadow morphtool"> + <div class="d-flex flex-row justify-content-between"> + <i class="fa fa-close text-danger"></i> + <small>Bottleneck: </small> + <h6>{{selectedBottleneck.get("objnam")}} <small>( {{selectedMorph.date_info}} )</small></h6> + </div> + </div> + </div> +</template> + +<style scoped lang="scss"> +.headline { + margin-right: $offset; + margin-left: $offset; +} +.morphcontainer { + margin-bottom: $offset; + margin-left: auto; + margin-right: $large-offset + $icon-width; + border-radius: $border-radius; +} +.surveylist { + text-align: left; + margin-bottom: $offset !important; + margin-left: $offset; + margin-right: $offset; +} + +.surveylist li { + margin-left: auto; + margin-right: auto; + border-style: none; + padding-bottom: 0rem; +} + +.morphtool { + position: relative; + background-color: white; + padding: $small-offset; + border-radius: $border-radius; + height: $icon-width; + margin-right: $offset; + margin-top: auto; + margin-bottom: auto; + z-index: 2; +} + +.morphcontainer i { + margin-right: $small-offset; +} + +.morphtoolminus { + position: absolute; + top: 0; + right: 0; + background-color: white; + padding: $small-offset; + border-radius: $border-radius; + height: $icon-width; + width: $icon-height; + z-index: 2; +} +</style> + +<script> +import { mapGetters, mapState } from "vuex"; + +import { displayError } from "../application/lib/errors.js"; +import { HTTP } from "../application/lib/http"; + +export default { + name: "morphtool", + data() { + return { + surveyList: null + }; + }, + computed: { + ...mapGetters("application", ["drawMode"]), + ...mapState("mapstore", ["identifiedFeatures", "selectedMorph"]), + selectedBottleneck: function() { + if (this.identifiedFeatures && !this.drawMode) { + for (let feature of this.identifiedFeatures) { + let id = feature.getId(); + // RegExp.prototype.test() works with number, str and undefined + if (/^bottlenecks\./.test(id)) { + this.$store.commit("mapstore/setSelectedMorph", null); + return feature; + } + } + } + return null; + } + }, + watch: { + selectedBottleneck: function(bottleneckFeature) { + if (bottleneckFeature) { + let bottleneckName = bottleneckFeature.get("objnam"); + if (bottleneckName) { + this.queryBottleneck(bottleneckName); + } + } + } + }, + methods: { + queryBottleneck(name) { + // DEBUG console.log("starting to query bottleneck", name); + HTTP.get("/surveys/" + name, { + headers: { + "X-Gemma-Auth": localStorage.getItem("token"), + "Content-type": "text/xml; charset=UTF-8" + } + }) + .then(response => { + this.surveyList = response.data; + }) + .catch(error => { + this.surveyList = null; + const { status, data } = error.response; + displayError({ + title: "Backend Error", + message: `${status}: ${data.message || data}` + }); + }); + }, + selectSurvey(survey) { + this.$store.commit("mapstore/setSelectedMorph", survey); + this.surveyList = null; + }, + clearSelection() { + this.$store.commit("mapstore/setIdentifiedFeatures", []); + this.$store.commit("mapstore/setSelectedMorph", null); + this.surveyList = null; + if (this.drawMode) { + this.$store.commit("application/toggleDrawModeLine"); + } + } + } +}; +</script>