From c58d138690277f243ead741e9d2c106b41248c92 Mon Sep 17 00:00:00 2001 From: Caio SBA Date: Sun, 9 Aug 2015 23:35:10 -0300 Subject: [PATCH] Refactoring filters and pagination --- ConfJuvApp/www/html/_proposal_list.html | 12 ++++++------ ConfJuvApp/www/html/_right_sidebar.html | 12 +++++------- ConfJuvApp/www/index.html | 6 +++--- ConfJuvApp/www/js/config.js.example | 3 +-- ConfJuvApp/www/js/controllers.js | 103 ++++++++++++++++++++++++++++++++++++++++++------------------------------------------------------------- 5 files changed, 57 insertions(+), 79 deletions(-) diff --git a/ConfJuvApp/www/html/_proposal_list.html b/ConfJuvApp/www/html/_proposal_list.html index e78483e..584d9ce 100644 --- a/ConfJuvApp/www/html/_proposal_list.html +++ b/ConfJuvApp/www/html/_proposal_list.html @@ -32,15 +32,15 @@

Como você vai mudar o Brasil?

-

-

-
+

Carregando propostas...

+

Você já visualizou todas as propostas.

-

Deseja Carregar novamente?

+

Deseja Carregar novamente?

+ -
+ diff --git a/ConfJuvApp/www/html/_right_sidebar.html b/ConfJuvApp/www/html/_right_sidebar.html index 36cdf91..ad85c08 100644 --- a/ConfJuvApp/www/html/_right_sidebar.html +++ b/ConfJuvApp/www/html/_right_sidebar.html @@ -4,14 +4,12 @@ Filtros -

Filtrar propostas por tema

+

Mostrar apenas propostas do eixo:

