view client/src/components/importoverview/LogDetail.vue @ 2799:e19fac818aab

import_overview: specifying single imports via URL should open the overview with all logentries of the according hour and open the details for the specified import
author Thomas Junk <thomas.junk@intevation.de>
date Mon, 25 Mar 2019 16:16:58 +0100
parents c4821579cfaf
children 84effca50751
line wrap: on
line source

<template>
  <div class="border-top">
    <div
      class="d-flex fex-row"
      style="padding-left: 3px;"
      v-if="hasAdditionalInfo || isStretch || isSoundingResult"
    >
      <div v-if="hasAdditionalInfo">
        <font-awesome-icon
          v-if="entry.id === showAdditional"
          @click="toggleAdditionalInfo"
          class="my-auto mr-1 text-info pointer"
          icon="angle-down"
          fixed-width
        ></font-awesome-icon>
        <font-awesome-icon
          v-if="entry.id !== showAdditional"
          @click="toggleAdditionalInfo"
          class="my-auto mr-1 text-info pointer"
          icon="angle-right"
          fixed-width
        ></font-awesome-icon>
        <span class="text-info"><translate>Additional Info</translate></span>
        <span
          class="text-info"
          v-if="isApprovedGaugeMeasurement && details.summary"
        >
          ({{ details.summary.length }})</span
        >
        <span
          v-if="isBottleneck && details.summary && details.summary.bottlenecks"
          class="text-info text-left"
        >
          ({{ details.summary.bottlenecks.length }})</span
        >
        <span class="text-left" v-if="isFairwayDimension"
          >{{ details.summary["source-organization"] }} (LOS:
          {{ details.summary.los }})</span
        >
      </div>
      <StretchDetail
        v-if="isStretch && isPending"
        :entry="entry"
      ></StretchDetail>
      <SoundingResultDetail
        :entry="entry"
        v-if="isSoundingResult && isPending"
      ></SoundingResultDetail>
    </div>
    <AdditionalDetail
      v-if="entry.id === showAdditional && isPending"
      class="ml-2 d-flex flex-row"
      :entry="entry"
    ></AdditionalDetail>
    <div class="d-flex fex-row" style="padding-left: 3px;">
      <font-awesome-icon
        v-if="entry.id === showLogs"
        @click="toggleAdditionalLogging"
        class="my-auto mr-1 text-info pointer"
        icon="angle-down"
        fixed-width
      ></font-awesome-icon>
      <font-awesome-icon
        v-if="entry.id !== showLogs"
        @click="toggleAdditionalLogging"
        class="my-auto mr-1 text-info pointer"
        icon="angle-right"
        fixed-width
      ></font-awesome-icon>
      <span class="text-info"><translate>Logs</translate></span>
    </div>
    <AdditionalLog
      v-if="entry.id === showLogs"
      class="mx-4 pb-1 d-flex flex-row"
    ></AdditionalLog>
  </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>
 */

import { mapState } from "vuex";

export default {
  name: "logdetail",
  props: ["entry"],
  components: {
    SoundingResultDetail: () => import("./SoundingResultDetail.vue"),
    StretchDetail: () => import("./StretchDetails.vue"),
    AdditionalDetail: () => import("./AdditionalDetail.vue"),
    AdditionalLog: () => import("./AdditionalLog.vue")
  },
  mounted() {
    if (this.entry.state === "pending") {
      this.$store.commit("imports/showAdditionalInfoFor", this.entry.id);
    }
    this.$store.commit("imports/showAdditionalLogsFor", this.entry.id);
  },
  methods: {
    toggleAdditionalInfo() {
      if (this.entry.id === this.showAdditional) {
        this.$store.commit("imports/hideAdditionalInfo");
      } else {
        this.$store.commit("imports/showAdditionalInfoFor", this.entry.id);
      }
    },
    toggleAdditionalLogging() {
      if (this.entry.id === this.showLogs) {
        this.$store.commit("imports/hideAdditionalLogs");
      } else {
        this.$store.commit("imports/showAdditionalLogsFor", this.entry.id);
      }
    }
  },
  computed: {
    ...mapState("imports", ["showAdditional", "showLogs", "details"]),
    kind() {
      return this.entry.kind.toUpperCase();
    },
    isPending() {
      return this.entry.state == "pending";
    },
    hasAdditionalInfo() {
      return (
        this.isPending && (this.isApprovedGaugeMeasurement || this.isBottleneck)
      );
    },
    isFairwayDimension() {
      return this.kind === "FD";
    },
    isApprovedGaugeMeasurement() {
      return this.kind === "AGM";
    },
    isBottleneck() {
      return this.kind === "BN" || this.kind === "UBN";
    },
    isStretch() {
      return this.kind === "ST";
    },
    isSoundingResult() {
      return this.kind === "SR";
    }
  }
};
</script>