Commit 9ddbbe34c854b042f841da61b8b6361f92fa6608

Authored by Leonardo Merlin
1 parent e3a39a8e

fix page 'propostas' - filter params and scroll bugs

src/app/pages/propostas/propostas.controller.js
@@ -18,7 +18,7 @@ @@ -18,7 +18,7 @@
18 18
19 vm.init(); 19 vm.init();
20 vm.loadData(); 20 vm.loadData();
21 - // vm.attachListeners(); // attach listeners after load data (SYNC) 21 + vm.attachListeners();
22 vm.$rootScope.focusMainContent(); 22 vm.$rootScope.focusMainContent();
23 23
24 $log.debug('PropostasPageController'); 24 $log.debug('PropostasPageController');
@@ -31,11 +31,22 @@ @@ -31,11 +31,22 @@
31 vm.per_page = 10; 31 vm.per_page = 10;
32 vm.themes = null; 32 vm.themes = null;
33 vm.selectedTheme = null; 33 vm.selectedTheme = null;
34 - vm.filtredPrograms = null;  
35 vm.filtredProposals = null; 34 vm.filtredProposals = null;
36 vm.query = null; 35 vm.query = null;
37 vm.search = vm.$location.search(); 36 vm.search = vm.$location.search();
38 37
  38 + if (vm.search.tema) {
  39 + vm._filtredByThemeSlug = vm.search.tema;
  40 + }
  41 +
  42 + if (vm.search.filtro) {
  43 + vm._filtredByQuery = vm.search.filtro;
  44 + }
  45 +
  46 + if (vm.search.tema || vm.search.filtro) {
  47 + vm.loadingFilter = true;
  48 + }
  49 +
39 vm.loading = null; 50 vm.loading = null;
40 vm.error = null; 51 vm.error = null;
41 }; 52 };
@@ -61,7 +72,9 @@ @@ -61,7 +72,9 @@
61 // vm.loadProposals(function() { 72 // vm.loadProposals(function() {
62 // vm.attachListeners(); 73 // vm.attachListeners();
63 // }); 74 // });
64 - vm.attachListeners(); 75 + // vm.attachListeners();
  76 +
  77 + vm.filter();
65 }, function(error) { 78 }, function(error) {
66 vm.error = error; 79 vm.error = error;
67 vm.$log.error(error); 80 vm.$log.error(error);
@@ -70,30 +83,6 @@ @@ -70,30 +83,6 @@
70 }); 83 });
71 }; 84 };
72 85
73 - // PropostasPageController.prototype.loadProposals = function(cb) {  
74 - // var vm = this;  
75 -  
76 - // // load Proposals  
77 - // vm.loadingProposals = true;  
78 - // vm.DialogaService.searchProposals({  
79 - // page: vm.page,  
80 - // per_page: vm.per_page  
81 - // }, function(data) {  
82 - // vm.filtredProposals = data.articles;  
83 - // vm.total_proposals = parseInt(data._obj.headers('total'));  
84 -  
85 - // vm.loadingProposals = false;  
86 -  
87 - // if (cb) {  
88 - // cb();  
89 - // }  
90 - // }, function(error) {  
91 - // vm.error = error;  
92 - // vm.$log.error(error);  
93 - // vm.loadingProposals = false;  
94 - // });  
95 - // };  
96 -  
97 PropostasPageController.prototype.attachListeners = function() { 86 PropostasPageController.prototype.attachListeners = function() {
98 var vm = this; 87 var vm = this;
99 88
@@ -104,13 +93,19 @@ @@ -104,13 +93,19 @@
104 vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue/*, oldValue*/) { 93 vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue/*, oldValue*/) {
105 vm.search.tema = newValue ? newValue.slug : null; 94 vm.search.tema = newValue ? newValue.slug : null;
106 vm.$location.search('tema', vm.search.tema); 95 vm.$location.search('tema', vm.search.tema);
107 - vm.filterProposals(); 96 +
  97 + if (!vm.loadingFilter) {
  98 + vm.filterProposals();
  99 + }
108 }); 100 });
109 101
110 vm.$scope.$watch('pagePropostas.query', function(newValue/*, oldValue*/) { 102 vm.$scope.$watch('pagePropostas.query', function(newValue/*, oldValue*/) {
111 vm.search.filtro = newValue ? newValue : null; 103 vm.search.filtro = newValue ? newValue : null;
112 vm.$location.search('filtro', vm.search.filtro); 104 vm.$location.search('filtro', vm.search.filtro);
113 - vm.filterProposals(); 105 +
  106 + if (!vm.loadingFilter) {
  107 + vm.filterProposals();
  108 + }
114 }); 109 });
115 }; 110 };
116 111
@@ -128,6 +123,35 @@ @@ -128,6 +123,35 @@
128 vm.filterProposals(pageIndex); 123 vm.filterProposals(pageIndex);
129 }; 124 };
130 125
  126 + PropostasPageController.prototype.filter = function() {
  127 + var vm = this;
  128 +
  129 + if (vm.loadingThemes || vm.loadingProposals) {
  130 + vm.$log.info('No proposals or themes loaded yet. Abort.');
  131 + return;
  132 + }
  133 +
  134 + if (vm._filtredByThemeSlug) {
  135 + var slug = vm._filtredByThemeSlug;
  136 +
  137 + vm.DialogaService.getThemeBySlug(slug, function(theme) {
  138 + vm.selectedTheme = theme;
  139 + }, function(error) {
  140 + vm.$log.error('Error when try to "getThemeBySlug"', error);
  141 + });
  142 + }
  143 +
  144 + if (vm._filtredByQuery) {
  145 + vm.query = vm._filtredByQuery;
  146 + }
  147 +
  148 + if (vm._filtredByThemeSlug || vm._filtredByQuery) {
  149 + vm.filterProposals();
  150 + vm.loadingFilter = false;
  151 + }
  152 +
  153 + };
  154 +
