Commit a48d487fc67d74928bb6dc0f48e14c722ee30043

Authored by Leonardo Merlin
1 parent 6c43d39c

Improve search and filters to proposals

src/app/pages/propostas/propostas.controller.js
@@ -27,11 +27,11 @@ @@ -27,11 +27,11 @@
27 PropostasPageController.prototype.init = function() { 27 PropostasPageController.prototype.init = function() {
28 var vm = this; 28 var vm = this;
29 29
  30 + vm.page = 1;
  31 + vm.per_page = 20;
30 vm.themes = null; 32 vm.themes = null;
31 vm.selectedTheme = null; 33 vm.selectedTheme = null;
32 vm.filtredPrograms = null; 34 vm.filtredPrograms = null;
33 - vm.selectedProgram = null;  
34 - vm.proposals = null;  
35 vm.filtredProposals = null; 35 vm.filtredProposals = null;
36 vm.query = null; 36 vm.query = null;
37 vm.search = vm.$location.search(); 37 vm.search = vm.$location.search();
@@ -73,11 +73,14 @@ @@ -73,11 +73,14 @@
73 73
74 // load Proposals 74 // load Proposals
75 vm.loadingProposals = true; 75 vm.loadingProposals = true;
76 - vm.DialogaService.getProposals({}, function(data) {  
77 - vm.proposals = data.articles;  
78 - vm.filtredProposals = vm.proposals; 76 + vm.DialogaService.searchProposals({
  77 + page: vm.page,
  78 + per_page: vm.per_page
  79 + }, function(data) {
  80 + vm.filtredProposals = data.articles;
  81 + vm.total_proposals = parseInt(data._obj.headers('total'));
  82 +
79 vm.loadingProposals = false; 83 vm.loadingProposals = false;
80 - vm.loading = false;  
81 84
82 if (cb) { 85 if (cb) {
83 cb(); 86 cb();
@@ -86,7 +89,6 @@ @@ -86,7 +89,6 @@
86 vm.error = error; 89 vm.error = error;
87 vm.$log.error(error); 90 vm.$log.error(error);
88 vm.loadingProposals = false; 91 vm.loadingProposals = false;
89 - vm.loading = false;  
90 }); 92 });
91 }; 93 };
92 94
@@ -100,23 +102,13 @@ @@ -100,23 +102,13 @@
100 vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue/*, oldValue*/) { 102 vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue/*, oldValue*/) {
101 vm.search.tema = newValue ? newValue.slug : null; 103 vm.search.tema = newValue ? newValue.slug : null;
102 vm.$location.search('tema', vm.search.tema); 104 vm.$location.search('tema', vm.search.tema);
103 - vm.filtredProposals = vm.getFiltredProposals();  
104 - });  
105 -  
106 - vm.$scope.$on('change-selectedTopic', function(event, selectedTopic) {  
107 - vm.selectedProgram = selectedTopic;  
108 - });  
109 -  
110 - vm.$scope.$watch('pagePropostas.selectedProgram', function(newValue/*, oldValue*/) {  
111 - vm.search.programa = newValue ? newValue.slug : null;  
112 - vm.$location.search('programa', vm.search.programa);  
113 - vm.filtredProposals = vm.getFiltredProposals(); 105 + vm.filterProposals();
114 }); 106 });
115 107
116 vm.$scope.$watch('pagePropostas.query', function(newValue/*, oldValue*/) { 108 vm.$scope.$watch('pagePropostas.query', function(newValue/*, oldValue*/) {
117 vm.search.filtro = newValue ? newValue : null; 109 vm.search.filtro = newValue ? newValue : null;
118 vm.$location.search('filtro', vm.search.filtro); 110 vm.$location.search('filtro', vm.search.filtro);
119 - vm.filtredProposals = vm.getFiltredProposals(); 111 + vm.filterProposals();
120 }); 112 });
121 }; 113 };
122 114
@@ -127,35 +119,45 @@ @@ -127,35 +119,45 @@
127 vm.selectedTheme = null; 119 vm.selectedTheme = null;
128 }; 120 };
129 121
130 - PropostasPageController.prototype.getFiltredProposals = function() { 122 + PropostasPageController.prototype.changePage = function(pageIndex) {
131 var vm = this; 123 var vm = this;
132 124
133 - if (!vm.proposals) {  
134 - vm.$log.info('No proposals loaded yet. Abort.');  
135 - return null;  
136 - }  
137 -  
138 - var input = vm.proposals;  
139 - var output = input;  
140 - var query = vm.query;  
141 - var selectedTheme = vm.selectedTheme;  
142 - var selectedProgram = vm.selectedProgram; 125 + vm.page = pageIndex;
  126 + vm.filterProposals(pageIndex);
  127 + };
143 128
144 - var filter = vm.$filter('filter'); 129 + PropostasPageController.prototype.filterProposals = function(_page, _per_page) {
  130 + var vm = this;
145 131
146 - if (selectedTheme) {  
147 - output = vm.DialogaService.filterProposalsByCategorySlug(output, selectedTheme.slug); 132 + if (vm.loadingProposals){
  133 + vm.$log.debug('Content is not loaded yet.');
  134 + return;
148 } 135 }
149 136
150 - if (selectedProgram) {  
151 - output = vm.DialogaService.filterProposalsByProgramId(output, selectedProgram.id);  
152 - } 137 + var page = _page || vm.page;
  138 + var per_page = _per_page || vm.per_page;
  139 + var query = vm.query;
  140 + var params = {
  141 + page: page,
  142 + per_page: per_page,
  143 + };
153 144
154 - if (query) {  
155 - output = filter(output, query, false); 145 + if (vm.selectedTheme) {
  146 + params.article_id = vm.selectedTheme.id;
156 } 147 }
157 148
158 - return output; 149 + if (query) {params.query = query; }
  150 +
  151 + vm.loadingProposals = true;
  152 + vm.DialogaService.searchProposals(params, function(data){
  153 + vm.total_proposals = parseInt(data._obj.headers('total'));
  154 + vm.filtredProposals = data.articles;
  155 + vm.loadingProposals = false;
  156 + }, function (error) {
  157 + vm.error = error;
  158 + vm.$log.error(error);
  159 + vm.loadingProposals = false;
  160 + });
159 }; 161 };
160 162
161 PropostasPageController.prototype.submitSearch = function() { 163 PropostasPageController.prototype.submitSearch = function() {
@@ -167,7 +169,7 @@ @@ -167,7 +169,7 @@
167 var $searchResult = angular.element('#search-result'); 169 var $searchResult = angular.element('#search-result');
168 if ($searchResult && $searchResult.length > 0) { 170 if ($searchResult && $searchResult.length > 0) {
169 angular.element('body').animate({scrollTop: $searchResult.offset().top}, 'fast'); 171 angular.element('body').animate({scrollTop: $searchResult.offset().top}, 'fast');
170 - vm.filtredProposals = vm.getFiltredProposals(); 172 + vm.filterProposals();
171 }else { 173 }else {
172 vm.$log.warn('#search-result element not found.'); 174 vm.$log.warn('#search-result element not found.');
173 } 175 }
src/app/pages/propostas/propostas.html
@@ -26,7 +26,7 @@ @@ -26,7 +26,7 @@
26 </div> 26 </div>
27 </section> 27 </section>
28 28
29 - <section class="section--header" ng-if="pagePropostas.proposals || pagePropostas.themes"> 29 + <section class="section--header" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">
30 <div class="container"> 30 <div class="container">
31 <div class="row"> 31 <div class="row">
32 <div class="col-sm-12"> 32 <div class="col-sm-12">
@@ -36,7 +36,7 @@ @@ -36,7 +36,7 @@
36 </div> 36 </div>
37 </section> 37 </section>
38 38
39 - <section class="section--articles section-gray section-space-up" ng-if="pagePropostas.proposals || pagePropostas.themes"> 39 + <section class="section--articles section-gray section-space-up" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">
40 <div class="container"> 40 <div class="container">
41 <div id="lista-de-propostas" class="row"> 41 <div id="lista-de-propostas" class="row">
42 <div class="col-sm-4 col-md-3"> 42 <div class="col-sm-4 col-md-3">
@@ -72,7 +72,7 @@ @@ -72,7 +72,7 @@
72 </div> 72 </div>
73 </div> 73 </div>
74 <div class="col-sm-8 col-md-9"> 74 <div class="col-sm-8 col-md-9">
75 - <div class="row hidden-xs" ng-if="pagePropostas.proposals"> 75 + <div class="row hidden-xs" ng-if="pagePropostas.filtredProposals">
76 <div class="col-xs-12"> 76 <div class="col-xs-12">
77 <div class="input-group input-group-lg input-group-search"> 77 <div class="input-group input-group-lg input-group-search">
78 <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label> 78 <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
@@ -89,24 +89,30 @@ @@ -89,24 +89,30 @@
89 </div> 89 </div>
90 </div> 90 </div>
91 91
92 - <div id="search-result" class="row" ng-if="pagePropostas.proposals"> 92 + <div id="search-result" class="row" ng-if="pagePropostas.filtredProposals">
93 <div class="col-sm-12"> 93 <div class="col-sm-12">
94 <header class="header"> 94 <header class="header">
95 - <h2>Total de Propostas: "<b>{{pagePropostas.filtredProposals.length}} propostas</b>"</h2> 95 + <h2>Total de Propostas: "<b>{{pagePropostas.total_proposals}} propostas</b>"</h2>
96 </header> 96 </header>
97 </div> 97 </div>
98 </div> 98 </div>
99 99
100 <div class="row"> 100 <div class="row">
101 - <div class="col-sm-12" ng-if="pagePropostas.proposals"> 101 + <div class="col-sm-12" ng-if="!pagePropostas.loadingProposals && pagePropostas.filtredProposals && pagePropostas.total_proposals">
102 <proposal-grid proposals="pagePropostas.filtredProposals"></proposal-grid> 102 <proposal-grid proposals="pagePropostas.filtredProposals"></proposal-grid>
  103 + <app-paginator
  104 + page="pagePropostas.page"
  105 + per-page="pagePropostas.per_page"
  106 + total="pagePropostas.total_proposals"
  107 + change-page="pagePropostas.changePage(pageIndex)"
  108 + ></app-paginator>
103 </div> 109 </div>
104 - <div ng-if="!pagePropostas.proposals && pagePropostas.loadingProposals"> 110 + <div ng-if="pagePropostas.loadingProposals">
105 <div class="alert alert-info" role="alert"> 111 <div class="alert alert-info" role="alert">
106 Carregando propostas. 112 Carregando propostas.
107 </div> 113 </div>
108 </div> 114 </div>
109 - <div ng-if="!pagePropostas.proposals && pagePropostas.proposalsError"> 115 + <div ng-if="!pagePropostas.loadingProposals && pagePropostas.proposalsError">
110 <div class="alert alert-danger" role="alert"> 116 <div class="alert alert-danger" role="alert">
111 Não foi possível carregar a lista de propostas neste momento. 117 Não foi possível carregar a lista de propostas neste momento.
112 </div> 118 </div>