view client/src/components/layers/Layers.vue @ 2951:1ac58e024942

client: map layers: optimized setting visibility this also fixes the issue of sounding result differences being visible initially even though the layer is disabled. The general problem was that the visibility flag was redundant. There was a isVisible flag for every layer which then controls the actual visible flag from open layers. Now only the layer's visibility is set directly in the layer object only.
author Markus Kottlaender <markus@intevation.de>
date Fri, 05 Apr 2019 15:59:52 +0200
parents 35f6e4383161
children a3017800e045
line wrap: on
line source

<template>
  <div
    :class="[
      'box ui-element rounded bg-white text-nowrap',
      { expanded: showLayers }
    ]"
  >
    <div style="width: 18rem">
      <UIBoxHeader
        icon="layer-group"
        :title="layersLabel"
        :closeCallback="close"
      />
      <div class="box-body small">
        <Layerselect
          v-for="(layer, name) in layersForLegend"
          :layerindex="name"
          :layername="name"
          :key="name"
          :isVisible="layer.data.getVisible()"
        ></Layerselect>
      </div>
    </div>
  </div>
</template>

<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>
 * Markus Kottländer <markus.kottlaender@intevation.de>
 */
import { mapState } from "vuex";
import { LAYERS } from "@/store/map.js";

export default {
  name: "layers",
  components: {
    Layerselect: () => import("./Layerselect")
  },
  computed: {
    ...mapState("map", ["layers"]),
    ...mapState("application", ["showLayers"]),
    layersLabel() {
      return this.$gettext("Layers");
    },
    layersForLegend() {
      let orderedLayers = {};
      this.$options.LAYOUT.forEach(el => (orderedLayers[el] = this.layers[el]));
      return orderedLayers;
    }
  },
  methods: {
    close() {
      this.$store.commit("application/showLayers", false);
    }
  },
  LAYOUT: [
    LAYERS.OPENSTREETMAP,
    LAYERS.INLANDECDIS,
    LAYERS.WATERWAYAREA,
    LAYERS.STRETCHES,
    LAYERS.FAIRWAYDIMENSIONSLOS3,
    LAYERS.FAIRWAYDIMENSIONSLOS2,
    LAYERS.FAIRWAYDIMENSIONSLOS1,
    LAYERS.WATERWAYAXIS,
    LAYERS.WATERWAYPROFILES,
    LAYERS.BOTTLENECKS,
    LAYERS.BOTTLENECKISOLINE,
    LAYERS.DIFFERENCES,
    LAYERS.BOTTLENECKSTATUS,
    LAYERS.DISTANCEMARKS,
    LAYERS.DISTANCEMARKSAXIS,
    LAYERS.GAUGES
  ]
};
</script>