view client/src/components/importoverview/LogDetail.vue @ 2732:0ab7985ef008

import_review: fixed flakey display of logs
author Thomas Junk <thomas.junk@intevation.de>
date Tue, 19 Mar 2019 14:50:56 +0100
parents 0fe0b3f1720f
children 4ae3453fcf50
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.length }})</span
        >
        <span v-if="isBottleneck" 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" :entry="entry"></StretchDetail>
      <SoundingResultDetail
        :entry="entry"
        v-if="isSoundingResult"
      ></SoundingResultDetail>
    </div>
    <AdditionalDetail
      v-if="entry.id === showAdditional"
      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 small"
    ></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";
import { displayError } from "@/lib/errors.js";
import { HTTP } from "@/lib/http.js";

export default {
  name: "logdetail",
  props: ["entry"],
  components: {
    SoundingResultDetail: () => import("./SoundingResultDetail.vue"),
    StretchDetail: () => import("./StretchDetails.vue"),
    AdditionalDetail: () => import("./AdditionalDetail.vue"),
    AdditionalLog: () => import("./AdditionalLog.vue")
  },
  mounted() {
    HTTP.get("/imports/" + this.entry.id, {
      headers: { "X-Gemma-Auth": localStorage.getItem("token") }
    })
      .then(response => {
        this.$store.commit("imports/setCurrentDetails", response.data);
        if (this.entry.state === "pending") {
          this.$store.commit("imports/showAdditionalInfoFor", this.entry.id);
        }
        this.$store.commit("imports/showAdditionalLogsFor", this.entry.id);
      })
      .catch(error => {
        const { status, data } = error.response;
        displayError({
          title: this.$gettext("Backend Error"),
          message: `${status}: ${data.message || data}`
        });
      });
  },
  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"]),
    kind() {
      return this.entry.kind.toUpperCase();
    },
    hasAdditionalInfo() {
      return (
        this.entry.state == "pending" &&
        (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>