view client/src/layers/Identify.vue @ 770:c12ec7fde3f2

client: add simple identify top area box * Add Identify.vue as a top area box that display the currently identified features in a short text-only way. This can be styled further, also the box is not yet resized dynamically. Put in to subdir layers because it is closest to Layers.vue, which was used as a template. * Introduce a new mapstore/identifiedFeatures state.
author Bernhard Reiter <bernhard@intevation.de>
date Wed, 26 Sep 2018 09:13:29 +0200
parents
children 6d214b3bed35
line wrap: on
line source

<template>
    <div class="identifymenu">
        <div @click="collapse" class="d-flex flex-column ui-element minimizer">
            <div>
                <i class="fa fa-info"></i>
            </div>
        </div>
        <div :class="identifyStyle">
            <div v-if="!collapsed" class="card-body">
                <div class="headline">
                    <h4 class="card-title">Identified</h4>
                </div>
                <hr>
                <div class="d-flex flex-column">
                  <div v-for="feature of identifiedFeatures" :key="feature.getId()">
                    {{ feature.getId().replace(/[.][^.]*$/,"") /* cut away everything from the last . to the end */}}:
                    <small v-for="(value, key) in prepareProperties(feature)" :key="key">
                      <div v-if="value">{{key}}:{{value}}</div>
                    </small>
                  </div>
                </div>
            </div>
        </div>
    </div>
</template>

<style lang="scss">
.identifymenu {
  position: relative;
  margin-right: $offset;
}
.identify {
  background-color: white;
  margin-left: $small-offset;
  opacity: $slight-transparent;
}

.identifycollapsed {
  height: $icon-height;
  width: $icon-width;
  transition: $transition-fast;
}

.identifyexpanded {
  height: $identify-height;
  width: $identify-width;
}

.minimizer {
  position: absolute;
  z-index: 2;
  right: 0;
  margin-top: $x-small-offset;
  border-radius: $border-radius;
  height: $icon-width;
  width: $icon-height;
}
</style>

<script>
import { mapGetters } from "vuex";

export default {
  name: "identify",
  data() {
    return {
      collapsed: true
    };
  },
  computed: {
    ...mapGetters("mapstore", ["identifiedFeatures"]),
    identifyStyle() {
      return {
        "ui-element": true,
        card: true,
        identify: true,
        shadow: true,
        identifyexpanded: !this.collapsed,
        identifycollapsed: this.collapsed
      };
    }
  },
  methods: {
    collapse() {
      this.collapsed = !this.collapsed;
    },
    prepareProperties(feature) {
      // return dict object with propertyname:plainvalue prepared for display
      var properties = feature.getProperties();
      delete properties[feature.getGeometryName()];
      return properties;
    }
  }
};
</script>