mirror of https://github.com/Fabio286/antares.git
feat: triggers creation
This commit is contained in:
parent
b32132ad84
commit
d695c9f8d2
|
@ -84,7 +84,6 @@ export default {
|
||||||
ConfirmModal
|
ConfirmModal
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
table: String,
|
|
||||||
workspace: Object
|
workspace: Object
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
|
|
|
@ -0,0 +1,144 @@
|
||||||
|
<template>
|
||||||
|
<ConfirmModal
|
||||||
|
:confirm-text="$t('word.confirm')"
|
||||||
|
size="400"
|
||||||
|
@confirm="confirmOptionsChange"
|
||||||
|
@hide="$emit('close')"
|
||||||
|
>
|
||||||
|
<template :slot="'header'">
|
||||||
|
<div class="d-flex">
|
||||||
|
<i class="mdi mdi-24px mdi-plus mr-1" /> {{ $t('message.createNewTrigger') }}
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
<div :slot="'body'">
|
||||||
|
<form class="form-horizontal">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label col-4">
|
||||||
|
{{ $t('word.name') }}
|
||||||
|
</label>
|
||||||
|
<div class="column">
|
||||||
|
<input
|
||||||
|
ref="firstInput"
|
||||||
|
v-model="localTrigger.name"
|
||||||
|
class="form-input"
|
||||||
|
type="text"
|
||||||
|
>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label col-4">
|
||||||
|
{{ $t('word.definer') }}
|
||||||
|
</label>
|
||||||
|
<div class="column">
|
||||||
|
<select
|
||||||
|
v-if="workspace.users.length"
|
||||||
|
v-model="localTrigger.definer"
|
||||||
|
class="form-select"
|
||||||
|
>
|
||||||
|
<option value="">
|
||||||
|
{{ $t('message.currentUser') }}
|
||||||
|
</option>
|
||||||
|
<option
|
||||||
|
v-for="user in workspace.users"
|
||||||
|
:key="`${user.name}@${user.host}`"
|
||||||
|
:value="`\`${user.name}\`@\`${user.host}\``"
|
||||||
|
>
|
||||||
|
{{ user.name }}@{{ user.host }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
<select v-if="!workspace.users.length" class="form-select">
|
||||||
|
<option value="">
|
||||||
|
{{ $t('message.currentUser') }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label col-4">
|
||||||
|
{{ $t('word.table') }}
|
||||||
|
</label>
|
||||||
|
<div class="column">
|
||||||
|
<select v-model="localTrigger.table" class="form-select">
|
||||||
|
<option v-for="table in schemaTables" :key="table.name">
|
||||||
|
{{ table.name }}
|
||||||
|
</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="form-label col-4">
|
||||||
|
{{ $t('word.event') }}
|
||||||
|
</label>
|
||||||
|
<div class="column">
|
||||||
|
<div class="input-group">
|
||||||
|
<select v-model="localTrigger.event1" class="form-select">
|
||||||
|
<option>BEFORE</option>
|
||||||
|
<option>AFTER</option>
|
||||||
|
</select>
|
||||||
|
<select v-model="localTrigger.event2" class="form-select">
|
||||||
|
<option>INSERT</option>
|
||||||
|
<option>UPDATE</option>
|
||||||
|
<option>DELETE</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</ConfirmModal>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import { mapGetters } from 'vuex';
|
||||||
|
import ConfirmModal from '@/components/BaseConfirmModal';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'ModalNewTrigger',
|
||||||
|
components: {
|
||||||
|
ConfirmModal
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
workspace: Object
|
||||||
|
},
|
||||||
|
data () {
|
||||||
|
return {
|
||||||
|
localTrigger: {
|
||||||
|
definer: '',
|
||||||
|
sql: 'BEGIN\r\n\r\nEND',
|
||||||
|
name: '',
|
||||||
|
table: '',
|
||||||
|
event1: 'BEFORE',
|
||||||
|
event2: 'INSERT'
|
||||||
|
},
|
||||||
|
isOptionsChanging: false
|
||||||
|
};
|
||||||
|
},
|
||||||
|
computed: {
|
||||||
|
...mapGetters({
|
||||||
|
selectedWorkspace: 'workspaces/getSelected'
|
||||||
|
}),
|
||||||
|
schema () {
|
||||||
|
return this.workspace.breadcrumbs.schema;
|
||||||
|
},
|
||||||
|
schemaTables () {
|
||||||
|
const schemaTables = this.workspace.structure
|
||||||
|
.filter(schema => schema.name === this.schema)
|
||||||
|
.map(schema => schema.tables);
|
||||||
|
|
||||||
|
return schemaTables.length ? schemaTables[0].filter(table => table.type === 'table') : [];
|
||||||
|
}
|
||||||
|
},
|
||||||
|
mounted () {
|
||||||
|
this.localTrigger.table = this.schemaTables.length ? this.schemaTables[0].name : '';
|
||||||
|
|
||||||
|
setTimeout(() => {
|
||||||
|
this.$refs.firstInput.focus();
|
||||||
|
}, 20);
|
||||||
|
},
|
||||||
|
methods: {
|
||||||
|
confirmOptionsChange () {
|
||||||
|
this.$emit('open-create-trigger-editor', this.localTrigger);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
</script>
|
|
@ -157,7 +157,6 @@ export default {
|
||||||
QueryEditor
|
QueryEditor
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
table: String,
|
|
||||||
workspace: Object
|
workspace: Object
|
||||||
},
|
},
|
||||||
data () {
|
data () {
|
||||||
|
|
|
@ -61,6 +61,12 @@
|
||||||
@close="hideCreateViewModal"
|
@close="hideCreateViewModal"
|
||||||
@open-create-view-editor="openCreateViewEditor"
|
@open-create-view-editor="openCreateViewEditor"
|
||||||
/>
|
/>
|
||||||
|
<ModalNewTrigger
|
||||||
|
v-if="isNewTriggerModal"
|
||||||
|
:workspace="workspace"
|
||||||
|
@close="hideCreateTriggerModal"
|
||||||
|
@open-create-trigger-editor="openCreateTriggerEditor"
|
||||||
|
/>
|
||||||
<DatabaseContext
|
<DatabaseContext
|
||||||
v-if="isDatabaseContext"
|
v-if="isDatabaseContext"
|
||||||
:selected-database="selectedDatabase"
|
:selected-database="selectedDatabase"
|
||||||
|
@ -68,6 +74,7 @@
|
||||||
@close-context="closeDatabaseContext"
|
@close-context="closeDatabaseContext"
|
||||||
@show-create-table-modal="showCreateTableModal"
|
@show-create-table-modal="showCreateTableModal"
|
||||||
@show-create-view-modal="showCreateViewModal"
|
@show-create-view-modal="showCreateViewModal"
|
||||||
|
@show-create-trigger-modal="showCreateTriggerModal"
|
||||||
@reload="refresh"
|
@reload="refresh"
|
||||||
/>
|
/>
|
||||||
<TableContext
|
<TableContext
|
||||||
|
@ -89,9 +96,10 @@
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
import { mapGetters, mapActions } from 'vuex';
|
import { mapGetters, mapActions } from 'vuex';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';// TODO: remove
|
||||||
import Tables from '@/ipc-api/Tables';
|
import Tables from '@/ipc-api/Tables';
|
||||||
import Views from '@/ipc-api/Views';
|
import Views from '@/ipc-api/Views';
|
||||||
|
import Triggers from '@/ipc-api/Triggers';
|
||||||
import WorkspaceConnectPanel from '@/components/WorkspaceConnectPanel';
|
import WorkspaceConnectPanel from '@/components/WorkspaceConnectPanel';
|
||||||
import WorkspaceExploreBarDatabase from '@/components/WorkspaceExploreBarDatabase';
|
import WorkspaceExploreBarDatabase from '@/components/WorkspaceExploreBarDatabase';
|
||||||
import DatabaseContext from '@/components/WorkspaceExploreBarDatabaseContext';
|
import DatabaseContext from '@/components/WorkspaceExploreBarDatabaseContext';
|
||||||
|
@ -100,6 +108,7 @@ import MiscContext from '@/components/WorkspaceExploreBarMiscContext';
|
||||||
import ModalNewDatabase from '@/components/ModalNewDatabase';
|
import ModalNewDatabase from '@/components/ModalNewDatabase';
|
||||||
import ModalNewTable from '@/components/ModalNewTable';
|
import ModalNewTable from '@/components/ModalNewTable';
|
||||||
import ModalNewView from '@/components/ModalNewView';
|
import ModalNewView from '@/components/ModalNewView';
|
||||||
|
import ModalNewTrigger from '@/components/ModalNewTrigger';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'WorkspaceExploreBar',
|
name: 'WorkspaceExploreBar',
|
||||||
|
@ -111,7 +120,8 @@ export default {
|
||||||
MiscContext,
|
MiscContext,
|
||||||
ModalNewDatabase,
|
ModalNewDatabase,
|
||||||
ModalNewTable,
|
ModalNewTable,
|
||||||
ModalNewView
|
ModalNewView,
|
||||||
|
ModalNewTrigger
|
||||||
},
|
},
|
||||||
props: {
|
props: {
|
||||||
connection: Object,
|
connection: Object,
|
||||||
|
@ -120,16 +130,21 @@ export default {
|
||||||
data () {
|
data () {
|
||||||
return {
|
return {
|
||||||
isRefreshing: false,
|
isRefreshing: false,
|
||||||
|
|
||||||
isNewDBModal: false,
|
isNewDBModal: false,
|
||||||
isNewTableModal: false,
|
isNewTableModal: false,
|
||||||
isNewViewModal: false,
|
isNewViewModal: false,
|
||||||
|
isNewTriggerModal: false,
|
||||||
|
|
||||||
localWidth: null,
|
localWidth: null,
|
||||||
isDatabaseContext: false,
|
isDatabaseContext: false,
|
||||||
isTableContext: false,
|
isTableContext: false,
|
||||||
isMiscContext: false,
|
isMiscContext: false,
|
||||||
|
|
||||||
databaseContextEvent: null,
|
databaseContextEvent: null,
|
||||||
tableContextEvent: null,
|
tableContextEvent: null,
|
||||||
miscContextEvent: null,
|
miscContextEvent: null,
|
||||||
|
|
||||||
selectedDatabase: '',
|
selectedDatabase: '',
|
||||||
selectedTable: null,
|
selectedTable: null,
|
||||||
selectedMisc: null
|
selectedMisc: null
|
||||||
|
@ -270,6 +285,29 @@ export default {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
this.addNotification({ status: 'error', message: response });
|
this.addNotification({ status: 'error', message: response });
|
||||||
|
},
|
||||||
|
showCreateTriggerModal () {
|
||||||
|
this.closeDatabaseContext();
|
||||||
|
this.isNewTriggerModal = true;
|
||||||
|
},
|
||||||
|
hideCreateTriggerModal () {
|
||||||
|
this.isNewTriggerModal = false;
|
||||||
|
},
|
||||||
|
async openCreateTriggerEditor (payload) {
|
||||||
|
const params = {
|
||||||
|
uid: this.connection.uid,
|
||||||
|
...payload
|
||||||
|
};
|
||||||
|
|
||||||
|
const { status, response } = await Triggers.createTrigger(params);
|
||||||
|
|
||||||
|
if (status === 'success') {
|
||||||
|
await this.refresh();
|
||||||
|
this.changeBreadcrumbs({ schema: this.selectedDatabase, trigger: payload.name });
|
||||||
|
this.selectTab({ uid: this.workspace.uid, tab: 'prop' });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
this.addNotification({ status: 'error', message: response });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
<div class="context-element" @click="showCreateViewModal">
|
<div class="context-element" @click="showCreateViewModal">
|
||||||
<span class="d-flex"><i class="mdi mdi-18px mdi-table-eye text-light pr-1" /> {{ $t('word.view') }}</span>
|
<span class="d-flex"><i class="mdi mdi-18px mdi-table-eye text-light pr-1" /> {{ $t('word.view') }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="context-element" @click="false">
|
<div class="context-element" @click="showCreateTriggerModal">
|
||||||
<span class="d-flex"><i class="mdi mdi-18px mdi-table-cog text-light pr-1" /> {{ $tc('word.trigger', 1) }}</span>
|
<span class="d-flex"><i class="mdi mdi-18px mdi-table-cog text-light pr-1" /> {{ $tc('word.trigger', 1) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="context-element d-none" @click="false">
|
<div class="context-element d-none" @click="false">
|
||||||
|
@ -99,6 +99,9 @@ export default {
|
||||||
showCreateViewModal () {
|
showCreateViewModal () {
|
||||||
this.$emit('show-create-view-modal');
|
this.$emit('show-create-view-modal');
|
||||||
},
|
},
|
||||||
|
showCreateTriggerModal () {
|
||||||
|
this.$emit('show-create-trigger-modal');
|
||||||
|
},
|
||||||
showDeleteModal () {
|
showDeleteModal () {
|
||||||
this.isDeleteModal = true;
|
this.isDeleteModal = true;
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue