From 2533b217179fa5176c287b5816607d51423fd7e5 Mon Sep 17 00:00:00 2001
From: blavenie <benoit.lavenier@e-is.pro>
Date: Fri, 28 Apr 2017 14:52:24 +0200
Subject: [PATCH] [fix] /app/transfer/:pubkey  : make this URL works - fix #440
 [enh] /app/transfer/:pubkey : add parameters 'amount', ''udAmount', 'comment'

---
 www/js/controllers/transfer-controllers.js | 86 +++++++++++++++-------
 www/js/services/wot-services.js            |  8 ++
 2 files changed, 68 insertions(+), 26 deletions(-)

diff --git a/www/js/controllers/transfer-controllers.js b/www/js/controllers/transfer-controllers.js
index d5ee865e9..efd328edf 100644
--- a/www/js/controllers/transfer-controllers.js
+++ b/www/js/controllers/transfer-controllers.js
@@ -6,10 +6,10 @@ angular.module('cesium.transfer.controllers', ['cesium.services', 'cesium.curren
 
       .state('app.new_transfer', {
         cache: false,
-        url: "/transfer?uid&pubkey",
+        url: "/transfer?amount&udAmount&comment",
         views: {
           'menuContent': {
-            templateUrl: "templates/wallet/new_transfer.html",
+            templateUrl: "templates/wot/view_identity.html",
             controller: 'TransferCtrl'
           }
         }
@@ -17,7 +17,7 @@ angular.module('cesium.transfer.controllers', ['cesium.services', 'cesium.curren
 
       .state('app.new_transfer_pubkey_uid', {
         cache: false,
-        url: "/transfer/:pubkey/:uid",
+        url: "/transfer/:pubkey/:uid?amount&udAmount&comment",
         views: {
           'menuContent': {
             templateUrl: "templates/wallet/new_transfer.html",
@@ -28,7 +28,7 @@ angular.module('cesium.transfer.controllers', ['cesium.services', 'cesium.curren
 
       .state('app.new_transfer_pubkey', {
         cache: false,
-        url: "/transfer/:pubkey",
+        url: "/transfer/:pubkey?amount&udAmount&comment",
         views: {
           'menuContent': {
             templateUrl: "templates/wallet/new_transfer.html",
@@ -44,32 +44,58 @@ angular.module('cesium.transfer.controllers', ['cesium.services', 'cesium.curren
   .controller('TransferModalCtrl', TransferModalController)
 ;
 
-function TransferController($scope, $controller, UIUtils, csSettings) {
+function TransferController($scope, $controller, UIUtils, $q, csWot) {
   'ngInject';
 
   // Initialize the super class and extend it.
-  angular.extend(this, $controller('TransferModalLookupCtrl', {$scope: $scope}));
-
-  $scope.$on('$ionicView.enter', function(e, state) {
-    if (!!state.stateParams && !!state.stateParams.pubkey) {
-      $scope.formData.destPub = state.stateParams.pubkey;
-      if (!!state.stateParams.uid) {
-        $scope.destUid = state.stateParams.uid;
-        $scope.destPub = '';
+  angular.extend(this, $controller('TransferModalCtrl', {$scope: $scope, parameters: null}));
+
+  $scope.enter = function(e, state) {
+    var initJobs = [];
+
+    // Compute parameters
+    var parameters = {};
+    if (state && state.stateParams) {
+      if (state.stateParams.pubkey) {
+        parameters.pubkey = state.stateParams.pubkey;
+      }
+      if (state.stateParams.amount) {
+        parameters.useRelative = false;
+        parameters.amount = state.stateParams.amount;
       }
-      else {
-        $scope.destUid = '';
-        $scope.destPub = $scope.formData.destPub;
+      else if (state.stateParams.udAmount) {
+        parameters.useRelative = true;
+        parameters.udAmount = state.stateParams.udAmount;
+      }
+      if (state.stateParams.comment) {
+        //$scope.formData.comment = state.stateParams.comment;
+        parameters.comment = state.stateParams.comment;
       }
     }
 
+    // Make sure wallet is loaded
     $scope.loadWallet()
-    .then(function() {
-      $scope.formData.useRelative = csSettings.data.useRelative;
-      $scope.onUseRelativeChanged();
-      UIUtils.loading.hide();
-    });
-  });
+
+    // If pubkey, get the uid (+ name, avatar)
+      .then(function() {
+        if (parameters.pubkey) {
+          return csWot.extend({pubkey: parameters.pubkey})
+            .then(function(dest) {
+              if (dest && dest.uid) {
+                parameters.uid = dest.name || dest.uid;
+              }
+            });
+        }
+      })
+
+      // Apply parameters, then recompute relative amount
+      .then(function() {
+        $scope.setParameters(parameters);
+        $scope.onUseRelativeChanged();
+        UIUtils.loading.hide();
+      });
+  };
+  $scope.$on('$ionicView.enter', $scope.enter);
 
   $scope.setForm = function(form) {
     $scope.form = form;
@@ -96,13 +122,14 @@ function TransferModalController($scope, $rootScope, $translate, $filter, BMA, c
   $scope.udAmount = null;
   $scope.commentPattern = BMA.regexp.COMMENT;
 
-  if (parameters) {
+  $scope.setParameters = function(parameters) {
+    if (!parameters) return;
     if (parameters.pubkey) {
       $scope.formData.destPub = parameters.pubkey;
     }
     if (parameters.uid) {
-        $scope.destUid = parameters.uid;
-        $scope.destPub = '';
+      $scope.destUid = parameters.uid;
+      $scope.destPub = '';
     }
     else {
       $scope.destUid = '';
@@ -110,12 +137,19 @@ function TransferModalController($scope, $rootScope, $translate, $filter, BMA, c
     }
     if (parameters.amount) {
       $scope.formData.amount = parameters.amount;
+      $scope.formData.useRelative=false;
+    }
+    else if (parameters.udAmount) {
+      $scope.formData.amount = parameters.udAmount;
+      $scope.formData.useRelative=true;
     }
     if (parameters.comment) {
       $scope.formData.useComment=true;
       $scope.formData.comment = parameters.comment;
     }
-  }
+  };
+  // Read default parameters
+  $scope.setParameters(parameters);
 
   $scope.cancel = function() {
     $scope.closeModal();
diff --git a/www/js/services/wot-services.js b/www/js/services/wot-services.js
index 5f26ef517..8aefc0a08 100644
--- a/www/js/services/wot-services.js
+++ b/www/js/services/wot-services.js
@@ -931,6 +931,13 @@ angular.module('cesium.wot.services', ['ngResource', 'ngApi', 'cesium.bma.servic
         });
       },
 
+      extend = function(idty, pubkeyAttributeName, skipAddUid) {
+        return extendAll([idty], pubkeyAttributeName, skipAddUid)
+          .then(function(res) {
+            return res[0];
+          });
+      },
+
       extendAll = function(idties, pubkeyAttributeName, skipAddUid) {
 
         pubkeyAttributeName = pubkeyAttributeName || 'pubkey';
@@ -985,6 +992,7 @@ angular.module('cesium.wot.services', ['ngResource', 'ngApi', 'cesium.bma.servic
       newcomers: getNewcomers,
       pending: getPending,
       all: getAll,
+      extend: extend,
       extendAll: extendAll,
       // api extension
       api: api
-- 
GitLab