1
1
mirror of https://github.com/Fabio286/antares.git synced 2025-06-05 21:59:22 +02:00

Delete rows

This commit is contained in:
2020-07-23 19:10:14 +02:00
parent 67f55fbeb9
commit fdf5bef5ad
10 changed files with 126 additions and 49 deletions

View File

@ -35,6 +35,7 @@
:results="results"
:fields="resultsFields"
@updateField="updateField"
@deleteSelected="deleteSelected"
/>
</div>
</div>
@ -46,6 +47,7 @@ import Structure from '@/ipc-api/Structure';
import QueryEditor from '@/components/QueryEditor';
import WorkspaceQueryTable from '@/components/WorkspaceQueryTable';
import { mapGetters, mapActions } from 'vuex';
import tableTabs from '@/mixins/tableTabs';
export default {
name: 'WorkspaceQueryTab',
@ -53,6 +55,7 @@ export default {
QueryEditor,
WorkspaceQueryTable
},
mixins: [tableTabs],
props: {
connection: Object
},
@ -140,25 +143,6 @@ export default {
}
this.isQuering = false;
},
async updateField (payload) {
const params = {
uid: this.connection.uid,
schema: this.workspace.breadcrumbs.schema,
table: this.workspace.breadcrumbs.table,
...payload
};
try {
const { status, response } = await Structure.updateTableCell(params);
if (status === 'success')
this.$refs.queryTable.applyUpdate(payload);
else
this.addNotification({ status: 'error', message: response });
}
catch (err) {
this.addNotification({ status: 'error', message: err.stack });
}
}
}
};

View File

@ -4,6 +4,7 @@
v-if="isContext"
:context-event="contextEvent"
:selected-rows="selectedRows"
@deleteSelected="deleteSelected"
@closeContext="isContext = false"
/>
<BaseVirtualScroll
@ -143,7 +144,7 @@ export default {
return 'UNKNOWN ' + key;
}
},
resizeResults (e) {
resizeResults () {
if (this.$refs.resultTable) {
const el = this.$refs.resultTable.$el;
const footer = document.getElementById('footer');
@ -152,8 +153,12 @@ export default {
const size = window.innerHeight - el.getBoundingClientRect().top - footer.offsetHeight;
this.resultsSize = size;
}
this.$refs.resultTable.updateWindow();
}
},
refreshScroller () {
this.resizeResults();
},
updateField (payload, id) {
if (!this.primaryField)
this.addNotification({ status: 'warning', message: this.$t('message.unableEditFieldWithoutPrimary') });
@ -166,6 +171,18 @@ export default {
this.$emit('updateField', params);
}
},
deleteSelected () {
if (!this.primaryField)
this.addNotification({ status: 'warning', message: this.$t('message.unableEditFieldWithoutPrimary') });
else {
const rowIDs = this.localResults.filter(row => this.selectedRows.includes(row._id)).map(row => row[this.primaryField.name]);
const params = {
primary: this.primaryField.name,
rows: rowIDs
};
this.$emit('deleteSelected', params);
}
},
applyUpdate (params) {
const { primary, id, field, content } = params;
this.localResults = this.localResults.map(row => {

View File

@ -1,21 +1,25 @@
<template>
<BaseContextMenu
:context-event="contextEvent"
@closeContext="$emit('closeContext')"
@closeContext="closeContext"
>
<div class="context-element" @click="$emit('editCell')">
<i class="material-icons md-18 text-light pr-1">edit</i> {{ $t('message.editCell') }}
</div>
<div class="context-element" @click="showConfirmModal">
<i class="material-icons md-18 text-light pr-1">delete</i> {{ $tc('message.deleteRows', selectedRows.length) }}
</div>
<ConfirmModal
v-if="isConfirmModal"
@confirm="deleteConnection()"
@confirm="deleteRows()"
@hide="hideConfirmModal"
>
<!-- -->
<template :slot="'header'">
{{ $tc('message.deleteRows', selectedRows.length) }}
</template>
<div :slot="'body'">
<div class="mb-2">
{{ $tc('message.confirmToDeleteRows', selectedRows.length) }}
</div>
</div>
</ConfirmModal>
</BaseContextMenu>
</template>
@ -52,6 +56,13 @@ export default {
},
hideConfirmModal () {
this.isConfirmModal = false;
},
closeContext () {
this.$emit('closeContext');
},
deleteRows () {
this.$emit('deleteSelected');
this.closeContext();
}
}
};

View File

@ -33,6 +33,7 @@
:results="results"
:fields="resultsFields"
@updateField="updateField"
@deleteSelected="deleteSelected"
/>
</div>
</div>
@ -42,12 +43,14 @@
import Structure from '@/ipc-api/Structure';
import WorkspaceQueryTable from '@/components/WorkspaceQueryTable';
import { mapGetters, mapActions } from 'vuex';
import tableTabs from '@/mixins/tableTabs';
export default {
name: 'WorkspaceTableTab',
components: {
WorkspaceQueryTable
},
mixins: [tableTabs],
props: {
connection: Object,
table: String
@ -137,25 +140,6 @@ export default {
}
this.isQuering = false;
},
async updateField (payload) {
const params = {
uid: this.connection.uid,
schema: this.workspace.breadcrumbs.schema,
table: this.workspace.breadcrumbs.table,
...payload
};
try {
const { status, response } = await Structure.updateTableCell(params);
if (status === 'success')
this.$refs.queryTable.applyUpdate(payload);
else
this.addNotification({ status: 'error', message: response });
}
catch (err) {
this.addNotification({ status: 'error', message: err.stack });
}
}
}
};