131 PropostasPageController.prototype.filterProposals = function(_page, _per_page) { 155 PropostasPageController.prototype.filterProposals = function(_page, _per_page) {
132 var vm = this; 156 var vm = this;
133 157
@@ -165,7 +189,7 @@ @@ -165,7 +189,7 @@
165 PropostasPageController.prototype.submitSearch = function() { 189 PropostasPageController.prototype.submitSearch = function() {
166 var vm = this; 190 var vm = this;
167 191
168 - vm.loadingFilter = true; 192 + // vm.loadingFilter = true;
169 193
170 // scroll to result grid 194 // scroll to result grid
171 var $searchResult = angular.element('#search-result'); 195 var $searchResult = angular.element('#search-result');
src/app/pages/propostas/propostas.html
1 <div class="container"> 1 <div class="container">
2 - <div class="row">  
3 - <div class="col-sm-12">  
4 - <div ncy-breadcrumb></div> 2 + <div class="row">
  3 + <div class="col-sm-12">
  4 + <div ncy-breadcrumb></div>
  5 + </div>
5 </div> 6 </div>
6 - </div>  
7 </div> 7 </div>
8 -  
9 <div class="page--propostas" role="main"> 8 <div class="page--propostas" role="main">
10 - <section class="section-info" ng-if="pagePropostas.loading || pagePropostas.error">  
11 - <div class="container">  
12 - <div class="row">  
13 - <div class="col-md-12">  
14 - <div ng-if="pagePropostas.loading && !pagePropostas.error">  
15 - <div class="alert alert-info" role="alert">Carregando conteúdo...</div>  
16 - </div>  
17 -  
18 - <div ng-if="pagePropostas.error">  
19 - <div class="alert alert-danger" role="alert">  
20 - Erro ao carregar o conteúdo principal. 9 + <section class="section-info" ng-if="pagePropostas.loading || pagePropostas.error">
  10 + <div class="container">
  11 + <div class="row">
  12 + <div class="col-md-12">
  13 + <div ng-if="pagePropostas.loading && !pagePropostas.error">
  14 + <div class="alert alert-info" role="alert">Carregando conteúdo...</div>
  15 + </div>
  16 + <div ng-if="pagePropostas.error">
  17 + <div class="alert alert-danger" role="alert">
  18 + Erro ao carregar o conteúdo principal.
  19 + </div>
  20 + </div>
  21 + </div>
21 </div> 22 </div>
22 - </div>  
23 </div> 23 </div>
24 - </div>  
25 - </div>  
26 - </section>  
27 -  
28 - <section class="section--header" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">  
29 - <div class="container">  
30 - <div class="row">  
31 - <div class="col-sm-12">  
32 - <h1>Propostas</h1>  
33 - </div>  
34 - </div>  
35 - </div>  
36 - </section>  
37 -  
38 - <section class="section--articles section-gray section-space-up" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">  
39 - <div class="container">  
40 - <div id="lista-de-propostas" class="row">  
41 - <div class="col-sm-4 col-md-3">  
42 - <div class="row visible-xs">  
43 - <div class="col-xs-12">  
44 - <div class="input-group input-group-lg input-group-search">  
45 - <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>  
46 - <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pagePropostas.query" placeholder="Buscar propostas" aria-label="Buscar propostas">  
47 - <span class="input-group-btn">  
48 - <button type="button" class="btn btn-default" ng-click="pagePropostas.submitSearch()">  
49 - <span class="icon-circle icon-small color-theme-common-bg">  
50 - <span class="glyphicon glyphicon-search"></span>  
51 - </span>  
52 - <span class="sr-only">Buscar</span>  
53 - </button>  
54 - </span>  
55 - </div>  
56 - <br/>  
57 - </div>  
58 - </div>  
59 - <div ng-if="pagePropostas.themes">  
60 - <category-list categories="pagePropostas.themes" selected-category="pagePropostas.selectedTheme"></category-list>  
61 - </div>  
62 - <div ng-if="!pagePropostas.themes && pagePropostas.loadingThemes">  
63 - <div class="alert alert-info" role="alert">  
64 - Carregando temas. 24 + </section>
  25 + <section class="section--header" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">
  26 + <div class="container">
  27 + <div class="row">
  28 + <div class="col-sm-12">
  29 + <h1>Propostas</h1>
  30 + </div>
65 </div> 31 </div>
66 - </div>  
67 - <div ng-if="!pagePropostas.themes && pagePropostas.themesError">  
68 - <div class="alert alert-danger" role="alert">  
69 - Não foi possível carregar a lista de temas neste momento.  
70 - </div>  
71 - </div>  
72 </div> 32 </div>
73 - <div class="col-sm-8 col-md-9">  
74 - <div class="row hidden-xs" ng-if="pagePropostas.filtredProposals">  
75 - <div class="col-xs-12">  
76 - <div class="input-group input-group-lg input-group-search">  
77 - <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>  
78 - <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pagePropostas.query" placeholder="Buscar propostas" aria-label="Buscar propostas">  
79 - <span class="input-group-btn">  
80 - <button type="button" class="btn btn-default" ng-click="pagePropostas.submitSearch()">  
81 - <span class="icon-circle icon-small color-theme-common-bg">  
82 - <span class="glyphicon glyphicon-search"></span>  
83 - </span>  
84 - <span class="sr-only">Buscar</span>  
85 - </button>  
86 - </span>  
87 - </div>  
88 - </div>  
89 - </div>  
90 -  
91 - <div id="search-result" class="row" ng-if="pagePropostas.filtredProposals">  
92 - <div class="col-sm-12">  
93 - <header class="header">  
94 - <h2>Total de Propostas: "<b>{{pagePropostas.total_proposals}} propostas</b>"</h2>  
95 - </header>  
96 - </div>  
97 - </div>  
98 -  
99 - <div class="row">  
100 - <div class="col-sm-12" ng-if="!pagePropostas.loadingProposals && pagePropostas.filtredProposals && pagePropostas.total_proposals">  
101 - <proposal-grid proposals="pagePropostas.filtredProposals"></proposal-grid>  
102 - <app-paginator  
103 - page="pagePropostas.page"  
104 - per-page="pagePropostas.per_page"  
105 - total="pagePropostas.total_proposals"  
106 - change-page="pagePropostas.changePage(pageIndex)"  
107 - ></app-paginator> 33 + </section>
  34 + <section class="section--articles section-gray section-space-up" ng-if="pagePropostas.filtredProposals || pagePropostas.themes">
  35 + <div class="container">
  36 + <div id="lista-de-propostas" class="row">
  37 + <div class="col-sm-4 col-md-3">
  38 + <div class="row visible-xs">
  39 + <div class="col-xs-12">
  40 + <div class="input-group input-group-lg input-group-search">
  41 + <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
  42 + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pagePropostas.query" placeholder="Buscar propostas" aria-label="Buscar propostas">
  43 + <div class="input-group-btn">
  44 + <button type="button" class="btn btn-default" ng-click="pagePropostas.submitSearch()">
  45 + <div class="icon-circle icon-small color-theme-common-bg">
  46 + <span class="glyphicon glyphicon-search"></span>
  47 + </div>
  48 + <span class="sr-only">Buscar</span>
  49 + </button>
  50 + </div>
  51 + </div>
  52 + <br/>
  53 + </div>
  54 + </div>
  55 + <div ng-if="pagePropostas.themes">
  56 + <category-list categories="pagePropostas.themes" selected-category="pagePropostas.selectedTheme"></category-list>
  57 + </div>
  58 + <div ng-if="!pagePropostas.themes && pagePropostas.loadingThemes">
  59 + <div class="alert alert-info" role="alert">
  60 + Carregando temas.
  61 + </div>
  62 + </div>
  63 + <div ng-if="!pagePropostas.themes && pagePropostas.themesError">
  64 + <div class="alert alert-danger" role="alert">
  65 + Não foi possível carregar a lista de temas neste momento.
  66 + </div>
  67 + </div>
  68 + </div>
  69 + <div class="col-sm-8 col-md-9">
  70 + <div class="row hidden-xs" ng-if="pagePropostas.filtredProposals">
  71 + <div class="col-xs-12">
  72 + <div class="input-group input-group-lg input-group-search">
  73 + <label for="articleQueryFilter" class="control-label sr-only">Buscar propostas:</label>
  74 + <input id="articleQueryFilter" type="search" class="form-control input-search" ng-model="pagePropostas.query" placeholder="Buscar propostas" aria-label="Buscar propostas">
  75 + <div class="input-group-btn">
  76 + <button type="button" class="btn btn-default" ng-click="pagePropostas.submitSearch()">
  77 + <div class="icon-circle icon-small color-theme-common-bg">
  78 + <span class="glyphicon glyphicon-search"></span>
  79 + </div>
  80 + <span class="sr-only">Buscar</span>
  81 + </button>
  82 + </div>
  83 + </div>
  84 + </div>
  85 + </div>
  86 + <div id="search-result" class="row" ng-if="pagePropostas.filtredProposals">
  87 + <div class="col-sm-12">
  88 + <header class="header">
  89 + <h2>Total de Propostas: "<b>{{pagePropostas.total_proposals}} propostas</b>"</h2>
  90 + </header>
  91 + </div>
  92 + </div>
  93 + <div class="row">
  94 + <div class="col-sm-12" ng-if="!pagePropostas.loadingProposals && pagePropostas.filtredProposals && pagePropostas.total_proposals">
  95 + <proposal-grid proposals="pagePropostas.filtredProposals"></proposal-grid>
  96 + <app-paginator page="pagePropostas.page" per-page="pagePropostas.per_page" total="pagePropostas.total_proposals" change-page="pagePropostas.changePage(pageIndex)"></app-paginator>
  97 + </div>
  98 + <div ng-if="pagePropostas.loadingProposals">
  99 + <div class="alert alert-info" role="alert">
  100 + Carregando propostas.
  101 + </div>
  102 + </div>
  103 + <div ng-if="!pagePropostas.loadingProposals && pagePropostas.proposalsError">
  104 + <div class="alert alert-danger" role="alert">
  105 + Não foi possível carregar a lista de propostas neste momento.
  106 + </div>
  107 + </div>
  108 + </div>
  109 + </div>
108 </div> 110 </div>
109 - <div ng-if="pagePropostas.loadingProposals">  
110 - <div class="alert alert-info" role="alert">  
111 - Carregando propostas.  
112 - </div>  
113 - </div>  
114 - <div ng-if="!pagePropostas.loadingProposals && pagePropostas.proposalsError">  
115 - <div class="alert alert-danger" role="alert">  
116 - Não foi possível carregar a lista de propostas neste momento.  
117 - </div>  
118 - </div>  
119 - </div>  
120 </div> 111 </div>
121 - </div>  
122 - </div>  
123 - </section> 112 + </section>
124 </div> 113 </div>