<template> <div class="export-table-modal__actions"> <div v-if="job !== null" class="export-table-modal__loading-bar"> <div class="export-table-modal__loading-bar-inner" :style="{ width: `${job.progress_percentage * 100}%`, 'transition-duration': [1, 0].includes(job.progress_percentage) ? '0s' : '1s', }" ></div> <span v-if="jobIsRunning" class="export-table-modal__status-text"> {{ job.status }} </span> </div> <button v-if="job === null || job.status !== 'complete'" class=" button button--large button--primary export-table-modal__export-button " :class="{ 'button--loading': loading }" :disabled="disabled" > {{ $t('exportTableLoadingBar.export') }} </button> <DownloadLink v-else class=" button button--large button--success export-table-modal__export-button " :url="job.url" :filename="filename" :loading-class="'button--loading'" > {{ $t('exportTableLoadingBar.download') }} </DownloadLink> </div> </template> <script> export default { name: 'ExportTableLoadingBar', props: { filename: { type: String, required: false, default: 'export', }, exportType: { type: String, required: false, default: 'export', }, job: { type: Object, required: false, default: null, }, loading: { type: Boolean, required: true, }, disabled: { type: Boolean, required: true, }, }, computed: { jobIsRunning() { return ( this.job !== null && ['exporting', 'pending'].includes(this.job.status) ) }, }, } </script> <i18n> { "en": { "exportTableLoadingBar": { "export": "Export", "download": "Download" } }, "fr": { "exportTableLoadingBar": { "export": "Exporter", "download": "Télécharger" } } } </i18n>