adding send feedback option in settings

This commit is contained in:
Gabriel Bazán 2016-11-08 11:49:03 -03:00
commit 80888f63a1
14 changed files with 132 additions and 102 deletions

View file

@ -0,0 +1,61 @@
'use strict';
angular.module('copayApp.controllers').controller('rateCardController', function($scope, $state, $timeout, gettextCatalog, storageService) {
$scope.goFeedbackFlow = function() {
if ($scope.isModal) {
$scope.rateModal.hide();
$scope.rateModal.remove();
}
if ($scope.isCordova && $scope.score == 5) {
$state.go('feedback.rateAppStore', {
score: $scope.score
});
} else {
$state.go('feedback.sendFeedback', {
score: $scope.score
});
}
};
$scope.setScore = function(score) {
$scope.score = score;
switch ($scope.score) {
case 1:
$scope.button_title = gettextCatalog.getString("I think this app is terrible");
break;
case 2:
$scope.button_title = gettextCatalog.getString("I don't like it");
break;
case 3:
$scope.button_title = gettextCatalog.getString("Meh - it's alright");
break;
case 4:
$scope.button_title = gettextCatalog.getString("I like the app");
break;
case 5:
$scope.button_title = gettextCatalog.getString("This app is fantastic");
break;
}
$timeout(function() {
$scope.$apply();
});
};
$scope.cancel = function() {};
$scope.hideCard = function() {
if ($scope.isModal) {
$scope.rateModal.hide();
$scope.rateModal.remove();
} else {
storageService.setRateCardFlag('true', function() {
$scope.hideRateCard.value = true;
});
}
$timeout(function() {
$scope.$apply();
})
}
});

View file

@ -26,12 +26,12 @@ angular.module('copayApp.controllers').controller('sendFeedbackController', func
break;
}
$scope.sendFeedback = function(feedback) {
$scope.sendFeedback = function(feedback, skip) {
var config = configService.getSync();
var dataSrc = {
"entry.490635314": lodash.values(config.emailFor)[0] || 'no email setted',
"entry.1447064148": feedback,
"entry.1447064148": skip ? '-' : feedback,
"entry.2142850951": $stateParams.score
};
@ -39,11 +39,14 @@ angular.module('copayApp.controllers').controller('sendFeedbackController', func
$log.info("SUCCESS: Feedback sent");
$state.go('feedback.thanks', {
score: $stateParams.score,
skipped: false
skipped: skip
});
}, function(data) {
$log.info("Could not send feedback");
popupService.showAlert(gettextCatalog.getString("Error"), gettextCatalog.getString("Could not send feedback, try again please"));
$log.info("ERROR: Feedback sent anyway.");
$state.go('feedback.thanks', {
score: $stateParams.score,
skipped: skip
});
});
};
@ -58,11 +61,4 @@ angular.module('copayApp.controllers').controller('sendFeedbackController', func
};
};
$scope.skip = function() {
$state.go('feedback.thanks', {
score: $scope.score,
skipped: true
});
};
});

View file

