function attachEventHandlers()

in app/scripts/modules/google/serverGroup/configure/serverGroupConfiguration.service.js [527:648]


    function attachEventHandlers(command) {
      command.regionalChanged = function regionalChanged() {
        var result = { dirty: {} };
        var filteredData = command.backingData.filtered;
        var defaults = GCEProviderSettings.defaults;
        if (command.regional) {
          command.zone = null;
        } else if (!command.zone) {
          if (command.region === defaults.region) {
            command.zone = defaults.zone;
          } else {
            command.zone = filteredData.zones[0];
          }

          angular.extend(result.dirty, configureZones(command).dirty);
        }

        command.viewState.dirty = command.viewState.dirty || {};
        angular.extend(command.viewState.dirty, result.dirty);
        return result;
      };

      command.regionChanged = function regionChanged() {
        var result = { dirty: {} };
        var filteredData = command.backingData.filtered;
        angular.extend(result.dirty, configureSubnets(command).dirty);
        if (command.region) {
          angular.extend(result.dirty, configureInstanceTypes(command).dirty);
          angular.extend(result.dirty, configureZones(command).dirty);
          angular.extend(result.dirty, configureLoadBalancerOptions(command).dirty);
          angular.extend(result.dirty, configureImages(command).dirty);
        } else {
          filteredData.zones = null;
        }

        command.viewState.dirty = command.viewState.dirty || {};
        angular.extend(command.viewState.dirty, result.dirty);
        return result;
      };

      command.credentialsChanged = function credentialsChanged() {
        var result = { dirty: {} };
        var backingData = command.backingData;
        if (command.credentials) {
          let regions = backingData.credentialsKeyedByAccount[command.credentials].regions;
          if (_.isArray(regions)) {
            backingData.filtered.regions = _.map(regions, 'name');
          } else {
            // TODO(duftler): Remove this once we finish deprecating the old style regions/zones in clouddriver GCE credentials.
            backingData.filtered.regions = _.keys(regions);
          }
          if (!backingData.filtered.regions.includes(command.region)) {
            command.region = null;
            result.dirty.region = true;
          } else {
            angular.extend(result.dirty, command.regionChanged().dirty);
          }

          backingData.filtered.networks = getNetworkNames(command);
          if (!backingData.filtered.networks.includes(command.network)) {
            command.network = null;
            result.dirty.network = true;
          } else {
            angular.extend(result.dirty, command.networkChanged().dirty);
          }

          angular.extend(result.dirty, configureHttpHealthChecks(command).dirty);
          angular.extend(result.dirty, configureInstanceTypes(command).dirty);
        } else {
          command.region = null;
        }

        command.viewState.dirty = command.viewState.dirty || {};
        angular.extend(command.viewState.dirty, result.dirty);

        return result;
      };

      command.networkChanged = function networkChanged() {
        var result = { dirty: {} };

        command.viewState.autoCreateSubnets = _.chain(command.backingData.networks)
          .filter({ account: command.credentials, name: command.network })
          .map('autoCreateSubnets')
          .head()
          .value();

        command.viewState.subnets = _.chain(command.backingData.networks)
          .filter({ account: command.credentials, name: command.network })
          .map('subnets')
          .head()
          .value();

        angular.extend(result.dirty, configureSubnets(command).dirty);
        angular.extend(result.dirty, configureSecurityGroupOptions(command).dirty);

        command.viewState.dirty = command.viewState.dirty || {};
        angular.extend(command.viewState.dirty, result.dirty);

        return result;
      };

      command.zoneChanged = function zoneChanged() {
        var result = { dirty: { } };
        if (command.zone === undefined && !command.regional) {
          result.dirty.zone = true;
        }
        command.viewState.dirty = command.viewState.dirty || {};
        angular.extend(command.viewState.dirty, result.dirty);
        angular.extend(command.viewState.dirty, configureInstanceTypes(command).dirty);
        return result;
      };

      command.customInstanceChanged = function customInstanceChanged() {
        var result = { dirty : { } };

        command.viewState.dirty = command.viewState.dirty || {};
        angular.extend(result, command.viewState.dirty, configureCustomInstanceTypes(command).dirty);

        return result;
      };
    }