SpeciesFileGroup/taxonworks

View on GitHub
app/javascript/vue/tasks/dwca_import/components/ImportModal.vue

Summary

Maintainability
Test Coverage
<template>
  <div>
    <button
      @click="setModalView(true)"
      :disabled="disableStatus.includes(dataset.status)"
      class="button normal-input button-default"
    >
      Import
    </button>
    <modal-component
      v-if="settings.importModalView"
      @close="setModalView(false)"
      :container-style="{
        width: '700px'
      }"
    >
      <template #header>
        <h3>Import dataset</h3>
      </template>
      <template #body>
        <div>
          <transition name="bounce">
            <div
              v-if="settings.isProcessing"
              style="height: 200px"
            >
              <spinner-component legend="Importing rows... please wait." />
            </div>
          </transition>
          <progress-bar :progress="dataset.progress" />
          <progress-list
            class="no_bullets context-menu"
            :progress="dataset.progress"
          />
        </div>
      </template>
      <template #footer>
        <button
          v-if="settings.isProcessing"
          type="button"
          :disabled="settings.stopRequested"
          class="button normal-input button-default margin-medium-top"
          @click="stopImport"
        >
          Stop import
        </button>
        <button
          v-else
          type="button"
          class="button normal-input button-submit"
          @click="startImport"
        >
          Start import
        </button>
        <label>
          <input
            type="checkbox"
            v-model="settings.retryErrored"
          />
          Retry errored records
        </label>
      </template>
    </modal-component>
  </div>
</template>

<script>
import ModalComponent from '@/components/ui/Modal'
import SpinnerComponent from '@/components/ui/VSpinner'
import ProgressBar from './ProgressBar'
import ProgressList from './ProgressList'
import { GetterNames } from '../store/getters/getters'
import { MutationNames } from '../store/mutations/mutations'
import { ActionNames } from '../store/actions/actions'
import { disableStatus } from '../const/datasetStatus'

export default {
  components: {
    SpinnerComponent,
    ModalComponent,
    ProgressBar,
    ProgressList
  },

  computed: {
    settings: {
      get() {
        return this.$store.getters[GetterNames.GetSettings]
      },
      set(value) {
        this.$store.commit(MutationNames.SetSettings, value)
      }
    },

    dataset() {
      return this.$store.getters[GetterNames.GetDataset]
    }
  },

  data() {
    return {
      disableStatus: Object.keys(disableStatus)
    }
  },

  methods: {
    setModalView(value) {
      this.settings.importModalView = value
    },

    startImport() {
      this.$store.dispatch(ActionNames.ProcessImport)
    },

    stopImport() {
      this.settings.stopRequested = true
    }
  }
}
</script>