Commit b24e6bf3c0bcb9a1dca0c3d86bdff04bd307f878

Authored by Eric Fernandez
1 parent 1e28d3252e
Exists in master

cambio icons, focus input si no hay resultados

src/js/controller.js
1 angular.module('focaModalLocalidad') 1 angular.module('focaModalLocalidad')
2 .controller('focaModalLocalidadController', [ 2 .controller('focaModalLocalidadController', [
3 '$timeout',
3 '$filter', 4 '$filter',
4 '$scope', 5 '$scope',
5 '$uibModalInstance', 6 '$uibModalInstance',
6 'focaModalLocalidadService', 7 'focaModalLocalidadService',
7 'filters', 8 'filters',
8 function($filter, $scope, $uibModalInstance, focaModalLocalidadService, filters) { 9 function($timeout, $filter, $scope, $uibModalInstance, focaModalLocalidadService, filters) {
9 10
10 $scope.filters = filters.busqueda; 11 $scope.filters = filters.busqueda;
11 $scope.provincias = []; 12 $scope.provincias = [];
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.filteredLocalidades = []; 18 $scope.filteredLocalidades = [];
18 $scope.currentPageLocalidades = []; 19 $scope.currentPageLocalidades = [];
19 $scope.selectedLocalidades = -1; 20 $scope.selectedLocalidades = -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 focaModalLocalidadService.getLocalidadesByIdProvincia(filters.idProvincia) 25 focaModalLocalidadService.getLocalidadesByIdProvincia(filters.idProvincia)
25 .then( 26 .then(
26 function(res) { 27 function(res) {
27 $scope.searchLoading = false; 28 $scope.searchLoading = false;
28 $scope.primerBusqueda = true; 29 $scope.primerBusqueda = true;
29 $scope.provincias = res.data; 30 $scope.provincias = res.data;
30 $scope.search(); 31 $scope.search(true);
31 primera(); 32 primera();
32 } 33 }
33 ); 34 );
34 } 35 }
35 }; 36 };
36 37
37 $scope.search = function() { 38 $scope.search = function(pressed) {
38 if($scope.provincias.length > 0) { 39 if($scope.provincias.length > 0) {
39 $scope.filteredLocalidades = $filter('filter')( 40 $scope.filteredLocalidades = $filter('filter')(
40 $scope.provincias, { $: $scope.filters } 41 $scope.provincias, { $: $scope.filters }
41 ); 42 );
43
44 if(pressed && $scope.filteredLocalidades.length === 0){
45 $timeout(function() {
46 angular.element('#search')[0].focus();
47 $scope.filters = '';
48 });
49 }
50
42 $scope.lastPage = Math.ceil( 51 $scope.lastPage = Math.ceil(
43 $scope.filteredLocalidades.length / $scope.numPerPage 52 $scope.filteredLocalidades.length / $scope.numPerPage
44 ); 53 );
45 $scope.resetPage(); 54 $scope.resetPage();
46 } 55 }
47 }; 56 };
48 57
49 $scope.resetPage = function() { 58 $scope.resetPage = function() {
50 $scope.currentPage = 1; 59 $scope.currentPage = 1;
51 $scope.selectPage(1); 60 $scope.selectPage(1);
52 }; 61 };
53 62
54 $scope.selectPage = function(page) { 63 $scope.selectPage = function(page) {
55 var start = (page - 1) * $scope.numPerPage; 64 var start = (page - 1) * $scope.numPerPage;
56 var end = start + $scope.numPerPage; 65 var end = start + $scope.numPerPage;
57 $scope.paginas = []; 66 $scope.paginas = [];
58 $scope.paginas = calcularPages(page); 67 $scope.paginas = calcularPages(page);
59 $scope.currentPageLocalidades = $scope.filteredLocalidades.slice(start, end); 68 $scope.currentPageLocalidades = $scope.filteredLocalidades.slice(start, end);
60 $scope.currentPage = page; 69 $scope.currentPage = page;
61 }; 70 };
62 71
63 $scope.select = function(vendedor) { 72 $scope.select = function(vendedor) {
64 $uibModalInstance.close(vendedor); 73 $uibModalInstance.close(vendedor);
65 }; 74 };
66 75
67 $scope.cancel = function() { 76 $scope.cancel = function() {
68 $uibModalInstance.dismiss('cancel'); 77 $uibModalInstance.dismiss('cancel');
69 }; 78 };
70 79
71 $scope.busquedaDown = function(key) { 80 $scope.busquedaDown = function(key) {
72 if (key === 40) { 81 if (key === 40) {
73 primera(key); 82 primera(key);
74 } 83 }
75 }; 84 };
76 85
77 $scope.itemLocalidad = function(key) { 86 $scope.itemLocalidad = function(key) {
78 if (key === 38) { 87 if (key === 38) {
79 anterior(key); 88 anterior(key);
80 } 89 }
81 90
82 if (key === 40) { 91 if (key === 40) {
83 siguiente(key); 92 siguiente(key);
84 } 93 }
85 94
86 if (key === 37) { 95 if (key === 37) {
87 retrocederPagina(); 96 retrocederPagina();
88 } 97 }
89 98
90 if (key === 39) { 99 if (key === 39) {
91 avanzarPagina(); 100 avanzarPagina();
92 } 101 }
93 }; 102 };
94 103
95 function calcularPages(paginaActual) { 104 function calcularPages(paginaActual) {
96 var paginas = []; 105 var paginas = [];
97 paginas.push(paginaActual); 106 paginas.push(paginaActual);
98 107
99 if (paginaActual - 1 > 1) { 108 if (paginaActual - 1 > 1) {
100 109
101 paginas.unshift(paginaActual - 1); 110 paginas.unshift(paginaActual - 1);
102 if (paginaActual - 2 > 1) { 111 if (paginaActual - 2 > 1) {
103 paginas.unshift(paginaActual - 2); 112 paginas.unshift(paginaActual - 2);
104 } 113 }
105 } 114 }
106 115
107 if (paginaActual + 1 < $scope.lastPage) { 116 if (paginaActual + 1 < $scope.lastPage) {
108 paginas.push(paginaActual + 1); 117 paginas.push(paginaActual + 1);
109 if (paginaActual + 2 < $scope.lastPage) { 118 if (paginaActual + 2 < $scope.lastPage) {
110 paginas.push(paginaActual + 2); 119 paginas.push(paginaActual + 2);
111 } 120 }
112 } 121 }
113 122
114 if (paginaActual !== 1) { 123 if (paginaActual !== 1) {
115 paginas.unshift(1); 124 paginas.unshift(1);
116 } 125 }
117 126
118 if (paginaActual !== $scope.lastPage) { 127 if (paginaActual !== $scope.lastPage) {
119 paginas.push($scope.lastPage); 128 paginas.push($scope.lastPage);
120 } 129 }
121 130
122 return paginas; 131 return paginas;
123 } 132 }
124 133
125 function primera() { 134 function primera() {
126 $scope.selectedLocalidades = 0; 135 $scope.selectedLocalidades = 0;
127 } 136 }
128 137
129 function anterior() { 138 function anterior() {
130 if ($scope.selectedLocalidades === 0 && $scope.currentPage > 1) { 139 if ($scope.selectedLocalidades === 0 && $scope.currentPage > 1) {
131 retrocederPagina(); 140 retrocederPagina();
132 } else { 141 } else {
133 $scope.selectedLocalidades--; 142 $scope.selectedLocalidades--;
134 } 143 }
135 } 144 }
136 145
137 function siguiente() { 146 function siguiente() {
138 if ($scope.selectedLocalidades < $scope.currentPageLocalidades.length - 1) { 147 if ($scope.selectedLocalidades < $scope.currentPageLocalidades.length - 1) {
139 $scope.selectedLocalidades++; 148 $scope.selectedLocalidades++;
140 } else { 149 } else {
141 avanzarPagina(); 150 avanzarPagina();
142 } 151 }
143 } 152 }
144 153
145 function retrocederPagina() { 154 function retrocederPagina() {
146 if ($scope.currentPage > 1) { 155 if ($scope.currentPage > 1) {
147 $scope.selectPage($scope.currentPage - 1); 156 $scope.selectPage($scope.currentPage - 1);
148 $scope.selectedLocalidades = $scope.numPerPage - 1; 157 $scope.selectedLocalidades = $scope.numPerPage - 1;
149 } 158 }
150 } 159 }
151 160
152 function avanzarPagina() { 161 function avanzarPagina() {
153 if ($scope.currentPage < $scope.lastPage) { 162 if ($scope.currentPage < $scope.lastPage) {
154 $scope.selectPage($scope.currentPage + 1); 163 $scope.selectPage($scope.currentPage + 1);
155 $scope.selectedLocalidades = 0; 164 $scope.selectedLocalidades = 0;
156 } 165 }
157 } 166 }
158 167
159 $scope.busquedaPress(13); 168 $scope.busquedaPress(13);
160 }] 169 }]
161 ); 170 );
162 171
src/views/modal-localidades.html
1 <div class="modal-header"> 1 <div class="modal-header">
2 <h5 class="modal-title my-1">Búsqueda de localidades</h5> 2 <h5 class="modal-title my-1">Búsqueda de localidades</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="selectedLocalidades == -1" 16 foca-focus="selectedLocalidades == -1"
16 ng-focus="selectedLocalidades = -1" 17 ng-focus="selectedLocalidades = -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="currentPageLocalidades.length == 0 && primerBusqueda"> 40 <tr ng-show="currentPageLocalidades.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, localidad) in currentPageLocalidades" 46 ng-repeat="(key, localidad) in currentPageLocalidades"
46 ng-click="select(localidad)" 47 ng-click="select(localidad)"
47 > 48 >
48 <td ng-bind="localidad.ID"></td> 49 <td ng-bind="localidad.ID"></td>
49 <td ng-bind="localidad.NOMBRE"></td> 50 <td ng-bind="localidad.NOMBRE"></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': selectedLocalidades != key, 59 'btn-secondary': selectedLocalidades != key,
59 'btn-primary': selectedLocalidades == key 60 'btn-primary': selectedLocalidades == key
60 }" 61 }"
61 foca-focus="selectedLocalidades == {{key}}" 62 foca-focus="selectedLocalidades == {{key}}"
62 ng-keydown="itemLocalidad($event.keyCode)"> 63 ng-keydown="itemLocalidad($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="currentPageLocalidades.length > 0 && primerBusqueda"> 70 <nav ng-show="currentPageLocalidades.length > 0 && primerBusqueda">
70 <ul class="pagination pagination-sm justify-content mb-0"> 71 <ul class="pagination pagination-sm justify-content mb-0">
71 <li class="page-item" ng-class="{'disabled': currentPage == 1}"> 72 <li class="page-item" ng-class="{'disabled': currentPage == 1}">
72 <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage - 1)"> 73 <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage - 1)">
73 <span aria-hidden="true">&laquo;</span> 74 <span aria-hidden="true">&laquo;</span>
74 <span class="sr-only">Anterior</span> 75 <span class="sr-only">Anterior</span>
75 </a> 76 </a>
76 </li> 77 </li>
77 <li 78 <li
78 class="page-item" 79 class="page-item"
79 ng-repeat="pagina in paginas" 80 ng-repeat="pagina in paginas"
80 ng-class="{'active': pagina == currentPage}" 81 ng-class="{'active': pagina == currentPage}"
81 > 82 >
82 <a 83 <a
83 class="page-link" 84 class="page-link"
84 href="javascript:void();" 85 href="javascript:void();"
85 ng-click="selectPage(pagina)" 86 ng-click="selectPage(pagina)"
86 ng-bind="pagina" 87 ng-bind="pagina"
87 ></a> 88 ></a>
88 </li> 89 </li>
89 <li class="page-item" ng-class="{'disabled': currentPage == lastPage}"> 90 <li class="page-item" ng-class="{'disabled': currentPage == lastPage}">
90 <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage + 1)"> 91 <a class="page-link" href="javascript:void();" ng-click="selectPage(currentPage + 1)">
91 <span aria-hidden="true">&raquo;</span> 92 <span aria-hidden="true">&raquo;</span>
92 <span class="sr-only">Siguiente</span> 93 <span class="sr-only">Siguiente</span>
93 </a> 94 </a>
94 </li> 95 </li>
95 </ul> 96 </ul>
96 </nav> 97 </nav>
97 </div> 98 </div>
98 <div class="modal-footer"> 99 <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>
100 </div> 101 </div>
101 102