Skip to content

Commit 4c709ce

Browse files
post data with payment
1 parent 7f9c51b commit 4c709ce

File tree

2 files changed

+61
-6
lines changed

2 files changed

+61
-6
lines changed

public/views/walletHome.html

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -432,20 +432,20 @@ <h4 class="title m0">
432432
<i class="icon-wallet size-18" style="margin-right: -3px;vertical-align: baseline;"></i>
433433
</a>
434434
</div>
435-
<div ng-if="home.deviceAddressIsKnown()" style="font-size: 11px; font-weight: bold; margin-top: -1.5rem; margin-bottom: 1.5rem;">
435+
<div ng-if="home.deviceAddressIsKnown()" style="font-size: 11px; font-weight: bold; margin-top: -1.5rem; margin-bottom: 1rem;">
436436
<a ng-click="home.openBindModal()">
437-
<span ng-if="!home.binding" translate>Bind the payment to a condition</span>
438-
<span ng-if="home.binding" translate>This payment is bound to a condition</span>
437+
<span ng-if="!home.binding" translate>Bind the payment to a condition...</span>
438+
<span ng-if="home.binding" translate>This payment is bound to a condition...</span>
439439
</a>
440440
</div>
441-
<div ng-if="!index.arrBalances[index.assetIndex].is_private && !home.blockUx && !home.lockAddress && home.canSendExternalPayment()" style="font-size: 11px; font-weight: bold; margin-top: -1.5rem; margin-bottom: 1.5rem; float: right;">
441+
<div ng-if="!index.arrBalances[index.assetIndex].is_private && !home.blockUx && !home.lockAddress && home.canSendExternalPayment()" style="font-size: 11px; font-weight: bold; margin-top: -1.5rem; margin-bottom: 1rem; float: right;">
442442
<a ng-click="home.lockAmount = home.send_multiple = !home.send_multiple" class="text-gray" style="border-bottom: 1px dashed grey;">
443443
<span ng-if="home.send_multiple" translate>switch to single address</span>
444444
<span ng-if="!home.send_multiple" translate ng-click="home.resetForm(sendPaymentForm)">switch to multi-address</span>
445445
</a>
446446
</div>
447447
<div id="binding-drop" class="f-dropdown" data-dropdown-content style="padding: 10px;" translate>To bind the payment to a condition, please click the peer's address in chat</div>
448-
<div ng-if="!home.deviceAddressIsKnown()" style="font-size: 11px; font-weight: bold; margin-top: -1.5rem; margin-bottom: 1.5rem">
448+
<div ng-if="!home.deviceAddressIsKnown()" style="font-size: 11px; font-weight: bold; margin-top: -1.5rem; margin-bottom: 1rem">
449449
<a dropdown-toggle="#binding-drop" data-options="align:top">
450450
<span translate class="text-gray">Bind the payment to a condition</span>
451451
</a>
@@ -477,6 +477,30 @@ <h4 class="title m0">
477477
</div>
478478
</div>
479479

