ManageIQ/manageiq-ui-classic

View on GitHub
app/javascript/oldjs/directives/scheduler/updateDropdownForFilter.js

Summary

Maintainability
C
7 hrs
Test Coverage
ManageIQ.angular.app.directive('updateDropdownForFilter', ['$timeout', function($timeout) {
  return {
    require: 'ngModel',
    link: function(scope, elem, attr, ctrl) {
      scope['form_' + ctrl.$name] = elem[0];
      scope['form_' + ctrl.$name + '_ngHide'] = attr.filterHide;

      scope['form_' + ctrl.$name + '_dropdownModel'] = attr.dropdownModel;
      scope['form_' + ctrl.$name + '_dropdownList'] = attr.dropdownList;

      if (scope['form_' + ctrl.$name + '_ngHide'] !== '') {
        scope.$watch(scope['form_' + ctrl.$name + '_ngHide'], function() {
          if (scope[scope['form_' + ctrl.$name + '_ngHide']] === true) {
            angular.element(scope['form_' + ctrl.$name]).selectpicker('hide');
          } else if (scope[scope['form_' + ctrl.$name + '_ngHide']] === 'NO-OP' || scope[scope['form_' + ctrl.$name + '_ngHide']] == false) {
            selectListElement(scope, $timeout, ctrl, true);
          }
        });
      }

      scope.$watch(scope['form_' + ctrl.$name + '_dropdownList'], function() {
        selectListElement(scope, $timeout, ctrl, true);
      });

      ctrl.$parsers.push(function(value) {
        if (scope.invalidStyleSet) {
          angular.element(scope['form_' + ctrl.$name]).selectpicker('setStyle', 'btn-red-border', 'remove');
          angular.element(scope['form_' + ctrl.$name]).selectpicker('setStyle', 'btn-default');
        }
        return value;
      });
    },
  };
}]);

var selectListElement = function(scope, timeout, ctrl, refresh) {
  timeout(function() {
    if (refresh) {
      if (scope[scope['form_' + ctrl.$name + '_ngHide']] === true) {
        angular.element(scope['form_' + ctrl.$name]).selectpicker('hide');
      } else {
        angular.element(scope['form_' + ctrl.$name]).selectpicker({
          dropupAuto: false,
          noneSelectedText: __('Nothing selected'),
        });
        angular.element(scope['form_' + ctrl.$name]).selectpicker('show');
        angular.element(scope['form_' + ctrl.$name]).selectpicker('refresh');
        angular.element(scope['form_' + ctrl.$name]).addClass('span12').selectpicker('setStyle');
      }
    }

    if (scope[scope['form_' + ctrl.$name + '_dropdownModel']][ctrl.$name] != undefined &&
        scope[scope['form_' + ctrl.$name + '_dropdownModel']][ctrl.$name] !== '') {
      angular.element(scope['form_' + ctrl.$name]).selectpicker('val',
        scope[scope['form_' + ctrl.$name + '_dropdownModel']][ctrl.$name]);
      angular.element(scope['form_' + ctrl.$name]).selectpicker('setStyle', 'btn-red-border', 'remove');
      angular.element(scope['form_' + ctrl.$name]).selectpicker('setStyle', 'btn-default');
      scope.invalidStyleSet = false;
    } else {
      angular.element(scope['form_' + ctrl.$name]).selectpicker('setStyle', 'btn-default btn-red-border');
      scope.invalidStyleSet = true;
    }
  }, 0);
};