view client/src/components/layers/Layers.vue @ 3167:85734c763652

client: layers: moved refresh button from zoom controls to layers dialog
author Markus Kottlaender <markus@intevation.de>
date Mon, 06 May 2019 15:13:57 +0200
parents b3c24c47931c
children fc008b32c593
line wrap: on
line source

<template>
  <div
    :class="[
      'box ui-element rounded bg-white text-nowrap',
      { expanded: showLayers }
    ]"
  >
    <div class="position-relative" style="width: 18rem; min-height: 350px;">
      <UIBoxHeader
        icon="layer-group"
        :title="label"
        :closeCallback="close"
        :actions="[{ callback: refreshLayers, icon: 'sync' }]"
      />
      <div class="small" v-if="openLayersMaps.length">
        <Layerselect layerId="OPENSTREETMAP" />
        <Layerselect layerId="INLANDECDIS" />
        <Layerselect layerId="WATERWAYAREA" />
        <Layerselect layerId="STRETCHES" />
        <Layerselect layerId="FAIRWAYDIMENSIONSLOS3" />
        <Layerselect layerId="FAIRWAYDIMENSIONSLOS2" />
        <Layerselect layerId="FAIRWAYDIMENSIONSLOS1" />
        <Layerselect layerId="WATERWAYAXIS" />
        <Layerselect layerId="WATERWAYPROFILES" />
        <Layerselect layerId="BOTTLENECKS" />
        <Layerselect layerId="BOTTLENECKISOLINE" />
        <Layerselect layerId="DIFFERENCES" />
        <Layerselect layerId="BOTTLENECKSTATUS" />
        <Layerselect layerId="DISTANCEMARKS" />
        <Layerselect layerId="DISTANCEMARKSAXIS" />
        <Layerselect layerId="GAUGES" />
      </div>
      <UISpinnerOverlay v-else style="top: 34px;" />
    </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 { Vector as VectorLayer } from "ol/layer";

export default {
  components: {
    Layerselect: () => import("./Layerselect")
  },
  computed: {
    ...mapState("application", ["showLayers"]),
    ...mapState("map", ["openLayersMaps"]),
    label() {
      return this.$gettext("Layers");
    }
  },
  methods: {
    close() {
      this.$store.commit("application/showLayers", false);
    },
    refreshLayers() {
      this.openLayersMaps.forEach(map => {
        let layers = map.getLayers().getArray();
        for (let i = 0; i < layers.length; i++) {
          let layer = layers[i];
          if (
            layer instanceof VectorLayer &&
            layer.get("source").loader_.name != "VOID"
          ) {
            layer.getSource().clear(true);
            layer.getSource().refresh({ force: true });
          }
        }
      });
    }
  }
};
</script>