Commit 252bbec3e84d451006aad158e007698f4374deda

Authored by Leonardo Merlin
1 parent 2720397f

Sync: improve vote box actions and feedback

src/app/components/article-service/article.service.js
... ... @@ -23,6 +23,7 @@
23 23 getProposalById: getProposalById,
24 24 getProposalsByTopicId: getProposalsByTopicId,
25 25 createProposal: createProposal,
  26 + voteProposal: voteProposal,
26 27 getEvents: getEvents,
27 28 subscribeToEvent: subscribeToEvent,
28 29 searchTopics: searchTopics,
... ... @@ -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 189 function getEvents (community_id, params, cbSuccess, cbError) {
176 190 // Ex.: /api/v1/communities/19195/articles?categories_ids[]=' + cat_id + '&content_type=Event';
177 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 9 function proposalBox() {
10 10  
11 11 /** @ngInject */
12   - function ProposalBoxController($scope, $state, VOTE_STATUS, VOTE_OPTIONS, $log) {
  12 + function ProposalBoxController($scope, $rootScope, $state, VOTE_STATUS, VOTE_OPTIONS, $log) {
13 13 $log.debug('ProposalBoxController');
14 14  
15 15 var vm = this;
16 16 vm.$scope = $scope;
  17 + vm.$rootScope = $rootScope;
17 18 vm.$state = $state;
18 19 vm.VOTE_STATUS = VOTE_STATUS;
19 20 vm.VOTE_OPTIONS = VOTE_OPTIONS;
... ... @@ -30,12 +31,26 @@
30 31 vm.canVote = vm.canVote || false;
31 32 vm.focus = vm.focus || false;
32 33 vm.STATE = null;
  34 + vm.errorOnSkip = false;
33 35 };
34 36  
35 37 ProposalBoxController.prototype.addListeners = function () {
36 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 54 if(data.success) {
40 55 vm.STATE = vm.VOTE_STATUS.SUCCESS;
41 56 }
... ... @@ -59,15 +74,19 @@
59 74 });
60 75 };
61 76  
62   - ProposalBoxController.prototype.voteUp = function () {
  77 + ProposalBoxController.prototype.vote = function (value) {
63 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 92 ProposalBoxController.prototype.voteDown = function () {
... ... @@ -84,6 +103,7 @@
84 103 ProposalBoxController.prototype.skip = function () {
85 104 var vm = this;
86 105  
  106 + vm.errorOnSkip = false;
87 107 vm.STATE = vm.VOTE_STATUS.LOADING;
88 108 vm.$scope.$emit('proposal-box:vote', {
89 109 OPTION: vm.VOTE_OPTIONS.SKIP,
... ...
src/app/components/proposal-box/proposal-box.html
... ... @@ -6,18 +6,21 @@
6 6 <div ng-show="vm.STATE === vm.VOTE_STATUS.LOADING">
7 7 <div class="proposal-loading">
8 8 <div class="shadow"></div>
9   - <div class="text">
  9 + <div class="text text-center" ng-show="!vm.errorOnSkip">
10 10 Carregando...
11 11 </div>
  12 + <div class="text" ng-show="vm.errorOnSkip">
  13 + Erro ao carregar nova proposta.
  14 + </div>
12 15 </div>
13 16 </div>
14 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 20 </div>
18 21 <div class="proposal-box--middle">
19 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 24 </div>
22 25 <div ng-hide="vm.canVote" class="proposal-box--join">
23 26 <button class="btn btn-link color-theme-common-fg" ng-click="vm.showContent(vm.topic.slug)">
... ... @@ -25,10 +28,10 @@
25 28 <span class="glyphicon glyphicon-menu-right color-theme-common-fg" aria-hidde="true"></span>
26 29 </button>
27 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 32 <div class="row">
30 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 35 <div class="icon-circle">
33 36 <span class="glyphicon glyphicon-ok" aria-hidden="true"></span>
34 37 </div>
... ... @@ -44,7 +47,7 @@
44 47 </div>
45 48 </div>
46 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 51 <div class="icon-circle">
49 52 <span class="glyphicon glyphicon-remove" aria-hidden="true"></span>
50 53 </div>
... ... @@ -66,7 +69,7 @@
66 69 <div class="proposal-box--ranking-inner">
67 70 <span class="icon icon-small icon-ranking" aria-hidden="true"></span>
68 71 <span>Colocação nos resultados:</span>
69   - <span>{{::vm.proposal.ranking_position}}º</span>
  72 + <span>{{vm.proposal.ranking_position}}º</span>
70 73 </div>
71 74 </div>
72 75 </div>
... ...
src/app/components/proposal-box/proposal-box.scss
... ... @@ -78,11 +78,12 @@
78 78 position: absolute;
79 79 color: #fff;
80 80 font-size: 24px;
  81 + line-height: 24px;
81 82 z-index: 1000;
  83 + width: 100%
82 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 89 .shadow {
... ...