(function() { 'use strict'; angular .module('dialoga') .controller('ProgramaPageController', ProgramaPageController); /** @ngInject */ function ProgramaPageController(DialogaService, PATH, VOTE_OPTIONS, PROPOSAL_STATUS, $state, $location, $scope, $rootScope, $element, $timeout, $sce, $log) { var vm = this; vm.DialogaService = DialogaService; vm.PATH = PATH; vm.VOTE_OPTIONS = VOTE_OPTIONS; vm.PROPOSAL_STATUS = PROPOSAL_STATUS; vm.$state = $state; vm.$location = $location; vm.$scope = $scope; vm.$rootScope = $rootScope; vm.$element = $element; vm.$timeout = $timeout; vm.$sce = $sce; vm.$log = $log; vm.init(); vm.loadData(); vm.attachListeners(); vm.$rootScope.focusMainContent(); vm.$log.debug('ProgramaPageController'); } ProgramaPageController.prototype.init = function() { var vm = this; vm.article = null; vm.category = null; vm.loading = null; vm.loadingTopProposals = null; vm.loadingProposalBox = null; vm.sendProposalRedirectURI = null; // vm.voteProposalRedirectURI = null; vm.search = vm.$location.search(); vm.error = false; }; ProgramaPageController.prototype.loadData = function() { var vm = this; vm.loading = true; vm.proposalStatus = null; // Get program by slug var slug = vm.$state.params.slug; if (!slug) { vm.$log.error('slug not defined.'); vm.$log.info('Rollback to home page.'); vm.$state.go('inicio', {}, {location: true}); } vm.DialogaService.getProgramBySlug(slug, function(article) { vm.article = article; vm.category = vm.article.categories[0]; vm.sendProposalRedirectURI = 'state=programa&task=send-proposal&slug=' + slug; // vm.voteProposalRedirectURI = 'state=programa&task=vote-proposal&slug=' + slug; // update the breadcrumb vm.$rootScope.contentTitle = vm.article.title; // set the banner image with full image path if (!vm.banner && vm.article.image) { vm.banner = { src: vm.PATH.image + vm.article.image.url, alt: 'Imagem de destaque do conteúdo' }; } if(vm.article.body && !vm.article.bodyTrusted){ vm.article.bodyTrusted = vm.$sce.trustAsHtml(vm.article.body); } vm.loadingTopProposals = true; vm.DialogaService.getProposalsByTopicId(vm.article.id, { 'limit': 5 }, function(data) { vm.total_proposals = parseInt(data._obj.headers('total')); vm.proposals = data.articles; vm.proposalsTopFive = vm.proposals.slice(0, 5); vm.proposalsTopRated = vm.proposals.slice(0, 3); vm.loadingTopProposals = false; }, function(error) { vm.$log.error(error); vm.loadingTopProposals = false; }); vm.loadingProposalBox = true; if (vm.search.proposal_id) { vm.loadProposalById(vm.search.proposal_id); }else { // random proposal vm.loadRandomProposal(); } vm.loading = false; }, function(error) { vm.$log.error(error); vm.error = error; vm.loading = false; }); }; ProgramaPageController.prototype.attachListeners = function() { var vm = this; vm.$scope.$on('proposal-carousel:showProposalsList', function() { vm.showProposalsList(); }); vm.$scope.$on('cadastro-proposa:startSendProposal', function(event, proposal) { vm.proposalStatus = vm.PROPOSAL_STATUS.SENDING; var category_id = vm.article.categories[0].id; vm.DialogaService.createProposal(proposal, vm.article.id, category_id, function(response) { vm.$log.debug('response', response); // vm.message = // vm.proposalStatus = vm.PROPOSAL_STATUS.SENT | vm.PROPOSAL_STATUS.SUCCESS; vm.proposalStatus = vm.PROPOSAL_STATUS.SUCCESS; }, function(error) { vm.$log.error(error); vm.error = error; if (vm.error.code === 400){ // Bad Request vm.error.message = ''; vm.error.message += 'Não foi possível enviar a proposta.
'; vm.error.message += 'Este problema já foi registrado em nossos servidores.
'; vm.error.message += 'Por favor, tente novamente mais tarde.'; } // vm.proposalStatus = vm.PROPOSAL_STATUS.SENT | vm.PROPOSAL_STATUS.ERROR; vm.proposalStatus = vm.PROPOSAL_STATUS.ERROR; }); }); }; ProgramaPageController.prototype.loadProposalById = function(proposal_id) { var vm = this; vm.DialogaService.getProposalById(proposal_id, { 'limit': '1' }, vm._handleSuccessOnGetProposal.bind(vm), vm._handleErrorOnGetProposal.bind(vm)); }; ProgramaPageController.prototype.loadRandomProposal = function() { var vm = this; vm.DialogaService.getProposalsByTopicId(vm.article.id, { 'order': 'random()', 'limit': '1' }, vm._handleSuccessOnGetProposal.bind(vm), vm._handleErrorOnGetProposal.bind(vm)); }; ProgramaPageController.prototype._handleSuccessOnGetProposal = function(data) { var vm = this; if (data && data.articles) { var MAX = data.articles.length; vm.randomProposal = data.articles[Math.floor(Math.random() * MAX)]; vm.loadingProposalBox = false; vm.$scope.$broadcast('proposal-box:proposal-loaded', { success: true}); } // scroll to focused proposal if (vm.search.proposal_id) { vm.$timeout(function() { var target = angular.element('.focused-proposal'); if (target && target.length > 0) { angular.element('body').animate({scrollTop: target.offset().top}, 'fast'); } }, 300); } }; ProgramaPageController.prototype._handleErrorOnGetProposal = function(error) { var vm = this; vm.$log.error(error); vm.$scope.$broadcast('proposal-box:proposal-loaded', { error: true}); }; ProgramaPageController.prototype.voteSkip = function() { var vm = this; vm.loadRandomProposal(); }; ProgramaPageController.prototype.vote = function(proposal_id, value) { var vm = this; if (value === vm.VOTE_OPTIONS.SKIP) { vm.voteSkip(); return; } if (!vm.$rootScope.temporaryToken) { vm.$log.debug('"temporaryToken" not defined. Abort.'); return; } vm.DialogaService.voteProposal(proposal_id, { value: value }).then(function(response) { vm.$log.debug('voteProposal response', response); response.success = true; vm.$scope.$broadcast('proposal-box:vote-response', response); }, function(response) { vm.$log.debug('voteProposal error', response); response.error = true; vm.$scope.$broadcast('proposal-box:vote-response', response); }).finally(function(response){ vm.$log.debug('voteProposal finally', response); }); }; ProgramaPageController.prototype.showProposalsList = function() { var vm = this; vm.findAndShow('#section-proposal-list'); }; ProgramaPageController.prototype.hideProposalsList = function() { var vm = this; vm.findAndHide('#section-proposal-list'); }; ProgramaPageController.prototype.showProposalForm = function() { var vm = this; vm.findAndShow('#section-proposal-form'); }; ProgramaPageController.prototype.hideProposalForm = function() { var vm = this; vm.findAndHide('#section-proposal-form'); }; ProgramaPageController.prototype.findAndShow = function(rule) { var vm = this; var el = vm.$element.find(rule); el.slideDown(); angular.element('body').animate({scrollTop: el.offset().top}, 'fast'); }; ProgramaPageController.prototype.findAndHide = function(rule) { var vm = this; vm.$element.find(rule).slideUp(); }; ProgramaPageController.prototype.sendAnotherProposal = function() { var vm = this; vm.proposalStatus = null; }; })();