angular.module('focaBusquedaProductos') .controller('modalBusquedaProductosCtrl', [ '$filter', '$scope', '$uibModalInstance', 'focaBusquedaProductosService', function($filter, $scope, $uibModalInstance, focaBusquedaProductosService) { focaBusquedaProductosService.getProductos().then( function(res) { $scope.productos = res.data; $scope.search(); } ); // pagination $scope.numPerPage = 10; $scope.currentPage = 1; $scope.filteredProductos = []; $scope.currentPageProductos = []; $scope.selectedProducto = -1; //METODOS $scope.search = function() { $scope.filteredProductos = $filter('filter')($scope.productos, {$: $scope.filters}); $scope.lastPage = Math.ceil($scope.filteredProductos.length / $scope.numPerPage); $scope.resetPage(); } $scope.resetPage = function() { $scope.currentPage = 1; $scope.selectPage(1); } $scope.selectPage = function(page) { var start = (page - 1) * $scope.numPerPage; var end = start + $scope.numPerPage; $scope.paginas = []; $scope.paginas = calcularPages(page); $scope.currentPageProductos = $scope.filteredProductos.slice(start, end); $scope.currentPage = page; } $scope.select = function(producto) { $uibModalInstance.close(producto); } $scope.cancel = function() { $uibModalInstance.dismiss('cancel'); } $scope.busquedaDown = function(key) { if (key === 40) { primera(key); } } $scope.busquedaPress = function(key) { if (key === 13) { primera(key); } } $scope.itemProducto = function(key) { if (key == 38) { anterior(key); } if (key == 40) { siguiente(key); } if (key == 37) { retrocederPagina(); } if (key == 39) { avanzarPagina(); } } function calcularPages(paginaActual) { var paginas = []; paginas.push(paginaActual); if (paginaActual - 1 > 1) { paginas.unshift(paginaActual - 1); if (paginaActual - 2 > 1) { paginas.unshift(paginaActual - 2); } } if (paginaActual + 1 < $scope.lastPage) { paginas.push(paginaActual + 1); if (paginaActual + 2 < $scope.lastPage) { paginas.push(paginaActual + 2); } } if (paginaActual !== 1) { paginas.unshift(1); } if (paginaActual !== $scope.lastPage) { paginas.push($scope.lastPage); } return paginas; } function primera(key) { $scope.selectedProducto = 0; } function anterior(key) { if ($scope.selectedProducto === 0) { anteriorPagina(); } else { $scope.selectedProducto--; } } function siguiente(key) { if ($scope.selectedProducto < $scope.currentPageProductos.length - 1 ) { $scope.selectedProducto++; } else { avanzarPagina(); } } function retrocederPagina() { if ($scope.currentPage > 1) { $scope.selectPage($scope.currentPage - 1); $scope.selectedProducto = $scope.numPerPage - 1; } } function avanzarPagina() { if ($scope.currentPage < $scope.lastPage) { $scope.selectPage($scope.currentPage + 1); $scope.selectedProducto = 0; } } } ] )