(function (ng) { angular.module('search') .factory('SearchService', ['$http', function ($http) { var Search = function (searchObject) { this.search = searchObject.search; this.pageSize = searchObject.pageSize; this.siteSections = searchObject.siteSections; this.includeDocuments = searchObject.includeDocuments; this.dateFrom = searchObject.dateFrom; this.dateTo = searchObject.dateTo; this.pageNumber = 1; this.resultsCount = 0; this.pagedResultsCount = 0; this.results = []; this.busy = false; this.isSearchExhausted = function () { return (this.pagedResultsCount == this.resultsCount) && this.resultsCount > 0; }; }; Search.prototype.nextPage = function () { if (this.busy || this.isSearchExhausted()) { return; } this.busy = true; // Maps to our Web API search dto var searchDto = angular.toJson({ Search: this.search, SectionIds: this.siteSections != null ? this.siteSections : [], PageNumber: this.pageNumber, PageSize: this.pageSize, DateFrom: getDate(this.dateFrom), DateTo: getDate(this.dateTo), IncludeDocuments: this.includeDocuments, }); $http({ cache: false, dataType: 'json', url: "/api/cms/PostSearchQuery", method: 'POST', data: searchDto }) .success(function (data) { this.resultsCount = data.Count; var items = data.Results; for (var i = 0; i < items.length; i++) { this.results.push(items[i]); } this.pagedResultsCount = this.pagedResultsCount + items.length; this.pageNumber = this.pageNumber + 1; this.busy = false; }.bind(this)); }; return { GetInstance: function (searchData) { return new Search(searchData); } }; function getDate(date) { if (date instanceof Date) { return date.toDateString(); } return ""; } }]); })(angular);