Fix extension register tab with API (#229)

* Get rid of extension manager impl

* nit

* Test register tab
This commit is contained in:
Chenlei Hu
2024-07-26 10:29:20 -04:00
committed by GitHub
parent 8e1d3f3baa
commit ee6eed1c1c
6 changed files with 52 additions and 65 deletions

View File

@@ -1,32 +1,37 @@
import { SidebarTabExtension } from '@/types/extensionTypes'
import { defineStore } from 'pinia'
interface WorkspaceState {
activeSidebarTab: string | null
sidebarTabsOrder: string[] // Array of tab IDs in order
sidebarTabs: SidebarTabExtension[]
}
export const useWorkspaceStore = defineStore('workspace', {
state: (): WorkspaceState => ({
activeSidebarTab: null,
sidebarTabsOrder: []
sidebarTabs: []
}),
actions: {
updateActiveSidebarTab(tabId: string) {
this.activeSidebarTab = tabId
},
updateSidebarOrder(newOrder: string[]) {
this.sidebarTabsOrder = newOrder
registerSidebarTab(tab: SidebarTabExtension) {
this.sidebarTabs = [...this.sidebarTabs, tab]
},
serialize() {
return JSON.stringify({
activeSidebarTab: this.activeSidebarTab,
sidebarTabsOrder: this.sidebarTabsOrder
})
unregisterSidebarTab(id: string) {
const index = this.sidebarTabs.findIndex((tab) => tab.id === id)
if (index !== -1) {
const tab = this.sidebarTabs[index]
if (tab.type === 'custom' && tab.destroy) {
tab.destroy()
}
const newSidebarTabs = [...this.sidebarTabs]
newSidebarTabs.splice(index, 1)
this.sidebarTabs = newSidebarTabs
}
},
deserialize(state: string) {
const parsedState = JSON.parse(state)
this.sidebarTabsOrder = parsedState.sidebarTabsOrder
this.activeSidebarTab = parsedState.activeSidebarTab
getSidebarTabs() {
return [...this.sidebarTabs]
}
}
})