antares/src/renderer/components/WorkspaceExploreBarTableCon...

283 lines
8.6 KiB
Vue
Raw Normal View History

2020-12-03 13:00:54 +01:00
<template>
<BaseContextMenu
:context-event="contextEvent"
@close-context="closeContext"
>
2021-07-15 19:51:18 +02:00
<div
v-if="selectedTable && selectedTable.type === 'table' && customizations.tableSettings"
2021-07-15 19:51:18 +02:00
class="context-element"
2021-07-16 18:52:18 +02:00
@click="openTableSettingTab"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-tune-vertical-variant text-light pr-1" /> {{ $t('word.settings') }}</span>
</div>
<div
v-if="selectedTable && selectedTable.type === 'view' && customizations.viewSettings"
2021-07-16 18:52:18 +02:00
class="context-element"
@click="openViewSettingTab"
2021-07-15 19:51:18 +02:00
>
<span class="d-flex"><i class="mdi mdi-18px mdi-tune-vertical-variant text-light pr-1" /> {{ $t('word.settings') }}</span>
</div>
<div
v-if="selectedTable && selectedTable.type === 'table'"
class="context-element"
@click="duplicateTable"
>
<span class="d-flex"><i class="mdi mdi-18px mdi-table-multiple text-light pr-1" /> {{ $t('message.duplicateTable') }}</span>
</div>
2020-12-26 14:47:15 +01:00
<div
v-if="selectedTable && selectedTable.type === 'table'"
2020-12-26 14:47:15 +01:00
class="context-element"
@click="showEmptyModal"
>
2020-12-03 16:15:10 +01:00
<span class="d-flex"><i class="mdi mdi-18px mdi-table-off text-light pr-1" /> {{ $t('message.emptyTable') }}</span>
2020-12-03 13:00:54 +01:00
</div>
<div class="context-element" @click="showDeleteModal">
2020-12-03 16:15:10 +01:00
<span class="d-flex"><i class="mdi mdi-18px mdi-table-remove text-light pr-1" /> {{ $t('word.delete') }}</span>
2020-12-03 13:00:54 +01:00
</div>
2020-12-03 16:15:10 +01:00
<ConfirmModal
v-if="isEmptyModal"
@confirm="emptyTable"
@hide="hideEmptyModal"
>
<template slot="header">
<div class="d-flex">
<i class="mdi mdi-24px mdi-table-off mr-1" /> <span class="cut-text">{{ $t('message.emptyTable') }}</span>
2020-12-03 16:15:10 +01:00
</div>
</template>
<div slot="body">
<div class="mb-2">
2020-12-26 14:47:15 +01:00
{{ $t('message.emptyCorfirm') }} "<b>{{ selectedTable.name }}</b>"?
2020-12-03 16:15:10 +01:00
</div>
</div>
</ConfirmModal>
2020-12-03 13:00:54 +01:00
<ConfirmModal
v-if="isDeleteModal"
2020-12-03 16:15:10 +01:00
@confirm="deleteTable"
2020-12-03 13:00:54 +01:00
@hide="hideDeleteModal"
>
<template slot="header">
<div class="d-flex">
<i class="mdi mdi-24px mdi-table-remove mr-1" />
<span class="cut-text">{{ selectedTable.type === 'table' ? $t('message.deleteTable') : $t('message.deleteView') }}</span>
2020-12-03 13:00:54 +01:00
</div>
</template>
<div slot="body">
<div class="mb-2">
2020-12-26 14:47:15 +01:00
{{ $t('message.deleteCorfirm') }} "<b>{{ selectedTable.name }}</b>"?
2020-12-03 13:00:54 +01:00
</div>
</div>
</ConfirmModal>
</BaseContextMenu>
</template>
<script>
import { mapGetters, mapActions } from 'vuex';
import BaseContextMenu from '@/components/BaseContextMenu';
import ConfirmModal from '@/components/BaseConfirmModal';
import Tables from '@/ipc-api/Tables';
2020-12-26 14:47:15 +01:00
import Views from '@/ipc-api/Views';
2020-12-03 13:00:54 +01:00
export default {
name: 'WorkspaceExploreBarTableContext',
components: {
BaseContextMenu,
ConfirmModal
},
props: {
contextEvent: MouseEvent,
selectedTable: Object,
selectedSchema: String
2020-12-03 13:00:54 +01:00
},
data () {
return {
2020-12-03 16:15:10 +01:00
isDeleteModal: false,
isEmptyModal: false
2020-12-03 13:00:54 +01:00
};
},
computed: {
...mapGetters({
2020-12-03 16:15:10 +01:00
selectedWorkspace: 'workspaces/getSelected',
getWorkspace: 'workspaces/getWorkspace'
}),
workspace () {
return this.getWorkspace(this.selectedWorkspace);
},
customizations () {
return this.workspace && this.workspace.customizations ? this.workspace.customizations : {};
2020-12-03 16:15:10 +01:00
}
2020-12-03 13:00:54 +01:00
},
methods: {
...mapActions({
2020-12-03 16:15:10 +01:00
addNotification: 'notifications/addNotification',
2021-07-15 19:51:18 +02:00
newTab: 'workspaces/newTab',
2021-07-17 10:46:24 +02:00
removeTabs: 'workspaces/removeTabs',
addLoadingElement: 'workspaces/addLoadingElement',
removeLoadingElement: 'workspaces/removeLoadingElement',
2020-12-03 16:15:10 +01:00
changeBreadcrumbs: 'workspaces/changeBreadcrumbs'
2020-12-03 13:00:54 +01:00
}),
showDeleteModal () {
this.isDeleteModal = true;
},
hideDeleteModal () {
this.isDeleteModal = false;
},
2020-12-03 16:15:10 +01:00
showEmptyModal () {
this.isEmptyModal = true;
2020-12-03 13:00:54 +01:00
},
2020-12-03 16:15:10 +01:00
hideEmptyModal () {
this.isEmptyModal = false;
2020-12-03 13:00:54 +01:00
},
closeContext () {
this.$emit('close-context');
},
2021-07-16 18:52:18 +02:00
openTableSettingTab () {
2021-07-15 19:51:18 +02:00
this.newTab({
uid: this.selectedWorkspace,
2021-07-16 18:52:18 +02:00
elementName: this.selectedTable.name,
2021-07-15 19:51:18 +02:00
schema: this.selectedSchema,
type: 'table-props',
2021-07-16 18:52:18 +02:00
elementType: 'table'
});
this.changeBreadcrumbs({
schema: this.selectedSchema,
table: this.selectedTable.name
});
this.closeContext();
},
openViewSettingTab () {
this.newTab({
uid: this.selectedWorkspace,
elementType: 'table',
elementName: this.selectedTable.name,
schema: this.selectedSchema,
type: 'view-props'
2021-07-15 19:51:18 +02:00
});
this.changeBreadcrumbs({
schema: this.selectedSchema,
2021-07-16 18:52:18 +02:00
view: this.selectedTable.name
2021-07-15 19:51:18 +02:00
});
this.closeContext();
},
async duplicateTable () {
this.closeContext();
this.addLoadingElement({
name: this.selectedTable.name,
schema: this.selectedSchema,
type: 'table'
});
try {
const { status, response } = await Tables.duplicateTable({
uid: this.selectedWorkspace,
table: this.selectedTable.name,
schema: this.selectedSchema
});
if (status === 'success')
this.$emit('reload');
else
this.addNotification({ status: 'error', message: response });
}
catch (err) {
this.addNotification({ status: 'error', message: err.stack });
}
this.removeLoadingElement({
name: this.selectedTable.name,
schema: this.selectedSchema,
type: 'table'
});
},
2020-12-03 16:15:10 +01:00
async emptyTable () {
this.closeContext();
this.addLoadingElement({
name: this.selectedTable.name,
schema: this.selectedSchema,
type: 'table'
});
2020-12-03 13:00:54 +01:00
try {
2020-12-03 16:15:10 +01:00
const { status, response } = await Tables.truncateTable({
2020-12-03 13:00:54 +01:00
uid: this.selectedWorkspace,
table: this.selectedTable.name,
schema: this.selectedSchema
2020-12-03 13:00:54 +01:00
});
if (status === 'success')
2020-12-03 16:15:10 +01:00
this.$emit('reload');
else
this.addNotification({ status: 'error', message: response });
}
catch (err) {
this.addNotification({ status: 'error', message: err.stack });
}
this.removeLoadingElement({
name: this.selectedTable.name,
schema: this.selectedSchema,
type: 'table'
});
2020-12-03 16:15:10 +01:00
},
async deleteTable () {
this.closeContext();
this.addLoadingElement({
name: this.selectedTable.name,
schema: this.selectedSchema,
type: 'table'
});
2020-12-03 16:15:10 +01:00
try {
2020-12-26 14:47:15 +01:00
let res;
if (this.selectedTable.type === 'table') {
res = await Tables.dropTable({
uid: this.selectedWorkspace,
table: this.selectedTable.name,
schema: this.selectedSchema
2020-12-26 14:47:15 +01:00
});
}
else if (this.selectedTable.type === 'view') {
res = await Views.dropView({
uid: this.selectedWorkspace,
view: this.selectedTable.name,
schema: this.selectedSchema
2020-12-26 14:47:15 +01:00
});
}
const { status, response } = res;
2020-12-03 16:15:10 +01:00
if (status === 'success') {
2021-07-17 10:46:24 +02:00
this.removeTabs({
uid: this.selectedWorkspace,
elementName: this.selectedTable.name,
elementType: this.selectedTable.type,
schema: this.selectedSchema
});
2020-12-03 16:15:10 +01:00
2020-12-03 13:00:54 +01:00
this.$emit('reload');
}
else
this.addNotification({ status: 'error', message: response });
}
catch (err) {
this.addNotification({ status: 'error', message: err.stack });
}
this.removeLoadingElement({
name: this.selectedTable.name,
schema: this.selectedSchema,
type: 'table'
});
2020-12-03 13:00:54 +01:00
}
}
};
</script>