mirror of
https://github.com/lana-k/sqliteviz.git
synced 2025-12-08 11:08:55 +08:00
Tab refactor
This commit is contained in:
@@ -1,32 +1,17 @@
|
||||
import { nanoid } from 'nanoid'
|
||||
import Tab from '@/lib/tab'
|
||||
|
||||
export default {
|
||||
async addTab ({ state }, data) {
|
||||
const tab = data ? JSON.parse(JSON.stringify(data)) : {}
|
||||
// If no data then create a new blank one...
|
||||
// No data.id means to create new tab, but not blank,
|
||||
// e.g. with 'select * from csv_import' inquiry after csv import
|
||||
if (!data || !data.id) {
|
||||
tab.id = nanoid()
|
||||
tab.name = null
|
||||
tab.tempName = state.untitledLastIndex
|
||||
? `Untitled ${state.untitledLastIndex}`
|
||||
: 'Untitled'
|
||||
tab.viewType = 'chart'
|
||||
tab.viewOptions = undefined
|
||||
tab.isSaved = false
|
||||
} else {
|
||||
tab.isSaved = true
|
||||
}
|
||||
|
||||
// add new tab only if was not already opened
|
||||
if (!state.tabs.some(openedTab => openedTab.id === tab.id)) {
|
||||
async addTab ({ state }, inquiry = {}) {
|
||||
// add new tab only if it was not already opened
|
||||
if (!state.tabs.some(openedTab => openedTab.id === inquiry.id)) {
|
||||
const tab = new Tab(state, JSON.parse(JSON.stringify(inquiry)))
|
||||
state.tabs.push(tab)
|
||||
if (!tab.name) {
|
||||
state.untitledLastIndex += 1
|
||||
}
|
||||
return tab.id
|
||||
}
|
||||
|
||||
return tab.id
|
||||
return inquiry.id
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
import Vue from 'vue'
|
||||
|
||||
export default {
|
||||
setDb (state, db) {
|
||||
if (state.db) {
|
||||
@@ -8,8 +6,8 @@ export default {
|
||||
state.db = db
|
||||
},
|
||||
|
||||
updateTab (state, { index, name, id, query, viewType, viewOptions, isSaved }) {
|
||||
const tab = state.tabs[index]
|
||||
updateTab (state, { tab, newValues }) {
|
||||
const { name, id, query, viewType, viewOptions, isSaved } = newValues
|
||||
const oldId = tab.id
|
||||
|
||||
if (id && state.currentTabId === oldId) {
|
||||
@@ -26,13 +24,12 @@ export default {
|
||||
// Saved inquiry is not predefined
|
||||
delete tab.isPredefined
|
||||
}
|
||||
|
||||
Vue.set(state.tabs, index, tab)
|
||||
},
|
||||
|
||||
deleteTab (state, index) {
|
||||
deleteTab (state, tab) {
|
||||
const index = state.tabs.indexOf(tab)
|
||||
// If closing tab is the current opened
|
||||
if (state.tabs[index].id === state.currentTabId) {
|
||||
if (tab.id === state.currentTabId) {
|
||||
if (index < state.tabs.length - 1) {
|
||||
state.currentTabId = state.tabs[index + 1].id
|
||||
} else if (index > 0) {
|
||||
@@ -46,10 +43,12 @@ export default {
|
||||
state.tabs.splice(index, 1)
|
||||
},
|
||||
setCurrentTabId (state, id) {
|
||||
state.currentTabId = id
|
||||
},
|
||||
setCurrentTab (state, tab) {
|
||||
state.currentTab = tab
|
||||
try {
|
||||
state.currentTabId = id
|
||||
state.currentTab = state.tabs.find(tab => tab.id === id)
|
||||
} catch (e) {
|
||||
console.error('Can\'t open a tab id:' + id)
|
||||
}
|
||||
},
|
||||
updatePredefinedInquiries (state, inquiries) {
|
||||
state.predefinedInquiries = Array.isArray(inquiries) ? inquiries : [inquiries]
|
||||
|
||||
Reference in New Issue
Block a user