Commit 252bbec3e84d451006aad158e007698f4374deda
1 parent
2720397f
Exists in
master
and in
8 other branches
Sync: improve vote box actions and feedback
Showing
4 changed files
with
58 additions
and
20 deletions
Show diff stats
src/app/components/article-service/article.service.js
@@ -23,6 +23,7 @@ | @@ -23,6 +23,7 @@ | ||
23 | getProposalById: getProposalById, | 23 | getProposalById: getProposalById, |
24 | getProposalsByTopicId: getProposalsByTopicId, | 24 | getProposalsByTopicId: getProposalsByTopicId, |
25 | createProposal: createProposal, | 25 | createProposal: createProposal, |
26 | + voteProposal: voteProposal, | ||
26 | getEvents: getEvents, | 27 | getEvents: getEvents, |
27 | subscribeToEvent: subscribeToEvent, | 28 | subscribeToEvent: subscribeToEvent, |
28 | searchTopics: searchTopics, | 29 | searchTopics: searchTopics, |
@@ -172,6 +173,19 @@ | @@ -172,6 +173,19 @@ | ||
172 | } | 173 | } |
173 | } | 174 | } |
174 | 175 | ||
176 | + function voteProposal (proposal_id, params, cbSuccess, cbError){ | ||
177 | + var url = service.apiArticles + proposal_id + '/vote'; | ||
178 | + var paramsExtended = angular.extend({ | ||
179 | + private_token: $rootScope.currentUser.private_token | ||
180 | + }, params); | ||
181 | + | ||
182 | + UtilService.post(url, paramsExtended).then(function(response){ | ||
183 | + cbSuccess(response); | ||
184 | + }).catch(function(error){ | ||
185 | + cbError(error); | ||
186 | + }); | ||
187 | + } | ||
188 | + | ||
175 | function getEvents (community_id, params, cbSuccess, cbError) { | 189 | function getEvents (community_id, params, cbSuccess, cbError) { |
176 | // Ex.: /api/v1/communities/19195/articles?categories_ids[]=' + cat_id + '&content_type=Event'; | 190 | // Ex.: /api/v1/communities/19195/articles?categories_ids[]=' + cat_id + '&content_type=Event'; |
177 | // Ex.: /api/v1/communities/' + community_id + '/articles?categories_ids[]=' + cat_id + '&content_type=Event'; | 191 | // Ex.: /api/v1/communities/' + community_id + '/articles?categories_ids[]=' + cat_id + '&content_type=Event'; |
src/app/components/proposal-box/proposal-box.directive.js
@@ -9,11 +9,12 @@ | @@ -9,11 +9,12 @@ | ||
9 | function proposalBox() { | 9 | function proposalBox() { |
10 | 10 | ||
11 | /** @ngInject */ | 11 | /** @ngInject */ |
12 | - function ProposalBoxController($scope, $state, VOTE_STATUS, VOTE_OPTIONS, $log) { | 12 | + function ProposalBoxController($scope, $rootScope, $state, VOTE_STATUS, VOTE_OPTIONS, $log) { |
13 | $log.debug('ProposalBoxController'); | 13 | $log.debug('ProposalBoxController'); |
14 | 14 | ||
15 | var vm = this; | 15 | var vm = this; |
16 | vm.$scope = $scope; | 16 | vm.$scope = $scope; |
17 | + vm.$rootScope = $rootScope; | ||
17 | vm.$state = $state; | 18 | vm.$state = $state; |
18 | vm.VOTE_STATUS = VOTE_STATUS; | 19 | vm.VOTE_STATUS = VOTE_STATUS; |
19 | vm.VOTE_OPTIONS = VOTE_OPTIONS; | 20 | vm.VOTE_OPTIONS = VOTE_OPTIONS; |
@@ -30,12 +31,26 @@ | @@ -30,12 +31,26 @@ | ||
30 | vm.canVote = vm.canVote || false; | 31 | vm.canVote = vm.canVote || false; |
31 | vm.focus = vm.focus || false; | 32 | vm.focus = vm.focus || false; |
32 | vm.STATE = null; | 33 | vm.STATE = null; |
34 | + vm.errorOnSkip = false; | ||
33 | }; | 35 | }; |
34 | 36 | ||
35 | ProposalBoxController.prototype.addListeners = function () { | 37 | ProposalBoxController.prototype.addListeners = function () { |
36 | var vm = this; | 38 | var vm = this; |
37 | 39 | ||
38 | - vm.$scope.$on('proposal-box:vote-response', function(e, data){ | 40 | + vm.$scope.$on('proposal-box:proposal-loaded', function(event, data){ |
41 | + if(data.success){ | ||
42 | + vm.STATE = null; | ||
43 | + } | ||
44 | + | ||
45 | + if(data.error){ | ||
46 | + vm.errorOnSkip = true; | ||
47 | + } | ||
48 | + }); | ||
49 | + vm.$scope.$on('proposal-box:vote-response', function(event, data){ | ||
50 | + vm.$log.debug('proposal-box:vote-response'); | ||
51 | + vm.$log.debug('event', event); | ||
52 | + vm.$log.debug('data', data); | ||
53 | + | ||
39 | if(data.success) { | 54 | if(data.success) { |
40 | vm.STATE = vm.VOTE_STATUS.SUCCESS; | 55 | vm.STATE = vm.VOTE_STATUS.SUCCESS; |
41 | } | 56 | } |
@@ -59,15 +74,19 @@ | @@ -59,15 +74,19 @@ | ||
59 | }); | 74 | }); |
60 | }; | 75 | }; |
61 | 76 | ||
62 | - ProposalBoxController.prototype.voteUp = function () { | 77 | + ProposalBoxController.prototype.vote = function (value) { |
63 | var vm = this; | 78 | var vm = this; |
64 | 79 | ||
65 | - vm.STATE = vm.VOTE_STATUS.LOADING; | ||
66 | - vm.$scope.$emit('proposal-box:vote', { | ||
67 | - OPTION: vm.VOTE_OPTIONS.UP, | ||
68 | - proposal_id: vm.proposal.id | ||
69 | - }); | ||
70 | - vm.$log.debug('Sending vote'); | 80 | + if(vm.$rootScope.currentUser){ |
81 | + vm.$scope.$emit('proposal-box:vote', { | ||
82 | + OPTION: value, | ||
83 | + proposal_id: vm.proposal.id | ||
84 | + }); | ||
85 | + vm.$log.debug('Sending vote', value); | ||
86 | + }else{ | ||
87 | + vm.$log.info('Must be logged in...'); | ||
88 | + | ||
89 | + } | ||
71 | }; | 90 | }; |
72 | 91 | ||
73 | ProposalBoxController.prototype.voteDown = function () { | 92 | ProposalBoxController.prototype.voteDown = function () { |
@@ -84,6 +103,7 @@ | @@ -84,6 +103,7 @@ | ||
84 | ProposalBoxController.prototype.skip = function () { | 103 | ProposalBoxController.prototype.skip = function () { |
85 | var vm = this; | 104 | var vm = this; |
86 | 105 | ||
106 | + vm.errorOnSkip = false; | ||
87 | vm.STATE = vm.VOTE_STATUS.LOADING; | 107 | vm.STATE = vm.VOTE_STATUS.LOADING; |
88 | vm.$scope.$emit('proposal-box:vote', { | 108 | vm.$scope.$emit('proposal-box:vote', { |
89 | OPTION: vm.VOTE_OPTIONS.SKIP, | 109 | OPTION: vm.VOTE_OPTIONS.SKIP, |
src/app/components/proposal-box/proposal-box.html
@@ -6,18 +6,21 @@ | @@ -6,18 +6,21 @@ | ||
6 | <div ng-show="vm.STATE === vm.VOTE_STATUS.LOADING"> | 6 | <div ng-show="vm.STATE === vm.VOTE_STATUS.LOADING"> |
7 | <div class="proposal-loading"> | 7 | <div class="proposal-loading"> |
8 | <div class="shadow"></div> | 8 | <div class="shadow"></div> |
9 | - <div class="text"> | 9 | + <div class="text text-center" ng-show="!vm.errorOnSkip"> |
10 | Carregando... | 10 | Carregando... |
11 | </div> | 11 | </div> |
12 | + <div class="text" ng-show="vm.errorOnSkip"> | ||
13 | + Erro ao carregar nova proposta. | ||
14 | + </div> | ||
12 | </div> | 15 | </div> |
13 | </div> | 16 | </div> |
14 | <div class="proposal-box--top"> | 17 | <div class="proposal-box--top"> |
15 | - <div class="proposal-box--theme color-theme-bg-complementar-2">{{::vm.category.name}}</div> | ||
16 | - <div class="proposal-box--program color-theme-bg">{{::vm.topic.title}}</div> | 18 | + <div class="proposal-box--theme color-theme-bg-complementar-2">{{vm.category.name}}</div> |
19 | + <div class="proposal-box--program color-theme-bg">{{vm.topic.title}}</div> | ||
17 | </div> | 20 | </div> |
18 | <div class="proposal-box--middle"> | 21 | <div class="proposal-box--middle"> |
19 | <div class="proposal-box--content"> | 22 | <div class="proposal-box--content"> |
20 | - <div class="proposal-box--content-inner">{{::vm.proposal.abstract}}</div> | 23 | + <div class="proposal-box--content-inner">{{vm.proposal.abstract}}</div> |
21 | </div> | 24 | </div> |
22 | <div ng-hide="vm.canVote" class="proposal-box--join"> | 25 | <div ng-hide="vm.canVote" class="proposal-box--join"> |
23 | <button class="btn btn-link color-theme-common-fg" ng-click="vm.showContent(vm.topic.slug)"> | 26 | <button class="btn btn-link color-theme-common-fg" ng-click="vm.showContent(vm.topic.slug)"> |
@@ -25,10 +28,10 @@ | @@ -25,10 +28,10 @@ | ||
25 | <span class="glyphicon glyphicon-menu-right color-theme-common-fg" aria-hidde="true"></span> | 28 | <span class="glyphicon glyphicon-menu-right color-theme-common-fg" aria-hidde="true"></span> |
26 | </button> | 29 | </button> |
27 | </div> | 30 | </div> |
28 | - <div ng-show="vm.canVote"class="proposal-box--actions text-center"> | 31 | + <div ng-show="vm.canVote" class="proposal-box--actions text-center"> |
29 | <div class="row"> | 32 | <div class="row"> |
30 | <div class="col-xs-4"> | 33 | <div class="col-xs-4"> |
31 | - <div class="action vote_for" ng-click="vm.voteUp()"> | 34 | + <div class="action vote_for" ng-click="vm.vote(vm.VOTE_OPTIONS.UP)"> |
32 | <div class="icon-circle"> | 35 | <div class="icon-circle"> |
33 | <span class="glyphicon glyphicon-ok" aria-hidden="true"></span> | 36 | <span class="glyphicon glyphicon-ok" aria-hidden="true"></span> |
34 | </div> | 37 | </div> |
@@ -44,7 +47,7 @@ | @@ -44,7 +47,7 @@ | ||
44 | </div> | 47 | </div> |
45 | </div> | 48 | </div> |
46 | <div class="col-xs-4"> | 49 | <div class="col-xs-4"> |
47 | - <div class="action vote_against" ng-click="vm.voteDown()"> | 50 | + <div class="action vote_against" ng-click="vm.vote(vm.VOTE_OPTIONS.DOWN)"> |
48 | <div class="icon-circle"> | 51 | <div class="icon-circle"> |
49 | <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> | 52 | <span class="glyphicon glyphicon-remove" aria-hidden="true"></span> |
50 | </div> | 53 | </div> |
@@ -66,7 +69,7 @@ | @@ -66,7 +69,7 @@ | ||
66 | <div class="proposal-box--ranking-inner"> | 69 | <div class="proposal-box--ranking-inner"> |
67 | <span class="icon icon-small icon-ranking" aria-hidden="true"></span> | 70 | <span class="icon icon-small icon-ranking" aria-hidden="true"></span> |
68 | <span>Colocação nos resultados:</span> | 71 | <span>Colocação nos resultados:</span> |
69 | - <span>{{::vm.proposal.ranking_position}}º</span> | 72 | + <span>{{vm.proposal.ranking_position}}º</span> |
70 | </div> | 73 | </div> |
71 | </div> | 74 | </div> |
72 | </div> | 75 | </div> |
src/app/components/proposal-box/proposal-box.scss
@@ -78,11 +78,12 @@ | @@ -78,11 +78,12 @@ | ||
78 | position: absolute; | 78 | position: absolute; |
79 | color: #fff; | 79 | color: #fff; |
80 | font-size: 24px; | 80 | font-size: 24px; |
81 | + line-height: 24px; | ||
81 | z-index: 1000; | 82 | z-index: 1000; |
83 | + width: 100% | ||
82 | top: 50%; | 84 | top: 50%; |
83 | - left: 50%; | ||
84 | - margin-top: -17px; | ||
85 | - margin-left: -75px; | 85 | + left: 0; |
86 | + margin-top: -12px; | ||
86 | } | 87 | } |
87 | 88 | ||
88 | .shadow { | 89 | .shadow { |