blob: 7a2e014c2186671b90640c4ea690742bd42caf05 [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 Wolmers12dc20c2021-12-03 14:29:26 -06007 <page-section v-show="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" />
Sean Zhangdb47b7e2024-06-12 10:28:41 +030026 <!-- IPV6 table -->
27 <table-ipv-6 :tab-index="tabIndex" />
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050028 <!-- Static DNS table -->
29 <table-dns :tab-index="tabIndex" />
30 </b-tab>
31 </b-tabs>
32 </b-card>
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060033 </b-col>
34 </b-row>
35 </page-section>
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050036 <!-- Modals -->
37 <modal-ipv4 :default-gateway="defaultGateway" @ok="saveIpv4Address" />
Sean Zhangdb47b7e2024-06-12 10:28:41 +030038 <modal-ipv6 @ok="saveIpv6Address" />
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050039 <modal-dns @ok="saveDnsAddress" />
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060040 <modal-hostname :hostname="currentHostname" @ok="saveSettings" />
41 <modal-mac-address :mac-address="currentMacAddress" @ok="saveSettings" />
Sean Zhangdb47b7e2024-06-12 10:28:41 +030042 <modal-default-gateway
43 :default-gateway="ipv6DefaultGateway"
44 @ok="saveSettings"
45 />
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060046 </b-container>
47</template>
48
49<script>
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060050import BVToastMixin from '@/components/Mixins/BVToastMixin';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050051import DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
Yoshie Muranakad73f4962020-12-09 08:52:23 -080052import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060053import ModalMacAddress from './ModalMacAddress.vue';
Sean Zhangdb47b7e2024-06-12 10:28:41 +030054import ModalDefaultGateway from './ModalDefaultGateway.vue';
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060055import ModalHostname from './ModalHostname.vue';
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050056import ModalIpv4 from './ModalIpv4.vue';
Sean Zhangdb47b7e2024-06-12 10:28:41 +030057import ModalIpv6 from './ModalIpv6.vue';
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050058import ModalDns from './ModalDns.vue';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050059import NetworkGlobalSettings from './NetworkGlobalSettings.vue';
60import NetworkInterfaceSettings from './NetworkInterfaceSettings.vue';
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060061import PageSection from '@/components/Global/PageSection';
62import PageTitle from '@/components/Global/PageTitle';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050063import TableIpv4 from './TableIpv4.vue';
Sean Zhangdb47b7e2024-06-12 10:28:41 +030064import TableIpv6 from './TableIpv6.vue';
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050065import TableDns from './TableDns.vue';
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060066import { mapState } from 'vuex';
Surya Vde23ea22024-07-11 15:19:46 +053067import { useI18n } from 'vue-i18n';
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060068
69export default {
Sandeepa Singhf67f7692021-07-19 18:04:18 +053070 name: 'Network',
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060071 components: {
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060072 ModalHostname,
73 ModalMacAddress,
Sean Zhangdb47b7e2024-06-12 10:28:41 +030074 ModalDefaultGateway,
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050075 ModalIpv4,
Sean Zhangdb47b7e2024-06-12 10:28:41 +030076 ModalIpv6,
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050077 ModalDns,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050078 NetworkGlobalSettings,
79 NetworkInterfaceSettings,
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060080 PageSection,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050081 PageTitle,
82 TableDns,
83 TableIpv4,
Sean Zhangdb47b7e2024-06-12 10:28:41 +030084 TableIpv6,
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060085 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050086 mixins: [BVToastMixin, DataFormatterMixin, LoadingBarMixin],
Derick Montague602e98a2020-10-21 16:20:00 -050087 beforeRouteLeave(to, from, next) {
88 this.hideLoader();
89 next();
90 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -060091 data() {
92 return {
Surya Vde23ea22024-07-11 15:19:46 +053093 $t: useI18n().t,
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -060094 currentHostname: '',
95 currentMacAddress: '',
Dixsie Wolmersb34349d2021-11-02 22:06:35 -050096 defaultGateway: '',
Sean Zhangdb47b7e2024-06-12 10:28:41 +030097 ipv6DefaultGateway: '',
Yoshie Muranakad73f4962020-12-09 08:52:23 -080098 loading,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -050099 tabIndex: 0,
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600100 };
101 },
102 computed: {
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500103 ...mapState('network', ['ethernetData']),
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600104 },
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500105 watch: {
106 ethernetData() {
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600107 this.getModalInfo();
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500108 },
109 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600110 created() {
111 this.startLoader();
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500112 const globalSettings = new Promise((resolve) => {
113 this.$root.$on('network-global-settings-complete', () => resolve());
114 });
115 const interfaceSettings = new Promise((resolve) => {
116 this.$root.$on('network-interface-settings-complete', () => resolve());
117 });
118 const networkTableDns = new Promise((resolve) => {
119 this.$root.$on('network-table-dns-complete', () => resolve());
120 });
121 const networkTableIpv4 = new Promise((resolve) => {
122 this.$root.$on('network-table-ipv4-complete', () => resolve());
123 });
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300124 const networkTableIpv6 = new Promise((resolve) => {
125 this.$root.$on('network-table-ipv6-complete', () => resolve());
126 });
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500127 // Combine all child component Promises to indicate
128 // when page data load complete
129 Promise.all([
130 this.$store.dispatch('network/getEthernetData'),
131 globalSettings,
132 interfaceSettings,
133 networkTableDns,
134 networkTableIpv4,
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300135 networkTableIpv6,
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500136 ]).finally(() => this.endLoader());
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600137 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600138 methods: {
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600139 getModalInfo() {
Ed Tanous81323992024-02-27 11:26:24 -0800140 this.defaultGateway =
141 this.$store.getters['network/globalNetworkSettings'][
142 this.tabIndex
143 ].defaultGateway;
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600144
Ed Tanous81323992024-02-27 11:26:24 -0800145 this.currentHostname =
146 this.$store.getters['network/globalNetworkSettings'][
147 this.tabIndex
148 ].hostname;
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600149
Ed Tanous81323992024-02-27 11:26:24 -0800150 this.currentMacAddress =
151 this.$store.getters['network/globalNetworkSettings'][
152 this.tabIndex
153 ].macAddress;
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300154 this.ipv6DefaultGateway =
155 this.$store.getters['network/globalNetworkSettings'][
156 this.tabIndex
157 ].ipv6DefaultGateway;
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500158 },
Dixsie Wolmersc4b87572021-10-07 16:15:50 -0500159 getTabIndex(selectedIndex) {
160 this.tabIndex = selectedIndex;
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500161 this.$store.dispatch('network/setSelectedTabIndex', this.tabIndex);
162 this.$store.dispatch(
163 'network/setSelectedTabId',
Ed Tanous81323992024-02-27 11:26:24 -0800164 this.ethernetData[selectedIndex].Id,
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500165 );
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600166 this.getModalInfo();
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500167 },
168 saveIpv4Address(modalFormData) {
169 this.startLoader();
170 this.$store
171 .dispatch('network/saveIpv4Address', modalFormData)
172 .then((message) => this.successToast(message))
173 .catch(({ message }) => this.errorToast(message))
174 .finally(() => this.endLoader());
175 },
Sean Zhangdb47b7e2024-06-12 10:28:41 +0300176 saveIpv6Address(modalFormData) {
177 this.startLoader();
178 this.$store
179 .dispatch('network/saveIpv6Address', modalFormData)
180 .then((message) => this.successToast(message))
181 .catch(({ message }) => this.errorToast(message))
182 .finally(() => this.endLoader());
183 },
Dixsie Wolmersb34349d2021-11-02 22:06:35 -0500184 saveDnsAddress(modalFormData) {
185 this.startLoader();
186 this.$store
187 .dispatch('network/saveDnsAddress', modalFormData)
188 .then((message) => this.successToast(message))
189 .catch(({ message }) => this.errorToast(message))
190 .finally(() => this.endLoader());
Derick Montague602e98a2020-10-21 16:20:00 -0500191 },
Dixsie Wolmers12dc20c2021-12-03 14:29:26 -0600192 saveSettings(modalFormData) {
193 this.startLoader();
194 this.$store
195 .dispatch('network/saveSettings', modalFormData)
196 .then((message) => this.successToast(message))
197 .catch(({ message }) => this.errorToast(message))
198 .finally(() => this.endLoader());
199 },
Derick Montague602e98a2020-10-21 16:20:00 -0500200 },
Dixsie Wolmersbb81d552020-02-26 19:52:28 -0600201};
202</script>