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 | ... | ... |