blob: b0e5d8078601964182299595d9389671a571bb74 [file] [log] [blame]
Dixsie Wolmersc4b87572021-10-07 16:15:50 -05001<template>
2 <page-section :section-title="$t('pageNetwork.staticDns')">
3 <b-row>
4 <b-col lg="6">
Dixsie Wolmersb34349d2021-11-02 22:06:35 -05005 <div class="text-right">
6 <b-button variant="primary" @click="initDnsModal()">
7 <icon-add />
8 {{ $t('pageNetwork.table.addDnsAddress') }}
9 </b-button>
10 </div>
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050011 <b-table
12 responsive="md"
13 hover
14 :fields="dnsTableFields"
15 :items="form.dnsStaticTableItems"
16 :empty-text="$t('global.table.emptyMessage')"
17 class="mb-0"
18 show-empty
19 >
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050020 <template #cell(actions)="{ item, index }">
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050021 <table-row-action
22 v-for="(action, actionIndex) in item.actions"
23 :key="actionIndex"
24 :value="action.value"
25 :title="action.title"
26 :enabled="action.enabled"
27 @click-table-action="onDnsTableAction(action, $event, index)"
28 >
29 <template #icon>
30 <icon-edit v-if="action.value === 'edit'" />
31 <icon-trashcan v-if="action.value === 'delete'" />
32 </template>
33 </table-row-action>
34 </template>
35 </b-table>
36 </b-col>
37 </b-row>
38 </page-section>
39</template>
40
41<script>
42import BVToastMixin from '@/components/Mixins/BVToastMixin';
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050043import IconAdd from '@carbon/icons-vue/es/add--alt/20';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050044import IconEdit from '@carbon/icons-vue/es/edit/20';
45import IconTrashcan from '@carbon/icons-vue/es/trash-can/20';
46import PageSection from '@/components/Global/PageSection';
47import TableRowAction from '@/components/Global/TableRowAction';
48import { mapState } from 'vuex';
Surya Vde23ea22024-07-11 15:19:46 +053049import { useI18n } from 'vue-i18n';
Surya Venkatesan4626aec2024-09-19 15:06:49 +053050import i18n from '@/i18n';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050051
52export default {
53 name: 'DNSTable',
54 components: {
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050055 IconAdd,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050056 IconEdit,
57 IconTrashcan,
58 PageSection,
59 TableRowAction,
60 },
61 mixins: [BVToastMixin],
62 props: {
63 tabIndex: {
64 type: Number,
65 default: 0,
66 },
67 },
68 data() {
69 return {
Surya Vde23ea22024-07-11 15:19:46 +053070 $t: useI18n().t,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050071 form: {
72 dnsStaticTableItems: [],
73 },
74 actions: [
75 {
76 value: 'edit',
Surya Vde23ea22024-07-11 15:19:46 +053077 title: 'global.action.edit',
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050078 },
79 {
80 value: 'delete',
Surya Vde23ea22024-07-11 15:19:46 +053081 title: 'global.action.delete',
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050082 },
83 ],
84 dnsTableFields: [
85 {
86 key: 'address',
Surya Venkatesan4626aec2024-09-19 15:06:49 +053087 label: i18n.global.t('pageNetwork.table.ipAddress'),
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050088 },
89 { key: 'actions', label: '', tdClass: 'text-right' },
90 ],
91 };
92 },
93 computed: {
94 ...mapState('network', ['ethernetData']),
95 },
96 watch: {
97 // Watch for change in tab index
98 tabIndex() {
99 this.getStaticDnsItems();
100 },
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500101 ethernetData() {
102 this.getStaticDnsItems();
103 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500104 },
105 created() {
106 this.getStaticDnsItems();
107 this.$store.dispatch('network/getEthernetData').finally(() => {
108 // Emit initial data fetch complete to parent component
109 this.$root.$emit('network-table-dns-complete');
110 });
111 },
112 methods: {
113 getStaticDnsItems() {
114 const index = this.tabIndex;
115 const dns = this.ethernetData[index].StaticNameServers || [];
116 this.form.dnsStaticTableItems = dns.map((server) => {
117 return {
118 address: server,
119 actions: [
120 {
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500121 value: 'delete',
Surya Vde23ea22024-07-11 15:19:46 +0530122 title: 'pageNetwork.table.deleteDns',
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500123 },
124 ],
125 };
126 });
127 },
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500128 onDnsTableAction(action, $event, index) {
129 if ($event === 'delete') {
130 this.deleteDnsTableRow(index);
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500131 }
132 },
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500133 deleteDnsTableRow(index) {
134 this.form.dnsStaticTableItems.splice(index, 1);
135 const newDnsArray = this.form.dnsStaticTableItems.map((dns) => {
136 return dns.address;
137 });
138 this.$store
139 .dispatch('network/editDnsAddress', newDnsArray)
140 .then((message) => this.successToast(message))
141 .catch(({ message }) => this.errorToast(message));
142 },
143 initDnsModal() {
144 this.$bvModal.show('modal-dns');
145 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500146 },
147};
148</script>