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 } } }