@@ -405,7 +405,7 @@ export default {
405405 this .fetchZoneData ()
406406 this .fetchIpv6NetworkOfferingConfiguration ()
407407 this .fetchRoutedNetworkConfiguration ()
408- this .fetchSupportedServiceData ()
408+ this .fetchSupportedServiceData (true )
409409 },
410410 isAdmin () {
411411 return isAdmin ()
@@ -455,7 +455,7 @@ export default {
455455 this .zoneLoading = false
456456 })
457457 },
458- fetchSupportedServiceData () {
458+ fetchSupportedServiceData (isInitialLoad = false ) {
459459 this .supportedServiceLoading = true
460460 getAPI (' listSupportedNetworkServices' , {}).then (json => {
461461 const networkServices = json .listsupportednetworkservicesresponse .networkservice || []
@@ -491,7 +491,11 @@ export default {
491491 this .supportedServiceLoading = false
492492
493493 this .$nextTick (() => {
494- this .populateFormFromResource ()
494+ if (isInitialLoad) {
495+ this .populateFormFromResource ()
496+ } else {
497+ this .syncServiceSelectionsForCurrentMode ()
498+ }
495499 })
496500 })
497501 },
@@ -656,6 +660,45 @@ export default {
656660 this .form .nsxsupportlb = Boolean (this .serviceProviderMap .Lb )
657661 }
658662 },
663+ syncServiceSelectionsForCurrentMode () {
664+ const updatedServices = this .supportedServices .map (svc => {
665+ const serviceCopy = { ... svc, provider: [... svc .provider ] }
666+ const providerName = this .selectedServiceProviderMap [serviceCopy .name ]
667+
668+ if (providerName) {
669+ const providerIndex = serviceCopy .provider .findIndex (p => p .name === providerName)
670+ if (providerIndex > 0 ) {
671+ const targetProvider = serviceCopy .provider [providerIndex]
672+ serviceCopy .provider .splice (providerIndex, 1 )
673+ serviceCopy .provider .unshift (targetProvider)
674+ }
675+ serviceCopy .defaultChecked = true
676+ serviceCopy .selectedProvider = providerName
677+ } else {
678+ serviceCopy .defaultChecked = false
679+ serviceCopy .selectedProvider = null
680+ }
681+ return serviceCopy
682+ })
683+ this .supportedServices = updatedServices
684+
685+ const availableNames = new Set (updatedServices .map (svc => svc .name ))
686+ Object .keys (this .selectedServiceProviderMap ).forEach (name => {
687+ if (! availableNames .has (name)) {
688+ delete this .selectedServiceProviderMap [name]
689+ }
690+ })
691+
692+ this .connectivityServiceChecked = Boolean (this .selectedServiceProviderMap .Connectivity )
693+ this .sourceNatServiceChecked = Boolean (this .selectedServiceProviderMap .SourceNat )
694+
695+ this .$nextTick (() => {
696+ this .servicesReady = true
697+ this .$nextTick (() => {
698+ this .checkVpcVirtualRouterForServices ()
699+ })
700+ })
701+ },
659702 async handleProviderChange (value ) {
660703 this .provider = value
661704 if (this .provider === ' NSX' ) {
@@ -682,12 +725,7 @@ export default {
682725 },
683726 handleSupportedServiceChange (service , checked , provider ) {
684727 if (checked) {
685- const correctProvider = this .serviceProviderMap [service]
686- if (correctProvider && provider !== correctProvider) {
687- this .selectedServiceProviderMap [service] = correctProvider
688- } else {
689- this .selectedServiceProviderMap [service] = provider
690- }
728+ this .selectedServiceProviderMap [service] = provider
691729 } else {
692730 delete this .selectedServiceProviderMap [service]
693731 }
0 commit comments