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 27 PropostasPageController.prototype.init = function() {
28 28 var vm = this;
29 29  
  30 + vm.page = 1;
  31 + vm.per_page = 20;
30 32 vm.themes = null;
31 33 vm.selectedTheme = null;
32 34 vm.filtredPrograms = null;
33   - vm.selectedProgram = null;
34   - vm.proposals = null;
35 35 vm.filtredProposals = null;
36 36 vm.query = null;
37 37 vm.search = vm.$location.search();
... ... @@ -73,11 +73,14 @@
73 73  
74 74 // load Proposals
75 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 83 vm.loadingProposals = false;
80   - vm.loading = false;
81 84  
82 85 if (cb) {
83 86 cb();
... ... @@ -86,7 +89,6 @@
86 89 vm.error = error;
87 90 vm.$log.error(error);
88 91 vm.loadingProposals = false;
89   - vm.loading = false;
90 92 });
91 93 };
92 94  
... ... @@ -100,23 +102,13 @@
100 102 vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue/*, oldValue*/) {
101 103 vm.search.tema = newValue ? newValue.slug : null;
102 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 108 vm.$scope.$watch('pagePropostas.query', function(newValue/*, oldValue*/) {
117 109 vm.search.filtro = newValue ? newValue : null;
118 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 119 vm.selectedTheme = null;
128 120 };
129 121  
130   - PropostasPageController.prototype.getFiltredProposals = function() {
  122 + PropostasPageController.prototype.changePage = function(pageIndex) {
131 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 163 PropostasPageController.prototype.submitSearch = function() {
... ... @@ -167,7 +169,7 @@
167 169 var $searchResult = angular.element('#search-result');
168 170 if ($searchResult && $searchResult.length > 0) {
169 171 angular.element('body').animate({scrollTop: $searchResult.offset().top}, 'fast');
170   - vm.filtredProposals = vm.getFiltredProposals();
  172 + vm.filterProposals();
171 173 }else {
172 174 vm.$log.warn('#search-result element not found.');
173 175 }
... ...
src/app/pages/propostas/propostas.html
... ... @@ -26,7 +26,7 @@
26 26 </div>
27 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 30 <div class="container">
31 31 <div class="row">
32 32 <div class="col-sm-12">
... ... @@ -36,7 +36,7 @@
36 36 </div>
37 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 40 <div class="container">
41 41 <div id="lista-de-propostas" class="row">
42 42 <div class="col-sm-4 col-md-3">
... ... @@ -72,7 +72,7 @@
72 72 </div>
73 73 </div>
74 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 76 <div class="col-xs-12">
77 77 <div class="input-group input-group-lg input-group-search">
78 78 <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
... ... @@ -89,24 +89,30 @@
89 89 </div>
90 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 93 <div class="col-sm-12">
94 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 96 </header>
97 97 </div>
98 98 </div>
99 99  
100 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 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 109 </div>
104   - <div ng-if="!pagePropostas.proposals && pagePropostas.loadingProposals">
  110 + <div ng-if="pagePropostas.loadingProposals">
105 111 <div class="alert alert-info" role="alert">
106 112 Carregando propostas.
107 113 </div>
108 114 </div>
109   - <div ng-if="!pagePropostas.proposals && pagePropostas.proposalsError">
  115 + <div ng-if="!pagePropostas.loadingProposals && pagePropostas.proposalsError">
110 116 <div class="alert alert-danger" role="alert">
111 117 Não foi possível carregar a lista de propostas neste momento.
112 118 </div>
... ...