From 96c8a2886d131b22b6fb9161a5c5b97610cab2e5 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 4 Jul 2022 13:22:44 +0800 Subject: [PATCH 1/5] refactor: add toast message after successful table deletion --- packages/nc-gui/components/project/Table.vue | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/nc-gui/components/project/Table.vue b/packages/nc-gui/components/project/Table.vue index 62b7f88e22..266a800f93 100644 --- a/packages/nc-gui/components/project/Table.vue +++ b/packages/nc-gui/components/project/Table.vue @@ -143,6 +143,7 @@ export default { key: this.deleteId, value: null }) + this.$toast.info(`Deleted table ${this.nodes.table_name} successfully`).goAway(3000) } catch (e) { const msg = await this._extractSdkResponseErrorMsg(e) this.$toast.error(msg).goAway(3000) From d450e3b7a178fd33ab12464bbe2539b1afce5422 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 4 Jul 2022 13:23:47 +0800 Subject: [PATCH 2/5] enhancement: delete table on tree view --- .../nc-gui/components/ProjectTreeView.vue | 89 ++++++++++++++++++- 1 file changed, 88 insertions(+), 1 deletion(-) diff --git a/packages/nc-gui/components/ProjectTreeView.vue b/packages/nc-gui/components/ProjectTreeView.vue index dda35fa017..fdfebf05ad 100644 --- a/packages/nc-gui/components/ProjectTreeView.vue +++ b/packages/nc-gui/components/ProjectTreeView.vue @@ -409,9 +409,18 @@ + + + + mdi-delete-outline + + + + Delete + + - @@ -769,6 +778,13 @@ :heading="selectedNodeForDelete.heading" type="error" /> + c.uidt === UITypes.LinkToAnotherRecord) + + if (relationColumns.length) { + const refColMsgs = await Promise.all(relationColumns.map(async(c, i) => { + const refMeta = await this.$store.dispatch('meta/ActLoadMeta', { id: c.colOptions.fk_related_model_id }) + return `${i + 1}. ${c.title} is a LinkToAnotherRecord of ${(refMeta && refMeta.title) || c.title}` + })) + this.$toast.info(`
Unable to delete tables because of the following. +

${refColMsgs.join('
')}

+ Delete them & try again
+ `).goAway(10000) + this.dialogDeleteTable.dialogShow = false + return + } + + await this.$api.dbTable.delete(id) + + this.removeTableTab({ + env: nodes.env, + dbAlias: nodes.dbAlias, + table_name: nodes.table_name + }) + await this.loadTablesFromParentTreeNode({ + _nodes: { + ...nodes + } + }) + + this.$store.commit('meta/MutMeta', { + key: nodes.table_name, + value: null + }) + this.$store.commit('meta/MutMeta', { + key: id, + value: null + }) + + this.$toast.info(`Deleted table ${nodes.table_name} successfully`).goAway(3000) + } catch (e) { + const msg = await this._extractSdkResponseErrorMsg(e) + this.$toast.error(msg).goAway(3000) + } + this.dialogDeleteTable.dialogShow = false + this.$e('a:table:delete') + } + }, /* settingsTabAdd() { const tabIndex = this.tabs.findIndex(el => el.key === `projectSettings`); if (tabIndex !== -1) { @@ -1189,6 +1275,7 @@ export default { "project/loadProceduresFromParentTreeNode", removeTabsByName: "tabs/removeTabsByName", clearProjects: "project/clearProjects", + removeTableTab: 'tabs/removeTableTab', }), async addTab(item, open, leaf) { // console.log("addtab item", item, open, leaf); From 37a0696f5b20e9164d9118c314226ca114c54e4f Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Mon, 4 Jul 2022 13:39:42 +0800 Subject: [PATCH 3/5] fix: use dialogDeleteTable tableName --- packages/nc-gui/components/ProjectTreeView.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nc-gui/components/ProjectTreeView.vue b/packages/nc-gui/components/ProjectTreeView.vue index fdfebf05ad..e39fea46d6 100644 --- a/packages/nc-gui/components/ProjectTreeView.vue +++ b/packages/nc-gui/components/ProjectTreeView.vue @@ -783,7 +783,7 @@ type="error" :actions-mtd="deleteTable" :dialog-show="dialogDeleteTable.dialogShow" - :heading="`${dialogDeleteTable.heading} ${dialogDeleteTable.nodes.table_name}`" + :heading="`${dialogDeleteTable.heading} ${dialogDeleteTable.tableName}`" /> Date: Mon, 4 Jul 2022 13:47:50 +0800 Subject: [PATCH 4/5] enhancement: enable right click to delete table --- .../nc-gui/components/ProjectTreeView.vue | 36 +++---------------- packages/nc-gui/helpers/rightClickOptions.js | 2 +- 2 files changed, 6 insertions(+), 32 deletions(-) diff --git a/packages/nc-gui/components/ProjectTreeView.vue b/packages/nc-gui/components/ProjectTreeView.vue index e39fea46d6..4839be1b97 100644 --- a/packages/nc-gui/components/ProjectTreeView.vue +++ b/packages/nc-gui/components/ProjectTreeView.vue @@ -1096,11 +1096,11 @@ export default { openLink(link) { window.open(link, "_blank"); }, - async checkAndDeleteTable(table) { + async checkAndDeleteTable(table, action = 'showDialog') { this.dialogDeleteTable.tableName = table.table_name this.dialogDeleteTable.nodes = table._nodes this.dialogDeleteTable.id = table.id - await this.deleteTable('showDialog') + await this.deleteTable(action) this.$e('c:table:delete') }, async deleteTable(action = '') { @@ -1879,7 +1879,7 @@ export default { this.selectedNodeForDelete = { dialog: true, item: item, - heading: `Click Submit to Delete The ${item._nodes.type}`, + heading: `Click Submit to Delete The ${item._nodes.type}: ${item.name}`, }; } else if (action === "hideDialog") { this.selectedNodeForDelete = { @@ -1890,34 +1890,8 @@ export default { } else { item = this.selectedNodeForDelete.item; if (item._nodes.type === "table") { - const result = await this.$store.dispatch("sqlMgr/ActSqlOp", [ - { - env: item._nodes.env, - dbAlias: item._nodes.dbAlias, - }, - "columnList", - { - table_name: item._nodes.table_name, - }, - ]); - - await this.sqlMgr.sqlOpPlus( - { - env: item._nodes.env, - dbAlias: item._nodes.dbAlias, - }, - "tableDelete", - { - table_name: item._nodes.table_name, - columns: columns.data.list, - } - ); - await this.loadTablesFromParentTreeNode({ - _nodes: { - ...item._nodes, - }, - }); - this.$toast.success("Table deleted successfully").goAway(3000); + await this.checkAndDeleteTable(item, '') + } else if (item._nodes.type === "view") { const view = await this.$store.dispatch("sqlMgr/ActSqlOp", [ { diff --git a/packages/nc-gui/helpers/rightClickOptions.js b/packages/nc-gui/helpers/rightClickOptions.js index 6efb42a43e..644c6ca3e0 100644 --- a/packages/nc-gui/helpers/rightClickOptions.js +++ b/packages/nc-gui/helpers/rightClickOptions.js @@ -61,7 +61,7 @@ export default { }, table: { 'Table Rename': 'ENV_DB_TABLES_RENAME', - // "Table Delete": "ENV_DB_TABLES_DELETE", + "Table Delete": "ENV_DB_TABLES_DELETE", // d1: null, // "Send to SQL Editor": { // 'Copy To Clipboard': { From 1e363637b824a6d88dae30dc756834658c53ee46 Mon Sep 17 00:00:00 2001 From: Wing-Kam Wong Date: Wed, 6 Jul 2022 10:48:06 +0800 Subject: [PATCH 5/5] fix: table_name -> title --- packages/nc-gui/components/ProjectTreeView.vue | 5 ++--- packages/nc-gui/components/project/Table.vue | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/packages/nc-gui/components/ProjectTreeView.vue b/packages/nc-gui/components/ProjectTreeView.vue index 4839be1b97..4f69d6443a 100644 --- a/packages/nc-gui/components/ProjectTreeView.vue +++ b/packages/nc-gui/components/ProjectTreeView.vue @@ -1097,7 +1097,7 @@ export default { window.open(link, "_blank"); }, async checkAndDeleteTable(table, action = 'showDialog') { - this.dialogDeleteTable.tableName = table.table_name + this.dialogDeleteTable.tableName = table.title this.dialogDeleteTable.nodes = table._nodes this.dialogDeleteTable.id = table.id await this.deleteTable(action) @@ -1150,8 +1150,7 @@ export default { key: id, value: null }) - - this.$toast.info(`Deleted table ${nodes.table_name} successfully`).goAway(3000) + this.$toast.info(`Deleted table ${nodes.title} successfully`).goAway(3000) } catch (e) { const msg = await this._extractSdkResponseErrorMsg(e) this.$toast.error(msg).goAway(3000) diff --git a/packages/nc-gui/components/project/Table.vue b/packages/nc-gui/components/project/Table.vue index 266a800f93..5bd46ab9d9 100644 --- a/packages/nc-gui/components/project/Table.vue +++ b/packages/nc-gui/components/project/Table.vue @@ -143,7 +143,7 @@ export default { key: this.deleteId, value: null }) - this.$toast.info(`Deleted table ${this.nodes.table_name} successfully`).goAway(3000) + this.$toast.info(`Deleted table ${this.nodes.title} successfully`).goAway(3000) } catch (e) { const msg = await this._extractSdkResponseErrorMsg(e) this.$toast.error(msg).goAway(3000)