blob: 7a2e014c2186671b90640c4ea690742bd42caf05 [file] [log] [blame]
<template>
<b-container fluid="xl">
<page-title :description="$t('pageNetwork.pageDescription')" />
<!-- Global settings for all interfaces -->
<network-global-settings />
<!-- Interface tabs -->
<page-section v-show="ethernetData">
<b-row>
<b-col>
<b-card no-body>
<b-tabs
active-nav-item-class="font-weight-bold"
card
content-class="mt-3"
>
<b-tab
v-for="(data, index) in ethernetData"
:key="data.Id"
:title="data.Id"
@click="getTabIndex(index)"
>
<!-- Interface settings -->
<network-interface-settings :tab-index="tabIndex" />
<!-- IPV4 table -->
<table-ipv-4 :tab-index="tabIndex" />
<!-- IPV6 table -->
<table-ipv-6 :tab-index="tabIndex" />
<!-- Static DNS table -->
<table-dns :tab-index="tabIndex" />
</b-tab>
</b-tabs>
</b-card>
</b-col>
</b-row>
</page-section>
<!-- Modals -->
<modal-ipv4 :default-gateway="defaultGateway" @ok="saveIpv4Address" />
<modal-ipv6 @ok="saveIpv6Address" />
<modal-dns @ok="saveDnsAddress" />
<modal-hostname :hostname="currentHostname" @ok="saveSettings" />
<modal-mac-address :mac-address="currentMacAddress" @ok="saveSettings" />
<modal-default-gateway
:default-gateway="ipv6DefaultGateway"
@ok="saveSettings"
/>
</b-container>
</template>
<script>
import BVToastMixin from '@/components/Mixins/BVToastMixin';
import DataFormatterMixin from '@/components/Mixins/DataFormatterMixin';
import LoadingBarMixin, { loading } from '@/components/Mixins/LoadingBarMixin';
import ModalMacAddress from './ModalMacAddress.vue';
import ModalDefaultGateway from './ModalDefaultGateway.vue';
import ModalHostname from './ModalHostname.vue';
import ModalIpv4 from './ModalIpv4.vue';
import ModalIpv6 from './ModalIpv6.vue';
import ModalDns from './ModalDns.vue';
import NetworkGlobalSettings from './NetworkGlobalSettings.vue';
import NetworkInterfaceSettings from './NetworkInterfaceSettings.vue';
import PageSection from '@/components/Global/PageSection';
import PageTitle from '@/components/Global/PageTitle';
import TableIpv4 from './TableIpv4.vue';
import TableIpv6 from './TableIpv6.vue';
import TableDns from './TableDns.vue';
import { mapState } from 'vuex';
import { useI18n } from 'vue-i18n';
export default {
name: 'Network',
components: {
ModalHostname,
ModalMacAddress,
ModalDefaultGateway,
ModalIpv4,
ModalIpv6,
ModalDns,
NetworkGlobalSettings,
NetworkInterfaceSettings,
PageSection,
PageTitle,
TableDns,
TableIpv4,
TableIpv6,
},
mixins: [BVToastMixin, DataFormatterMixin, LoadingBarMixin],
beforeRouteLeave(to, from, next) {
this.hideLoader();
next();
},
data() {
return {
$t: useI18n().t,
currentHostname: '',
currentMacAddress: '',
defaultGateway: '',
ipv6DefaultGateway: '',
loading,
tabIndex: 0,
};
},
computed: {
...mapState('network', ['ethernetData']),
},
watch: {
ethernetData() {
this.getModalInfo();
},
},
created() {
this.startLoader();
const globalSettings = new Promise((resolve) => {
this.$root.$on('network-global-settings-complete', () => resolve());
});
const interfaceSettings = new Promise((resolve) => {
this.$root.$on('network-interface-settings-complete', () => resolve());
});
const networkTableDns = new Promise((resolve) => {
this.$root.$on('network-table-dns-complete', () => resolve());
});
const networkTableIpv4 = new Promise((resolve) => {
this.$root.$on('network-table-ipv4-complete', () => resolve());
});
const networkTableIpv6 = new Promise((resolve) => {
this.$root.$on('network-table-ipv6-complete', () => resolve());
});
// Combine all child component Promises to indicate
// when page data load complete
Promise.all([
this.$store.dispatch('network/getEthernetData'),
globalSettings,
interfaceSettings,
networkTableDns,
networkTableIpv4,
networkTableIpv6,
]).finally(() => this.endLoader());
},
methods: {
getModalInfo() {
this.defaultGateway =
this.$store.getters['network/globalNetworkSettings'][
this.tabIndex
].defaultGateway;
this.currentHostname =
this.$store.getters['network/globalNetworkSettings'][
this.tabIndex
].hostname;
this.currentMacAddress =
this.$store.getters['network/globalNetworkSettings'][
this.tabIndex
].macAddress;
this.ipv6DefaultGateway =
this.$store.getters['network/globalNetworkSettings'][
this.tabIndex
].ipv6DefaultGateway;
},
getTabIndex(selectedIndex) {
this.tabIndex = selectedIndex;
this.$store.dispatch('network/setSelectedTabIndex', this.tabIndex);
this.$store.dispatch(
'network/setSelectedTabId',
this.ethernetData[selectedIndex].Id,
);
this.getModalInfo();
},
saveIpv4Address(modalFormData) {
this.startLoader();
this.$store
.dispatch('network/saveIpv4Address', modalFormData)
.then((message) => this.successToast(message))
.catch(({ message }) => this.errorToast(message))
.finally(() => this.endLoader());
},
saveIpv6Address(modalFormData) {
this.startLoader();
this.$store
.dispatch('network/saveIpv6Address', modalFormData)
.then((message) => this.successToast(message))
.catch(({ message }) => this.errorToast(message))
.finally(() => this.endLoader());
},
saveDnsAddress(modalFormData) {
this.startLoader();
this.$store
.dispatch('network/saveDnsAddress', modalFormData)
.then((message) => this.successToast(message))
.catch(({ message }) => this.errorToast(message))
.finally(() => this.endLoader());
},
saveSettings(modalFormData) {
this.startLoader();
this.$store
.dispatch('network/saveSettings', modalFormData)
.then((message) => this.successToast(message))
.catch(({ message }) => this.errorToast(message))
.finally(() => this.endLoader());
},
},
};
</script>