diff --git a/src/app/components/app-paginator/app-paginator.directive.js b/src/app/components/app-paginator/app-paginator.directive.js new file mode 100644 index 0000000..c679be3 --- /dev/null +++ b/src/app/components/app-paginator/app-paginator.directive.js @@ -0,0 +1,67 @@ +(function() { + 'use strict'; + + angular + .module('dialoga') + .directive('appPaginator', appPaginator); + + /** @ngInject */ + function appPaginator() { + + /** @ngInject */ + function AppPaginatorController($log) { + var vm = this; + + vm.$log = $log; + + vm.init(); + + $log.debug('AppPaginatorController'); + } + + AppPaginatorController.prototype.init = function () { + var vm = this; + + vm.page = vm.page || 1; + vm.perPage = vm.perPage || 20; + vm.total = vm.total || 0; + }; + + AppPaginatorController.prototype.showPage = function (pageIndex) { + var vm = this; + + if (pageIndex < 0) { + pageIndex = 0; + } + + if (pageIndex > (vm.arraypages.length-1)) { + pageIndex = vm.arraypages.length-1; + } + + if(vm.changePage){ + vm.changePage({pageIndex: (pageIndex + 1 )}); + }else{ + vm.proposalsPerPage = vm.getProposalsPerPage(pageIndex); + } + vm.currentPageIndex = pageIndex; + }; + + var directive = { + restrict: 'E', + templateUrl: 'app/components/app-paginator/app-paginator.html', + scope: { + page: '=', + perPage: '=', + total: '=', + changePage: '&' + }, + controller: AppPaginatorController, + controllerAs: 'vm', + bindToController: true + }; + + + return directive; + } + +})(); diff --git a/src/app/components/app-paginator/app-paginator.html b/src/app/components/app-paginator/app-paginator.html new file mode 100644 index 0000000..e5e0337 --- /dev/null +++ b/src/app/components/app-paginator/app-paginator.html @@ -0,0 +1,17 @@ + diff --git a/src/app/components/dialoga-service/dialoga.service.js b/src/app/components/dialoga-service/dialoga.service.js index 95bc680..dee46c5 100644 --- a/src/app/components/dialoga-service/dialoga.service.js +++ b/src/app/components/dialoga-service/dialoga.service.js @@ -160,7 +160,7 @@ var result = CACHE.programs.filter(function filterProgramBySlug (program) { var category = program.categories[0]; - if(angular.equals(category.id, themeId)) { + if(category && angular.equals(category.id, themeId)) { return true; } return false; @@ -226,8 +226,8 @@ ArticleService.searchTopics({query: query}, cbSuccess, cbError); } - function searchProposals (query, cbSuccess, cbError) { - ArticleService.searchProposals({query: query}, cbSuccess, cbError); + function searchProposals (params, cbSuccess, cbError) { + ArticleService.searchProposals(params, cbSuccess, cbError); } function _pipeHandleYoutube (data) { diff --git a/src/app/components/proposal-list/proposal-list.directive.js b/src/app/components/proposal-list/proposal-list.directive.js index ceb84da..fd56af3 100644 --- a/src/app/components/proposal-list/proposal-list.directive.js +++ b/src/app/components/proposal-list/proposal-list.directive.js @@ -44,16 +44,13 @@ var vm = this; vm.currentPageIndex = 0; - vm.proposalsPerPage = vm.getProposalsPerPage(0); - - vm.proposalsLength = vm.proposals.length; - + vm.proposalsLength = vm.total || vm.proposals.length; if ((vm.proposalsLength % vm.perPage) === 0) { - vm.pages = vm.proposalsLength / vm.perPage; + vm.pages = vm.proposalsLength / vm.perPage; } else{ - vm.pages = (vm.proposalsLength / vm.perPage) + 1; + vm.pages = (vm.proposalsLength / vm.perPage) + 1; } // vm.arraypages = new Array(Math.ceil(vm.pages)); @@ -98,7 +95,11 @@ pageIndex = vm.arraypages.length-1; } - vm.proposalsPerPage = vm.getProposalsPerPage(pageIndex); + if(vm.changePage){ + vm.changePage({pageIndex: (pageIndex + 1 )}); + }else{ + vm.proposalsPerPage = vm.getProposalsPerPage(pageIndex); + } vm.currentPageIndex = pageIndex; }; @@ -132,7 +133,10 @@ templateUrl: 'app/components/proposal-list/proposal-list.html', scope: { proposals: '=', - perPage: '=' + page: '=', + perPage: '=', + total: '=', + changePage: '&' }, controller: ProposalListController, controllerAs: 'vm', diff --git a/src/app/components/util-service/utils.service.js b/src/app/components/util-service/utils.service.js index b82bf29..c646ad9 100644 --- a/src/app/components/util-service/utils.service.js +++ b/src/app/components/util-service/utils.service.js @@ -48,6 +48,7 @@ */ function handleSuccess (response) { $log.debug('[SUCCESS]', response); + response.data._obj = response; return response.data; } diff --git a/src/app/index.route.js b/src/app/index.route.js index 6f4093f..e85861c 100644 --- a/src/app/index.route.js +++ b/src/app/index.route.js @@ -106,12 +106,12 @@ .state('ranking', { url: '/ranking?tema&programa&filtro', reloadOnSearch: false, - ncyBreadcrumb: {label: 'Propostas'}, + ncyBreadcrumb: {label: 'Ranking'}, views: { 'main': { - templateUrl: 'app/pages/propostas/ranking.html', - controller: 'PropostasPageController', - controllerAs: 'pagePropostas' + templateUrl: 'app/pages/ranking/ranking.html', + controller: 'RankingPageController', + controllerAs: 'pageRanking' } } }) diff --git a/src/app/pages/propostas/propostas.controller.js b/src/app/pages/propostas/propostas.controller.js index c3dae9b..70da4fc 100644 --- a/src/app/pages/propostas/propostas.controller.js +++ b/src/app/pages/propostas/propostas.controller.js @@ -1,8 +1,3 @@ -/** - * Controlador das páginas: - * - Propostas - * - Ranking - */ (function() { 'use strict'; @@ -50,10 +45,7 @@ // Behaviour: // 1. Load themes - // 2. Select a Random Theme (T) - // 3. Load programs of T - // 4. Select a random program of T - // 5. Filter the list of proposals + // 1. Load Proposals per_page // END. // 1. Load themes @@ -63,30 +55,8 @@ vm.loadingThemes = false; vm.loading = false; - // 2. Select a Random Theme (T) - var selectedTheme = null; - if(vm.search.tema){ - - // vanilla filter - var results = vm.themes.filter(function(t){ - return t.slug === vm.search.tema; - }); - - if(results && results.length > 0){ - selectedTheme = results[0]; - vm.selectedTheme = selectedTheme; - } - } - - if(!selectedTheme){ - vm.selectedTheme = vm.themes[Math.floor(Math.random() * vm.themes.length)]; - } - - // 3. Load programs of T - // (AND 4) - var themeId = vm.selectedTheme.id; - vm.loadPrograms(themeId, function(){ - vm.loadProposals(); + vm.loadProposals(function (){ + vm.attachListeners(); }); }, function (error) { vm.error = error; @@ -96,44 +66,7 @@ }); }; - PropostasPageController.prototype.loadPrograms = function (themeId, cb) { - var vm = this; - - vm.DialogaService.getProgramsByThemeId(themeId, function (programs){ - - vm.filtredPrograms = programs; - - // 4. Select a random program of T - var selectedProgram = null; - if(vm.search.programa){ - - // vanilla filter - var results = vm.filtredPrograms.filter(function(p){ - return p.slug === vm.search.programa; - }); - - if(results && results.length > 0){ - selectedProgram = results[0]; - vm.selectedProgram = selectedProgram; - } - } - - if(!selectedProgram){ - vm.selectedProgram = vm.filtredPrograms[Math.floor(Math.random() * vm.filtredPrograms.length)]; - } - - if(cb){ - cb(); - } - }, function(error){ - vm.$log.error(error); - if(cb){ - cb(); - } - }); - }; - - PropostasPageController.prototype.loadProposals = function () { + PropostasPageController.prototype.loadProposals = function (cb) { var vm = this; // load Proposals @@ -144,7 +77,9 @@ vm.loadingProposals = false; vm.loading = false; - vm.attachListeners(); + if(cb){ + cb(); + } }, function (error) { vm.error = error; vm.$log.error(error); @@ -163,12 +98,7 @@ vm.$scope.$watch('pagePropostas.selectedTheme', function(newValue, oldValue) { vm.search.tema = newValue ? newValue.slug : null; vm.$location.search('tema', vm.search.tema); - - if(vm.selectedTheme && vm.selectedTheme.id){ - vm.loadPrograms(vm.selectedTheme.id, function(){ - vm.filtredProposals = vm.getFiltredProposals(); - }); - } + vm.filtredProposals = vm.getFiltredProposals(); }); vm.$scope.$on('change-selectedTopic', function (event, selectedTopic) { @@ -188,17 +118,6 @@ }); }; - PropostasPageController.prototype.showAllPrograms = function($event) { - var vm = this; - $event.stopPropagation(); - - vm.resetFilterValues(); - - vm._showAllFlag = true; - - vm.filtredPrograms = vm.getFiltredPrograms(); - }; - PropostasPageController.prototype.resetFilterValues = function() { var vm = this; diff --git a/src/app/pages/propostas/ranking.html b/src/app/pages/propostas/ranking.html deleted file mode 100644 index f2f3c53..0000000 --- a/src/app/pages/propostas/ranking.html +++ /dev/null @@ -1,68 +0,0 @@ -