diff --git a/changelog.md b/changelog.md index efa981e06..3f78627ff 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,10 @@ ### 0.24.0 (Major Release) +#### Disable search button while searching + +While waiting for search results the search button and form are now disabled unless +the user has changed the search string. + ### 0.23.0 (Major Release) #### Enhanced customisation of search results diff --git a/opal/core/search/static/js/search/controllers/search.js b/opal/core/search/static/js/search/controllers/search.js index 2f960301c..94a45ac45 100644 --- a/opal/core/search/static/js/search/controllers/search.js +++ b/opal/core/search/static/js/search/controllers/search.js @@ -11,6 +11,7 @@ angular.module('opal.controllers').controller( $scope.limit = 10; $scope.results = []; $scope.searched = false; + $scope.searching = false; $scope.paginator = new Paginator($scope.search); $scope.getQueryParam = function(){ @@ -38,7 +39,6 @@ angular.module('opal.controllers').controller( }; $scope.loadResults = function(){ - var queryString; var urlParams = $location.search(); // this view only allows a couple a couple of search columns @@ -53,6 +53,7 @@ angular.module('opal.controllers').controller( ngProgressLite.set(0); ngProgressLite.start(); var queryParams = $location.search(); + $scope.searching = true; queryBackend(queryParams).then( function(response){ ngProgressLite.done(); @@ -60,6 +61,7 @@ angular.module('opal.controllers').controller( $scope.paginator = new Paginator($scope.search, response.data); }, function(){ + $scope.searching = false; ngProgressLite.done(); } ); diff --git a/opal/core/search/static/js/test/search.controller.test.js b/opal/core/search/static/js/test/search.controller.test.js index ca752faf4..53a51f6df 100644 --- a/opal/core/search/static/js/test/search.controller.test.js +++ b/opal/core/search/static/js/test/search.controller.test.js @@ -125,13 +125,47 @@ describe('SearchCtrl', function (){ }); var expectedUrl = "/search/simple/?query=Bond&page_number=1"; - $httpBackend.expectGET().respond(500); + $httpBackend.expectGET(expectedUrl).respond(500); spyOn(ngProgressLite, 'done'); $scope.loadResults(); $httpBackend.flush(); expect(ngProgressLite.done).toHaveBeenCalledWith(); }); + it('loadResults() should set and reset the searching variable', function(){ + location.search({ + query: "Bond", + page_number: 1 + }); + + var expectedUrl = "/search/simple/?query=Bond&page_number=1"; + $httpBackend.expectGET(expectedUrl).respond({ + page_number: 1, + object_list: [], + total_pages: 1 + }); + expect($scope.searching).toBe(false); + $scope.loadResults(); + expect($scope.searching).toBe(true); + $httpBackend.flush(); + expect($scope.searching).toBe(true); + }); + + it('loadResults() should set and reset the searching variable if the server errors', function(){ + location.search({ + query: "Bond", + page_number: 1 + }); + + var expectedUrl = "/search/simple/?query=Bond&page_number=1"; + $httpBackend.expectGET(expectedUrl).respond(500); + expect($scope.searching).toBe(false); + $scope.loadResults(); + expect($scope.searching).toBe(true); + $httpBackend.flush(); + expect($scope.searching).toBe(false); + }); + it("should redirect to the search page", function(){ locationDetails.href = ""; locationDetails.pathname = "/somewhere"; diff --git a/opal/core/search/templates/search.html b/opal/core/search/templates/search.html index f559ba834..66989d197 100644 --- a/opal/core/search/templates/search.html +++ b/opal/core/search/templates/search.html @@ -10,7 +10,7 @@

-
+
slash-key-focus="!state || state==='normal'" ng-blur="enableShortcuts()" ng-focus="disableShortcuts()" + ng-change="searching=false" placeholder="Name or Hospital Number" ng-model="query.searchTerm" class="form-control" @@ -33,7 +34,7 @@