Skip to content
Snippets Groups Projects
ImportTask.vue 4.69 KiB
Newer Older
<template>
  <div id="table-imports">
    <table class="ui collapsing celled table">
      <thead>
        <tr>
          <th>Fichiers importés</th>
          <th>Status</th>
        </tr>
      </thead>
      <tbody>
        <tr
          v-for="importFile in data"
          :key="importFile.created_on"
        >
            <h4 class="ui header align-right">
              <div :data-tooltip="importFile.geojson_file_name">
                {{ importFile.geojson_file_name | subString }}
                <div class="sub header">
                  ajouté le {{ importFile.created_on | setDate }}
                </div>
              </div>
            </h4>
          </td>

          <td>
            <span
              v-if="importFile.infos"
              :data-tooltip="importFile.infos"
              class="ui icon margin-left"
Florent Lavelle's avatar
Florent Lavelle committed
              <em
Timothee P's avatar
Timothee P committed
                v-if="importFile.status === 'processing'"
Florent Lavelle's avatar
Florent Lavelle committed
              <em
Timothee P's avatar
Timothee P committed
                v-else-if="importFile.status === 'finished'"
Florent Lavelle's avatar
Florent Lavelle committed
              <em
Timothee P's avatar
Timothee P committed
                v-else-if="importFile.status === 'failed'"
Florent Lavelle's avatar
Florent Lavelle committed
              <em
                v-else
                class="red ban icon"
              />
Timothee P's avatar
Timothee P committed
              v-if="importFile.status === 'pending'"
              data-tooltip="Statut en attente. Clickez pour rafraichir."
            >
Florent Lavelle's avatar
Florent Lavelle committed
              <em
Timothee P's avatar
Timothee P committed
                :class="['orange icon', ready && !reloading ? 'sync' : 'hourglass half rotate']"
Timothee P's avatar
Timothee P committed
                @click="fetchImports()"
import { mapState } from 'vuex';
leandro's avatar
leandro committed

export default {
  filters: {
    setDate: function (value) {
      let date = new Date(value);
      let d = date.toLocaleDateString('fr', {
        year: 'numeric',
        month: 'long',
        day: 'numeric',
      return value.substring(0, 27) + '..';
Timothee P's avatar
Timothee P committed
  props: {
    data: {
      type: Array,
      default: null,
Timothee P's avatar
Timothee P committed
    },
    reloading: {
      type: Boolean,
      default: false,
Timothee P's avatar
Timothee P committed
    }
  },

  data() {
    return {
      open: false,
      ready: true,
    };
  },

Timothee P's avatar
Timothee P committed
  computed: {
    ...mapState('feature', ['features']),
  },

  watch: {
    data(newValue) {
      if (newValue) {
        this.ready = true;
      }
    },
  },

  methods: {
    fetchImports() {
      this.$store.dispatch(
Florent Lavelle's avatar
Florent Lavelle committed
        'feature-type/GET_IMPORTS', {
          feature_type: this.$route.params.feature_type_slug
        });
leandro's avatar
leandro committed
      this.$store.dispatch('feature/GET_PROJECT_FEATURES', {
        project_slug:  this.$route.params.slug,
        feature_type__slug:  this.$route.params.feature_type_slug
      //* show that the action was triggered, could be improved with animation (doesn't work)
      this.ready = false;
    },
  },
};
</script>

<style scoped>
.sync {
  cursor: pointer;
}

#table-imports {
  padding-top: 1em;
}

Timothee P's avatar
Timothee P committed
i.icon {
  width: 20px !important;
  height: 20px !important;
Timothee P's avatar
Timothee P committed
.rotate {
  -webkit-animation:spin 1s linear infinite;
  -moz-animation:spin 1s linear infinite;
  animation:spin 1s linear infinite;
Timothee P's avatar
Timothee P committed
@-moz-keyframes spin { 100% { -moz-transform: rotate(360deg); } }
@-webkit-keyframes spin { 100% { -webkit-transform: rotate(360deg); } }
@keyframes spin { 100% { -webkit-transform: rotate(360deg); transform:rotate(360deg); } }

/* 
Max width before this PARTICULAR table gets nasty
This query will take effect for any screen smaller than 760px
and also iPads specifically.
*/
@media only screen and (max-width: 760px),
  (min-device-width: 768px) and (max-device-width: 1024px) {
  /* Force table to not be like tables anymore */
  table,
  thead,
  tbody,
  th,
  td,
  tr {
    display: block;
  }

  /* Hide table headers (but not display: none;, for accessibility) */
  thead tr {
    position: absolute;
    top: -9999px;
    left: -9999px;
  }

  tr {
    border: 1px solid #ccc;
  }

  td {
    /* Behave  like a "row" */
    border: none;
    border-bottom: 1px solid #eee;
    position: relative;
    padding-left: 50%;
  }

  td:before {
    /* Now like a table header */
    position: absolute;
    /* Top/left values mimic padding */
    /* top: 6px; */
    left: 6px;
    width: 25%;
    padding-right: 10px;
    white-space: "break-spaces";
  }

  /*
	Label the data
	*/
  td:nth-of-type(1):before {
    content: "Fichiers importés";
  }
  td:nth-of-type(2):before {
    content: "Statut";
  }

  .align-right {
    text-align: right;
  }
  .margin-left {
    margin-left: 94%;
  }
}
Florent Lavelle's avatar
Florent Lavelle committed
</style>