searchBar.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. (function() {
  2. (function() {
  3. try {return angular.module('ieat.ui')}
  4. catch {return angular.module('ieat.ui', [])}}
  5. )().component('searchBar', {
  6. templateUrl: 'static/templates/searchBar.html',
  7. bindings: {
  8. defaultValue: '@',
  9. minLength: '<',
  10. delay: '<',
  11. onChange: '&'
  12. },
  13. controller: ['$scope', '$timeout', function($scope, $timeout) {
  14. var self = this;
  15. this.$onInit = function() {
  16. self.searchTerm = self.defaultValue || "";
  17. self.minLength = self.minLength || 3;
  18. self.delay = self.delay || 10;
  19. };
  20. var searchTimeout = false;
  21. var lastSearch = null;
  22. var submitChange = function() {
  23. // Only callback if defined and something changed
  24. // Timeout/min length may have cause change to be undone
  25. if (self.onChange && lastSearch != self.searchTerm) {
  26. lastSearch = self.searchTerm;
  27. self.onChange({searchTerm: self.searchTerm});
  28. }
  29. };
  30. $scope.$watchGroup([function() {
  31. return self.searchTerm;
  32. }], function(newValues, oldValues) {
  33. if (searchTimeout)
  34. {
  35. $timeout.cancel(searchTimeout);
  36. }
  37. if (self.searchTerm.length >= self.minLength)
  38. {
  39. searchTimeout = $timeout(submitChange, self.delay);
  40. }
  41. });
  42. }]
  43. });
  44. })();