mirror of
https://github.com/lana-k/sqliteviz.git
synced 2025-12-07 02:28:54 +08:00
55 lines
1.3 KiB
JavaScript
55 lines
1.3 KiB
JavaScript
export default {
|
|
exportToFile (str, fileName, type = 'octet/stream') {
|
|
// Create downloader
|
|
const downloader = document.createElement('a')
|
|
const blob = new Blob([str], { type })
|
|
const url = URL.createObjectURL(blob)
|
|
downloader.href = url
|
|
downloader.download = fileName
|
|
|
|
// Trigger click
|
|
downloader.click()
|
|
|
|
// Clean up
|
|
URL.revokeObjectURL(url)
|
|
},
|
|
|
|
/**
|
|
* Note: if user press Cancel in file choosing dialog
|
|
* it will be an unsettled promise. But it's grabbed by
|
|
* the garbage collector (tested with FinalizationRegistry).
|
|
*/
|
|
getFileFromUser (type) {
|
|
return new Promise(resolve => {
|
|
const uploader = document.createElement('input')
|
|
|
|
uploader.type = 'file'
|
|
uploader.accept = type
|
|
|
|
uploader.addEventListener('change', () => {
|
|
const file = uploader.files[0]
|
|
resolve(file)
|
|
})
|
|
|
|
uploader.click()
|
|
})
|
|
},
|
|
|
|
importFile () {
|
|
return this.getFileFromUser('.json')
|
|
.then(file => {
|
|
return new Promise((resolve, reject) => {
|
|
const reader = new FileReader()
|
|
reader.onload = e => {
|
|
resolve(e.target.result)
|
|
}
|
|
reader.readAsText(file)
|
|
})
|
|
})
|
|
},
|
|
|
|
readFile (path) {
|
|
return fetch(path)
|
|
}
|
|
}
|