blob: 729a7a3c33bb17687d1eb8408c9b929cfd672a90 [file] [log] [blame]
Dixsie Wolmersbb81d552020-02-26 19:52:28 -06001<template>
2 <b-container fluid="xl">
Sandeepa Singhf67f7692021-07-19 18:04:18 +05303 <page-title :description="$t('pageNetwork.pageDescription')" />
Dixsie Wolmersc4b87572021-10-07 16:15:50 -05004 <!-- Global settings for all interfaces -->
5 <network-global-settings />
6 <!-- Interface tabs -->
Dixsie Wolmersb34349d2021-11-02 22:06:35 -05007 <page-section v-if="ethernetData">
Dixsie Wolmersbb81d552020-02-26 19:52:28 -06008 <b-row>
Dixsie Wolmersc4b87572021-10-07 16:15:50 -05009 <b-col>
10 <b-card no-body>
11 <b-tabs
12 active-nav-item-class="font-weight-bold"
13 card
14 content-class="mt-3"
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060015 >
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050016 <b-tab
17 v-for="(data, index) in ethernetData"
18 :key="data.Id"
19 :title="data.Id"
20 @click="getTabIndex(index)"
21 >
22 <!-- Interface settings -->
23 <network-interface-settings :tab-index="tabIndex" />
24 <!-- IPV4 table -->
25 <table-ipv-4 :tab-index="tabIndex" />
26 <!-- Static DNS table -->
27 <table-dns :tab-index="tabIndex" />
28 </b-tab>
29 </b-tabs>
30 </b-card>
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060031 </b-col>
32 </b-row>
33 </page-section>
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050034 <!-- Modals -->
35 <modal-ipv4 :default-gateway="defaultGateway" @ok="saveIpv4Address" />
36 <modal-dns @ok="saveDnsAddress" />
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060037 </b-container>
38</template>
39
40<script>
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060041import BVToastMixin from '@/components/Mixins/BVToastMixin';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050042import DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
Yoshie Muranakad73f4962020-12-09 08:52:23 -080043import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050044import ModalIpv4 from './ModalIpv4.vue';
45import ModalDns from './ModalDns.vue';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050046import NetworkGlobalSettings from './NetworkGlobalSettings.vue';
47import NetworkInterfaceSettings from './NetworkInterfaceSettings.vue';
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060048import PageSection from '@/components/Global/PageSection';
49import PageTitle from '@/components/Global/PageTitle';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050050import TableIpv4 from './TableIpv4.vue';
51import TableDns from './TableDns.vue';
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060052import { mapState } from 'vuex';
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060053
54export default {
Sandeepa Singhf67f7692021-07-19 18:04:18 +053055 name: 'Network',
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060056 components: {
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050057 ModalIpv4,
58 ModalDns,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050059 NetworkGlobalSettings,
60 NetworkInterfaceSettings,
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060061 PageSection,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050062 PageTitle,
63 TableDns,
64 TableIpv4,
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060065 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050066 mixins: [BVToastMixin, DataFormatterMixin, LoadingBarMixin],
Derick Montague602e98a2020-10-21 16:20:00 -050067 beforeRouteLeave(to, from, next) {
68 this.hideLoader();
69 next();
70 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060071 data() {
72 return {
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050073 defaultGateway: '',
Yoshie Muranakad73f4962020-12-09 08:52:23 -080074 loading,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050075 tabIndex: 0,
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060076 };
77 },
78 computed: {
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050079 ...mapState('network', ['ethernetData']),
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060080 },
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050081 watch: {
82 ethernetData() {
83 this.getGateway();
84 },
85 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060086 created() {
87 this.startLoader();
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050088 const globalSettings = new Promise((resolve) => {
89 this.$root.$on('network-global-settings-complete', () => resolve());
90 });
91 const interfaceSettings = new Promise((resolve) => {
92 this.$root.$on('network-interface-settings-complete', () => resolve());
93 });
94 const networkTableDns = new Promise((resolve) => {
95 this.$root.$on('network-table-dns-complete', () => resolve());
96 });
97 const networkTableIpv4 = new Promise((resolve) => {
98 this.$root.$on('network-table-ipv4-complete', () => resolve());
99 });
100 // Combine all child component Promises to indicate
101 // when page data load complete
102 Promise.all([
103 this.$store.dispatch('network/getEthernetData'),
104 globalSettings,
105 interfaceSettings,
106 networkTableDns,
107 networkTableIpv4,
108 ]).finally(() => this.endLoader());
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600109 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600110 methods: {
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500111 getGateway() {
112 this.defaultGateway = this.$store.getters[
113 'network/globalNetworkSettings'
114 ][this.tabIndex].defaultGateway;
115 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500116 getTabIndex(selectedIndex) {
117 this.tabIndex = selectedIndex;
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500118 this.$store.dispatch('network/setSelectedTabIndex', this.tabIndex);
119 this.$store.dispatch(
120 'network/setSelectedTabId',
121 this.ethernetData[selectedIndex].Id
122 );
123 this.defaultGateway = this.$store.getters[
124 'network/globalNetworkSettings'
125 ][this.tabIndex].defaultGateway;
126 },
127 saveIpv4Address(modalFormData) {
128 this.startLoader();
129 this.$store
130 .dispatch('network/saveIpv4Address', modalFormData)
131 .then((message) => this.successToast(message))
132 .catch(({ message }) => this.errorToast(message))
133 .finally(() => this.endLoader());
134 },
135 saveDnsAddress(modalFormData) {
136 this.startLoader();
137 this.$store
138 .dispatch('network/saveDnsAddress', modalFormData)
139 .then((message) => this.successToast(message))
140 .catch(({ message }) => this.errorToast(message))
141 .finally(() => this.endLoader());
Derick Montague602e98a2020-10-21 16:20:00 -0500142 },
143 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600144};
145</script>