480+
<div class="row" ng-if="home.feedvaluespairs.length === 0">
481+
<div class="large-12 columns m30b">
482+
<a style="font-size: 11px; font-weight: bold; margin-top: -1.5rem; margin-bottom: 1rem;" ng-click="home.feedvaluespairs.push({})" translate>Also send data...</a>
483+
</div>
484+
</div>
485+
486+
<div class="row" ng-if="home.feedvaluespairs.length > 0">
487+
<div class="large-12 columns m30b m10t">
488+
<label translate>Data to be posted with the payment:</label>
489+
<div>
490+
<span ng-repeat="pair in home.feedvaluespairs">
491+
<input type="text" ng-model="pair.name" placeholder="{{'Field'|translate}}" class="datafeed_input" ng-required="true" ng-maxlength="64" maxlength="64" >
492+
<input type="text" ng-model="pair.value" placeholder="{{'Value'|translate}}" class="datafeed_input" ng-required="true" ng-maxlength="64" maxlength="64">
493+
<a ng-show="$last" ng-click="home.feedvaluespairs.splice(home.feedvaluespairs.length-1)"><i class="fi-minus size-18 m10r" style="vertical-align: middle;"></i></a>
494+
</span>
495+
<div class="clear"></div>
496+
<a ng-click="home.feedvaluespairs.push({})" style="padding:10px 0;" ng-show="home.feedvaluespairs.length < 20">
497+
<i class="fi-plus size-18 m10r" style="vertical-align: middle;"></i>
498+
<span class="text-close size-12" translate>Add fields</span>
499+
</a>
500+
</div>
501+
</div>
502+
</div>
503+
480504
<div class="" ng-show="index.m < index.n && index.m > 1">
481505
<div class="large-12 medium-12">
482506
<label>
@@ -518,7 +542,7 @@ <h4 class="title m0">
518542
</div>
519543
<div ng-show="home.shownForm=='data' && index.isSingleAddress">
520544
<div class="large-12 large-centered columns">
521-
<form name="sendDataForm" ng-submit="home.submitData()" ng-disabled="home.blockUx || home.onGoingProcess" novalidate ng-init="home.feedvaluespairs=[{}]">
545+
<form name="sendDataForm" ng-submit="home.submitData()" ng-disabled="home.blockUx || home.onGoingProcess" novalidate dont-ng-init="home.feedvaluespairs=[{}]">
522546
<div class="box-notification" ng-show="home.error" ng-click="home.resetError()">
523547
<span class="text-warning">
524548
{{home.error|translate}}

src/js/controllers/walletHome.js

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,30 @@ angular.module('copayApp.controllers')
853853
return;
854854
}
855855

856+
var data_payload = {};
857+
var errored = false;
858+
$scope.home.feedvaluespairs.forEach(function(pair) {
859+
if (data_payload[pair.name]) {
860+
self.setSendError("All keys must be unique");
861+
errored = true;
862+
return;
863+
}
864+
data_payload[pair.name] = pair.value;
865+
});
866+
if (errored)
867+
return;
868+
var objDataMessage;
869+
if (Object.keys(data_payload).length > 0) {
870+
var objectHash = require('ocore/object_hash.js');
871+
var storage = require('ocore/storage.js');
872+
objDataMessage = {
873+
app: 'data',
874+
payload_location: "inline",
875+
payload_hash: objectHash.getBase64Hash(data_payload, storage.getMinRetrievableMci() >= constants.timestampUpgradeMci),
876+
payload: data_payload
877+
};
878+
}
879+
856880
if (fc.isPrivKeyEncrypted()) {
857881
profileService.unlockFC(null, function(err) {
858882
if (err)
@@ -1162,6 +1186,8 @@ angular.module('copayApp.controllers')
11621186
});
11631187
};
11641188
}
1189+
if (objDataMessage)
1190+
opts.messages = [objDataMessage];
11651191
fc.sendMultiPayment(opts, function(err, unit, mnemonics) {
11661192
// if multisig, it might take very long before the callback is called
11671193
indexScope.setOngoingProcess(gettext('sending'), false);
@@ -1249,10 +1275,14 @@ angular.module('copayApp.controllers')
12491275
this.lockAmount = this.send_multiple = false;
12501276
if ($scope.assetIndexSelectorValue < 0) {
12511277
this.shownForm = 'data';
1278+
if (!this.feedvaluespairs || this.feedvaluespairs.length === 0)
1279+
this.feedvaluespairs = [{}];
12521280
}
12531281
else {
12541282
$scope.index.assetIndex = $scope.assetIndexSelectorValue;
12551283
this.shownForm = 'payment';
1284+
if (!this.feedvaluespairs || this.feedvaluespairs.length > 0 && (!this.feedvaluespairs[0].name || !this.feedvaluespairs[0].value))
1285+
this.feedvaluespairs = [];
12561286
}
12571287
$scope.mtab = $scope.index.arrBalances[$scope.index.assetIndex] && $scope.index.arrBalances[$scope.index.assetIndex].is_private && !this.lockAddress ? 2 : 1;
12581288
}
@@ -1633,6 +1663,7 @@ angular.module('copayApp.controllers')
16331663

16341664
this._amount = this._address = null;
16351665
this.bSendAll = false;
1666+
this.feedvaluespairs = [];
16361667

16371668
var form = $scope.sendPaymentForm;
16381669
var self = this;

0 commit comments

Comments
 (0)