mirror of
https://github.com/lana-k/sqliteviz.git
synced 2025-12-06 18:18:53 +08:00
99 lines
2.7 KiB
JavaScript
99 lines
2.7 KiB
JavaScript
import { nanoid } from 'nanoid'
|
|
import fu from '@/lib/utils/fileIo'
|
|
import events from '@/lib/utils/events'
|
|
import migration from './_migrations'
|
|
|
|
const migrate = migration._migrate
|
|
|
|
export default {
|
|
version: 2,
|
|
getStoredInquiries () {
|
|
let myInquiries = JSON.parse(localStorage.getItem('myInquiries'))
|
|
if (!myInquiries) {
|
|
const oldInquiries = localStorage.getItem('myQueries')
|
|
if (oldInquiries) {
|
|
myInquiries = migrate(1, JSON.parse(oldInquiries))
|
|
this.updateStorage(myInquiries)
|
|
return myInquiries
|
|
}
|
|
return []
|
|
}
|
|
|
|
return (myInquiries && myInquiries.inquiries) || []
|
|
},
|
|
|
|
duplicateInquiry (baseInquiry) {
|
|
const newInquiry = JSON.parse(JSON.stringify(baseInquiry))
|
|
newInquiry.name = newInquiry.name + ' Copy'
|
|
newInquiry.id = nanoid()
|
|
newInquiry.createdAt = new Date()
|
|
delete newInquiry.isPredefined
|
|
|
|
return newInquiry
|
|
},
|
|
|
|
isTabNeedName (inquiryTab) {
|
|
return inquiryTab.isPredefined || !inquiryTab.name
|
|
},
|
|
|
|
updateStorage (inquiries) {
|
|
localStorage.setItem('myInquiries', JSON.stringify({ version: this.version, inquiries }))
|
|
},
|
|
|
|
serialiseInquiries (inquiryList) {
|
|
const preparedData = JSON.parse(JSON.stringify(inquiryList))
|
|
preparedData.forEach(inquiry => delete inquiry.isPredefined)
|
|
return JSON.stringify({ version: this.version, inquiries: preparedData }, null, 4)
|
|
},
|
|
|
|
deserialiseInquiries (str) {
|
|
const inquiries = JSON.parse(str)
|
|
let inquiryList = []
|
|
if (!inquiries.version) {
|
|
// Turn data into array if they are not
|
|
inquiryList = !Array.isArray(inquiries) ? [inquiries] : inquiries
|
|
inquiryList = migrate(1, inquiryList)
|
|
} else {
|
|
inquiryList = inquiries.inquiries || []
|
|
}
|
|
|
|
// Generate new ids if they are the same as existing inquiries
|
|
inquiryList.forEach(inquiry => {
|
|
const allInquiriesIds = this.getStoredInquiries().map(inquiry => inquiry.id)
|
|
if (allInquiriesIds.includes(inquiry.id)) {
|
|
inquiry.id = nanoid()
|
|
}
|
|
})
|
|
|
|
return inquiryList
|
|
},
|
|
|
|
importInquiries () {
|
|
return fu.importFile()
|
|
.then(str => {
|
|
const inquires = this.deserialiseInquiries(str)
|
|
|
|
events.send('inquiry.import', inquires.length)
|
|
|
|
return inquires
|
|
})
|
|
},
|
|
export (inquiryList, fileName) {
|
|
const jsonStr = this.serialiseInquiries(inquiryList)
|
|
fu.exportToFile(jsonStr, fileName)
|
|
|
|
events.send('inquiry.export', inquiryList.length)
|
|
},
|
|
|
|
async readPredefinedInquiries () {
|
|
const res = await fu.readFile('./inquiries.json')
|
|
const data = await res.json()
|
|
|
|
if (!data.version) {
|
|
return data.length > 0 ? migrate(1, data) : []
|
|
} else {
|
|
return data.inquiries
|
|
}
|
|
}
|
|
}
|