Commit ae8735fb11040d73fda02855469c1f8c99021047

Authored by Nicolás Guarnieri
Exists in master

Merge branch 'master' into 'master'

buscador en header, paginacion en footer, cambio icons, focus input cuando no hay resultados

See merge request !2
src/js/controller.js
1 angular.module('focaModalBanco') 1 angular.module('focaModalBanco')
2 .controller('focaModalBancoController', [ 2 .controller('focaModalBancoController', [
3 '$timeout',
3 '$filter', 4 '$filter',
4 '$scope', 5 '$scope',
5 '$uibModalInstance', 6 '$uibModalInstance',
6 'focaModalBancoService', 7 'focaModalBancoService',
7 'filters', 8 'filters',
8 function($filter, $scope, $uibModalInstance, focaModalBancoService, filters) { 9 function($timeout, $filter, $scope, $uibModalInstance, focaModalBancoService, filters) {
9 10
10 $scope.filters = filters; 11 $scope.filters = filters;
11 $scope.bancos = []; 12 $scope.bancos = [];
12 $scope.primerBusqueda = false; 13 $scope.primerBusqueda = false;
13 $scope.searchLoading = false; 14 $scope.searchLoading = false;
14 // pagination 15 // pagination
15 $scope.numPerPage = 10; 16 $scope.numPerPage = 10;
16 $scope.currentPage = 1; 17 $scope.currentPage = 1;
17 $scope.filteredBancos = []; 18 $scope.filteredBancos = [];
18 $scope.currentPageBancos = []; 19 $scope.currentPageBancos = [];
19 $scope.selectedBanco = -1; 20 $scope.selectedBanco = -1;
20 21
21 $scope.busquedaPress = function(key) { 22 $scope.busquedaPress = function(key) {
22 if (key === 13) { 23 if (key === 13) {
23 $scope.searchLoading = true; 24 $scope.searchLoading = true;
24 focaModalBancoService.getBancos().then( 25 focaModalBancoService.getBancos().then(
25 function(res) { 26 function(res) {
26 $scope.searchLoading = false; 27 $scope.searchLoading = false;
27 $scope.primerBusqueda = true; 28 $scope.primerBusqueda = true;
28 $scope.bancos = res.data; 29 $scope.bancos = res.data;
29 $scope.search(); 30 $scope.search(true);
30 primera(); 31 primera();
31 } 32 }
32 ); 33 );
33 } 34 }
34 }; 35 };
35 36
36 $scope.search = function() { 37 $scope.search = function(pressed) {
37 if($scope.bancos.length > 0) { 38 if($scope.bancos.length > 0) {
38 $scope.filteredBancos = $filter('filter')( 39 $scope.filteredBancos = $filter('filter')(
39 $scope.bancos, { $: $scope.filters } 40 $scope.bancos, { $: $scope.filters }
40 ); 41 );
42
43 if(pressed && $scope.filteredBancos.length === 0){
44 $timeout(function() {
45 angular.element('#search')[0].focus();
46 $scope.filters = '';
47 });
48 }
49
41 $scope.lastPage = Math.ceil( 50 $scope.lastPage = Math.ceil(
42 $scope.filteredBancos.length / $scope.numPerPage 51 $scope.filteredBancos.length / $scope.numPerPage
43 ); 52 );
44 $scope.resetPage(); 53 $scope.resetPage();
45 } 54 }
46 }; 55 };
47 56
48 $scope.resetPage = function() { 57 $scope.resetPage = function() {
49 $scope.currentPage = 1; 58 $scope.currentPage = 1;
50 $scope.selectPage(1); 59 $scope.selectPage(1);
51 }; 60 };
52 61
53 $scope.selectPage = function(page) { 62 $scope.selectPage = function(page) {
54 var start = (page - 1) * $scope.numPerPage; 63 var start = (page - 1) * $scope.numPerPage;
55 var end = start + $scope.numPerPage; 64 var end = start + $scope.numPerPage;
56 $scope.paginas = []; 65 $scope.paginas = [];
57 $scope.paginas = calcularPages(page); 66 $scope.paginas = calcularPages(page);
58 $scope.currentPageBancos = $scope.filteredBancos.slice(start, end); 67 $scope.currentPageBancos = $scope.filteredBancos.slice(start, end);
59 $scope.currentPage = page; 68 $scope.currentPage = page;
60 }; 69 };
61 70
62 $scope.select = function(vendedor) { 71 $scope.select = function(vendedor) {
63 $uibModalInstance.close(vendedor); 72 $uibModalInstance.close(vendedor);
64 }; 73 };
65 74
66 $scope.cancel = function() { 75 $scope.cancel = function() {
67 $uibModalInstance.dismiss('cancel'); 76 $uibModalInstance.dismiss('cancel');
68 }; 77 };
69 78
70 $scope.busquedaDown = function(key) { 79 $scope.busquedaDown = function(key) {
71 if (key === 40) { 80 if (key === 40) {
72 primera(key); 81 primera(key);
73 } 82 }
74 }; 83 };
75 84
76 $scope.itemBanco = function(key) { 85 $scope.itemBanco = function(key) {
77 if (key === 38) { 86 if (key === 38) {
78 anterior(key); 87 anterior(key);
79 } 88 }
80 89
81 if (key === 40) { 90 if (key === 40) {
82 siguiente(key); 91 siguiente(key);
83 } 92 }
84 93
85 if (key === 37) { 94 if (key === 37) {
86 retrocederPagina(); 95 retrocederPagina();
87 } 96 }
88 97
89 if (key === 39) { 98 if (key === 39) {
90 avanzarPagina(); 99 avanzarPagina();
91 } 100 }
92 }; 101 };
93 102
94 function calcularPages(paginaActual) { 103 function calcularPages(paginaActual) {
95 var paginas = []; 104 var paginas = [];
96 paginas.push(paginaActual); 105 paginas.push(paginaActual);
97 106
98 if (paginaActual - 1 > 1) { 107 if (paginaActual - 1 > 1) {
99 108
100 paginas.unshift(paginaActual - 1); 109 paginas.unshift(paginaActual - 1);
101 if (paginaActual - 2 > 1) { 110 if (paginaActual - 2 > 1) {
102 paginas.unshift(paginaActual - 2); 111 paginas.unshift(paginaActual - 2);
103 } 112 }
104 } 113 }
105 114
106 if (paginaActual + 1 < $scope.lastPage) { 115 if (paginaActual + 1 < $scope.lastPage) {
107 paginas.push(paginaActual + 1); 116 paginas.push(paginaActual + 1);
108 if (paginaActual + 2 < $scope.lastPage) { 117 if (paginaActual + 2 < $scope.lastPage) {
109 paginas.push(paginaActual + 2); 118 paginas.push(paginaActual + 2);
110 } 119 }
111 } 120 }
112 121
113 if (paginaActual !== 1) { 122 if (paginaActual !== 1) {
114 paginas.unshift(1); 123 paginas.unshift(1);
115 } 124 }
116 125
117 if (paginaActual !== $scope.lastPage) { 126 if (paginaActual !== $scope.lastPage) {
118 paginas.push($scope.lastPage); 127 paginas.push($scope.lastPage);
119 } 128 }
120 129
121 return paginas; 130 return paginas;
122 } 131 }
123 132
124 function primera() { 133 function primera() {
125 $scope.selectedBanco = 0; 134 $scope.selectedBanco = 0;
126 } 135 }
127 136
128 function anterior() { 137 function anterior() {
129 if ($scope.selectedBanco === 0 && $scope.currentPage > 1) { 138 if ($scope.selectedBanco === 0 && $scope.currentPage > 1) {
130 retrocederPagina(); 139 retrocederPagina();
131 } else { 140 } else {
132 $scope.selectedBanco--; 141 $scope.selectedBanco--;
133 } 142 }
134 } 143 }
135 144
136 function siguiente() { 145 function siguiente() {
137 if ($scope.selectedBanco < $scope.currentPageBancos.length - 1) { 146 if ($scope.selectedBanco < $scope.currentPageBancos.length - 1) {
138 $scope.selectedBanco++; 147 $scope.selectedBanco++;
139 } else { 148 } else {
140 avanzarPagina(); 149 avanzarPagina();
141 } 150 }
142 } 151 }
143 152
144 function retrocederPagina() { 153 function retrocederPagina() {
145 if ($scope.currentPage > 1) { 154 if ($scope.currentPage > 1) {
146 $scope.selectPage($scope.currentPage - 1); 155 $scope.selectPage($scope.currentPage - 1);
147 $scope.selectedBanco = $scope.numPerPage - 1; 156 $scope.selectedBanco = $scope.numPerPage - 1;
148 } 157 }
149 } 158 }
150 159
151 function avanzarPagina() { 160 function avanzarPagina() {
152 if ($scope.currentPage < $scope.lastPage) { 161 if ($scope.currentPage < $scope.lastPage) {
153 $scope.selectPage($scope.currentPage + 1); 162 $scope.selectPage($scope.currentPage + 1);
154 $scope.selectedBanco = 0; 163 $scope.selectedBanco = 0;
155 } 164 }
156 } 165 }
157 166
158 $scope.busquedaPress(13); 167 $scope.busquedaPress(13);
159 }] 168 }]
160 ); 169 );
161 170
src/views/modal-bancos.html
1 <div class="modal-header"> 1 <div class="modal-header">
2 <h5 class="modal-title my-1">Búsqueda de bancos</h5> 2 <h5 class="modal-title my-1">Búsqueda de bancos</h5>
3 </div> 3 </div>
4 <div class="modal-body" id="modal-body"> 4 <div class="modal-body" id="modal-body">
5 <div class="input-group"> 5 <div class="input-group">
6 <input 6 <input
7 ladda="searchLoading" 7 ladda="searchLoading"
8 type="text" 8 type="text"
9 class="form-control form-control-sm" 9 class="form-control form-control-sm"
10 placeholder="Busqueda" 10 id="search"
11 placeholder="Búsqueda"
11 ng-model="filters" 12 ng-model="filters"
12 ng-change="search()" 13 ng-change="search()"
13 ng-keydown="busquedaDown($event.keyCode)" 14 ng-keydown="busquedaDown($event.keyCode)"
14 ng-keypress="busquedaPress($event.keyCode)" 15 ng-keypress="busquedaPress($event.keyCode)"
15 foca-focus="selectedBanco == -1" 16 foca-focus="selectedBanco == -1"
16 ng-focus="selectedBanco = -1" 17 ng-focus="selectedBanco = -1"
17 teclado-virtual 18 teclado-virtual
18 > 19 >
19 <div class="input-group-append"> 20 <div class="input-group-append">
20 <button 21 <button
21 ladda="searchLoading" 22 ladda="searchLoading"
22 class="btn btn-outline-secondary" 23 class="btn btn-outline-secondary"
23 type="button" 24 type="button"
24 ng-click="busquedaPress(13)" 25 ng-click="busquedaPress(13)"
25 > 26 >
26 <i class="fa fa-search" aria-hidden="true"></i> 27 <i class="fa fa-search" aria-hidden="true"></i>
27 </button> 28 </button>
28 </div> 29 </div>
29 </div> 30 </div>
30 <table ng-show="primerBusqueda" class="table table-striped table-sm col-12"> 31 <table ng-show="primerBusqueda" class="table table-striped table-sm col-12">
31 <thead> 32 <thead>
32 <tr> 33 <tr>
33 <th>Código</th> 34 <th>Código</th>
34 <th>Nombre</th> 35 <th>Nombre</th>
35 <th></th> 36 <th></th>
36 </tr> 37 </tr>
37 </thead> 38 </thead>
38 <tbody> 39 <tbody>
39 <tr ng-show="currentPageBancos.length == 0 && primerBusqueda"> 40 <tr ng-show="currentPageBancos.length == 0 && primerBusqueda">
40 <td colspan="3"> 41 <td colspan="3">
41 No se encontraron resultados. 42 No se encontraron resultados.
42 </td> 43 </td>
43 </tr> 44 </tr>
44 <tr class="selected" 45 <tr class="selected"
45 ng-repeat="(key, banco) in currentPageBancos" 46 ng-repeat="(key, banco) in currentPageBancos"
46 ng-click="select(banco)" 47 ng-click="select(banco)"
47 > 48 >
48 <td ng-bind="banco.ID"></td> 49 <td ng-bind="banco.ID"></td>
49 <td ng-bind="banco.desbco"></td> 50 <td ng-bind="banco.desbco"></td>
50 <td class="d-md-none text-primary"> 51 <td class="d-md-none text-primary">
51 <i class="fa fa-arrow-right" aria-hidden="true"></i> 52 <i class="fa fa-circle-thin" aria-hidden="true"></i>
52 </td> 53 </td>
53 <td class="d-none d-md-table-cell"> 54 <td class="d-none d-md-table-cell">
54 <button 55 <button
55 type="button" 56 type="button"
56 class="btn btn-xs p-1 float-right" 57 class="btn btn-xs p-1 float-right"
57 ng-class="{ 58 ng-class="{
58 'btn-secondary': selectedBanco != key, 59 'btn-secondary': selectedBanco != key,
59 'btn-primary': selectedBanco == key 60 'btn-primary': selectedBanco == key
60 }" 61 }"
61 foca-focus="selectedBanco == {{key}}" 62 foca-focus="selectedBanco == {{key}}"
62 ng-keydown="itemBanco($event.keyCode)"> 63 ng-keydown="itemBanco($event.keyCode)">
63 <i class="fa fa-arrow-right" aria-hidden="true"></i> 64 <i class="fa fa-circle-thin" aria-hidden="true"></i>
64 </button> 65 </button>
65 </td> 66 </td>
66 </tr> 67 </tr>
67 </tbody> 68 </tbody>
68 </table> 69 </table>
69 <nav ng-show="currentPageBancos.length > 0 && primerBusqueda"> 70 </div>
71 <div class="modal-footer">
72 <nav ng-show="currentPageBancos.length > 0 && primerBusqueda" class="mr-auto">
70 <ul class="pagination pagination-sm justify-content mb-0"> 73 <ul class="pagination pagination-sm justify-content mb-0">
71 <li class="page-item" ng-class="{'disabled': currentPage == 1}"> 74 <li class="page-item" ng-class="{'disabled': currentPage == 1}">
72 <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage - 1)"> 75 <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage - 1)">
73 <span aria-hidden="true">&laquo;</span> 76 <span aria-hidden="true">&laquo;</span>
74 <span class="sr-only">Anterior</span> 77 <span class="sr-only">Anterior</span>
75 </a> 78 </a>
76 </li> 79 </li>
77 <li 80 <li
78 class="page-item" 81 class="page-item"
79 ng-repeat="pagina in paginas" 82 ng-repeat="pagina in paginas"
80 ng-class="{'active': pagina == currentPage}" 83 ng-class="{'active': pagina == currentPage}"
81 > 84 >
82 <a 85 <a
83 class="page-link" 86 class="page-link"
84 href="javascript:void();" 87 href="javascript:void();"
85 ng-click="selectPage(pagina)" 88 ng-click="selectPage(pagina)"
86 ng-bind="pagina" 89 ng-bind="pagina"
87 ></a> 90 ></a>
88 </li> 91 </li>
89 <li class="page-item" ng-class="{'disabled': currentPage == lastPage}"> 92 <li class="page-item" ng-class="{'disabled': currentPage == lastPage}">
90 <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage + 1)"> 93 <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage + 1)">
91 <span aria-hidden="true">&raquo;</span> 94 <span aria-hidden="true">&raquo;</span>
92 <span class="sr-only">Siguiente</span> 95 <span class="sr-only">Siguiente</span>
93 </a> 96 </a>
94 </li> 97 </li>
95 </ul> 98 </ul>
96 </nav> 99 </nav>
97 </div>
98 <div class="modal-footer">
99 <button class="btn btn-sm btn-secondary my-1" type="button" ng-click="cancel()">Cancelar</button> 100 <button class="btn btn-sm btn-secondary my-1" type="button" ng-click="cancel()">Cancelar</button>