Commit 538151d7797075c090dd56ea9a795cfc055c7e82
1 parent
4dfe41a7
Exists in
master
and in
8 other branches
Improve search with update
Showing
1 changed file
with
42 additions
and
10 deletions
Show diff stats
src/app/components/programas/programas.directive.js
... | ... | @@ -11,7 +11,7 @@ |
11 | 11 | function programaList() { |
12 | 12 | |
13 | 13 | /** @ngInject */ |
14 | - function ProgramaListController($scope, $log) { | |
14 | + function ProgramaListController($scope, $location, $log) { | |
15 | 15 | $log.debug('ProgramaListController'); |
16 | 16 | |
17 | 17 | // alias |
... | ... | @@ -19,6 +19,7 @@ |
19 | 19 | |
20 | 20 | // dependencies |
21 | 21 | vm.$scope = $scope; |
22 | + vm.$location = $location; | |
22 | 23 | vm.$log = $log; |
23 | 24 | |
24 | 25 | // initialization |
... | ... | @@ -28,15 +29,6 @@ |
28 | 29 | ProgramaListController.prototype.init = function () { |
29 | 30 | var vm = this; |
30 | 31 | |
31 | - vm.query = null; | |
32 | - vm.limitTo = 4; | |
33 | - vm.categoryFilter = null; | |
34 | - vm.orderCriteries = [ | |
35 | - { label: 'Título', name: 'title' }, | |
36 | - { label: 'Tema', name: 'category' }, | |
37 | - { label: 'Mais participações', name: 'more_participants' } | |
38 | - ]; | |
39 | - | |
40 | 32 | if(!vm.article){ |
41 | 33 | vm.$log.warn('no article to display. Tip: use a ng-if before use this directive'); |
42 | 34 | return; |
... | ... | @@ -45,6 +37,34 @@ |
45 | 37 | vm.categories = vm.article.categories; |
46 | 38 | vm.programs = vm.article.children; |
47 | 39 | vm.filtredProgramList = []; |
40 | + | |
41 | + vm.search = vm.$location.search(); | |
42 | + vm.query = vm.search ? vm.search.filtro : null; | |
43 | + vm.limitTo = vm.search ? vm.search.limite : 4; | |
44 | + vm.categoryFilter = vm.search ? vm.filterByCategorySlug(vm.search.tema) : null; | |
45 | + vm.categoryOptions = null; | |
46 | + vm.orderCriteries = [ | |
47 | + { label: 'Título', name: 'title' }, | |
48 | + { label: 'Tema', name: 'category' }, | |
49 | + { label: 'Mais participações', name: 'more_participants' } | |
50 | + ]; | |
51 | + | |
52 | + // update window location params | |
53 | + vm.$scope.$watch('vm.query', function(newValue, oldValue){ | |
54 | + vm.search.filtro = newValue; | |
55 | + vm.$location.search(vm.search); | |
56 | + }); | |
57 | + | |
58 | + vm.$scope.$watch('vm.limitTo', function(newValue, oldValue){ | |
59 | + vm.search.limite = newValue; | |
60 | + vm.$location.search(vm.search); | |
61 | + }); | |
62 | + | |
63 | + vm.$scope.$watch('vm.categoryFilter', function(newValue, oldValue){ | |
64 | + vm.search.tema = newValue ? newValue.slug : ''; | |
65 | + vm.$location.search(vm.search); | |
66 | + }); | |
67 | + | |
48 | 68 | }; |
49 | 69 | |
50 | 70 | ProgramaListController.prototype.getIconClasses = function (category) { |
... | ... | @@ -54,6 +74,18 @@ |
54 | 74 | return 'glyphicon glyphicon-exclamation-sign'; |
55 | 75 | }; |
56 | 76 | |
77 | + ProgramaListController.prototype.filterByCategorySlug = function (categorySlug) { | |
78 | + var vm = this; | |
79 | + var result = null; | |
80 | + | |
81 | + angular.forEach(vm.categories, function (value, key){ | |
82 | + if(value.slug === categorySlug){ | |
83 | + result = value; | |
84 | + } | |
85 | + }) | |
86 | + return result; | |
87 | + } | |
88 | + | |
57 | 89 | ProgramaListController.prototype.filterByCategory = function (category) { |
58 | 90 | var vm = this; |
59 | 91 | ... | ... |