@ -31,10 +31,10 @@ angular.module('copayApp.controllers').controller('thanksController', function($
};
$scope.$on("$ionicView.beforeEnter", function(event, data) {
storageService.setRateCardFlag('true', function() {});
if (!$scope.isCordova) return;
window.plugins.socialsharing.available(function(isAvailable) {
storageService.setRateCardFlag('true', function() {});
// the boolean is only false on iOS < 6
$scope.socialsharing = isAvailable;
if (isAvailable) {

View file

@ -13,6 +13,7 @@ angular.module('copayApp.controllers').controller('tabHomeController',
$scope.isCordova = platformInfo.isCordova;
$scope.isAndroid = platformInfo.isAndroid;
$scope.isNW = platformInfo.isNW;
$scope.hideRateCard = {};
$scope.$on("$ionicView.afterEnter", function() {
startupService.ready();
@ -37,7 +38,7 @@ angular.module('copayApp.controllers').controller('tabHomeController',
}
storageService.getRateCardFlag(function(error, value) {
$scope.hideRateCard = (value == 'true') ? true : false;
$scope.hideRateCard.value = (value == 'true') ? true : false;
});
});
@ -108,51 +109,6 @@ angular.module('copayApp.controllers').controller('tabHomeController',
externalLinkService.open(url, optIn, title, message, okText, cancelText);
};
$scope.hideCard = function() {
storageService.setRateCardFlag('true', function() {
$scope.hideRateCard = true;
$timeout(function() {
$scope.$apply();
})
});
}
$scope.setScore = function(score) {
$scope.score = score;
switch ($scope.score) {
case 1:
$scope.button_title = gettextCatalog.getString("I think this app is terrible");
break;
case 2:
$scope.button_title = gettextCatalog.getString("I don't like it");
break;
case 3:
$scope.button_title = gettextCatalog.getString("Meh - it's alright");
break;
case 4:
$scope.button_title = gettextCatalog.getString("I like the app");
break;
case 5:
$scope.button_title = gettextCatalog.getString("This app is fantastic");
break;
}
$timeout(function() {
$scope.$apply();
});
};
$scope.goFeedbackFlow = function() {
if ($scope.isCordova && $scope.score == 5) {
$state.go('feedback.rateAppStore', {
score: $scope.score
});
} else {
$state.go('feedback.sendFeedback', {
score: $scope.score
});
}
};
$scope.openNotificationModal = function(n) {
wallet = profileService.getWallet(n.walletId);

View file

@ -1,6 +1,6 @@
'use strict';
angular.module('copayApp.controllers').controller('tabSettingsController', function($scope, $window, uxLanguage, platformInfo, profileService, feeService, configService, externalLinkService) {
angular.module('copayApp.controllers').controller('tabSettingsController', function($scope, $window, $ionicModal, uxLanguage, platformInfo, profileService, feeService, configService, externalLinkService) {
var updateConfig = function() {
@ -32,4 +32,15 @@ angular.module('copayApp.controllers').controller('tabSettingsController', funct
updateConfig();
});
$scope.openRateModal = function() {
$scope.isModal = true;
$ionicModal.fromTemplateUrl('views/feedback/rateCard.html', {
scope: $scope,
backdropClickToClose: false,
hardwareBackButtonClose: false
}).then(function(modal) {
$scope.rateModal = modal;
$scope.rateModal.show();
});
}
});

View file

@ -0,0 +1,22 @@
#rate-card {
.stars {
display: flex;
border-bottom: none;
.button {
background-color: #fff;
outline: none;
border: none;
height:10px;
width:10px;
}
.gold {
color: #ffd700;
}
.subtle-gray {
color: $subtle-gray;
}
}
.feedback-flow-button {
padding: 20px;
}
}

View file

@ -1,7 +1,7 @@
#send-feedback {
background-color: #ffffff;
.skip {
margin: 10px;
margin: 20px 20px 10px;
color: #667;
}
.title {

View file

@ -2,7 +2,7 @@
background-color: #ffffff;
.item-heading {
border-style: none;
margin-top: 5px;
margin-top: 10px;
a {
color: $dark-gray;
}

View file

@ -118,24 +118,4 @@
position: absolute;
}
}
.stars {
display: flex;
border-bottom: none;
.button {
background-color: #fff;
outline: none;
border: none;
height:10px;
width:10px;
}
.gold {
color: #ffd700;
}
.subtle-gray {
color: $subtle-gray;
}
}
.feedback-flow-button {
padding: 20px;
}
}

View file

@ -17,6 +17,7 @@
@import "wallet-backup-phrase";
@import "zero-state";
@import "onboarding/onboarding";
@import "feedback/rateCard";
@import "feedback/sendFeedback";
@import "feedback/thanks";
@import "feedback/rateAppStore";

View file

@ -0,0 +1,18 @@
<div id="rate-card" ng-class="{'popup-modal': isModal}" ng-controller="rateCardController">
<div class="item item-icon-right item-heading">
<span translate>How do you like BitPay Wallet?</span>
<a ng-click="hideCard()" ><i class="icon ion-ios-close-empty close-home-tip"></i></a>
</div>
<div class="stars item item-sub">
<button class="button icon ion-android-star" ng-click="setScore(1)" ng-class="{'gold': 1 <= score, 'subtle-gray': 1 > score}"></button>
<button class="button icon ion-android-star" ng-click="setScore(2)" ng-class="{'gold': 2 <= score, 'subtle-gray': 2 > score}"></button>
<button class="button icon ion-android-star" ng-click="setScore(3)" ng-class="{'gold': 3 <= score, 'subtle-gray': 3 > score}"></button>
<button class="button icon ion-android-star" ng-click="setScore(4)" ng-class="{'gold': 4 <= score, 'subtle-gray': 4 > score}"></button>
<button class="button icon ion-android-star" ng-click="setScore(5)" ng-class="{'gold': 5 == score, 'subtle-gray': 5 > score}"></button>
</div>
<div class="feedback-flow-button" ng-if="button_title">
<button type="submit" class="button button-standard button-primary" ng-click="goFeedbackFlow()">
<span>{{button_title}}</span>
</button>
</div>
</div>

View file

@ -1,6 +1,6 @@
<ion-view id="send-feedback">
<ion-content scroll="false">
<a class="right skip" ng-click="skip()">Skip</a>
<a class="right skip" ng-click="sendFeedback(null,true)">Skip</a>
<div class="row">
<div class="col col-40 title">
<span>{{reaction}}</span>
@ -20,7 +20,7 @@
<textarea ng-model="feedback" placeholder="Is there anything we could do to improve your experience?" row="40"></textarea>
</div>
<div class="padding">
<button ng-disabled="!feedback" type="submit" class="button button-full button-primary" ng-click="sendFeedback(feedback)" translate>
<button ng-disabled="!feedback" type="submit" class="button button-full button-primary" ng-click="sendFeedback(feedback, false)" translate>
Send
</button>
</div>

View file

@ -13,23 +13,8 @@
<div class="release ng-hide" ng-show="newRelease" ng-click="openExternalLink('https://github.com/bitpay/copay/releases/latest', true, 'Update Available', 'An update to this app is available. For your security, please update to the latest version.', 'View Update', 'Go Back')">
<span translate>An update to this app is available</span><span><i class="icon bp-arrow-right"></i></span>
</div>
<div class="list card ng-hide" ng-show="!hideRateCard">
<div class="item item-icon-right item-heading">
<span translate>How do you like BitPay Wallet?</span>
<a ng-click="hideCard()" ><i class="icon ion-ios-close-empty close-home-tip"></i></a>
</div>
<div class="stars item item-sub">
<button class="button icon ion-android-star" ng-click="setScore(1)" ng-class="{'gold': 1 <= score, 'subtle-gray': 1 > score}"></button>
<button class="button icon ion-android-star" ng-click="setScore(2)" ng-class="{'gold': 2 <= score, 'subtle-gray': 2 > score}"></button>
<button class="button icon ion-android-star" ng-click="setScore(3)" ng-class="{'gold': 3 <= score, 'subtle-gray': 3 > score}"></button>
<button class="button icon ion-android-star" ng-click="setScore(4)" ng-class="{'gold': 4 <= score, 'subtle-gray': 4 > score}"></button>
<button class="button icon ion-android-star" ng-click="setScore(5)" ng-class="{'gold': 5 == score, 'subtle-gray': 5 > score}"></button>
</div>
<div class="feedback-flow-button" ng-if="button_title">
<button type="submit" class="button button-standard button-primary" ng-click="goFeedbackFlow()">
<span>{{button_title}}</span>
</button>
</div>
<div class="list card ng-hide" ng-show="!hideRateCard.value">
<span ng-include="'views/feedback/rateCard.html'"></span>
</div>
<div class="list card homeTip" ng-if="homeTip">
<div class="item item-icon-right item-heading">

View file

@ -29,7 +29,7 @@
<img src="img/icon-link.svg" class="bg just-a-hint"/>
</i>
</a>
<a class="ng-hide item item-icon-left item-icon-right" ng-hide="true">
<a class="ng-hide item item-icon-left item-icon-right" ng-show="true" ng-click="openRateModal()">
<i class="icon big-icon-svg">
<img src="img/icon-send-feedback.svg" class="bg"/>
</i>