From 776075d3211920777c1533a181294abd12411773 Mon Sep 17 00:00:00 2001 From: Nabil Ananthamangalath Date: Tue, 8 Apr 2025 18:46:50 +0530 Subject: [PATCH] Implement Network page - Navigation: Settings > Network - Jira: https://jsw.ibm.com/browse/PFEBMC-2403 Signed-off-by: Nabil Ananthamangalath --- src/components/Global/TableRowAction.vue | 8 +- src/router/routes.js | 9 + src/store/modules/Settings/NetworkStore.js | 70 ++- src/views/Settings/Network/ModalDns.vue | 140 ++--- src/views/Settings/Network/ModalHostname.vue | 184 ++++--- src/views/Settings/Network/ModalIpv4.vue | 287 ++++++----- src/views/Settings/Network/ModalIpv6.vue | 241 ++++----- .../Network/ModalIpv6StaticDefaultGateway.vue | 246 +++++---- src/views/Settings/Network/Network.vue | 431 ++++++++-------- .../Network/NetworkGlobalSettings.vue | 72 ++- .../Network/NetworkInterfaceSettings.vue | 264 +++++----- src/views/Settings/Network/TableDns.vue | 200 +++---- src/views/Settings/Network/TableIpv4.vue | 486 ++++++++++-------- src/views/Settings/Network/TableIpv6.vue | 477 +++++++++-------- .../Network/TableIpv6StaticDefaultGateway.vue | 338 ++++++------ 15 files changed, 1827 insertions(+), 1626 deletions(-) diff --git a/src/components/Global/TableRowAction.vue b/src/components/Global/TableRowAction.vue index 549f1b529f..f37d505ae7 100644 --- a/src/components/Global/TableRowAction.vue +++ b/src/components/Global/TableRowAction.vue @@ -10,7 +10,7 @@ {{ $t('global.action.export') }} - {{ title }} + {{ title }} - + {{ $t('global.action.download') }} @@ -34,7 +34,7 @@ :title="title" > - + {{ $t('global.action.download') }} @@ -49,7 +49,7 @@ {{ title }} - {{ title }} + {{ title }} diff --git a/src/router/routes.js b/src/router/routes.js index 4aa9c2980d..05e2dbb510 100644 --- a/src/router/routes.js +++ b/src/router/routes.js @@ -41,6 +41,7 @@ import FieldCoreOverride from '@/views/ResourceManagement/FieldCoreOverride'; import ServiceLoginConsoles from '@/views/Operations/ServiceLoginConsoles/ServiceLoginConsoles.vue'; import ServiceLogin from '@/views/Operations/ServiceLoginConsoles'; import ProfileSettings from '@/views/ProfileSettings'; +import Network from '@/views/Settings/Network'; const roles = { administrator: 'Administrator', @@ -281,6 +282,14 @@ export const routes = [ title: i18n.global.t('appPageTitle.deconfigurationHardware'), }, }, + { + path: '/settings/network', + name: 'network', + component: Network, + meta: { + title: i18n.global.t('appPageTitle.network'), + }, + }, { path: '/resource-management/power', name: 'power', diff --git a/src/store/modules/Settings/NetworkStore.js b/src/store/modules/Settings/NetworkStore.js index 968432e0c2..c1d0a523ad 100644 --- a/src/store/modules/Settings/NetworkStore.js +++ b/src/store/modules/Settings/NetworkStore.js @@ -1,4 +1,3 @@ -//TODO: Work Requird --> import api from '@/store/api'; import i18n from '@/i18n'; import { defineStore } from 'pinia'; @@ -24,6 +23,30 @@ export const NetworkStore = defineStore('network', { isTableBusyGetter: (state) => state.isTableBusy, }, actions: { + setDhcpEnabledState(dhcpEnabledState) { + this.networkSettings[this.selectedInterfaceIndex].dhcpEnabled = + dhcpEnabledState; + }, + setIpv6DhcpEnabledState(ipv6DhcpEnabledState) { + this.networkSettings[this.selectedInterfaceIndex].ipv6OperatingMode = + ipv6DhcpEnabledState; + }, + setIpv6AutoConfigEnabled(ipv6AutoConfigEnabled) { + this.networkSettings[this.selectedInterfaceIndex].ipv6AutoConfigEnabled = + ipv6AutoConfigEnabled; + }, + setDomainNameState(domainState) { + this.networkSettings[this.selectedInterfaceIndex].useDomainNameEnabled = + domainState; + }, + setDnsState(dnsState) { + this.networkSettings[this.selectedInterfaceIndex].useDnsEnabled = + dnsState; + }, + setNtpState(ntpState) { + this.networkSettings[this.selectedInterfaceIndex].useNtpEnabled = + ntpState; + }, async setNetworkSettings(data) { this.networkSettings = data.map(({ data }) => { const { @@ -110,7 +133,7 @@ export const NetworkStore = defineStore('network', { }, 15000); }, async saveDomainNameState(domainState) { - this.domainState = domainState; + this.setDomainNameState(domainState); const data = { DHCPv4: { UseDomainName: domainState, @@ -121,7 +144,12 @@ export const NetworkStore = defineStore('network', { `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, data ) - .then(this.getEthernetData()) + .then(() => { + // Getting Ethernet data here so that the toggle gets updated + this.getEthernetData(); + // Getting Ethernet data here so that the IPv4 table gets updated + this.getEthernetDataAfterDelay(); + }) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.domainName'), @@ -129,7 +157,7 @@ export const NetworkStore = defineStore('network', { }) .catch((error) => { console.log(error); - this.domainState = !domainState; + this.setDomainNameState(!domainState); throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.domainName'), @@ -138,7 +166,7 @@ export const NetworkStore = defineStore('network', { }); }, async saveDnsState(dnsState) { - this.dnsState = dnsState; + this.setDnsState(dnsState); const data = { DHCPv4: { UseDNSServers: dnsState, @@ -149,7 +177,12 @@ export const NetworkStore = defineStore('network', { `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, data ) - .then(this.getEthernetData()) + .then(() => { + // Getting Ethernet data here so that the toggle gets updated + this.getEthernetData(); + // Getting Ethernet data here so that the IPv4 table gets updated + this.getEthernetDataAfterDelay(); + }) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.dns'), @@ -157,7 +190,7 @@ export const NetworkStore = defineStore('network', { }) .catch((error) => { console.log(error); - this.dnsState = !dnsState; + this.setDnsState(!dnsState); throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.dns'), @@ -166,7 +199,7 @@ export const NetworkStore = defineStore('network', { }); }, async saveNtpState(ntpState) { - this.ntpState = ntpState; + this.setNtpState(ntpState); const data = { DHCPv4: { UseNTPServers: ntpState, @@ -177,7 +210,12 @@ export const NetworkStore = defineStore('network', { `/redfish/v1/Managers/bmc/EthernetInterfaces/${this.selectedInterfaceId}`, data ) - .then(this.getEthernetData()) + .then(() => { + // Getting Ethernet data here so that the toggle gets updated + this.getEthernetData(); + // Getting Ethernet data here so that the IPv4 table gets updated + this.getEthernetDataAfterDelay(); + }) .then(() => { return i18n.global.t('pageNetwork.toast.successSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.ntp'), @@ -185,7 +223,7 @@ export const NetworkStore = defineStore('network', { }) .catch((error) => { console.log(error); - this.ntpState = !ntpState; + this.setNtpState(!ntpState); throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.ntp'), @@ -194,7 +232,7 @@ export const NetworkStore = defineStore('network', { }); }, async saveDhcpEnabledState(dhcpState) { - this.dhcpEnabledState = dhcpState; + this.setDhcpEnabledState(dhcpState); const data = { DHCPv4: { DHCPEnabled: dhcpState, @@ -218,7 +256,7 @@ export const NetworkStore = defineStore('network', { }) .catch((error) => { console.log(error); - this.dhcpEnabledState = !dhcpState; + this.setDhcpEnabledState(!dhcpState); throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.dhcp'), @@ -228,7 +266,7 @@ export const NetworkStore = defineStore('network', { }, async saveIpv6DhcpEnabledState(dhcpState) { const updatedDhcpState = dhcpState ? 'Enabled' : 'Disabled'; - this.ipv6DhcpEnabledState = updatedDhcpState; + this.setIpv6DhcpEnabledState(updatedDhcpState); const data = { DHCPv6: { OperatingMode: updatedDhcpState, @@ -252,7 +290,7 @@ export const NetworkStore = defineStore('network', { }) .catch((error) => { console.log(error); - this.ipv6DhcpEnabledState = !dhcpState; + this.setIpv6DhcpEnabledState(!dhcpState ? 'Enabled' : 'Disabled'); throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.dhcp'), @@ -261,7 +299,7 @@ export const NetworkStore = defineStore('network', { }); }, async saveIpv6AutoConfigState(ipv6AutoConfigState) { - this.ipv6AutoConfigEnabled = ipv6AutoConfigState; + this.setIpv6AutoConfigEnabled(ipv6AutoConfigState); const data = { StatelessAddressAutoConfig: { IPv6AutoConfigEnabled: ipv6AutoConfigState, @@ -285,7 +323,7 @@ export const NetworkStore = defineStore('network', { }) .catch((error) => { console.log(error); - this.ipv6AutoConfigEnabled = !ipv6AutoConfigState; + this.setIpv6AutoConfigEnabled(!ipv6AutoConfigState); throw new Error( i18n.global.t('pageNetwork.toast.errorSaveNetworkSettings', { setting: i18n.global.t('pageNetwork.ipv6AutoConfig'), diff --git a/src/views/Settings/Network/ModalDns.vue b/src/views/Settings/Network/ModalDns.vue index 7f12717307..cc9ac36c6c 100644 --- a/src/views/Settings/Network/ModalDns.vue +++ b/src/views/Settings/Network/ModalDns.vue @@ -1,92 +1,94 @@