diff --git a/app/scripts/modules/cloudfoundry/src/pipeline/stages/deployService/cloudfoundryDeployServiceStage.js b/app/scripts/modules/cloudfoundry/src/pipeline/stages/deployService/cloudfoundryDeployServiceStage.js index 278e6b44695..5ab106ac5bf 100644 --- a/app/scripts/modules/cloudfoundry/src/pipeline/stages/deployService/cloudfoundryDeployServiceStage.js +++ b/app/scripts/modules/cloudfoundry/src/pipeline/stages/deployService/cloudfoundryDeployServiceStage.js @@ -32,14 +32,14 @@ module.exports = angular .controller('CloudfoundryDeployServiceStageCtrl', function($scope) { let stage = $scope.stage; stage.action = 'deployService'; + stage.cloudProvider = 'cloudfoundry'; stage.tags = stage.tags || []; - $scope.regions = $scope.regions || []; - $scope.state = { accounts: false, regionsLoaded: false, }; + $scope.tagName = ''; AccountService.listAccounts('cloudfoundry').then(function(accounts) { @@ -47,41 +47,52 @@ module.exports = angular $scope.state.accounts = true; }); - AccountService.getRegionsForAccount($scope.stage.credentials).then(function(regions) { - $scope.regions = regions; - }); + $scope.clearAndReloadRegions = () => { + $scope.regions = []; + $scope.servicePlans = []; + $scope.serviceNamesAndPlans = []; - if ($scope.stage.credentials) { - ServicesReader.getServices($scope.stage.credentials).then(function(services) { - $scope.serviceNamesAndPlans = services; - $scope.services = services.map(function(item) { - return item.name; - }); - let service = $scope.serviceNamesAndPlans.find(it => it.name === $scope.stage.service) || { servicePlans: [] }; - $scope.servicePlans = service.servicePlans.map(it => it.name); + AccountService.getRegionsForAccount($scope.stage.credentials).then(function(regions) { + $scope.regions = regions; + $scope.state.regionsLoaded = true; }); - } + }; + + $scope.clearAndReloadRegions(); - stage.cloudProvider = 'cloudfoundry'; $scope.onAccountChange = () => { + $scope.stage.region = null; + $scope.state.regionsLoaded = false; $scope.stage.service = null; - $scope.serviceNamesAndPlans = []; + $scope.clearAndReloadRegions(); + }; - AccountService.getRegionsForAccount($scope.stage.credentials).then(function(regions) { - $scope.regions = regions; - }); + $scope.clearAndReloadServices = () => { + $scope.serviceNamesAndPlans = []; + $scope.servicePlans = []; + $scope.services = []; - ServicesReader.getServices($scope.stage.credentials).then(function(services) { + ServicesReader.getServices($scope.stage.credentials, $scope.stage.region).then(function(services) { $scope.serviceNamesAndPlans = services; $scope.services = services.map(function(item) { return item.name; }); + $scope.onServiceChange(); }); }; - $scope.onServiceChange = () => { + $scope.onRegionChange = () => { + $scope.stage.service = null; $scope.stage.servicePlan = null; + $scope.clearAndReloadServices(); + }; + + if ($scope.stage.region) { + $scope.clearAndReloadServices(); + } + + $scope.onServiceChange = () => { let service = $scope.serviceNamesAndPlans.find(it => it.name === $scope.stage.service) || { servicePlans: [] }; $scope.servicePlans = service.servicePlans.map(it => it.name); }; diff --git a/app/scripts/modules/cloudfoundry/src/pipeline/stages/deployService/deployServiceStage.html b/app/scripts/modules/cloudfoundry/src/pipeline/stages/deployService/deployServiceStage.html index 2b250d66f76..9a3bcddb195 100644 --- a/app/scripts/modules/cloudfoundry/src/pipeline/stages/deployService/deployServiceStage.html +++ b/app/scripts/modules/cloudfoundry/src/pipeline/stages/deployService/deployServiceStage.html @@ -12,6 +12,7 @@ field="region" account="stage.credentials" provider="cloudfoundry" + on-change="onRegionChange()" regions="regions"> diff --git a/app/scripts/modules/core/src/services/ServicesReader.ts b/app/scripts/modules/core/src/services/ServicesReader.ts index 65326bb7820..2b84b827fe7 100644 --- a/app/scripts/modules/core/src/services/ServicesReader.ts +++ b/app/scripts/modules/core/src/services/ServicesReader.ts @@ -3,12 +3,13 @@ import { API } from 'core/api/ApiService'; import { IService } from 'core/domain'; export class ServicesReader { - public static getServices(account: string): IPromise { + public static getServices(account: string, region: string): IPromise { return API.one('servicebroker') .one(account) .all('services') .withParams({ cloudProvider: 'cloudfoundry', + region: region, }) .getList(); }