48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
|
const Exporter = {
|
||
|
props: {
|
||
|
getContent: {
|
||
|
type: Function,
|
||
|
required: true
|
||
|
},
|
||
|
filename: {
|
||
|
type: String,
|
||
|
default: 'export.csv'
|
||
|
},
|
||
|
exportButtonLabel: {
|
||
|
type: String,
|
||
|
default () {
|
||
|
return this.$t('exporter.export')
|
||
|
}
|
||
|
},
|
||
|
processingMessage: {
|
||
|
type: String,
|
||
|
default () {
|
||
|
return this.$t('exporter.processing')
|
||
|
}
|
||
|
}
|
||
|
},
|
||
|
data () {
|
||
|
return {
|
||
|
processing: false
|
||
|
}
|
||
|
},
|
||
|
methods: {
|
||
|
process () {
|
||
|
this.processing = true
|
||
|
this.getContent()
|
||
|
.then((content) => {
|
||
|
const fileToDownload = document.createElement('a')
|
||
|
fileToDownload.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(content))
|
||
|
fileToDownload.setAttribute('download', this.filename)
|
||
|
fileToDownload.style.display = 'none'
|
||
|
document.body.appendChild(fileToDownload)
|
||
|
fileToDownload.click()
|
||
|
document.body.removeChild(fileToDownload)
|
||
|
setTimeout(() => { this.processing = false }, 2000)
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
export default Exporter
|