Mercurial > gemma
view client/src/components/importoverview/StretchDetails.vue @ 4988:61eb65394a13
Only use JSON path when configure feature layers with Geoserver REST API.
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Thu, 05 Mar 2020 11:59:11 +0100 |
parents | 6b054b91d9b2 |
children | 84d01a536bec |
line wrap: on
line source
<template> <div :class="{ full: !showLogs, split: showLogs }" > <div v-if="details.summary.length > 0" class="d-flex flex-column"> <div class="d-flex" v-for="(stretch, index) in details.summary" :key="index" > <UISpinnerButton @click="showDetailsFor(index)" :state="showDetails == index" :icons="['angle-right', 'angle-down']" classes="text-info" /><a @click="zoomToStretch(stretch)" class="text-info pointer">{{ linkText(stretch) }}</a> </div> <div v-if="showDetails !== $options.NODETAILS"> <div v-for="(entry, index) in Object.keys(selectedDetails)" :key="index" class="d-flex comparison row no-gutters px-4 text-left" > <span class="col-4">{{ entry }}</span> <span v-if="entry === 'countries'" class="col-4">{{ listCountries(selectedDetails[entry]) }}</span> <span v-else class="col-4">{{ selectedDetails[entry] }}</span> </div> </div> </div> </div> </template> <style lang="scss" scoped> .comparison { width: 668px; border-top: dashed 1px #dee2e6; } .comparison:nth-child(odd) { background-color: #f8f9fa; } .split { max-height: 35vh; } .full { max-height: 70vh; } </style> <script> /* 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 { displayError } from "@/lib/errors"; import { mapState, mapGetters } from "vuex"; const NODETAILS = -99; export default { data() { return { showDetails: NODETAILS }; }, props: ["entry"], mounted() { this.$store.commit("imports/hideAdditionalInfo"); }, computed: { ...mapState("imports", ["showAdditional", "showLogs", "details"]), ...mapGetters("map", ["openLayersMap"]), selectedDetails() { if (this.showDetails === NODETAILS) return []; return this.details.summary[this.showDetails]; } }, methods: { listCountries(countries) { if (!countries) return ""; return countries.join(", "); }, showDetailsFor(index) { if (index === this.showDetails) { this.showDetails = NODETAILS; return; } this.showDetails = index; }, linkText(stretch) { const name = stretch.objnam; const { countries } = stretch; const countryNames = !countries ? "" : `(${this.listCountries(countries)})`; return `${name} ${countryNames}`; }, zoomToStretch(stretch) { const { name } = stretch; this.openLayersMap() .getLayer("STRETCHES") .setVisible(true); this.$store .dispatch("imports/loadStretch", name) .then(response => { if (response.data.features.length < 1) throw new Error("no feaures found for: " + name); this.$store.commit( "imports/selectedStretchId", response.data.features[0].id ); this.$store.dispatch("map/moveToFeauture", { feature: response.data.features[0], zoom: 17, preventZoomOut: true }); }) .catch(error => { let message = "Backend not reachable"; if (error.response) { const { status, data } = error.response; message = `${status}: ${data.message || data}`; } displayError({ title: this.$gettext("Backend Error"), message: message }); }); } }, NODETAILS: NODETAILS }; </script>