(function(){ "use strict"; angular .module("app.utils") .factory("appUtils.tableSearcher", tableSearcher); function tableSearcher(dataTableConstant){ var data = [], initData = [], isFirst = true; return { define: define, getData: getData, keypress: keypress, searchByQuery: searchByQuery, setPaging: setPaging, sortBy: sortBy, sortByFilters: sortByFilters, CONST: dataTableConstant }; function define(collection){ if (isFirst) { data = initData = collection; isFirst = !isFirst; } else { data = collection; } } function getData(){ return data; } function keypress($event, callback){ if ($event.keyCode == 13) callback(); return false; } function searchByQuery(query){ data = initData; if (query != null) { return data.filter(function(el){ var keys = Object.keys(el), isExist; isExist = keys.some(function(k){ var temp = el[k].toString(); return temp.indexOf(query) > -1; }); return isExist; }); } else { return data; } } function setPaging($scope){ var begin = (($scope.bigCurrentPage - 1) * $scope.itemsPerPage) , end = begin + $scope.itemsPerPage; return data ? getData().slice(begin, end) : []; } function sortBy(orderBy, vm){ vm.orderBy = orderBy; vm.orderDirection = vm.orderDirection == "asc" ? "desc" : "asc" ; if(vm.applyFilters){ vm.applyFilters(); }else if(vm.search){ vm.search(); } // Icon behaviour near the table headers when user clicked there. var icon = $(dataTableConstant.SORT_OPTIONS.ICON); icon.show(); vm.sorterIcon = vm.orderDirection == "desc" ? dataTableConstant.SORT_OPTIONS.DESC_ICON : dataTableConstant.SORT_OPTIONS.ASC_ICON; $(dataTableConstant.SORT_OPTIONS.HEADER_ID_PREFIX + orderBy).append(icon); } function sortByFilters(orderBy, vm){ vm.orderBy = orderBy; vm.orderDirection = vm.orderDirection == "Asc" ? "Desc" : "Asc" ; vm.orderParam = vm.orderDirection == "Desc" ? vm.orderBy + 'Desc' : vm.orderBy; vm.applyFilters(); // Icon behaviour near the table headers when user clicked there. var icon = $(dataTableConstant.SORT_OPTIONS.ICON); icon.show(); vm.sorterIcon = vm.orderDirection == "Desc" ? dataTableConstant.SORT_OPTIONS.DESC_ICON : dataTableConstant.SORT_OPTIONS.ASC_ICON; $(dataTableConstant.SORT_OPTIONS.HEADER_ID_PREFIX + orderBy).append(icon); } } // IoC container. tableSearcher.$inject = [ "appConstant.dataTable" ]; })();