blob: b0e5d8078601964182299595d9389671a571bb74 [file] [log] [blame]
<template>
<page-section :section-title="$t('pageNetwork.staticDns')">
<b-row>
<b-col lg="6">
<div class="text-right">
<b-button variant="primary" @click="initDnsModal()">
<icon-add />
{{ $t('pageNetwork.table.addDnsAddress') }}
</b-button>
</div>
<b-table
responsive="md"
hover
:fields="dnsTableFields"
:items="form.dnsStaticTableItems"
:empty-text="$t('global.table.emptyMessage')"
class="mb-0"
show-empty
>
<template #cell(actions)="{ item, index }">
<table-row-action
v-for="(action, actionIndex) in item.actions"
:key="actionIndex"
:value="action.value"
:title="action.title"
:enabled="action.enabled"
@click-table-action="onDnsTableAction(action, $event, index)"
>
<template #icon>
<icon-edit v-if="action.value === 'edit'" />
<icon-trashcan v-if="action.value === 'delete'" />
</template>
</table-row-action>
</template>
</b-table>
</b-col>
</b-row>
</page-section>
</template>
<script>
import BVToastMixin from '@/components/Mixins/BVToastMixin';
import IconAdd from '@carbon/icons-vue/es/add--alt/20';
import IconEdit from '@carbon/icons-vue/es/edit/20';
import IconTrashcan from '@carbon/icons-vue/es/trash-can/20';
import PageSection from '@/components/Global/PageSection';
import TableRowAction from '@/components/Global/TableRowAction';
import { mapState } from 'vuex';
import { useI18n } from 'vue-i18n';
import i18n from '@/i18n';
export default {
name: 'DNSTable',
components: {
IconAdd,
IconEdit,
IconTrashcan,
PageSection,
TableRowAction,
},
mixins: [BVToastMixin],
props: {
tabIndex: {
type: Number,
default: 0,
},
},
data() {
return {
$t: useI18n().t,
form: {
dnsStaticTableItems: [],
},
actions: [
{
value: 'edit',
title: 'global.action.edit',
},
{
value: 'delete',
title: 'global.action.delete',
},
],
dnsTableFields: [
{
key: 'address',
label: i18n.global.t('pageNetwork.table.ipAddress'),
},
{ key: 'actions', label: '', tdClass: 'text-right' },
],
};
},
computed: {
...mapState('network', ['ethernetData']),
},
watch: {
// Watch for change in tab index
tabIndex() {
this.getStaticDnsItems();
},
ethernetData() {
this.getStaticDnsItems();
},
},
created() {
this.getStaticDnsItems();
this.$store.dispatch('network/getEthernetData').finally(() => {
// Emit initial data fetch complete to parent component
this.$root.$emit('network-table-dns-complete');
});
},
methods: {
getStaticDnsItems() {
const index = this.tabIndex;
const dns = this.ethernetData[index].StaticNameServers || [];
this.form.dnsStaticTableItems = dns.map((server) => {
return {
address: server,
actions: [
{
value: 'delete',
title: 'pageNetwork.table.deleteDns',
},
],
};
});
},
onDnsTableAction(action, $event, index) {
if ($event === 'delete') {
this.deleteDnsTableRow(index);
}
},
deleteDnsTableRow(index) {
this.form.dnsStaticTableItems.splice(index, 1);
const newDnsArray = this.form.dnsStaticTableItems.map((dns) => {
return dns.address;
});
this.$store
.dispatch('network/editDnsAddress', newDnsArray)
.then((message) => this.successToast(message))
.catch(({ message }) => this.errorToast(message));
},
initDnsModal() {
this.$bvModal.show('modal-dns');
},
},
};
</script>