diff --git a/src/common/interfaces/antares.ts b/src/common/interfaces/antares.ts index f2e330d0..809d63b0 100644 --- a/src/common/interfaces/antares.ts +++ b/src/common/interfaces/antares.ts @@ -337,6 +337,15 @@ export interface SchemaInfos { schedulers: EventInfos[]; } +export interface CollationInfos { + charset: string; + collation: string; + compiled: boolean; + default: boolean; + id: string | number; + sortLen: number; +} + // Query export interface QueryBuilderObject { schema: string; diff --git a/src/renderer/stores/application.js b/src/renderer/stores/application.ts similarity index 75% rename from src/renderer/stores/application.js rename to src/renderer/stores/application.ts index c78dbeac..c79e4945 100644 --- a/src/renderer/stores/application.js +++ b/src/renderer/stores/application.ts @@ -1,12 +1,13 @@ -import { defineStore, acceptHMRUpdate } from 'pinia'; -import Store from 'electron-store'; +import { defineStore } from 'pinia'; +import * as Store from 'electron-store'; +import { Ace } from 'ace-builds'; const persistentStore = new Store({ name: 'settings' }); export const useApplicationStore = defineStore('application', { state: () => ({ appName: 'Antares - SQL Client', - appVersion: process.env.PACKAGE_VERSION || 0, - cachedVersion: persistentStore.get('cached_version', 0), + appVersion: process.env.PACKAGE_VERSION || '0', + cachedVersion: persistentStore.get('cached_version', '0') as string, isLoading: false, isNewModal: false, isSettingModal: false, @@ -15,7 +16,7 @@ export const useApplicationStore = defineStore('application', { selectedConection: {}, updateStatus: 'noupdate', // 'noupdate' | 'available' | 'checking' | 'nocheck' | 'downloading' | 'downloaded' | 'disabled' downloadProgress: 0, - baseCompleter: [] // Needed to reset ace editor, due global-only ace completer + baseCompleter: [] as Ace.Completer[] // Needed to reset ace editor, due global-only ace completer }), getters: { getBaseCompleter: state => state.baseCompleter, @@ -30,10 +31,10 @@ export const useApplicationStore = defineStore('application', { persistentStore.set('cached_version', this.cachedVersion); } }, - setLoadingStatus (payload) { + setLoadingStatus (payload: boolean) { this.isLoading = payload; }, - setBaseCompleters (payload) { + setBaseCompleters (payload: boolean) { this.baseCompleter = payload; }, // Modals @@ -43,7 +44,7 @@ export const useApplicationStore = defineStore('application', { hideNewConnModal () { this.isNewModal = false; }, - showSettingModal (tab) { + showSettingModal (tab: string) { this.selectedSettingTab = tab; this.isSettingModal = true; }, @@ -58,6 +59,3 @@ export const useApplicationStore = defineStore('application', { } } }); - -if (import.meta.webpackHot) - import.meta.webpackHot.accept(acceptHMRUpdate(useApplicationStore, import.meta.webpackHot)); diff --git a/src/renderer/stores/connections.js b/src/renderer/stores/connections.ts similarity index 69% rename from src/renderer/stores/connections.js rename to src/renderer/stores/connections.ts index 9550231f..a301b8fc 100644 --- a/src/renderer/stores/connections.js +++ b/src/renderer/stores/connections.ts @@ -1,6 +1,7 @@ -import { defineStore, acceptHMRUpdate } from 'pinia'; -import Store from 'electron-store'; -import crypto from 'crypto'; +import { defineStore } from 'pinia'; +import * as Store from 'electron-store'; +import * as crypto from 'crypto'; +import { ConnectionParams } from 'common/interfaces/antares'; const key = localStorage.getItem('key'); if (!key) @@ -16,10 +17,10 @@ const persistentStore = new Store({ export const useConnectionsStore = defineStore('connections', { state: () => ({ - connections: persistentStore.get('connections', []) + connections: persistentStore.get('connections', []) as ConnectionParams[] }), getters: { - getConnectionName: state => uid => { + getConnectionName: state => (uid: string) => { const connection = state.connections.filter(connection => connection.uid === uid)[0]; let connectionName = ''; @@ -42,16 +43,16 @@ export const useConnectionsStore = defineStore('connections', { } }, actions: { - addConnection (connection) { + addConnection (connection: ConnectionParams) { this.connections.push(connection); persistentStore.set('connections', this.connections); }, - deleteConnection (connection) { - this.connections = this.connections.filter(el => el.uid !== connection.uid); + deleteConnection (connection: ConnectionParams) { + this.connections = (this.connections as ConnectionParams[]).filter(el => el.uid !== connection.uid); persistentStore.set('connections', this.connections); }, - editConnection (connection) { - const editedConnections = this.connections.map(conn => { + editConnection (connection: ConnectionParams) { + const editedConnections = (this.connections as ConnectionParams[]).map(conn => { if (conn.uid === connection.uid) return connection; return conn; }); @@ -59,12 +60,9 @@ export const useConnectionsStore = defineStore('connections', { this.selected_conection = {}; persistentStore.set('connections', this.connections); }, - updateConnections (connections) { + updateConnections (connections: ConnectionParams) { this.connections = connections; persistentStore.set('connections', this.connections); } } }); - -if (import.meta.webpackHot) - import.meta.webpackHot.accept(acceptHMRUpdate(useConnectionsStore, import.meta.webpackHot)); diff --git a/src/renderer/stores/history.js b/src/renderer/stores/history.ts similarity index 63% rename from src/renderer/stores/history.js rename to src/renderer/stores/history.ts index 46d60a89..c654e478 100644 --- a/src/renderer/stores/history.js +++ b/src/renderer/stores/history.ts @@ -1,19 +1,26 @@ -import { defineStore, acceptHMRUpdate } from 'pinia'; -import Store from 'electron-store'; +import { defineStore } from 'pinia'; +import * as Store from 'electron-store'; import { uidGen } from 'common/libs/uidGen'; const persistentStore = new Store({ name: 'history' }); const historySize = 1000; +export interface HistoryRecord { + uid: string; + sql: string; + date: Date; + schema?: string; +} + export const useHistoryStore = defineStore('history', { state: () => ({ - history: persistentStore.get('history', {}), + history: persistentStore.get('history', {}) as {[key: string]: HistoryRecord[]}, favorites: persistentStore.get('favorites', {}) }), getters: { - getHistoryByWorkspace: state => uid => state.history[uid] + getHistoryByWorkspace: state => (uid: string) => state.history[uid] }, actions: { - saveHistory (args) { + saveHistory (args: { uid: string; query: string; schema: string; tabUid: string }) { if (this.getHistoryByWorkspace(args.uid) && this.getHistoryByWorkspace(args.uid).length && this.getHistoryByWorkspace(args.uid)[0].sql === args.query @@ -37,12 +44,9 @@ export const useHistoryStore = defineStore('history', { persistentStore.set('history', this.history); }, - deleteQueryFromHistory (query) { - this.history[query.workspace] = this.history[query.workspace].filter(q => q.uid !== query.uid); + deleteQueryFromHistory (query: Partial & { workspace: string}) { + this.history[query.workspace] = (this.history[query.workspace] as HistoryRecord[]).filter(q => q.uid !== query.uid); persistentStore.set('history', this.history); } } }); - -if (import.meta.webpackHot) - import.meta.webpackHot.accept(acceptHMRUpdate(useHistoryStore, import.meta.webpackHot)); diff --git a/src/renderer/stores/notifications.js b/src/renderer/stores/notifications.js deleted file mode 100644 index df7273c7..00000000 --- a/src/renderer/stores/notifications.js +++ /dev/null @@ -1,20 +0,0 @@ -import { defineStore, acceptHMRUpdate } from 'pinia'; -import { uidGen } from 'common/libs/uidGen'; - -export const useNotificationsStore = defineStore('notifications', { - state: () => ({ - notifications: [] - }), - actions: { - addNotification (payload) { - payload.uid = uidGen('N'); - this.notifications.unshift(payload); - }, - removeNotification (uid) { - this.notifications = this.notifications.filter(item => item.uid !== uid); - } - } -}); - -if (import.meta.webpackHot) - import.meta.webpackHot.accept(acceptHMRUpdate(useNotificationsStore, import.meta.webpackHot)); diff --git a/src/renderer/stores/notifications.ts b/src/renderer/stores/notifications.ts new file mode 100644 index 00000000..00a5995f --- /dev/null +++ b/src/renderer/stores/notifications.ts @@ -0,0 +1,23 @@ +import { defineStore } from 'pinia'; +import { uidGen } from 'common/libs/uidGen'; + +export interface Notification { + uid: string; + status: string; + message: string; +} + +export const useNotificationsStore = defineStore('notifications', { + state: () => ({ + notifications: [] as Notification[] + }), + actions: { + addNotification (payload: { status: string; message: string }) { + const notification: Notification = { uid: uidGen('N'), ...payload }; + this.notifications.unshift(notification); + }, + removeNotification (uid: string) { + this.notifications = (this.notifications as Notification[]).filter(item => item.uid !== uid); + } + } +}); diff --git a/src/renderer/stores/scratchpad.ts b/src/renderer/stores/scratchpad.ts index 3f224683..594d7de0 100644 --- a/src/renderer/stores/scratchpad.ts +++ b/src/renderer/stores/scratchpad.ts @@ -1,10 +1,10 @@ import { defineStore } from 'pinia'; -import Store from 'electron-store'; +import * as Store from 'electron-store'; const persistentStore = new Store({ name: 'notes' }); export const useScratchpadStore = defineStore('scratchpad', { state: () => ({ - notes: persistentStore.get('notes', '# HOW TO SUPPORT ANTARES\n\n- [ ] Leave a star to Antares [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Send feedbacks and advices\n- [ ] Report for bugs\n- [ ] If you enjoy, share Antares with friends\n\n# ABOUT SCRATCHPAD\n\nThis is a scratchpad where you can save your **personal notes**. It supports `markdown` format, but you are free to use plain text.\nThis content is just a placeholder, feel free to clear it to make space for your notes.\n') + notes: persistentStore.get('notes', '# HOW TO SUPPORT ANTARES\n\n- [ ] Leave a star to Antares [GitHub repo](https://github.com/antares-sql/antares)\n- [ ] Send feedbacks and advices\n- [ ] Report for bugs\n- [ ] If you enjoy, share Antares with friends\n\n# ABOUT SCRATCHPAD\n\nThis is a scratchpad where you can save your **personal notes**. It supports `markdown` format, but you are free to use plain text.\nThis content is just a placeholder, feel free to clear it to make space for your notes.\n') as string }), actions: { changeNotes (notes: string) { diff --git a/src/renderer/stores/settings.ts b/src/renderer/stores/settings.ts index 26f255b3..1957d5b8 100644 --- a/src/renderer/stores/settings.ts +++ b/src/renderer/stores/settings.ts @@ -1,6 +1,6 @@ import { defineStore } from 'pinia'; import i18n from '@/i18n'; -import Store from 'electron-store'; +import * as Store from 'electron-store'; const persistentStore = new Store({ name: 'settings' }); const isDarkTheme = window.matchMedia('(prefers-color-scheme: dark)'); const defaultAppTheme = isDarkTheme.matches ? 'dark' : 'light'; diff --git a/src/renderer/stores/workspaces.js b/src/renderer/stores/workspaces.ts similarity index 68% rename from src/renderer/stores/workspaces.js rename to src/renderer/stores/workspaces.ts index 143f464c..a8cdf6eb 100644 --- a/src/renderer/stores/workspaces.js +++ b/src/renderer/stores/workspaces.ts @@ -1,5 +1,5 @@ -import { defineStore, acceptHMRUpdate } from 'pinia'; -import Store from 'electron-store'; +import { defineStore } from 'pinia'; +import * as Store from 'electron-store'; import Connection from '@/ipc-api/Connection'; import Schema from '@/ipc-api/Schema'; import Users from '@/ipc-api/Users'; @@ -10,14 +10,88 @@ import customizations from 'common/customizations'; import { useConnectionsStore } from '@/stores/connections'; import { useNotificationsStore } from '@/stores/notifications'; import { useSettingsStore } from '@/stores/settings'; +import { + CollationInfos, + ConnectionParams, + EventInfos, + FunctionInfos, + RoutineInfos, + TableInfos, + TriggerInfos, + TypesGroup +} from 'common/interfaces/antares'; +import { Customizations } from 'common/interfaces/customizations'; + +export interface WorkspaceTab { + uid: string; + tab?: string; + index: number; + selected: boolean; + type: string; + schema?: string; + elementName?: string; + elementNewName?: string; + elementType?: string; + isChanged?: boolean; + content?: string; + autorun: boolean; +} + +export interface WorkspaceStructure { + name: string; + functions: FunctionInfos[]; + procedures: RoutineInfos[]; + schedulers: EventInfos[]; + tables: TableInfos[]; + triggers: TriggerInfos[]; + size: number; +} + +export interface Breadcrumb { + function?: string; + procedure?: string; + query?: string; + scheduler?: string; + schema?: string; + table?: string; + trigger?: string; + triggerFunction?: string; + view?: string; +} + +export interface Workspace { + uid: string; + client?: string; + connectionStatus: string; + selectedTab: string | number; + searchTerm: string; + tabs: WorkspaceTab[]; + structure: WorkspaceStructure[]; + variables: { name: string; value: string }[]; + collations: CollationInfos[]; + users: { host: string; name: string; password: string }[]; + breadcrumbs: Breadcrumb[]; + loadingElements: { name: string; schema: string; type: string }[]; + loadedSchemas: Set; + dataTypes?: { [key: string]: TypesGroup[] }; + indexTypes?: string[]; + customizations?: Customizations; + version?: { + number: string; + name: string; + arch: string; + os: string; + }; + engines?: {[key: string]: string | boolean | number}[]; +} const persistentStore = new Store({ name: 'tabs' }); -const tabIndex = []; +const tabIndex: {[key: string]: number} = {}; export const useWorkspacesStore = defineStore('workspaces', { state: () => ({ - workspaces: [], - selectedWorkspace: null + workspaces: [] as Workspace[], + selectedWorkspace: null as string }), getters: { getSelected: state => { @@ -25,14 +99,14 @@ export const useWorkspacesStore = defineStore('workspaces', { if (state.selectedWorkspace) return state.selectedWorkspace; return state.workspaces[0].uid; }, - getWorkspace: state => (uid) => { + getWorkspace: state => (uid: string) => { return state.workspaces.find(workspace => workspace.uid === uid); }, - getDatabaseVariable: state => (uid, name) => { + getDatabaseVariable: state => (uid: string, name: string) => { return state.workspaces.find(workspace => workspace.uid === uid).variables.find(variable => variable.name === name); }, getWorkspaceTab (state) { - return (tUid) => { + return (tUid: string) => { if (!this.getSelected) return; const workspace = state.workspaces.find(workspace => workspace.uid === this.getSelected); if ('tabs' in workspace) @@ -45,22 +119,22 @@ export const useWorkspacesStore = defineStore('workspaces', { .filter(workspace => workspace.connectionStatus === 'connected') .map(workspace => workspace.uid); }, - getLoadedSchemas: state => uid => { + getLoadedSchemas: state => (uid: string) => { return state.workspaces.find(workspace => workspace.uid === uid).loadedSchemas; }, - getSearchTerm: state => uid => { + getSearchTerm: state => (uid: string) => { return state.workspaces.find(workspace => workspace.uid === uid).searchTerm; } }, actions: { - selectWorkspace (uid) { + selectWorkspace (uid: string) { if (!uid) this.selectedWorkspace = this.workspaces.length ? this.workspaces[0].uid : 'NEW'; else this.selectedWorkspace = uid; }, - async connectWorkspace (connection) { - this.workspaces = this.workspaces.map(workspace => workspace.uid === connection.uid + async connectWorkspace (connection: ConnectionParams) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === connection.uid ? { ...workspace, structure: {}, @@ -79,7 +153,7 @@ export const useWorkspacesStore = defineStore('workspaces', { if (status === 'error') { notificationsStore.addNotification({ status, message: response }); - this.workspaces = this.workspaces.map(workspace => workspace.uid === connection.uid + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === connection.uid ? { ...workspace, structure: {}, @@ -90,25 +164,25 @@ export const useWorkspacesStore = defineStore('workspaces', { : workspace); } else { - let dataTypes = []; - let indexTypes = []; - let clientCustomizations; + let dataTypes: TypesGroup[] = []; + let indexTypes: string[] = []; + let clientCustomizations: Customizations; switch (connection.client) { case 'mysql': case 'maria': - dataTypes = require('common/data-types/mysql').default; - indexTypes = require('common/index-types/mysql').default; + dataTypes = require('common/data-types/mysql'); + indexTypes = require('common/index-types/mysql'); clientCustomizations = customizations.mysql; break; case 'pg': - dataTypes = require('common/data-types/postgresql').default; - indexTypes = require('common/index-types/postgresql').default; + dataTypes = require('common/data-types/postgresql'); + indexTypes = require('common/index-types/postgresql'); clientCustomizations = customizations.pg; break; case 'sqlite': - dataTypes = require('common/data-types/sqlite').default; - indexTypes = require('common/index-types/sqlite').default; + dataTypes = require('common/data-types/sqlite'); + indexTypes = require('common/index-types/sqlite'); clientCustomizations = customizations.sqlite; break; } @@ -132,16 +206,16 @@ export const useWorkspacesStore = defineStore('workspaces', { connectionsStore.editConnection(connProxy); } - const cachedTabs = settingsStore.restoreTabs ? persistentStore.get(connection.uid, []) : []; + const cachedTabs: WorkspaceTab[] = settingsStore.restoreTabs ? persistentStore.get(connection.uid, []) as WorkspaceTab[] : []; if (cachedTabs.length) { - tabIndex[connection.uid] = cachedTabs.reduce((acc, curr) => { + tabIndex[connection.uid] = cachedTabs.reduce((acc: number, curr) => { if (curr.index > acc) acc = curr.index; return acc; }, null); } - this.workspaces = this.workspaces.map(workspace => workspace.uid === connection.uid + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === connection.uid ? { ...workspace, client: connection.client, @@ -166,7 +240,7 @@ export const useWorkspacesStore = defineStore('workspaces', { notificationsStore.addNotification({ status: 'error', message: err.stack }); } }, - async refreshStructure (uid) { + async refreshStructure (uid: string) { const notificationsStore = useNotificationsStore(); try { @@ -175,7 +249,7 @@ export const useWorkspacesStore = defineStore('workspaces', { if (status === 'error') notificationsStore.addNotification({ status, message: response }); else { - this.workspaces = this.workspaces.map(workspace => workspace.uid === uid + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid ? { ...workspace, structure: response @@ -187,7 +261,7 @@ export const useWorkspacesStore = defineStore('workspaces', { notificationsStore.addNotification({ status: 'error', message: err.stack }); } }, - async refreshSchema ({ uid, schema }) { + async refreshSchema ({ uid, schema }: {uid: string; schema: string}) { const notificationsStore = useNotificationsStore(); try { @@ -195,8 +269,8 @@ export const useWorkspacesStore = defineStore('workspaces', { if (status === 'error') notificationsStore.addNotification({ status, message: response }); else { - const schemaElements =response.find(_schema => _schema.name === schema); - this.workspaces = this.workspaces.map(workspace => { + const schemaElements = (response as WorkspaceStructure[]).find(_schema => _schema.name === schema); + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === uid) { const schemaIndex = workspace.structure.findIndex(s => s.name === schema); @@ -213,7 +287,7 @@ export const useWorkspacesStore = defineStore('workspaces', { notificationsStore.addNotification({ status: 'error', message: err.stack }); } }, - async refreshCollations (uid) { + async refreshCollations (uid: string) { const notificationsStore = useNotificationsStore(); try { @@ -221,7 +295,7 @@ export const useWorkspacesStore = defineStore('workspaces', { if (status === 'error') notificationsStore.addNotification({ status, message: response }); else { - this.workspaces = this.workspaces.map(workspace => workspace.uid === uid + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid ? { ...workspace, collations: response @@ -233,7 +307,7 @@ export const useWorkspacesStore = defineStore('workspaces', { notificationsStore.addNotification({ status: 'error', message: err.stack }); } }, - async refreshVariables (uid) { + async refreshVariables (uid: string) { const notificationsStore = useNotificationsStore(); try { @@ -241,7 +315,7 @@ export const useWorkspacesStore = defineStore('workspaces', { if (status === 'error') notificationsStore.addNotification({ status, message: response }); else { - this.workspaces = this.workspaces.map(workspace => workspace.uid === uid + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid ? { ...workspace, variables: response @@ -253,7 +327,7 @@ export const useWorkspacesStore = defineStore('workspaces', { notificationsStore.addNotification({ status: 'error', message: err.stack }); } }, - async refreshEngines (uid) { + async refreshEngines (uid: string) { const notificationsStore = useNotificationsStore(); try { @@ -261,7 +335,7 @@ export const useWorkspacesStore = defineStore('workspaces', { if (status === 'error') notificationsStore.addNotification({ status, message: response }); else { - this.workspaces = this.workspaces.map(workspace => workspace.uid === uid + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid ? { ...workspace, engines: response @@ -273,7 +347,7 @@ export const useWorkspacesStore = defineStore('workspaces', { notificationsStore.addNotification({ status: 'error', message: err.stack }); } }, - async refreshUsers (uid) { + async refreshUsers (uid: string) { const notificationsStore = useNotificationsStore(); try { @@ -281,7 +355,7 @@ export const useWorkspacesStore = defineStore('workspaces', { if (status === 'error') notificationsStore.addNotification({ status, message: response }); else { - this.workspaces = this.workspaces.map(workspace => workspace.uid === uid + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid ? { ...workspace, users: response @@ -293,9 +367,9 @@ export const useWorkspacesStore = defineStore('workspaces', { notificationsStore.addNotification({ status: 'error', message: err.stack }); } }, - removeConnected (uid) { + removeConnected (uid: string) { Connection.disconnect(uid); - this.workspaces = this.workspaces.map(workspace => workspace.uid === uid + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid ? { ...workspace, structure: {}, @@ -307,26 +381,26 @@ export const useWorkspacesStore = defineStore('workspaces', { this.selectTab({ uid, tab: 0 }); }, - addWorkspace (uid) { - const workspace = { + addWorkspace (uid: string) { + const workspace: Workspace = { uid, connectionStatus: 'disconnected', selectedTab: 0, searchTerm: '', tabs: [], - structure: {}, + structure: [], variables: [], collations: [], users: [], - breadcrumbs: {}, + breadcrumbs: [], loadingElements: [], loadedSchemas: new Set() }; this.workspaces.push(workspace); }, - changeBreadcrumbs (payload) { - const breadcrumbsObj = { + changeBreadcrumbs (payload: Breadcrumb) { + const breadcrumbsObj: Breadcrumb = { schema: null, table: null, trigger: null, @@ -338,29 +412,29 @@ export const useWorkspacesStore = defineStore('workspaces', { query: null }; - this.workspaces = this.workspaces.map(workspace => workspace.uid === this.getSelected + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === this.getSelected ? { ...workspace, breadcrumbs: { ...breadcrumbsObj, ...payload } } : workspace); }, - addLoadedSchema (schema) { - this.workspaces = this.workspaces.map(workspace => { + addLoadedSchema (schema: string) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === this.getSelected) workspace.loadedSchemas.add(schema); return workspace; }); }, - addLoadingElement (element) { - this.workspaces = this.workspaces.map(workspace => { + addLoadingElement (element: { name: string; schema: string; type: string }) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === this.getSelected) workspace.loadingElements.push(element); return workspace; }); }, - removeLoadingElement (element) { - this.workspaces = this.workspaces.map(workspace => { + removeLoadingElement (element: { name: string; schema: string; type: string }) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === this.getSelected) { const loadingElements = workspace.loadingElements.filter(el => el.schema !== element.schema && @@ -373,19 +447,19 @@ export const useWorkspacesStore = defineStore('workspaces', { return workspace; }); }, - setSearchTerm (term) { - this.workspaces = this.workspaces.map(workspace => workspace.uid === this.getSelected + setSearchTerm (term: string) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === this.getSelected ? { ...workspace, searchTerm: term } : workspace); }, - _addTab ({ uid, tab, content, type, autorun, schema, elementName, elementType }) { + _addTab ({ uid, tab, content, type, autorun, schema, elementName, elementType }: WorkspaceTab) { if (type === 'query') tabIndex[uid] = tabIndex[uid] ? ++tabIndex[uid] : 1; - const newTab = { + const newTab: WorkspaceTab = { uid: tab, index: type === 'query' ? tabIndex[uid] : null, selected: false, @@ -393,13 +467,11 @@ export const useWorkspacesStore = defineStore('workspaces', { schema, elementName, elementType, - fields: [], - keyUsage: [], content: content || '', autorun: !!autorun }; - this.workspaces = this.workspaces.map(workspace => { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === uid) { return { ...workspace, @@ -410,10 +482,10 @@ export const useWorkspacesStore = defineStore('workspaces', { return workspace; }); - persistentStore.set(uid, this.workspaces.find(workspace => workspace.uid === uid).tabs); + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); }, - _replaceTab ({ uid, tab: tUid, type, schema, content, elementName, elementType }) { - this.workspaces = this.workspaces.map(workspace => { + _replaceTab ({ uid, tab: tUid, type, schema, content, elementName, elementType }: WorkspaceTab) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === uid) { return { ...workspace, @@ -429,11 +501,11 @@ export const useWorkspacesStore = defineStore('workspaces', { return workspace; }); - persistentStore.set(uid, this.workspaces.find(workspace => workspace.uid === uid).tabs); + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); }, - newTab ({ uid, content, type, autorun, schema, elementName, elementType }) { + newTab ({ uid, content, type, autorun, schema, elementName, elementType }: WorkspaceTab) { let tabUid; - const workspaceTabs = this.workspaces.find(workspace => workspace.uid === uid); + const workspaceTabs = (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid); switch (type) { case 'new-table': @@ -535,8 +607,8 @@ export const useWorkspacesStore = defineStore('workspaces', { this.selectTab({ uid, tab: tabUid }); }, - checkSelectedTabExists (uid) { - const workspace = this.workspaces.find(workspace => workspace.uid === uid); + checkSelectedTabExists (uid: string) { + const workspace = (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid); const isSelectedExistent = workspace ? workspace.tabs.some(tab => tab.uid === workspace.selectedTab) : false; @@ -544,11 +616,11 @@ export const useWorkspacesStore = defineStore('workspaces', { if (!isSelectedExistent && workspace.tabs.length) this.selectTab({ uid, tab: workspace.tabs[workspace.tabs.length - 1].uid }); }, - updateTabContent ({ uid, tab, type, schema, content }) { + updateTabContent ({ uid, tab, type, schema, content }: WorkspaceTab) { this._replaceTab({ uid, tab, type, schema, content }); }, - renameTabs ({ uid, schema, elementName, elementNewName }) { - this.workspaces = this.workspaces.map(workspace => { + renameTabs ({ uid, schema, elementName, elementNewName }: WorkspaceTab) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === uid) { return { ...workspace, @@ -568,10 +640,10 @@ export const useWorkspacesStore = defineStore('workspaces', { return workspace; }); - persistentStore.set(uid, this.workspaces.find(workspace => workspace.uid === uid).tabs); + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); }, - removeTab ({ uid, tab: tUid }) { - this.workspaces = this.workspaces.map(workspace => { + removeTab ({ uid, tab: tUid }: {uid: string; tab: string}) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === uid) { return { ...workspace, @@ -582,13 +654,13 @@ export const useWorkspacesStore = defineStore('workspaces', { return workspace; }); - persistentStore.set(uid, this.workspaces.find(workspace => workspace.uid === uid).tabs); + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); this.checkSelectedTabExists(uid); }, - removeTabs ({ uid, schema, elementName, elementType }) { // Multiple tabs based on schema and element name + removeTabs ({ uid, schema, elementName, elementType }: WorkspaceTab) { // Multiple tabs based on schema and element name if (elementType === 'procedure') elementType = 'routine'; // TODO: pass directly "routine" - this.workspaces = this.workspaces.map(workspace => { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === uid) { return { ...workspace, @@ -603,62 +675,62 @@ export const useWorkspacesStore = defineStore('workspaces', { return workspace; }); - persistentStore.set(uid, this.workspaces.find(workspace => workspace.uid === uid).tabs); + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); this.checkSelectedTabExists(uid); }, - selectTab ({ uid, tab }) { - this.workspaces = this.workspaces.map(workspace => workspace.uid === uid + selectTab ({ uid, tab }: {uid: string; tab: string}) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid ? { ...workspace, selectedTab: tab } : workspace ); }, - updateTabs ({ uid, tabs }) { - this.workspaces = this.workspaces.map(workspace => workspace.uid === uid + updateTabs ({ uid, tabs }: {uid: string; tabs: string[]}) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => workspace.uid === uid ? { ...workspace, tabs } : workspace ); - persistentStore.set(uid, this.workspaces.find(workspace => workspace.uid === uid).tabs); + persistentStore.set(uid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === uid).tabs); }, - setTabFields ({ cUid, tUid, fields }) { - this.workspaces = this.workspaces.map(workspace => { - if (workspace.uid === cUid) { - return { - ...workspace, - tabs: workspace.tabs.map(tab => { - if (tab.uid === tUid) - return { ...tab, fields }; - else - return tab; - }) - }; - } - else - return workspace; - }); + // setTabFields ({ cUid, tUid, fields }: { cUid: string; tUid: string; fields: any }) { + // this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + // if (workspace.uid === cUid) { + // return { + // ...workspace, + // tabs: workspace.tabs.map(tab => { + // if (tab.uid === tUid) + // return { ...tab, fields }; + // else + // return tab; + // }) + // }; + // } + // else + // return workspace; + // }); - persistentStore.set(cUid, this.workspaces.find(workspace => workspace.uid === cUid).tabs); - }, - setTabKeyUsage ({ cUid, tUid, keyUsage }) { - this.workspaces = this.workspaces.map(workspace => { - if (workspace.uid === cUid) { - return { - ...workspace, - tabs: workspace.tabs.map(tab => { - if (tab.uid === tUid) - return { ...tab, keyUsage }; - else - return tab; - }) - }; - } - else - return workspace; - }); + // persistentStore.set(cUid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === cUid).tabs); + // }, + // setTabKeyUsage ({ cUid, tUid, keyUsage }: { cUid: string; tUid: string; keyUsage: any }) { + // this.workspaces = (this.workspaces as Workspace[]).map(workspace => { + // if (workspace.uid === cUid) { + // return { + // ...workspace, + // tabs: workspace.tabs.map(tab => { + // if (tab.uid === tUid) + // return { ...tab, keyUsage }; + // else + // return tab; + // }) + // }; + // } + // else + // return workspace; + // }); - persistentStore.set(cUid, this.workspaces.find(workspace => workspace.uid === cUid).tabs); - }, - setUnsavedChanges ({ uid, tUid, isChanged }) { - this.workspaces = this.workspaces.map(workspace => { + // persistentStore.set(cUid, (this.workspaces as Workspace[]).find(workspace => workspace.uid === cUid).tabs); + // }, + setUnsavedChanges ({ uid, tUid, isChanged }: { uid: string; tUid: string; isChanged: boolean }) { + this.workspaces = (this.workspaces as Workspace[]).map(workspace => { if (workspace.uid === uid) { return { ...workspace, @@ -676,6 +748,3 @@ export const useWorkspacesStore = defineStore('workspaces', { } } }); - -if (import.meta.webpackHot) - import.meta.webpackHot.accept(acceptHMRUpdate(useWorkspacesStore, import.meta.webpackHot));