From 4288a1fd331f4a28de2e756f898d208a6a6599c4 Mon Sep 17 00:00:00 2001 From: Fabio Date: Thu, 1 Oct 2020 15:08:35 +0200 Subject: [PATCH] feat: databases deletion --- README.md | 2 +- src/main/ipc-handlers/connection.js | 3 +- src/main/ipc-handlers/database.js | 12 +++ src/renderer/components/BaseConfirmModal.vue | 2 +- src/renderer/components/BaseContextMenu.vue | 1 + src/renderer/components/SettingBarContext.vue | 6 +- .../components/WorkspaceExploreBar.vue | 29 +++++- .../WorkspaceExploreBarDatabase.vue | 10 +- .../WorkspaceExploreBarDatabaseContext.vue | 97 +++++++++++++++++++ .../components/WorkspaceQueryTableContext.vue | 2 +- src/renderer/i18n/ar-SA.js | 2 +- src/renderer/i18n/en-US.js | 6 +- src/renderer/i18n/es-ES.js | 2 +- src/renderer/i18n/it-IT.js | 6 +- src/renderer/ipc-api/Database.js | 4 + 15 files changed, 168 insertions(+), 16 deletions(-) create mode 100644 src/renderer/components/WorkspaceExploreBarDatabaseContext.vue diff --git a/README.md b/README.md index 67efcc6b..7cf86a1c 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ My target is to support as many databases as possible, and all major operating s Why am I developing an SQL client when there are a lot of them on the market? The main goal is to develop a totally free, cross platform and open source alternative, empowered by JavaScript's ecosystem. -An application created with minimalism and semplicity in mind, with features in the righ places, not hundreds of tiny buttons or submenu. +An application created with minimalism and semplicity in mind, with features in the right places, not hundreds of tiny buttons or submenu. ## How to contribute diff --git a/src/main/ipc-handlers/connection.js b/src/main/ipc-handlers/connection.js index dc5c5095..f029f7d0 100644 --- a/src/main/ipc-handlers/connection.js +++ b/src/main/ipc-handlers/connection.js @@ -39,7 +39,8 @@ export default connections => { port: +conn.port, user: conn.user, password: conn.password - } + }, + poolSize: 1 }); try { diff --git a/src/main/ipc-handlers/database.js b/src/main/ipc-handlers/database.js index ee3387c2..d273b992 100644 --- a/src/main/ipc-handlers/database.js +++ b/src/main/ipc-handlers/database.js @@ -14,6 +14,18 @@ export default connections => { } }); + ipcMain.handle('delete-database', async (event, params) => { + try { + const query = `DROP DATABASE \`${params.database}\``; + await connections[params.uid].raw(query); + + return { status: 'success' }; + } + catch (err) { + return { status: 'error', response: err.toString() }; + } + }); + ipcMain.handle('get-structure', async (event, uid) => { try { const structure = await connections[uid].getStructure(); diff --git a/src/renderer/components/BaseConfirmModal.vue b/src/renderer/components/BaseConfirmModal.vue index 101b41a0..37cbaf7f 100644 --- a/src/renderer/components/BaseConfirmModal.vue +++ b/src/renderer/components/BaseConfirmModal.vue @@ -27,7 +27,7 @@ @@ -46,6 +47,13 @@ @close="hideNewDBModal" @reload="refresh" /> + @@ -54,6 +62,7 @@ import { mapGetters, mapActions } from 'vuex'; import _ from 'lodash'; import WorkspaceConnectPanel from '@/components/WorkspaceConnectPanel'; import WorkspaceExploreBarDatabase from '@/components/WorkspaceExploreBarDatabase'; +import DatabaseContext from '@/components/WorkspaceExploreBarDatabaseContext'; import ModalNewDB from '@/components/ModalNewDB'; export default { @@ -61,6 +70,7 @@ export default { components: { WorkspaceConnectPanel, WorkspaceExploreBarDatabase, + DatabaseContext, ModalNewDB }, props: { @@ -71,7 +81,13 @@ export default { return { isRefreshing: false, isNewDBModal: false, - localWidth: null + localWidth: null, + isDatabaseContext: false, + isTableContext: false, + databaseContextEvent: null, + tableContextEvent: null, + selectedDatabase: '', + selectedTable: '' }; }, computed: { @@ -115,6 +131,7 @@ export default { changeExplorebarSize: 'settings/changeExplorebarSize' }), async refresh () { + console.log('refresh'); if (!this.isRefreshing) { this.isRefreshing = true; await this.refreshStructure(this.connection.uid); @@ -136,6 +153,16 @@ export default { }, hideNewDBModal () { this.isNewDBModal = false; + }, + openDatabaseContext (payload) { + this.isTableContext = false; + this.selectedDatabase = payload.database; + this.databaseContextEvent = payload.event; + this.isDatabaseContext = true; + }, + closeDatabaseContext () { + this.isDatabaseContext = false; + this.selectedDatabase = ''; } } }; diff --git a/src/renderer/components/WorkspaceExploreBarDatabase.vue b/src/renderer/components/WorkspaceExploreBarDatabase.vue index b2e642ef..ee0c4600 100644 --- a/src/renderer/components/WorkspaceExploreBarDatabase.vue +++ b/src/renderer/components/WorkspaceExploreBarDatabase.vue @@ -4,6 +4,7 @@ class="accordion-header database-name pb-0" :class="{'text-bold': breadcrumbs.schema === database.name}" @click="changeBreadcrumbs({schema: database.name, table:null})" + @contextmenu.prevent="showDatabaseContext($event, database.name)" > @@ -18,6 +19,7 @@ class="menu-item" :class="{'text-bold': breadcrumbs.schema === database.name && breadcrumbs.table === table.TABLE_NAME}" @click="changeBreadcrumbs({schema: database.name, table: table.TABLE_NAME})" + @contextmenu.prevent="showTableContext($event, table.TABLE_NAME)" > @@ -50,7 +52,13 @@ export default { methods: { ...mapActions({ changeBreadcrumbs: 'workspaces/changeBreadcrumbs' - }) + }), + showDatabaseContext (event, database) { + this.$emit('show-database-context', { event, database }); + }, + showTableContext (table) { + this.$emit('show-table-context', table); + } } }; diff --git a/src/renderer/components/WorkspaceExploreBarDatabaseContext.vue b/src/renderer/components/WorkspaceExploreBarDatabaseContext.vue new file mode 100644 index 00000000..31bb32e8 --- /dev/null +++ b/src/renderer/components/WorkspaceExploreBarDatabaseContext.vue @@ -0,0 +1,97 @@ + + + diff --git a/src/renderer/components/WorkspaceQueryTableContext.vue b/src/renderer/components/WorkspaceQueryTableContext.vue index b9d026f3..139756b5 100644 --- a/src/renderer/components/WorkspaceQueryTableContext.vue +++ b/src/renderer/components/WorkspaceQueryTableContext.vue @@ -4,7 +4,7 @@ @close-context="closeContext" >
- {{ $tc('message.deleteRows', selectedRows.length) }} + {{ $tc('message.deleteRows', selectedRows.length) }}