+ Todos
diff --git a/ConfJuvApp/www/index.html b/ConfJuvApp/www/index.html index 7624c03..7d0099e 100644 --- a/ConfJuvApp/www/index.html +++ b/ConfJuvApp/www/index.html @@ -32,13 +32,13 @@ - + - - + + diff --git a/ConfJuvApp/www/js/config.js.example b/ConfJuvApp/www/js/config.js.example index c5b9063..3ef8884 100644 --- a/ConfJuvApp/www/js/config.js.example +++ b/ConfJuvApp/www/js/config.js.example @@ -3,6 +3,5 @@ var ConfJuvAppConfig = { noosferoApiPublicHost: 'http://app.juventude.gov.br', noosferoApiVersion: 'v1', noosferoDiscussion: 99895, - noosferoStatutePath: 'articles/participatorio/0010/2309/Resolucao-01-2015-etapa-digital.pdf', - proposalsPerPageAndTopic: 1 + noosferoStatutePath: 'articles/participatorio/0010/2309/Resolucao-01-2015-etapa-digital.pdf' }; diff --git a/ConfJuvApp/www/js/controllers.js b/ConfJuvApp/www/js/controllers.js index c0962b3..b8fa8bf 100644 --- a/ConfJuvApp/www/js/controllers.js +++ b/ConfJuvApp/www/js/controllers.js @@ -330,35 +330,30 @@ angular.module('confjuvapp.controllers', []) ******************************************************************************/ $scope.topics = []; - $scope.proposalList = []; - $scope.proposalsByTopic = {}; $scope.cards = []; - $scope.forceReload = false; + $scope.emptyTopicsCount = 0; + $scope.topicFilter = { value: 'all' }; - // Selected topics + $scope.reloadTopics = function() { + $scope.emptyTopicsCount = 0; - $scope.selection = []; - - // Helper method to get selected topics + if ($scope.filterTopic != 'all') { + $scope.emptyTopicsCount = $scope.topics.length - 1; + } - $scope.selectedTopics = function selectedTopics() { - return filterFilter($scope.topics, { selected: true }); + $scope.topics = []; + $scope.loadTopics($scope.token); }; - // Watch topics for changes - - $scope.$watch('topics|filter:{selected:true}', function (nv) { - $scope.selection = nv.map(function (topic) { - return topic.title; - }); - }, true); + $scope.reloadProposals = function() { + $scope.cards = []; + $scope.reloadTopics(); + }; // Load topics $scope.loadTopics = function(token) { - $scope.forceReload = false; $scope.loading = true; - // var path = '?private_token=' + token + '&fields=title,image,body,abstract&content_type=ProposalsDiscussionPlugin::Proposal'; var params = '?private_token=' + token + '&fields=title,id&content_type=ProposalsDiscussionPlugin::Topic'; var path = 'articles/' + ConfJuvAppConfig.noosferoDiscussion + '/children' + params; @@ -367,19 +362,11 @@ angular.module('confjuvapp.controllers', []) $scope.loading = false; var topics = resp.data.articles; for (var i = 0; i < topics.length; i++) { - var topic_id = topics[i].id; - var topic = null; - for (var j = 0; j < $scope.topics.length; j++) { - if (topic_id == $scope.topics[j].id) { - topic = $scope.topics[j]; - } - } - if (topic == null) { - topic = topics[i]; - topic.selected = true; - $scope.topics.push(topic); - } - $scope.proposalsByTopic[topic.id] = []; + var topic = topics[i]; + topic = topics[i]; + topic.lastProposalId = null; + topic.empty = false; + $scope.topics.push(topic); $scope.loadProposals(token, topic); } $scope.loading = false; @@ -392,25 +379,36 @@ angular.module('confjuvapp.controllers', []) // Load proposals $scope.loadProposals = function(token, topic) { + if ($scope.topicFilter.value != 'all' && topic.id != $scope.topicFilter.value) { + return; + } + $scope.loading = true; - last_proposal = $scope.proposalsByTopic[topic.id][$scope.proposalsByTopic[topic.id].length -1]; - last_proposal = last_proposal == undefined ? null : last_proposal.id; - var params = '?private_token=' + token + '&fields=title,image,body,abstract,id,tag_list,categories,created_by&content_type=ProposalsDiscussionPlugin::Proposal&limit=' + ConfJuvAppConfig.proposalsPerPageAndTopic + '&oldest=younger_than&reference_id=' + last_proposal; + var perPage = 1; + if ($scope.topicFilter.value != 'all') { + perPage = 11; + } + + var params = '?private_token=' + token + '&fields=title,image,body,abstract,id,tag_list,categories,created_by&content_type=ProposalsDiscussionPlugin::Proposal&limit=' + perPage + '&oldest=younger_than&reference_id=' + topic.lastProposalId; var path = 'articles/' + topic.id + '/children' + params; $http.get(ConfJuvAppUtils.pathTo(path)) .then(function(resp) { var proposals = resp.data.articles; - $scope.proposalsByTopic[topic.id] = []; + for (var i = 0; i < proposals.length; i++) { var proposal = proposals[i]; proposal.topic = topic; - $scope.proposalList.push(proposal); - $scope.proposalsByTopic[topic.id].push(proposal); $scope.cards.push(proposal); } + + if (proposals.length == 0 && !topic.empty) { + topic.empty = true; + $scope.emptyTopicsCount++; + } + $scope.loading = false; }, function(err) { $ionicPopup.alert({ title: 'Propostas', template: 'Não foi possível carregar as propostas do tópico ' + topic.title }); @@ -421,21 +419,17 @@ angular.module('confjuvapp.controllers', []) // Cards $scope.cardDestroyed = function(index) { + var thisProposal = $scope.cards[index]; + var topic = thisProposal.topic; + if (topic.lastProposalId == null || topic.lastProposalId > thisProposal.id) { + topic.lastProposalId = thisProposal.id; + } $scope.cards.splice(index, 1); if ($scope.cards.length === 0) { for (var i = 0; i < $scope.topics.length; i++) { var topic = $scope.topics[i]; - topic.selected = true; - $scope.proposalList= []; - $scope.loadProposals($scope.token, topic); - } - if ($scope.proposalList.length == 0){ - $scope.forceReload = true; - } - for (var i = 0; i < $scope.proposalList.length; i++) { - var card = $scope.proposalList[i]; - if (card.topic.selected) { - $scope.cards.push(card); + if (!topic.empty) { + $scope.loadProposals($scope.token, topic); } } } @@ -449,17 +443,6 @@ angular.module('confjuvapp.controllers', []) $scope.cardDestroyed(index); }; - // Swipe cards when filters are selected - $scope.$watch('selection', function() { - $scope.cards = []; - for (var i = 0; i < $scope.proposalList.length; i++) { - var card = $scope.proposalList[i]; - if (card.topic.selected) { - $scope.cards.push(card); - } - } - }); - /****************************************************************************** S I N G L E P R O P O S A L ******************************************************************************/ @@ -599,9 +582,7 @@ angular.module('confjuvapp.controllers', []) topic: topic, author: { name: $scope.user.name, id: $scope.user.id } }; - $scope.proposalList.push(proposal); $scope.cards.push(proposal); - $scope.proposalsByTopic[data.topic_id.id].push(proposal); $scope.loading = false; $scope.data.title = $scope.data.description = $scope.data.topic_id = null; document.getElementById('save-proposal').innerHTML = 'Criar'; -- libgit2 0.21.2